Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/musyoka-morris/pymongoext
An extension for pymongo that adds json schema validation and index management
https://github.com/musyoka-morris/pymongoext
indexes jsonschema mongo mongodb orm pymongo pymongo-wrapper schema validation
Last synced: about 1 month ago
JSON representation
An extension for pymongo that adds json schema validation and index management
- Host: GitHub
- URL: https://github.com/musyoka-morris/pymongoext
- Owner: musyoka-morris
- License: mit
- Created: 2019-03-20T13:42:07.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2019-10-19T08:10:09.000Z (about 5 years ago)
- Last Synced: 2024-03-15T09:49:49.959Z (8 months ago)
- Topics: indexes, jsonschema, mongo, mongodb, orm, pymongo, pymongo-wrapper, schema, validation
- Language: Python
- Homepage: https://pymongoext.readthedocs.io
- Size: 109 KB
- Stars: 12
- Watchers: 3
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE
Awesome Lists containing this project
README
Pymongoext
===========Pymongoext is an ORM-like Pymongo extension that adds json schema validation,
index management and intermediate data manipulators.
Pymongoext simplifies working with MongoDB, while maintaining a syntax very identical to Pymongo.``pymongoext.Model`` is simply a wrapper around ``pymongo.Collection``.
As such, all of the pymongo.Collection API is exposed through pymongoext.Model.
If you don't find what you want in the pymongoext.Model API,
please take a look at pymongo's Collection documentation.Documentation is available at https://pymongoext.readthedocs.io
The code is hosted on Github https://github.com/musyoka-morris/pymongoext
Features
=========- schema validation (which uses MongoDB JSON Schema validation)
- schema-less feature
- nested and complex schema declaration
- untyped field support
- required fields validation
- default values
- custom validators
- operator for validation (OneOf, AllOf, AnyOf, Not)
- indexes management
- data manipulators (transform documents before saving and after retrieval)
- Easy to create custom data manipulators
- object-like results instead of dict-like. (i.e. foo.bar instead of foo['bar'])
- No custom-query language or API to learn (If you know how to use pymongo, you already know how to use pymongoext)Supported MongoDB & Python Versions
====================================
Pymongoext uses JSON Schema for validation and thus we only support
MongoDB v3.6+.Pymongoext supports python v3+. Support for python v2.7 is currently under consideration.
Installation
=============
We recommend the use of `virtualenv `_ and of
`pip `_. You can then use ``pip install -U pymongoext``.You may also have `setuptools `_
and thus you can use ``easy_install -U pymongoext``. Another option is
`pipenv `_. You can then use ``pipenv install pymongoext``
to both create the virtual environment and install the package.Alternatively, you can download the source from `GitHub `_ and
run ``python setup.py install``.Examples
=========
Some simple examples of what pymongoext code looks like:.. code :: python
from datetime import datetime
from pymongo import MongoClient, IndexModel
from pymongoext import *class User(Model):
@classmethod
def db(cls):
return MongoClient()['my_database_name']__schema__ = DictField(dict(
email=StringField(required=True),
name=StringField(required=True),
yob=IntField(minimum=1900, maximum=2019)
))__indexes__ = [IndexModel('email', unique=True), 'name']
class AgeManipulator(Manipulator):
def transform_outgoing(self, doc, model):
doc['age'] = datetime.now().year - doc['yob']
return doc# Create a user
>>> User.insert_one({'email': '[email protected]', 'name': 'Jane Doe', 'yob': 1990})# Fetch one user
>>> user = User.find_one()# Print the users age
>>> print(user.age)Contributing
=============
We welcome contributions!
See the `Contribution guidelines `_