Skip to main content

Yet Another Document Mapper (ODM) for MongoDB

Project description

https://travis-ci.org/zzzsochi/yadm.svg?branch=master https://coveralls.io/repos/zzzsochi/yadm/badge.png

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

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

Quick start

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.get_queryset(BlogPost).find({'title': {'$regex': '^S'}})
assert qs.count() > 0

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

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

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

# Save changed post
db.save(post)

CHANGES

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.0.3.tar.bz2 (28.3 kB view details)

Uploaded Source

File details

Details for the file yadm-1.0.3.tar.bz2.

File metadata

  • Download URL: yadm-1.0.3.tar.bz2
  • Upload date:
  • Size: 28.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for yadm-1.0.3.tar.bz2
Algorithm Hash digest
SHA256 373f95e38c116ce1564dc6a40166243c3e00d4c549c3998c933791bde857c7be
MD5 e4c34c6c72558e1b7a199767eb311932
BLAKE2b-256 641a0b066e2d19f6331fc18e543763e5796ae8ea83f7a5d03164299f6e3ff4d3

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