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
$ 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


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.8.tar.gz (48.5 kB view details)

Uploaded Source

Built Distribution

umongo-0.7.8-py2.py3-none-any.whl (30.2 kB view details)

Uploaded Python 2 Python 3

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

Hashes for umongo-0.7.8.tar.gz
Algorithm Hash digest
SHA256 9fa3f7cf924ac02829daede51d7634012d63faaf461d06d5e5eb9b5e21278bf5
MD5 2921c740ce1ce61a6ae866aa1e04c9d0
BLAKE2b-256 296f1fb165333731f35983ff5e3f0d33761fafd84dbcfe11f944a530e2b48731

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for umongo-0.7.8-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 0576429e11a295a0239fcce47166036a597e320c3620e4efcf2ea0f826819a0f
MD5 79c50df7c25b311548d745a7f3fc32ea
BLAKE2b-256 0e5b88e3ef1f1b738e3500bf8c7b8b0e308ed68b4f0bf75b00b63951f6d516a8

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