- Author:
- fatiherikli
- Posted:
- October 4, 2012
- Language:
- Python
- Version:
- 1.4
- Score:
- 2 (after 2 ratings)
MongoDB Resource for Tastypie
Allows you to create delicious APIs for MongoDB.
Settings
MONGODB_HOST = None
MONGODB_PORT = None
MONGODB_DATABASE = "database_name"
Example of Usage
from tastypie import fields
from tastypie.authorization import Authorization
from tastypie_mongodb.resources import MongoDBResource, Document
class DocumentResource(MongoDBResource):
id = fields.CharField(attribute="_id")
title = fields.CharField(attribute="title", null=True)
entities = fields.ListField(attribute="entities", null=True)
class Meta:
resource_name = "documents"
list_allowed_methods = ["delete", "get", "post"]
authorization = Authorization()
object_class = Document
collection = "documents" # collection name
Github Repository
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | from bson import ObjectId
from pymongo import Connection
from django.core.exceptions import ImproperlyConfigured
from django.core.urlresolvers import reverse
from django.conf import settings
from tastypie.bundle import Bundle
from tastypie.resources import Resource
db = Connection(
host=getattr(settings, "MONGODB_HOST", None),
port=getattr(settings, "MONGODB_PORT", None)
)[settings.MONGODB_DATABASE]
class Document(dict):
# dictionary-like object for mongodb documents.
__getattr__ = dict.get
class MongoDBResource(Resource):
"""
A base resource that allows to make CRUD operations for mongodb.
"""
def get_collection(self):
"""
Encapsulates collection name.
"""
try:
return db[self._meta.collection]
except AttributeError:
raise ImproperlyConfigured("Define a collection in your resource.")
def obj_get_list(self, request=None, **kwargs):
"""
Maps mongodb documents to Document class.
"""
return map(Document, self.get_collection().find())
def obj_get(self, request=None, **kwargs):
"""
Returns mongodb document from provided id.
"""
return Document(self.get_collection().find_one({
"_id": ObjectId(kwargs.get("pk"))
}))
def obj_create(self, bundle, **kwargs):
"""
Creates mongodb document from POST data.
"""
self.get_collection().insert(bundle.data)
return bundle
def obj_update(self, bundle, request=None, **kwargs):
"""
Updates mongodb document.
"""
self.get_collection().update({
"_id": ObjectId(kwargs.get("pk"))
}, {
"$set": bundle.data
})
return bundle
def obj_delete(self, request=None, **kwargs):
"""
Removes single document from collection
"""
self.get_collection().remove({ "_id": ObjectId(kwargs.get("pk")) })
def obj_delete_list(self, request=None, **kwargs):
"""
Removes all documents from collection
"""
self.get_collection().remove()
def get_resource_uri(self, item):
"""
Returns resource URI for bundle or object.
"""
if isinstance(item, Bundle):
pk = item.obj._id
else:
pk = item._id
return reverse("api_dispatch_detail", kwargs={
"resource_name": self._meta.resource_name,
"pk": pk
})
|
More like this
- Template tag - list punctuation for a list of items by shapiromatron 9 months, 1 week ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 9 months, 2 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 4 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 4 months ago
- Help text hyperlinks by sa2812 1 year, 5 months ago
Comments
Please login first before commenting.