backmongo / backmongo.py

import pymongo
import json
from bson import json_util
from bson.objectid import ObjectId

try:
    from backmongo_conf import DATABASE, OID_PREFIX, CONNECTION_ARGS
except ImportError:
    DATABASE = 'backmongo'
    OID_PREFIX = 'oid_'
    CONNECTION_ARGS = {}

CONNECTION = pymongo.Connection(**CONNECTION_ARGS)
DB = CONNECTION[DATABASE]


def clean_id(_id):
    if _id.startswith(OID_PREFIX):
        return ObjectId(_id[len(OID_PREFIX):])
    else:
        return _id


def dict_to_json_converter(obj, **kwargs):
    if isinstance(obj, ObjectId):
        return OID_PREFIX + str(obj)
    else:
        return json_util.default(obj, **kwargs)


def read(collection_name, _id=None):
    if _id is not None:
        result = DB[collection_name].find_one(clean_id(_id))
    else:
        result = list(DB[collection_name].find())
    return json.dumps(result, default=dict_to_json_converter)


def delete(collection_name, _id):
    DB[collection_name].remove(clean_id(_id))


def save(collection_name, model, _id=None):
    if _id is not None:
        model['_id'] = clean_id(model['_id'])
    return DB[collection_name].save(model, manipulate=False)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.