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)