diff --git a/src/commands/cmdparser.py b/src/commands/cmdparser.py index a71157954c..eacb8f2761 100644 --- a/src/commands/cmdparser.py +++ b/src/commands/cmdparser.py @@ -229,9 +229,8 @@ def at_multimatch_cmd(caller, matches): if is_channel: is_channel = " (channel)" else: - is_channel = "" - is_exit = hasattr(cmd, "is_exit") and cmd.is_exit - if is_exit and cmd.destination: + is_channel = "" + if cmd.is_exit and cmd.destination: is_exit = " (exit to %s)" % cmd.destination else: is_exit = "" diff --git a/src/objects/models.py b/src/objects/models.py index 650d9263d4..9bbb7ed57e 100644 --- a/src/objects/models.py +++ b/src/objects/models.py @@ -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: