mirror of
https://github.com/evennia/evennia.git
synced 2026-03-22 15:56:30 +01:00
Added caching for aliases.
This commit is contained in:
parent
1fa5791e19
commit
fb0d77c794
2 changed files with 19 additions and 37 deletions
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue