Added caching for aliases.

This commit is contained in:
Griatch 2012-02-25 23:56:31 +01:00
parent 1fa5791e19
commit fb0d77c794
2 changed files with 19 additions and 37 deletions

View file

@ -20,7 +20,7 @@ from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from src.utils.idmapper.models import SharedMemoryModel
from src.typeclasses.models import Attribute, TypedObject, TypeNick, TypeNickHandler
from src.typeclasses.models import Attribute, TypedObject, TypeNick, TypeNickHandler, get_cache
from src.typeclasses.typeclass import TypeClass
from src.objects.manager import ObjectManager
from src.players.models import PlayerDB
@ -29,12 +29,16 @@ from src.commands.cmdsethandler import CmdSetHandler
from src.commands import cmdhandler
from src.scripts.scripthandler import ScriptHandler
from src.utils import logger
from src.utils.utils import is_iter, to_unicode, to_str, mod_import
from src.utils.utils import make_iter, to_unicode, to_str, mod_import
#PlayerDB = ContentType.objects.get(app_label="players", model="playerdb").model_class()
AT_SEARCH_RESULT = mod_import(*settings.SEARCH_AT_RESULT.rsplit('.', 1))
GA = object.__getattribute__
SA = object.__setattr__
DA = object.__delattr__
#------------------------------------------------------------
#
# ObjAttribute
@ -208,20 +212,25 @@ class ObjectDB(TypedObject):
#@property
def aliases_get(self):
"Getter. Allows for value = self.aliases"
return list(Alias.objects.filter(db_obj=self).values_list("db_key", flat=True))
try:
return GA(self, "_cached_aliases")
except AttributeError:
aliases = list(Alias.objects.filter(db_obj=self).values_list("db_key", flat=True))
SA(self, "_cached_aliases", aliases)
return aliases
#@aliases.setter
def aliases_set(self, aliases):
"Setter. Allows for self.aliases = value"
if not is_iter(aliases):
aliases = [aliases]
for alias in aliases:
for alias in make_iter(aliases):
new_alias = Alias(db_key=alias, db_obj=self)
new_alias.save()
SA(self, "_cached_aliases", aliases)
#@aliases.deleter
def aliases_del(self):
"Deleter. Allows for del self.aliases"
for alias in Alias.objects.filter(db_obj=self):
alias.delete()
DA(self, "_cached_aliases")
aliases = property(aliases_get, aliases_set, aliases_del)
# player property (wraps db_player)
@ -365,30 +374,6 @@ class ObjectDB(TypedObject):
self.save()
destination = property(destination_get, destination_set, destination_del)
#@property for consistent aliases access throughout Evennia
#@aliases.setter
def aliases_set(self, aliases):
"Adds an alias to object"
if not is_iter(aliases):
aliases = [aliases]
for alias in aliases:
query = Alias.objects.filter(db_obj=self, db_key__iexact=alias)
if query.count():
continue
new_alias = Alias(db_key=alias, db_obj=self)
new_alias.save()
#@aliases.getter
def aliases_get(self):
"Return a list of all aliases defined on this object."
return list(Alias.objects.filter(db_obj=self).values_list("db_key", flat=True))
#@aliases.deleter
def aliases_del(self):
"Removes aliases from object"
query = Alias.objects.filter(db_obj=self)
if query:
query.delete()
aliases = property(aliases_get, aliases_set, aliases_del)
# cmdset_storage property
#@property
def cmdset_storage_get(self):
@ -399,8 +384,7 @@ class ObjectDB(TypedObject):
#@cmdset_storage.setter
def cmdset_storage_set(self, value):
"Setter. Allows for self.name = value. Stores as a comma-separated string."
if is_iter(value):
value = ",".join([str(val).strip() for val in value])
value = ",".join(str(val).strip() for val in make_iter(value))
self.db_cmdset_storage = value
self.save()
#@cmdset_storage.deleter
@ -605,8 +589,7 @@ class ObjectDB(TypedObject):
"""
contents = self.contents
if exclude:
if not is_iter(exclude):
exclude = [exclude]
excluce = make_iter(exclude)
contents = [obj for obj in contents
if (obj not in exclude and obj not in exclude)]
for obj in contents: