Skip to main content

Yet Another Document Mapper (ODM) for MongoDB

Project description

===========================
Yet Another Document Mapper
===========================

.. image:: https://travis-ci.org/zzzsochi/yadm.svg?branch=master
:target: https://travis-ci.org/zzzsochi/yadm

.. image:: https://coveralls.io/repos/zzzsochi/yadm/badge.svg
:target: https://coveralls.io/r/zzzsochi/yadm


It's small and simple ODM for use with MongoDB.

Full documentation: http://yadm.readthedocs.org


------------
Requirements
------------

YAMD support MongoDB version 3.x only. MongoDB 2.x is not supported.

Minimal version of python is 3.4.


-----------
Quick start
-----------

.. code:: python

import pymongo
from yadm import Database, Document, fields


# Create model
class BlogPost(Document):
__collection__ = 'blog_posts'

title = fields.StringField()
body = fields.StringField()


# Create post
post = BlogPost()
post.title = 'Small post'
post.body = 'Bla-bla-bla...'

# Connect to database
client = pymongo.MongoClient('localhost', 27017)
db = Database(client, 'test')

# Insert post to database
db.insert(post)

# Query posts
qs = db(BlogPost).find({'title': {'$regex': '^S'}})
assert qs.count() > 0

for post in qs:
assert post.title.startswith('S')

# Query one post
post = db(BlogPost).find_one({'title': 'Small post'})

# Change post
post.title = 'Bla-bla-bla title'

# Save changed post
db.save(post)


CHANGES
=======

1.4.14 (2017-11-06)
------------------

* Add ``EnumField`` for save ``enum.Enum``;
* Add ``EnumStateField`` for simple state machines based on ``enum.Enum``.


1.4.13 (2017-10-31)
------------------

* Add ``QuerySet.batch_size`` method for setup batch size for cursor;
* Some minor fixes.


1.4.10 (2017-07-07)
------------------

* ``ReferenceField.from_mongo`` try to get document from primary
if not found by default.


1.4.9 (2017-07-06)
------------------

* Add ``QuerySet.read_primary`` method for simple setup ``read_preference.Primary``.


1.4.4 (2017-05-17)
------------------

* Add ``TimedeltaField`` for stores durations;
* Add ``SimpleEmbeddedDocumentField`` for simply create embedded documents.

.. code:: python

class Doc(Document):
embedded = SimpleEmbeddedDocumentField({
'i': IntegerField(),
's': StringField(),
})


1.4.3 (2017-05-14)
------------------

* Add ``StaticField`` for static data.


1.4.2 (2017-04-09)
------------------

* Additional arguments (like ``write_concern``) for write operations;
* ``create_fake`` save the documents with write concern "majority" by default.


1.4.0 (2017-04-05)
------------------

* Drop pymongo 2 support;
* Additional options for databases and collections;
* Add ``Database.get_document``;
* Add ``TypedEmbeddedDocumentField``;
* ``reload`` argument of ``Database.update_one`` must be keyword
(may be backward incompotable).


1.3.1 (2017-02-21)
------------------

* Change raw data for ``Money``;


1.3.0 (2017-02-19)
------------------

* Add currency support to ``Money``:
- Totaly rewrite ``Money`` type. Now it is not subclass of ``Decimal``;
- Add storage for currencies: ``yadm.fields.money.currency.DEFAULT_CURRENCY_STORAGE``;


1.2.1 (2017-01-19)
------------------

* Add ``QuerySet.find_in`` for ``$in`` queries with specified order;


1.2.0 (2016-12-27)
------------------

* Drop MongoDB 2.X suport;
* Objects for update and remove results;
* Use Faker instead fake-factory.


1.1.4 (2016-08-20)
------------------

* Add some features to ``Bulk``:
- ``Bulk.update_one(document, **kw)``: method for add update one document in bulk;
- ``Bulk.find(query).update(**kw)``: update many documents by query;
- ``Bulk.find(query).upsert().update(**kw)``: upsert document;
- ``Bulk.find(query).remove(**kw)``: remove documents;


1.1.3 (2016-07-23)
------------------

* Add ``QuerySet.ids`` method for get only documents id's from queryset;

* Add ``Money.total_cents`` method and ``Money.from_cents`` classmethod;


1.1 (2016-04-26)
----------------

* Add cacheing on queryset level and use it for ``ReferenceField``;

* Add mongo aggregation framework support;

* Add ``read_preference`` setting;

* Add ``exc`` argument to ``QuerySet.find_one`` for raise exception if not found;

* Add ``multi`` argument to ``QuerySet.remove``;

* Deprecate ``QuerySet.with_id``;

* Refactoring.


1.0 (2015-11-14)
----------------

* Change document structure. No more bad `BaseDocument.__data__` attribute:
- `BaseDocument.__raw__`: raw data from mongo;
- `BaseDocument.__cache__`: cached objects, casted with fields;
- `BaseDocument.__changed__`: changed objects.

* Changes api for custom fields:
- Not more need create field descriptors for every field;
- `prepare_value` called only for setattr;
- `to_mongo` called only for save objects to mongo;
- `from_mongo` called only for load values from `BaseDocument.__raw__`;
- Remove `Field.default` attribute. Use `Field.get_default` method;
- Add `Field.get_if_not_loaded` and `Field.get_if_attribute_not_set` method;
- By default raise `NotLoadedError` if field not loaded from projection;

* Changes in `ReferenceField`:
- Raise `BrokenReference` if link is bloken;
- Raise `NotBindingToDatabase` if document not saved to database;

* `smart_null` keyword for `Field`;

* Fields in document must be instances (not classes!);

* Remove `ArrayContainer` and `ArrayContainerField`;

* Remove old `MapIntKeysField` and `MapObjectIdKeysField`. Use new `MapCustomKeysField`;

* Add `Database.update_one` method for run simple update query with specified document;

* Add `QuerySet.distinct`;

* `serialize.from_mongo` now accept `not_loaded` sequence with filed names who must mark as not loaded, `parent` and `name`;

* `serialize.to_mongo` do not call `FieldDescriptor.__set__`;

* Fakers! Subsystem for generate test objects;

* Tests now use pytest;

* And more, and more...

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

yadm-1.4.14.tar.gz (53.0 kB view details)

Uploaded Source

Built Distribution

yadm-1.4.14-py3-none-any.whl (45.5 kB view details)

Uploaded Python 3

File details

Details for the file yadm-1.4.14.tar.gz.

File metadata

  • Download URL: yadm-1.4.14.tar.gz
  • Upload date:
  • Size: 53.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for yadm-1.4.14.tar.gz
Algorithm Hash digest
SHA256 a2daab747c2977df392b2f4045fe68a305e970b0313f7893311a730eb6151002
MD5 2732d7a1711d1a12b57a1cc9ff481912
BLAKE2b-256 5a5560314f1396b601835afed7d4993a15482d63d8da428cefd72b365cb54bfa

See more details on using hashes here.

File details

Details for the file yadm-1.4.14-py3-none-any.whl.

File metadata

File hashes

Hashes for yadm-1.4.14-py3-none-any.whl
Algorithm Hash digest
SHA256 943f1584ee6dd3427d08521131f7604dd89d54bc20430a709190698d74f06b5a
MD5 fa72431a0f784d3b190b9bcaf3777813
BLAKE2b-256 4a20911840849af9ab3853bc5cc7399e925fcdc7e4c996c9079b9071786fabcd

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