Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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