Small but efficient MongoDB ODM
Project description
μMongo: sync/async ODM
μMongo is a Python MongoDB ODM. It inception comes from two needs: the lack of async ODM and the difficulty to do document (un)serialization with existing ODMs.
>From this point, μMongo made a few design choices:
Stay close to the standards MongoDB driver to keep the same API when possible: use find({"field": "value"}) like usual but retrieve your data nicely OO wrapped !
Work with multiple drivers (PyMongo, TxMongo, motor_asyncio and mongomock for the moment)
Tight integration with Marshmallow serialization library to easily dump and load your data with the outside world
i18n integration to localize validation error messages
Free software: MIT license
Test with 90%+ coverage ;-)
Quick example
from datetime import datetime
from pymongo import MongoClient
from umongo import Document, fields, validate
db = MongoClient().test
class User(Document):
email = fields.EmailField(required=True, unique=True)
birthday = fields.DateTimeField(validate=validate.Range(min=datetime(1900, 1, 1)))
friends = fields.ListField(fields.ReferenceField("User"))
class Meta:
collection = db.user
goku = User(email='goku@sayen.com', birthday=datetime(1984, 11, 20))
goku.commit()
vegeta = User(email='vegeta@over9000.com', friends=[goku])
vegeta.commit()
vegeta.friends
# <object umongo.data_objects.List([<object umongo.dal.pymongo.PyMongoReference(document=User, pk=ObjectId('5717568613adf27be6363f78'))>])>
vegeta.dump()
# {id': '570ddb311d41c89cabceeddc', 'email': 'vegeta@over9000.com', friends': ['570ddb2a1d41c89cabceeddb']}
User.find_one({"email": 'goku@sayen.com'})
# <object Document __main__.User({'_id': ObjectId('570ddb2a1d41c89cabceeddb'), 'friends': <object umongo.data_objects.List([])>,
# 'email': 'goku@sayen.com', 'birthday': datetime.datetime(1984, 11, 20, 0, 0)})>
Get it now:
$ pip install umongo $ pip install my-mongo-driver # Note you have to manually install the mongodb driver
Or to get it along with the MongoDB driver you’re planing to use:
$ pip install umongo[pymongo] # choose $ pip install umongo[motor] # one $ pip install umongo[txmongo] # of $ pip install umongo[mongomock] # them ;-)
History
0.7.8 (2016-4-28)
Fix setup.py style preventing release of version 0.7.7
0.7.7 (2016-4-28)
Fix await error with Reference.fetch
Pymongo is now only installed with extra flavours of umongo
0.7.6 (2016-4-28)
Use extras_require to install driver along with umongo
0.7.5 (2016-4-23)
Fixing await (Python >= 3.5) support for motor-asyncio
0.7.4 (2016-4-21)
Fix missing package in setup.py
0.7.3 (2016-4-21)
Fix setup.py style preventing from release
0.7.2 (2016-4-21)
Fix crash when generating indexes on EmbeddedDocument
0.7.1 (2016-4-21)
Fix setup.py not to install tests package
Pass status to Beta
0.7.0 (2016-4-21)
Add i18n support
Add MongoMock support
Documentation has been a lot extended
0.6.1 (2016-4-13)
Add <dal>_lazy_loader to configure Document’s lazy_collection
0.6.0 (2016-4-12)
Heavy improvements everywhere !
0.1.0 (2016-1-22)
First release on PyPI.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file umongo-0.7.8.tar.gz
.
File metadata
- Download URL: umongo-0.7.8.tar.gz
- Upload date:
- Size: 48.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9fa3f7cf924ac02829daede51d7634012d63faaf461d06d5e5eb9b5e21278bf5 |
|
MD5 | 2921c740ce1ce61a6ae866aa1e04c9d0 |
|
BLAKE2b-256 | 296f1fb165333731f35983ff5e3f0d33761fafd84dbcfe11f944a530e2b48731 |
File details
Details for the file umongo-0.7.8-py2.py3-none-any.whl
.
File metadata
- Download URL: umongo-0.7.8-py2.py3-none-any.whl
- Upload date:
- Size: 30.2 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0576429e11a295a0239fcce47166036a597e320c3620e4efcf2ea0f826819a0f |
|
MD5 | 79c50df7c25b311548d745a7f3fc32ea |
|
BLAKE2b-256 | 0e5b88e3ef1f1b738e3500bf8c7b8b0e308ed68b4f0bf75b00b63951f6d516a8 |