Started moving tag/attribute handlers to TypeObjectManager as per #529

This commit is contained in:
Griatch 2014-07-06 16:03:27 +02:00
parent e6950aadf2
commit 9dfe620b2b
2 changed files with 52 additions and 4 deletions

View file

@ -217,6 +217,56 @@ class TypedObjectManager(idmapper.manager.SharedMemoryManager):
Common ObjectManager for all dbobjects.
"""
# Attribute manager methods
# Tag manager methods
def get_tag(self, key=None, category=None, obj=None, tagtype=None):
"""
Return Tag objects by key, by category, by object or
with a combination of those criteria.
tagtype - one of None (normal tags), "alias" or "permission"
"""
query = [("tag__db_tagtype", tagtype)]
if obj:
query.append(("%s__id" % self.model.__name__.lower(), obj.id))
if key:
query.append(("tag__db_key", key))
if category:
query.append(("tag__db_category", category))
return self.model.db_tags.through.objects.filter(**dict(query))
def get_permission(self, key=None, category=None, obj=None):
return self.get_tag(key=key, category=category, obj=obj, tagtype="permission")
def get_alias(self, key=None, category=None, obj=None):
return self.get_tag(key=key, category=category, obj=obj, tagtype="alias")
@returns_typeclass
def get_by_tag(self, key=None, category=None, tagtype=None):
"""
Return objects having tags with a given key or category or
combination of the two.
tagtype = None, alias or permission
"""
query = [("db_tags__db_tagtype", tagtype)]
if key:
query.append(("db_tags__db_key", key))
if category:
query.append(("db_tags__db_category", category))
return self.filter(**dict(query))
def get_by_permission(self, key=None, category=None):
return self.get_by_tag(key=key, category=category, tagtype="permission")
def get_by_alias(self, key=None, category=None):
return self.get_by_tag(key=key, category=category, tagtype="alias")
# object-manager methods
def dbref(self, dbref, reqhash=True):
"""
Valid forms of dbref (database reference number)

View file

@ -35,7 +35,6 @@ from django.db import models
from django.core.exceptions import ObjectDoesNotExist
from django.conf import settings
from django.utils.encoding import smart_str
from django.contrib.contenttypes.models import ContentType
from src.utils.idmapper.models import SharedMemoryModel
from src.server.caches import get_prop_cache, set_prop_cache
@ -58,7 +57,6 @@ TICKER_HANDLER = None
_PERMISSION_HIERARCHY = [p.lower() for p in settings.PERMISSION_HIERARCHY]
_TYPECLASS_AGGRESSIVE_CACHE = settings.TYPECLASS_AGGRESSIVE_CACHE
_CTYPEGET = ContentType.objects.get
_GA = object.__getattribute__
_SA = object.__setattr__
_DA = object.__delattr__
@ -234,7 +232,7 @@ class AttributeHandler(object):
"Initialize handler"
self.obj = obj
self._objid = obj.id
self._model = to_str(ContentType.objects.get_for_model(obj).natural_key()[1])
self._model = to_str(obj.__class__.__name__.lower())
self._cache = None
def _recache(self):
@ -624,7 +622,7 @@ class TagHandler(object):
"""
self.obj = obj
self._objid = obj.id
self._model = ContentType.objects.get_for_model(obj).natural_key()[1]
self._model = obj.__class__.__name__.lower()
self._cache = None
def _recache(self):