def __new__(cls, name, bases, attrs): new_class = SchemaBase.__new__(cls, name, bases, attrs) if 'objects' not in attrs: objects = Manager() objects.contribute_to_class(new_class, 'objects') if not new_class._meta.virtual and not new_class._meta.proxy: _register_document(new_class) parents = [b for b in bases if isinstance(b, DocumentBase)] module = new_class.__module__ if not new_class._meta.virtual: new_class.add_to_class('DoesNotExist', subclass_exception('DoesNotExist', tuple(x.DoesNotExist for x in parents if hasattr(x, '_meta') and not x._meta.virtual) or (ObjectDoesNotExist,), module)) new_class.add_to_class('MultipleObjectsReturned', subclass_exception('MultipleObjectsReturned', tuple(x.MultipleObjectsReturned for x in parents if hasattr(x, '_meta') and not x._meta.virtual) or (MultipleObjectsReturned,), module)) if parents and new_class._meta.proxy: new_class._meta.module_name = parents[0]._meta.module_name return new_class
def __new__(cls, name, bases, attrs): new_class = SchemaBase.__new__(cls, name, bases, attrs) if 'objects' not in attrs: objects = Manager() objects.contribute_to_class(new_class, 'objects') parents = [b for b in bases if isinstance(b, DocumentBase)] module = new_class.__module__ if not new_class._meta.virtual: new_class.add_to_class('DoesNotExist', subclass_exception('DoesNotExist', tuple(x.DoesNotExist for x in parents if hasattr(x, '_meta') and not x._meta.virtual) or (ObjectDoesNotExist,), module)) new_class.add_to_class('MultipleObjectsReturned', subclass_exception('MultipleObjectsReturned', tuple(x.MultipleObjectsReturned for x in parents if hasattr(x, '_meta') and not x._meta.virtual) or (MultipleObjectsReturned,), module)) if parents and new_class._meta.proxy: new_class._meta.module_name = parents[0]._meta.module_name #ensure index on natural key hash if not new_class._meta.virtual and not new_class._meta.proxy: #TODO these fields should be definable at the document level from fields import CharField, DictField new_class.add_to_class('@natural_key_hash', CharField(editable=False, null=False)) new_class.add_to_class('@natural_key', DictField(editable=False, null=False)) register_documents(new_class._meta.app_label, new_class) new_class.objects.index('@natural_key_hash__exact').commit() return new_class