Skip to main content
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

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

If you're not sure about the file name format, learn more about wheel file names.

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

Uploaded Python 2Python 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.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 files

0.2

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page