Skip to main content

Small but efficient MongoDB ODM

Project description

μMongo: sync/async ODM

https://img.shields.io/pypi/v/umongo.svg https://img.shields.io/travis/Scille/umongo.svg Documentation Status Code coverage

μ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

History

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

umongo-0.7.3.tar.gz (43.3 kB view details)

Uploaded Source

Built Distribution

umongo-0.7.3-py2.py3-none-any.whl (20.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file umongo-0.7.3.tar.gz.

File metadata

  • Download URL: umongo-0.7.3.tar.gz
  • Upload date:
  • Size: 43.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for umongo-0.7.3.tar.gz
Algorithm Hash digest
SHA256 ac0dbf115e9ff519d94a0e67fcdd98343557920026babcd23617725dbbfda000
MD5 12187d52a1152c71314cb6b489ed8230
BLAKE2b-256 69d245cdb486a28750166b18d261e2864d6fdc17646dbfeb309eecceee7c0dd4

See more details on using hashes here.

File details

Details for the file umongo-0.7.3-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for umongo-0.7.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 5cbc9ecec5f480a79948a38e38a36712447bfa19557900b35d8f5c4f617baf82
MD5 897df0fc12764c1303102eaf4e0e02d7
BLAKE2b-256 32b8ef95f7498221978c40a1e7e8ef241dce6fc05fbd3923767865583e76558c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page