From 81ce6a18271c7e8da3cbe6d0a500e598f7695577 Mon Sep 17 00:00:00 2001 From: Griatch Date: Mon, 9 Dec 2013 09:13:51 +0100 Subject: [PATCH] Fixed silly bug in previous commit. --- .../gamesrc/scripts/examples/bodyfunctions.py | 2 +- src/commands/default/building.py | 14 ++++++++------ src/server/portal/portal.py | 4 ++-- src/typeclasses/models.py | 19 +++++++++++++++---- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/game/gamesrc/scripts/examples/bodyfunctions.py b/game/gamesrc/scripts/examples/bodyfunctions.py index 56534d7beb..6b3ec67ec2 100644 --- a/game/gamesrc/scripts/examples/bodyfunctions.py +++ b/game/gamesrc/scripts/examples/bodyfunctions.py @@ -25,7 +25,7 @@ class BodyFunctions(Script): self.interval = 20 # seconds #self.repeats = 5 # repeat only a certain number of times self.start_delay = True # wait self.interval until first call - #self.persistent = True + self.persistent = True def at_repeat(self): """ diff --git a/src/commands/default/building.py b/src/commands/default/building.py index 18652d6316..3e7c9eced9 100644 --- a/src/commands/default/building.py +++ b/src/commands/default/building.py @@ -2134,10 +2134,12 @@ class CmdTag(MuxCommand): # search by tag tag = self.args category = None + search_category = None if ":" in tag: tag, category = [part.strip() for part in tag.split(":", 1)] - category = "object_%s" % category - objs = search.search_tag(tag, category=category) + search_category = "object_%s" % category + print "tag search:", tag, search_category + objs = search.search_tag(tag, category=search_category) nobjs = len(objs) if nobjs > 0: string = "Found %i object%s with tag '%s'%s:\n %s" % (nobjs, @@ -2192,10 +2194,10 @@ class CmdTag(MuxCommand): obj = self.caller.search(self.args, global_search=True) if not obj: return - tags = obj.db_tags.all() - ntags = len(tags) - categories = [tag.db_category.split("_", 1)[1] for tag in tags] - categories = [" (category: %s)" % cater if cater else "" for cater in categories] + tagtuples = obj.tags.all(return_key_and_category=True) + ntags = len(tagtuples) + tags = [tup[0] for tup in tagtuples] + categories = [" (category: %s)" % tup[1] if tup[1] else "" for tup in tagtuples] if ntags: string = "Tag%s on %s: %s" % ("s" if ntags > 1 else "", obj, ", ".join("'%s'%s" % (tags[i], categories[i]) for i in range(ntags))) diff --git a/src/server/portal/portal.py b/src/server/portal/portal.py index 55d115ddab..d4d3333055 100644 --- a/src/server/portal/portal.py +++ b/src/server/portal/portal.py @@ -8,12 +8,12 @@ by game/evennia.py). """ +import sys +import os if os.name == 'nt': # For Windows batchfile we need an extra path insertion here. sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname( os.path.dirname(os.path.abspath(__file__)))))) -import sys -import os from src.server.webserver import EvenniaReverseProxyResource from twisted.application import internet, service from twisted.internet import protocol, reactor diff --git a/src/typeclasses/models.py b/src/typeclasses/models.py index 537640f74b..56ed41698c 100644 --- a/src/typeclasses/models.py +++ b/src/typeclasses/models.py @@ -493,7 +493,7 @@ class TagHandler(object): using the category """ self.obj = obj - self.prefix = "%s%s" % (category_prefix.strip().lower() + self.prefix = "%s%s" % (category_prefix.strip(" _").lower() if category_prefix else "", self._base_category) self._cache = None @@ -555,8 +555,14 @@ class TagHandler(object): _GA(self.obj, self._m2m_fieldname).remove(tag) self._recache() - def all(self, category=None): - "Get all tags in this handler" + def all(self, category=None, return_key_and_category=False): + """ + Get all tags in this handler. + If category is given, return only Tags with this category. If + return_keys_and_categories is set, return a list of tuples [(key, category), ...] + where the category is stripped of the category prefix (this is ignored + if category keyword is given). + """ if self._cache is None or not _TYPECLASS_AGGRESSIVE_CACHE: self._recache() if category: @@ -564,7 +570,12 @@ class TagHandler(object): if category is not None else "") return [to_str(p[0]) for p in _GA(self.obj, self._m2m_fieldname).filter( db_category=category).values_list("db_key") if p[0]] - return self._cache.keys() + elif return_key_and_category: + # return tuple (key, category) + return [(to_str(p.db_key), to_str(p.db_category).lstrip(self.prefix)) for p in self._cache.values()] + else: + return self._cache.keys() + #return [to_str(p[0]) for p in _GA(self.obj, self._m2m_fieldname).filter(db_category__startswith=self.prefix).values_list("db_key") if p[0]] def __str__(self):