Renamed utils to registry

This commit is contained in:
David Gelvin 2010-09-23 13:58:11 +03:00
parent c7e595fdf9
commit 093a0ef457
9 changed files with 67 additions and 78 deletions

View file

@ -25,7 +25,7 @@ from django.forms import BooleanField, CharField, DateTimeField, FloatField, \
from django.contrib.admin.widgets import AdminSplitDateTime
from django.utils.translation import ugettext_lazy as _
from .utils import EavRegistry
from .registry import Registry
@ -50,7 +50,7 @@ class BaseDynamicEntityForm(ModelForm):
def __init__(self, data=None, *args, **kwargs):
super(BaseDynamicEntityForm, self).__init__(data, *args, **kwargs)
config_cls = EavRegistry.get_config_cls_for_model(self.instance.__class__)
config_cls = Registry.get_config_cls_for_model(self.instance.__class__)
self.entity = getattr(self.instance, config_cls.eav_attr)
self._build_dynamic_fields()

View file

@ -80,10 +80,10 @@ def expand_eav_filter(model_cls, key, value):
key = 'eav_values__in'
value = Values.objects.filter(value_int=5, attribute__slug='height')
'''
from .utils import EavRegistry
from .registry import Registry
fields = key.split('__')
config_cls = EavRegistry.get_config_cls_for_model(model_cls)
config_cls = Registry.get_config_cls_for_model(model_cls)
if len(fields) > 1 and config_cls and \
fields[0] == config_cls.eav_attr:
slug = fields[1]
@ -124,8 +124,8 @@ class EntityManager(models.Manager):
return super(EntityManager, self).get(*args, **kwargs)
def create(self, **kwargs):
from .utils import EavRegistry
config_cls = EavRegistry.get_config_cls_for_model(self.model)
from .registry import Registry
config_cls = Registry.get_config_cls_for_model(self.model)
attributes = config_cls.get_attributes()
prefix = '%s__' % config_cls.eav_attr

View file

@ -191,8 +191,8 @@ class Value(models.Model):
>>> from django.db import models
>>> from django.contrib.auth.models import User
>>> from .utils import EavRegistry
>>> EavRegistry.register(User)
>>> from .registry import Registry
>>> Registry.register(User)
>>> u = User.objects.create(username='crazy_dev_user')
>>> a = Attribute.objects.create(name='Favorite Drink', datatype='text',
... slug='fav_drink')
@ -292,8 +292,8 @@ class Entity(object):
return object.__getattr__(self, name)
def get_all_attributes(self):
from .utils import EavRegistry
config_cls = EavRegistry.get_config_cls_for_model(self.model.__class__)
from .registry import Registry
config_cls = Registry.get_config_cls_for_model(self.model.__class__)
return config_cls.get_attributes()
def save(self):
@ -339,15 +339,15 @@ class Entity(object):
@staticmethod
def post_save_handler(sender, *args, **kwargs):
from .utils import EavRegistry
config_cls = EavRegistry.get_config_cls_for_model(sender)
from .registry import Registry
config_cls = Registry.get_config_cls_for_model(sender)
entity = getattr(kwargs['instance'], config_cls.eav_attr)
entity.save()
@staticmethod
def pre_save_handler(sender, *args, **kwargs):
from .utils import EavRegistry
config_cls = EavRegistry.get_config_cls_for_model(sender)
from .registry import Registry
config_cls = Registry.get_config_cls_for_model(sender)
entity = getattr(kwargs['instance'], config_cls.eav_attr)
entity.validate_attributes()

View file

@ -25,7 +25,6 @@ from .models import (Entity, Attribute, Value,
get_unique_class_identifier)
#todo : rename this file in registry
class EavConfig(Entity):
eav_attr = 'eav'
@ -42,7 +41,7 @@ class EavConfig(Entity):
return Attribute.objects.all()
class EavRegistry(object):
class Registry(object):
"""
Tools to add eav features to models
"""
@ -57,8 +56,8 @@ class EavRegistry(object):
"""
cls_id = get_unique_class_identifier(model_cls)
if cls_id in EavRegistry.cache:
return EavRegistry.cache[cls_id]['config_cls']
if cls_id in Registry.cache:
return Registry.cache[cls_id]['config_cls']
@staticmethod
@ -67,7 +66,7 @@ class EavRegistry(object):
Attache EAV toolkit to an instance after init.
"""
instance = kwargs['instance']
config_cls = EavRegistry.get_config_cls_for_model(sender)
config_cls = Registry.get_config_cls_for_model(sender)
setattr(instance, config_cls.eav_attr, Entity(instance))
@ -92,20 +91,20 @@ class EavRegistry(object):
cls_id = get_unique_class_identifier(model_cls)
if cls_id in EavRegistry.cache:
if cls_id in Registry.cache:
return
config_cls = EavRegistry.wrap_config_class(model_cls, config_cls)
config_cls = Registry.wrap_config_class(model_cls, config_cls)
if not manager_only:
# we want to call attach and save handler on instance creation and
# saving
post_init.connect(EavRegistry.attach, sender=model_cls)
post_init.connect(Registry.attach, sender=model_cls)
post_save.connect(Entity.post_save_handler, sender=model_cls)
pre_save.connect(Entity.pre_save_handler, sender=model_cls)
# todo: rename cache in data
EavRegistry.cache[cls_id] = { 'config_cls': config_cls,
Registry.cache[cls_id] = { 'config_cls': config_cls,
'model_cls': model_cls,
'manager_only': manager_only }
@ -113,7 +112,7 @@ class EavRegistry(object):
# one
if hasattr(model_cls, config_cls.manager_attr):
mgr = getattr(model_cls, config_cls.manager_attr)
EavRegistry.cache[cls_id]['old_mgr'] = mgr
Registry.cache[cls_id]['old_mgr'] = mgr
if not manager_only:
# set add the config_cls as an attribute of the model
@ -150,14 +149,14 @@ class EavRegistry(object):
"""
cls_id = get_unique_class_identifier(model_cls)
if not cls_id in EavRegistry.cache:
if not cls_id in Registry.cache:
return
cache = EavRegistry.cache[cls_id]
cache = Registry.cache[cls_id]
config_cls = cache['config_cls']
manager_only = cache['manager_only']
if not manager_only:
post_init.disconnect(EavRegistry.attach, sender=model_cls)
post_init.disconnect(Registry.attach, sender=model_cls)
post_save.disconnect(Entity.post_save_handler, sender=model_cls)
pre_save.disconnect(Entity.pre_save_handler, sender=model_cls)
@ -186,7 +185,7 @@ class EavRegistry(object):
except AttributeError:
pass
EavRegistry.cache.pop(cls_id)
Registry.cache.pop(cls_id)
# todo : test cache
# todo : tst unique identitfier

View file

@ -3,7 +3,7 @@ from datetime import datetime
from django.test import TestCase
from ..models import *
from ..utils import EavRegistry, EavConfig
from ..registry import Registry, EavConfig
from .models import Patient
@ -16,8 +16,8 @@ class EavBasicTests(TestCase):
def setUp(self):
EavRegistry.unregister(Patient)
EavRegistry.register(Patient)
Registry.unregister(Patient)
Registry.register(Patient)
self.attribute = Attribute.objects.create(datatype=Attribute.TYPE_TEXT,
name='City', help_text='The City', slug='city')
@ -29,7 +29,7 @@ class EavBasicTests(TestCase):
value_text='Denver')
def tearDown(self):
EavRegistry.unregister(Patient)
Registry.unregister(Patient)
def test_attribute_unicode(self):
@ -106,32 +106,32 @@ class EavBasicTests(TestCase):
self.assertEqual(val.value, value)
def test_eavregistry_ataches_and_detaches_eav_attribute(self):
EavRegistry.unregister(Patient)
def test_Registry_ataches_and_detaches_eav_attribute(self):
Registry.unregister(Patient)
p = Patient()
self.assertFalse(hasattr(p, 'eav'))
EavRegistry.register(Patient)
Registry.register(Patient)
p2 = Patient()
self.assertTrue(p2.eav)
def test_eavregistry_ataches_and_detaches_eav_attribute(self):
def test_Registry_ataches_and_detaches_eav_attribute(self):
self.assertTrue(self.entity.eav)
self.assertTrue(self.entity.eav_values)
self.assertTrue(self.value.entity)
# todo : should we have self.value.patient herer ?
EavRegistry.unregister(Patient)
Registry.unregister(Patient)
p = Patient()
self.assertFalse(hasattr(p, 'eav'))
self.assertFalse(hasattr(p, 'eav'))
self.assertFalse(hasattr(p, 'eav_values'))
def test_eavregistry_accept_a_settings_class_with_get_queryset(self):
EavRegistry.unregister(Patient)
def test_Registry_accept_a_settings_class_with_get_queryset(self):
Registry.unregister(Patient)
class PatientEav(EavConfig):
@ -139,19 +139,19 @@ class EavBasicTests(TestCase):
def get_eav_attributes(self):
return Attribute.objects.all()
EavRegistry.register(Patient, PatientEav)
Registry.register(Patient, PatientEav)
p = Patient()
EavRegistry.unregister(Patient)
Registry.unregister(Patient)
def test_eavregistry_accept_a_settings_class_with_field_names(self):
def test_Registry_accept_a_settings_class_with_field_names(self):
p = Patient.objects.create(name='Renaud')
registered_manager = Patient.objects
registered_eav_value = p.eav_values
EavRegistry.unregister(Patient)
Registry.unregister(Patient)
class PatientEav(EavConfig):
@ -160,7 +160,7 @@ class EavBasicTests(TestCase):
generic_relation_attr = 'my_eav_values'
generic_relation_related_name = "patient"
EavRegistry.register(Patient, PatientEav)
Registry.register(Patient, PatientEav)
p2 = Patient.objects.create(name='Henry')
self.assertEqual(type(p.eav), type(p2.my_eav))
@ -176,6 +176,6 @@ class EavBasicTests(TestCase):
bak_registered_manager = Patient.objects
EavRegistry.unregister(Patient)
Registry.unregister(Patient)
self.assertEqual(type(Patient.objects), type(bak_registered_manager))

View file

@ -1,10 +0,0 @@
#!/usr/bin/env python
# -*- coding= UTF-8 -*-
__author__ = 'Isatis39871'
__date__ = ''
__version__ = ''
__all__ = []
import os, sys
from optparse import OptionParser

View file

@ -5,7 +5,7 @@ from django.contrib.auth.models import User
from django.db.models import Q
from ..models import *
from ..utils import EavRegistry, EavConfig
from ..registry import Registry, EavConfig
from .models import Patient
@ -18,8 +18,8 @@ class EavFilterTests(TestCase):
def setUp(self):
EavRegistry.unregister(Patient)
EavRegistry.register(Patient)
Registry.unregister(Patient)
Registry.register(Patient)
self.attribute = Attribute.objects\
.create(datatype=Attribute.TYPE_TEXT,
@ -32,8 +32,8 @@ class EavFilterTests(TestCase):
value_text='Denver')
def tearDown(self):
EavRegistry.unregister(Patient)
EavRegistry.unregister(User)
Registry.unregister(Patient)
Registry.unregister(User)
def additional_attribute_setup(self):
@ -57,7 +57,7 @@ class EavFilterTests(TestCase):
return Attribute.objects.all()
self.UserEav = UserEav
EavRegistry.register(User, UserEav)
Registry.register(User, UserEav)
self.user = User.objects.create(username='John')
@ -169,7 +169,7 @@ class EavFilterTests(TestCase):
def test_you_can_filter_entity_by_q_objects_with_lookups(self):
class UserEav(EavConfig):
manager_attr = 'eav_objects'
EavRegistry.register(User, UserEav)
Registry.register(User, UserEav)
Attribute.objects.create(datatype=Attribute.TYPE_INT,
name='Height')
@ -214,7 +214,7 @@ class EavFilterTests(TestCase):
This test demonstrates a few EAV queries that are known to be broken.
it currently fails.
'''
EavRegistry.register(User)
Registry.register(User)
Attribute.objects.create(datatype=Attribute.TYPE_INT,
name='Height')

View file

@ -4,7 +4,7 @@ from django.test import TestCase
from django.contrib.auth.models import User
from ..models import *
from ..utils import EavRegistry, EavConfig
from ..registry import Registry, EavConfig
from .models import Patient
@ -16,8 +16,8 @@ class EavSetterAndGetterTests(TestCase):
def setUp(self):
EavRegistry.unregister(Patient)
EavRegistry.register(Patient)
Registry.unregister(Patient)
Registry.register(Patient)
self.attribute = Attribute.objects\
.create(datatype=Attribute.TYPE_TEXT,
@ -31,8 +31,8 @@ class EavSetterAndGetterTests(TestCase):
def tearDown(self):
EavRegistry.unregister(Patient)
EavRegistry.unregister(User)
Registry.unregister(Patient)
Registry.unregister(User)
def additional_attribute_setup(self):
@ -164,9 +164,9 @@ class EavSetterAndGetterTests(TestCase):
self.additional_attribute_setup()
EavRegistry.unregister(Patient)
EavRegistry.register(Patient, self.PatientEav)
EavRegistry.register(User, self.UserEav)
Registry.unregister(Patient)
Registry.register(Patient, self.PatientEav)
Registry.register(User, self.UserEav)
p = Patient.objects.create(name='Bob')
@ -187,8 +187,8 @@ class EavSetterAndGetterTests(TestCase):
self.assertEqual(Patient.objects.get(pk=self.patient.pk).eav.city,
'Tunis')
EavRegistry.unregister(Patient)
EavRegistry.register(Patient, self.PatientEav)
Registry.unregister(Patient)
Registry.register(Patient, self.PatientEav)
p = Patient.objects.create(name='Patrick')
p.eav.city = 'Paris'
@ -204,9 +204,9 @@ class EavSetterAndGetterTests(TestCase):
self.additional_attribute_setup()
EavRegistry.unregister(Patient)
EavRegistry.register(Patient, self.PatientEav)
EavRegistry.register(User, self.UserEav)
Registry.unregister(Patient)
Registry.register(Patient, self.PatientEav)
Registry.register(User, self.UserEav)
p = Patient.objects.create(name='Patrick')
u = User.objects.create(username='John')
@ -232,7 +232,7 @@ class EavSetterAndGetterTests(TestCase):
self.additional_attribute_setup()
EavRegistry.unregister(Patient)
Registry.unregister(Patient)
class SubPatientEav(self.PatientEav):
@ -240,7 +240,7 @@ class EavSetterAndGetterTests(TestCase):
def get_attributes(cls):
return Attribute.objects.filter(slug='country')
EavRegistry.register(Patient, SubPatientEav)
Registry.register(Patient, SubPatientEav)
self.patient.eav.city = 'Paris'
self.patient.eav.country = 'USA'

View file