From 9dfe620b2b84bf1b4a38a3bb165a5a7aa3ae1eae Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 6 Jul 2014 16:03:27 +0200 Subject: [PATCH] Started moving tag/attribute handlers to TypeObjectManager as per #529 --- src/typeclasses/managers.py | 50 +++++++++++++++++++++++++++++++++++++ src/typeclasses/models.py | 6 ++--- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/typeclasses/managers.py b/src/typeclasses/managers.py index a638947a42..55429b6be8 100644 --- a/src/typeclasses/managers.py +++ b/src/typeclasses/managers.py @@ -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) diff --git a/src/typeclasses/models.py b/src/typeclasses/models.py index 3c77fbfe3e..9cf09b4388 100644 --- a/src/typeclasses/models.py +++ b/src/typeclasses/models.py @@ -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):