Small cleanup in `FieldsAggregationMetaClass`. The manual inheritance syntax is left mostly for backwards compatibility.

This commit is contained in:
wrwrwr 2013-02-10 17:29:07 +01:00
parent 36c5d0b81a
commit 11045e8ffb

View file

@ -5,7 +5,7 @@ from django.db.models.base import ModelBase
from modeltranslation.fields import TranslationFieldDescriptor, create_translation_field
from modeltranslation.manager import MultilingualManager, rewrite_lookup_key
from modeltranslation.utils import build_localized_fieldname, unique
from modeltranslation.utils import build_localized_fieldname
class AlreadyRegistered(Exception):
@ -22,16 +22,14 @@ class DescendantRegistered(Exception):
class FieldsAggregationMetaClass(type):
"""
Metaclass to handle inheritance of fields between classes.
Metaclass to handle custom inheritance of fields between classes.
"""
def __new__(cls, name, bases, attrs):
parents = [b for b in bases if isinstance(b, FieldsAggregationMetaClass)]
if not parents:
return super(FieldsAggregationMetaClass, cls).__new__(cls, name, bases, attrs)
attrs['fields'] = tuple(attrs.get('fields', ()))
for base in parents:
attrs['fields'] += tuple(base.fields)
attrs['fields'] = tuple(unique(attrs['fields']))
attrs['fields'] = set(attrs.get('fields', ()))
for base in bases:
if isinstance(base, FieldsAggregationMetaClass):
attrs['fields'].update(base.fields)
attrs['fields'] = tuple(attrs['fields'])
return super(FieldsAggregationMetaClass, cls).__new__(cls, name, bases, attrs)