SequenceField for abstract classes now have a proper name

This commit is contained in:
Matthieu Rigal
2015-06-12 11:03:52 +02:00
parent dd05c4d34a
commit 3093175f54
5 changed files with 59 additions and 8 deletions

View File

@@ -672,7 +672,7 @@ class BaseDocument(object):
@classmethod
def _get_collection_name(cls):
"""Returns the collection name for this class.
"""Returns the collection name for this class. None for abstract class
"""
return cls._meta.get('collection', None)

View File

@@ -424,7 +424,6 @@ class TopLevelDocumentMetaclass(DocumentMetaclass):
return id_name, id_db_name
class MetaDict(dict):
"""Custom dictionary for meta classes.

View File

@@ -145,7 +145,7 @@ class Document(BaseDocument):
my_metaclass = TopLevelDocumentMetaclass
__metaclass__ = TopLevelDocumentMetaclass
__slots__ = ('__objects')
__slots__ = ('__objects',)
def pk():
"""Primary key alias
@@ -174,10 +174,10 @@ class Document(BaseDocument):
db = cls._get_db()
collection_name = cls._get_collection_name()
# Create collection as a capped collection if specified
if cls._meta['max_size'] or cls._meta['max_documents']:
if cls._meta.get('max_size') or cls._meta.get('max_documents'):
# Get max document limit and max byte size from meta
max_size = cls._meta['max_size'] or 10000000 # 10MB default
max_documents = cls._meta['max_documents']
max_size = cls._meta.get('max_size') or 10000000 # 10MB default
max_documents = cls._meta.get('max_documents')
if collection_name in db.collection_names():
cls._collection = db[collection_name]

View File

@@ -1694,7 +1694,7 @@ class SequenceField(BaseField):
self.sequence_name = sequence_name
self.value_decorator = (callable(value_decorator) and
value_decorator or self.VALUE_DECORATOR)
return super(SequenceField, self).__init__(*args, **kwargs)
super(SequenceField, self).__init__(*args, **kwargs)
def generate(self):
"""
@@ -1740,7 +1740,7 @@ class SequenceField(BaseField):
if self.sequence_name:
return self.sequence_name
owner = self.owner_document
if issubclass(owner, Document):
if issubclass(owner, Document) and not owner._meta.get('abstract'):
return owner._get_collection_name()
else:
return ''.join('_%s' % c if c.isupper() else c