Skip to main content

A Pythonic Object Data Manager

Project description

https://badge.fury.io/py/modular-odm.png https://travis-ci.org/CenterForOpenScience/modular-odm.png?branch=develop

A database-agnostic Document-Object Mapper for Python.

Install

$ pip install modular-odm

Example Usage with MongoDB

Defining Models

from modularodm import StoredObject, fields
from modularodm.validators import MinLengthValidator, MaxLengthValidator

class User(StoredObject):
    _meta = {"optimistic": True}
    _id = fields.StringField(primary=True, index=True)
    username = fields.StringField(required=True)
    password = fields.StringField(required=True, validate=[MinLengthValidator(8)])

    def __repr__(self):
        return "<User: {0}>".format(self.username)

class Comment(StoredObject):
    _meta = {"optimistic": True}
    _id = fields.StringField(primary=True, index=True)
    text = fields.StringField(validate=MaxLengthValidator(500))
    user = fields.ForeignField("User", backref="comments")

    def __repr__(self):
        return "<Comment: {0}>".format(self.text)

Setting the Storage Backend

from pymongo import MongoClient
from modularodm import storage

client = MongoClient()
db = client['testdb']
User.set_storage(storage.MongoStorage(db, collection="user"))
Comment.set_storage(storage.MongoStorage(db, collection="comment"))

Creating and Querying

>>> from modularodm.query.querydialect import DefaultQueryDialect as Q
>>> u = User(username="unladenswallow", password="h0lygrai1")
>>> u.save()
>>> comment = Comment(text="And now for something completely different.", user=u)
>>> comment2 = Comment(text="It's just a flesh wound.", user=u)
>>> comment.save()
True
>>> comment2.save()
True
>>> u = User.find_one(Q("username", "eq", "unladenswallow"))
>>> u.comment__comments
[<Comment: And now for something completely different.>, <Comment: It's just a flesh wound.>]
>>> c = Comment.find(Q("text", "startswith", "And now"))[0]
>>> c.text
'And now for something completely different.'

For more information regarding querying syntax, please visit the related readthedocs page at <http://modular-odm.readthedocs.org/en/latest/query_syntax.html>.

Migrations

TODO

Full documentation coming soon.

Development

Tests require nose, invoke, and MongoDB.

Installing MongoDB

If you are on MacOSX with homebrew, run

$ brew update
$ brew install mongodb

Running Tests

To start mongodb, run

$ invoke mongo

Run all tests with

$ invoke test

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

modular-odm-0.3.0.tar.gz (30.7 kB view details)

Uploaded Source

Built Distribution

modular_odm-0.3.0-py2.py3-none-any.whl (42.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file modular-odm-0.3.0.tar.gz.

File metadata

  • Download URL: modular-odm-0.3.0.tar.gz
  • Upload date:
  • Size: 30.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for modular-odm-0.3.0.tar.gz
Algorithm Hash digest
SHA256 2c0dc303c638ea7bd78e6eaf329a727d0f9a53d4587d32b0930f32abce50fb7a
MD5 2691e495f331b5a8181636928a3b8020
BLAKE2b-256 194528fae0332525dccdca49edfc45bb6506020ee94a242cf34bcfa88d580943

See more details on using hashes here.

File details

Details for the file modular_odm-0.3.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for modular_odm-0.3.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 624db71ff7056934d7028239b62e858ff20f9b90d2ae08d6da363c86054dc80e
MD5 4f7b7eca543a6016b72950ce94d85fe7
BLAKE2b-256 73d3f7a5946600a0923fea6a0a8251ba77efb8dcca5a69fb46a757f937b121dc

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