mongoengine/mongomap/document.py
2009-11-16 13:00:37 +00:00

37 lines
1.1 KiB
Python

from base import DocumentMetaclass, BaseDocument
#import pymongo
class TopLevelDocumentMetaclass(DocumentMetaclass):
"""Metaclass for top-level documents (i.e. documents that have their own
collection in the database.
"""
def __new__(cls, name, bases, attrs):
# Classes defined in this module are abstract and should not have
# their own metadata with DB collection, etc.
if attrs['__module__'] != __name__:
collection = name.lower()
# Subclassed documents inherit collection from superclass
for base in bases:
if hasattr(base, '_meta') and 'collection' in base._meta:
collection = base._meta['collection']
meta = {
'collection': collection,
}
meta.update(attrs.get('meta', {}))
attrs['_meta'] = meta
return DocumentMetaclass.__new__(cls, name, bases, attrs)
class EmbeddedDocument(BaseDocument):
__metaclass__ = DocumentMetaclass
class Document(BaseDocument):
__metaclass__ = TopLevelDocumentMetaclass