From 9660dd6656657573c7d4800ced64be1f54097c06 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 26 Feb 2012 12:43:16 +0100 Subject: [PATCH] Added caching to some more object properties. --- contrib/tutorial_world/build.ev | 2 +- src/objects/models.py | 30 ++++++++++++++---------------- src/typeclasses/models.py | 7 +++++-- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/contrib/tutorial_world/build.ev b/contrib/tutorial_world/build.ev index e5e97a1d6d..feb7c728f8 100644 --- a/contrib/tutorial_world/build.ev +++ b/contrib/tutorial_world/build.ev @@ -346,7 +346,7 @@ start # @lock north = view:attr(last_climbed) ; traverse:attr(last_climbed) # -@desc north +@desc north = This is a hardly visible footpath leading off through the rain-beaten grass. It seems to circle the trees northward. You would never had noticed it had you not seen it from above. diff --git a/src/objects/models.py b/src/objects/models.py index 6005f6ce06..fb12372081 100644 --- a/src/objects/models.py +++ b/src/objects/models.py @@ -242,29 +242,26 @@ class ObjectDB(TypedObject): We have to be careful here since Player is also a TypedObject, so as to not create a loop. """ - try: - return object.__getattribute__(self, 'db_player') - except AttributeError: - return None + return get_cache(self, "player") #@player.setter def player_set(self, player): "Setter. Allows for self.player = value" if isinstance(player, TypeClass): player = player.dbobj - self.db_player = player - self.save() + set_cache(self, "player", player) #@player.deleter def player_del(self): "Deleter. Allows for del self.player" self.db_player = None self.save() + del_cache(self, "player") player = property(player_get, player_set, player_del) # location property (wraps db_location) #@property def location_get(self): "Getter. Allows for value = self.location." - loc = self.db_location + loc = get_cache(self, "location") if loc: return loc.typeclass return None @@ -284,8 +281,7 @@ class ObjectDB(TypedObject): loc = location.dbobj else: loc = location.dbobj - self.db_location = loc - self.save() + set_cache(self, "location", loc) except Exception: string = "Cannot set location: " string += "%s is not a valid location." @@ -297,13 +293,14 @@ class ObjectDB(TypedObject): "Deleter. Allows for del self.location" self.db_location = None self.save() + del_cache() location = property(location_get, location_set, location_del) # home property (wraps db_home) #@property def home_get(self): "Getter. Allows for value = self.home" - home = self.db_home + home = get_cache(self, "home") if home: return home.typeclass return None @@ -321,26 +318,26 @@ class ObjectDB(TypedObject): hom = home.dbobj else: hom = home.dbobj - self.db_home = hom + set_cache(self, "home", hom) except Exception: string = "Cannot set home: " string += "%s is not a valid home." self.msg(string % home) logger.log_trace(string) #raise - self.save() #@home.deleter def home_del(self): "Deleter. Allows for del self.home." self.db_home = None self.save() + del_cache(self, "home") home = property(home_get, home_set, home_del) # destination property (wraps db_destination) #@property def destination_get(self): "Getter. Allows for value = self.destination." - dest = self.db_destination + dest = get_cache(self, "destination") if dest: return dest.typeclass return None @@ -360,8 +357,7 @@ class ObjectDB(TypedObject): dest = destination.dbobj else: dest = destination.dbobj - self.db_destination = dest - self.save() + set_cache(self, "destination", dest) except Exception: string = "Cannot set destination: " string += "%s is not a valid destination." @@ -373,9 +369,11 @@ class ObjectDB(TypedObject): "Deleter. Allows for del self.destination" self.db_destination = None self.save() + del_cache(self, "destination") destination = property(destination_get, destination_set, destination_del) - # cmdset_storage property + # cmdset_storage property. + # This seems very sensitive to caching, so leaving it be for now. /Griatch #@property def cmdset_storage_get(self): "Getter. Allows for value = self.name. Returns a list of cmdset_storage." diff --git a/src/typeclasses/models.py b/src/typeclasses/models.py index 95d1fae9b2..4c02a0173f 100644 --- a/src/typeclasses/models.py +++ b/src/typeclasses/models.py @@ -58,7 +58,7 @@ def get_cache(obj, name): return GA(obj, "_cached_db_%s" % name) except AttributeError: val = GA(obj, "db_%s" % name) - SA(obj, "_cached_db_%s" % name, val) + if val: SA(obj, "_cached_db_%s" % name, val) return val def set_cache(obj, name, val): "On-model Cache setter" @@ -68,7 +68,10 @@ def set_cache(obj, name, val): def del_cache(obj, name): "On-model cache deleter" - DA(obj, "_cached_db_%s" % name) + try: + DA(obj, "_cached_db_%s" % name) + except AttributeError: + pass #------------------------------------------------------------ #