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

@ -229,9 +229,8 @@ def at_multimatch_cmd(caller, matches):
if is_channel: if is_channel:
is_channel = " (channel)" is_channel = " (channel)"
else: else:
is_channel = "" is_channel = ""
is_exit = hasattr(cmd, "is_exit") and cmd.is_exit if cmd.is_exit and cmd.destination:
if is_exit and cmd.destination:
is_exit = " (exit to %s)" % cmd.destination is_exit = " (exit to %s)" % cmd.destination
else: else:
is_exit = "" is_exit = ""

View file

@ -20,7 +20,7 @@ from django.conf import settings
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from src.utils.idmapper.models import SharedMemoryModel 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.typeclasses.typeclass import TypeClass
from src.objects.manager import ObjectManager from src.objects.manager import ObjectManager
from src.players.models import PlayerDB from src.players.models import PlayerDB
@ -29,12 +29,16 @@ from src.commands.cmdsethandler import CmdSetHandler
from src.commands import cmdhandler from src.commands import cmdhandler
from src.scripts.scripthandler import ScriptHandler from src.scripts.scripthandler import ScriptHandler
from src.utils import logger 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() #PlayerDB = ContentType.objects.get(app_label="players", model="playerdb").model_class()
AT_SEARCH_RESULT = mod_import(*settings.SEARCH_AT_RESULT.rsplit('.', 1)) AT_SEARCH_RESULT = mod_import(*settings.SEARCH_AT_RESULT.rsplit('.', 1))
GA = object.__getattribute__
SA = object.__setattr__
DA = object.__delattr__
#------------------------------------------------------------ #------------------------------------------------------------
# #
# ObjAttribute # ObjAttribute
@ -208,20 +212,25 @@ class ObjectDB(TypedObject):
#@property #@property
def aliases_get(self): def aliases_get(self):
"Getter. Allows for value = self.aliases" "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 #@aliases.setter
def aliases_set(self, aliases): def aliases_set(self, aliases):
"Setter. Allows for self.aliases = value" "Setter. Allows for self.aliases = value"
if not is_iter(aliases): for alias in make_iter(aliases):
aliases = [aliases]
for alias in aliases:
new_alias = Alias(db_key=alias, db_obj=self) new_alias = Alias(db_key=alias, db_obj=self)
new_alias.save() new_alias.save()
SA(self, "_cached_aliases", aliases)
#@aliases.deleter #@aliases.deleter
def aliases_del(self): def aliases_del(self):
"Deleter. Allows for del self.aliases" "Deleter. Allows for del self.aliases"
for alias in Alias.objects.filter(db_obj=self): for alias in Alias.objects.filter(db_obj=self):
alias.delete() alias.delete()
DA(self, "_cached_aliases")
aliases = property(aliases_get, aliases_set, aliases_del) aliases = property(aliases_get, aliases_set, aliases_del)
# player property (wraps db_player) # player property (wraps db_player)
@ -365,30 +374,6 @@ class ObjectDB(TypedObject):
self.save() self.save()
destination = property(destination_get, destination_set, destination_del) 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 # cmdset_storage property
#@property #@property
def cmdset_storage_get(self): def cmdset_storage_get(self):
@ -399,8 +384,7 @@ class ObjectDB(TypedObject):
#@cmdset_storage.setter #@cmdset_storage.setter
def cmdset_storage_set(self, value): def cmdset_storage_set(self, value):
"Setter. Allows for self.name = value. Stores as a comma-separated string." "Setter. Allows for self.name = value. Stores as a comma-separated string."
if is_iter(value): value = ",".join(str(val).strip() for val in make_iter(value))
value = ",".join([str(val).strip() for val in value])
self.db_cmdset_storage = value self.db_cmdset_storage = value
self.save() self.save()
#@cmdset_storage.deleter #@cmdset_storage.deleter
@ -605,8 +589,7 @@ class ObjectDB(TypedObject):
""" """
contents = self.contents contents = self.contents
if exclude: if exclude:
if not is_iter(exclude): excluce = make_iter(exclude)
exclude = [exclude]
contents = [obj for obj in contents contents = [obj for obj in contents
if (obj not in exclude and obj not in exclude)] if (obj not in exclude and obj not in exclude)]
for obj in contents: for obj in contents: