Quart-Motor
MongoDB <http://www.mongodb.org/> is an open source database that stores
flexible JSON-like "documents," which can have any number, name, or
hierarchy of fields within, instead of rows of data as in a relational
database. Python developers can think of MongoDB as a persistent, searchable
repository of Python dictionaries (and, in fact, this is how PyMongo <http://api.mongodb.org/python/current/> represents MongoDB documents).
Quart-Motor bridges Quart and Motor and provides some convenience helpers.
Quickstart
First, install Quart-Motor:
$ pip install Quart-Motor
Next, add a :class:~quart_motor.Motor to your code:
from quart import Quart
from quart_motor import Motor
app = Quart(__name__)
app.config["MONGO_URI"] = "mongodb://localhost:27017/myDatabase"
mongo = Motor(app)
:class:~quart_motor.Motor connects to the MongoDB server running on
port 27017 on localhost, to the database named myDatabase. This database
is exposed as the :attr:~quart_motor.Motor.db attribute.
You can use :attr:~quart_motor.Motor.db directly in views:
@app.route("/")
def home_page():
online_users = mongo.db.users.find({"online": True})
return render_template("index.html",
online_users=online_users)
Compatibility
Quart-Motor depends on recent versions of Quart, Motor and PyMongo, where "recent" is defined to mean "was released in the last 3 years". Quart-Motor may work with older versions, but compatibility fixes for older versions will not be accepted, and future changes may break compatibility in older versions.
Quart-Motor is tested against supported versions <https://www.mongodb.com/support-policy>_ of MongoDB, 3.5+.
Quart-Motor works very well with
uvicornasgihypercornasgi
Quart-Motor is tested against Python 3.7+ versions.
Helpers
Quart-Motor provides helpers for some common tasks:
.. automethod:: quart_motor.wrappers.Collection.find_one_or_404
.. automethod:: quart_motor.Motor.send_file
.. automethod:: quart_motor.Motor.save_file
.. autoclass:: quart_motor.helpers.BSONObjectIdConverter
.. autoclass:: quart_motor.helpers.JSONEncoder
Configuration
You can configure Quart-Motor either by passing a MongoDB URI <https://docs.mongodb.com/manual/reference/connection-string/>_ to the
:class:~quart_motor.Motor constructor, or assigning it to the
MONGO_URI Quart configuration variable <https://pgjones.gitlab.io/quart/how_to_guides/configuration.html>_
The :class:~quart_motor.Motor instnace also accepts these additional
customization options:
json_options, a :class:~bson.json_util.JSONOptionsinstance which controls the JSON serialization of MongoDB objects when used with :func:~quart.json.jsonify.
You may also pass additional keyword arguments to the Motor
constructor. These are passed directly through to the underlying
:class:~motor.motor_asyncio.AsyncIOMotorClient object.
Note:
By default, Quart-Motor sets the ``connect`` keyword argument to
``False``, to prevent Motor from connecting immediately. Motor
itself `is not fork-safe
<https://pymongo.readthedocs.io/en/stable/faq.html#is-pymongo-fork-safe>`_,
and delaying connection until the app is actually used is necessary to
avoid issues. If you wish to change this default behavior, pass
``connect=True`` as a keyword argument to ``Motor``.
You can create multiple Motor instances, to connect to multiple
databases or database servers:
app = Quart(__name__)
# connect to MongoDB with the defaults
mongo1 = Motor(app, uri="mongodb://localhost:27017/databaseOne")
# connect to another MongoDB database on the same host
mongo2 = Motor(app, uri="mongodb://localhost:27017/databaseTwo")
# connect to another MongoDB server altogether
mongo3 = Motor(app, uri="mongodb://another.host:27017/databaseThree")
Each instance is independent of the others and shares no state.
API
Classes
.. autoclass:: quart_motor.Motor :members:
.. attribute:: cx
The :class:`~quart_motor.wrappers.AsyncIOMotorClient` connected to the
MongoDB server.
.. attribute:: db
The :class:`~quart_motor.wrappers.AsyncIOMotorDatabase` if the URI used
named a database, and ``None`` otherwise.
Wrappers
Quart-Motor wraps Motor's :class:~motor.motor_asyncio.AsyncIOMotorClient,
:class:~motor.motor_asyncio.AsyncIOMotorDatabase, and
:class:~motor.motor_asyncio.AsyncIOMotorCollection classes, and overrides their
attribute and item accessors. Wrapping the Motor classes in this way lets
Quart-Motor add methods to AsyncIOMotorCollection while allowing user code to use
MongoDB-style dotted expressions.
>>> type(mongo.cx)
<type 'quart_motor.wrappers.AsyncIOMotorClient'>
>>> type(mongo.db)
<type 'quart_motor.wrappers.AsyncIOMotorDatabase'>
>>> type(mongo.db.some_collection)
<type 'quart_motor.wrappers.AsyncIOMotorCollection'>
.. autoclass:: quart_motor.wrappers.AsyncIOMotorCollection(...) :members:
History and Contributors
Changes:
-
2.4.0: Unreleased
- Flask-PyMongo port as released of Flask-PyMongo.
Flask-PyMongo:
Contributors of Flask-PyMongo:
jeverling <https://github.com/jeverling>tang0th <https://github.com/tang0th>Fabrice Aneche <https://github.com/akhenakh>Thor Adam <https://github.com/thoradam>Christoph Herr <https://github.com/jarus>Mark Unsworth <https://github.com/markunsworth>Kevin Funk <https://github.com/k-funk>Ben Jeffrey <https://github.com/jeffbr13>Emmanuel Valette <https://github.com/karec>David Awad <https://github.com/DavidAwad>Robson Roberto Souza Peixoto <https://github.com/robsonpeixoto>juliascript <https://github.com/juliascript>Henrik Blidh <https://github.com/hbldh>jobou <https://github.com/jbouzekri>Craig Davis <https://github.com/blade2005>ratson <https://github.com/ratson>Abraham Toriz Cruz <https://github.com/categulario>MinJae Kwon <https://github.com/mingrammer>yarobob <https://github.com/yarobob>Andrew C. Hawkins <https://github.com/achawkins>
Contributors of Quart-Motor
Sriram <https://github.com/marirs>Kiran <https://github.com/kirantambe>
Metadata
Release files for Quart-Motor 2.4.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| Quart-Motor-2.4.7.tar.gz | 11.2 kB | Without provenance | Details for Quart-Motor-2.4.7.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| Quart_Motor-2.4.7-py3-none-any.whl | Python 3 | none | any | Details for Quart_Motor-2.4.7-py3-none-any.whl |
Total release size: 23.9 kB
Release files / Quart-Motor-2.4.7.tar.gz
| Download URL | Quart-Motor-2.4.7.tar.gz |
|---|---|
| Size | 11.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6ecf808e0a44a5834e673b598214f816b73710bf5eafb9ea14c9827844baef51
|
|
BLAKE2b-256 checksum How to use checksums |
2dcb9b7b475e70fb43d779535d035c6def6c956bf484a37f72a945997eb495ea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.0.0 CPython/3.9.6
|
Release files / Quart_Motor-2.4.7-py3-none-any.whl
| Download URL | Quart_Motor-2.4.7-py3-none-any.whl |
|---|---|
| Size | 12.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dc3c460ba1f0db4c488048b528d779632a00376b9543356bd03c42b71fbb1961
|
|
BLAKE2b-256 checksum How to use checksums |
ecf725a3aa129bf801f6de9c01fb8e2283071225e3d44d4b4d3869db8065524f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.0.0 CPython/3.9.6
|
Security for Quart-Motor 2.4.7
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.