[Docs+] Getting Started With MongoDB and FastAPI#250
[Docs+] Getting Started With MongoDB and FastAPI#250rachel-mack merged 41 commits intomongodb:masterfrom
Conversation
✅ Deploy Preview for docs-pymongo ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
rustagir
left a comment
There was a problem hiding this comment.
I reviewed 2/3 of the PR but there are a lot of formatting and style guide issues that It would be good for you to correct before I take a second pass. Let me know if you have any questions!
| uvicorn app:app --reload | ||
|
|
||
| .. image:: /includes/integrations/fastapi-terminal.png | ||
| :alt: Screenshot of terminal running FastAPI |
There was a problem hiding this comment.
This step has a lot of indentation errors
|
|
||
| All the code for the example application is stored in ``app.py``. | ||
|
|
||
| Connect to your MongoDB Atlas cluster using the asynchronous `Pymongo Driver <https://www.mongodb.com/docs/languages/python/pymongo-driver/current>`__, then specify the database named ``college``: |
There was a problem hiding this comment.
Since this page is now in the pymongo docs, change this link out for something that makes more sense (and use a ref)
| FastAPI encodes and decodes data as JSON strings, which do not support all of the | ||
| data types that MongoDB's BSON data type can store. BSON has support for | ||
| additional non-JSON-native data types, including ``ObjectId`` which is used for | ||
| the default UUID attribute, ``_id``. Because of this, you must convert | ||
| ``ObjectId`` objects to strings before storing them in the ``_id`` field. |
| # Represents an ObjectId field in the database. | ||
| # It will be represented as a `str` on the model so that it can be |
There was a problem hiding this comment.
S: move code to file where possible
|
|
||
| This is the primary model we use as the `response model <https://fastapi.tiangolo.com/tutorial/response-model/>`__ for the majority of our endpoints. | ||
|
|
||
| I want to draw attention to the ``id`` field on this model. MongoDB uses ``_id``, but in Python, underscores at the start of attributes have special meaning. If you have an attribute on your model that starts with an underscore, `pydantic <https://pydantic-docs.helpmanual.io/>`__—the data validation framework used by FastAPI—will assume that it is a private variable, meaning you will not be able to assign it a value! To get around this, we name the field ``id`` but give it an alias of ``_id``. You also need to set ``populate_by_name`` to ``True`` in the model's ``model_config`` |
There was a problem hiding this comment.
S: fix for lots of style guide errors
rustagir
left a comment
There was a problem hiding this comment.
still a lot of issues to resolve, I am going OOO so perhaps another team member can pick this up!
| The application has two read routes: one for viewing all students, and one | ||
| for viewing an individual student specified by their ``id``. |
There was a problem hiding this comment.
Since it's only two items, I'm going to leave it as a paragraph.
| recommend using the `skip and limit parameters | ||
| <https://pymongo.readthedocs.io/en/stable/api/pymongo/asynchronous/collection.html#pymongo.asynchronous.collection.AsyncCollection.find>`__ | ||
| in ``find`` to paginate your results. |
There was a problem hiding this comment.
S: not sure why formatting is off here - also use __ at the end of urls (2 underscores)
| - Python v3.9.0 or later | ||
| - A MongoDB Atlas cluster | ||
| To learn how to set up a cluster, see | ||
| the :ref:`Getting Started <pymongo-get-started>`__ guide for more information. |
There was a problem hiding this comment.
Add punctuation to these list items
| - Python v3.9.0 or later | |
| - A MongoDB Atlas cluster | |
| To learn how to set up a cluster, see | |
| the :ref:`Getting Started <pymongo-get-started>`__ guide for more information. | |
| - Python v3.9.0 or later. | |
| - A MongoDB Atlas cluster. | |
| To learn how to set up a cluster, see | |
| the :ref:`Getting Started <pymongo-get-started>`__ guide for more information. |
|
|
||
| .. step:: Clone the example code example. | ||
|
|
||
| Run the following command in your terminal to clone the code from the `mongodb-with-fastapi <https://github.com/mongodb-developer/mongodb-with-fastapi>`__ GitHub repository: |
There was a problem hiding this comment.
| Run the following command in your terminal to clone the code from the `mongodb-with-fastapi <https://github.com/mongodb-developer/mongodb-with-fastapi>`__ GitHub repository: | |
| Run the following command in your terminal to clone the code from the :github:`mongodb-with-fastapi <mongodb-developer/mongodb-with-fastapi>` GitHub repository: |
| Installing your Python dependencies in a `virtualenv | ||
| <https://docs.python.org/3/tutorial/venv.html>`__ allows you to install | ||
| versions of your libraries for individual | ||
| projects. Before running any ``pip`` commands, ensure your ``virtualenv`` is active. |
There was a problem hiding this comment.
S: needs to be indented more
| versions of your libraries for individual | ||
| projects. Before running any ``pip`` commands, ensure your ``virtualenv`` is active. | ||
|
|
||
| Run the following command in your terminal to install the dependencies listed in the ``requirements.txt`` file: |
There was a problem hiding this comment.
S: i think all this content isnt indented to the right level under the step
| .. code-block:: shell | ||
|
|
||
| export MONGODB_URL="mongodb+srv://<username>:<password>@<url>/<db>?retryWrites=true&w=majority" | ||
|
|
||
| .. tip:: Reset Environment Variables | ||
|
|
||
| Anytime you start a new terminal session, you will must reset this | ||
| environment variable. You can use `direnv <https://direnv.net/>`__ to | ||
| make this process easier. |
| """ | ||
| A container holding a list of `StudentModel` instances. | ||
|
|
||
| This exists because providing a top-level array in a JSON response can be a `vulnerability <https://haacked.com/archive/2009/06/25/json-hijacking.aspx/>`__ |
There was a problem hiding this comment.
S: this link isnt rendering properly. Consider moving this outside the code example as a note
| @app.post( | ||
| "/students/", | ||
| response_description="Add new student", | ||
| response_model=StudentModel, |
There was a problem hiding this comment.
S: this code block indentation is off
| This application has two read routes: one for viewing all students, and one | ||
| for viewing an individual student specified by their ``id``. |
There was a problem hiding this comment.
S: this type of "list sentence" is not style guide adherent
| This example uses the ``to_list()`` method; but in a real application, | ||
| we recommend using the `skip and limit parameters | ||
| <https://pymongo.readthedocs.io/en/stable/api/pymongo/asynchronous/collection.html#pymongo.asynchronous.collection.AsyncCollection.find>`__ | ||
| in ``find`` to paginate your results. |
There was a problem hiding this comment.
S: use the api docs source constant to shorten this URL
| The ``update_student`` route is like a combination of the | ||
| ``create_student`` and the ``show_student`` routes. It receives the ``id`` | ||
| of the student to update, and the new data in the JSON body. |
There was a problem hiding this comment.
| The ``update_student`` route is like a combination of the | |
| ``create_student`` and the ``show_student`` routes. It receives the ``id`` | |
| of the student to update, and the new data in the JSON body. | |
| The ``update_student`` route functions similar to a combination of the | |
| ``create_student`` and the ``show_student`` routes. It receives the ``id`` | |
| of the student to update, and the new data in the JSON body. |
rustagir
left a comment
There was a problem hiding this comment.
Most of my comments are minor - would recommend combing through to fix small formatting issues. Also consider interlinking other pymongo guides in the relevant CRUD locations or at the end!
🔄 Deploy Preview for docs-pymongo processing
|
|
|
||
| .. code-block:: python | ||
|
|
||
| client = AsyncMongoClient(os.environ["MONGODB_URL"],server_api=pymongo.server_api.ServerApi(version="1", strict=True,deprecation_errors=True)) |
There was a problem hiding this comment.
What's the purpose behind passing server_api to the client here?
There was a problem hiding this comment.
To opt into using the stable API: https://www.mongodb.com/docs/languages/python/pymongo-driver/current/connect/connection-options/stable-api/
There was a problem hiding this comment.
Is this a standard we use for our integration tutorials? Just curious on its inclusion here.
There was a problem hiding this comment.
We recommend using Stable API if it's compatible with your server. I added a note.
* format content * formatting * toc * setup and create * reorg * steps * steps * steps * steps * resources * format tweaks * edit * title change * vale errors * snooty conflict * formatting * formatting * restructure * numbers steps * formatting * finish edits * tweak * RR feedback * original link * edits * remove wrong file * RR feedback * vale * step format * vale * testing * vale * spacing * add details * formatting * vale * RR feedback * NS feedback * python version * NS feedback * undo delete
* format content * formatting * toc * setup and create * reorg * steps * steps * steps * steps * resources * format tweaks * edit * title change * vale errors * snooty conflict * formatting * formatting * restructure * numbers steps * formatting * finish edits * tweak * RR feedback * original link * edits * remove wrong file * RR feedback * vale * step format * vale * testing * vale * spacing * add details * formatting * vale * RR feedback * NS feedback * python version * NS feedback * undo delete
Pull Request Info
PR Reviewing Guidelines
JIRA - https://jira.mongodb.org/browse/DOCSP-48895
original URL: https://www.mongodb.com/developer/languages/python/python-quickstart-fastapi/
Updating tutorial to use Pymongo Async: mongodb-developer/mongodb-with-fastapi#19
Staging Links
Self-Review Checklist