From 59513e5c00555af29a98779654842fa8060785f0 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 13 Apr 2014 10:04:35 +0200 Subject: [PATCH] Fixed player.search() to also move here/me/self wrappers to typeclass. --- src/objects/models.py | 2 +- src/objects/objects.py | 2 +- src/players/models.py | 37 +++++++++++++++++-------------------- src/players/player.py | 23 +++++++++++++++++------ 4 files changed, 36 insertions(+), 28 deletions(-) diff --git a/src/objects/models.py b/src/objects/models.py index 4ef9393fa3..1fc9aab8b9 100644 --- a/src/objects/models.py +++ b/src/objects/models.py @@ -427,7 +427,7 @@ class ObjectDB(TypedObject): results = PlayerDB.objects.player_search(searchdata) if quiet: return results - return _AT_SEARCH_RESULT(self, searchdata, results, True) + return _AT_SEARCH_RESULT(self, searchdata, results, global_search=True) # # Execution/action methods diff --git a/src/objects/objects.py b/src/objects/objects.py index b9820ad9d6..fb614756d6 100644 --- a/src/objects/objects.py +++ b/src/objects/objects.py @@ -297,7 +297,7 @@ class Object(TypeClass): # searchdata is a string; wrap some common self-references if searchdata.lower() in ("me", "self",): return self.player - self.dbobj.search_player(searchdata, quiet=quiet) + return self.dbobj.search_player(searchdata, quiet=quiet) def execute_cmd(self, raw_string, sessid=None): """ diff --git a/src/players/models.py b/src/players/models.py index f62fc8a233..8ef09c7f1a 100644 --- a/src/players/models.py +++ b/src/players/models.py @@ -35,8 +35,8 @@ from django.utils.translation import ugettext as _ __all__ = ("PlayerDB",) -_ME = _("me") -_SELF = _("self") +#_ME = _("me") +#_SELF = _("self") _SESSIONS = None _AT_SEARCH_RESULT = utils.variable_from_module(*settings.SEARCH_AT_RESULT.rsplit('.', 1)) @@ -402,6 +402,7 @@ class PlayerDB(TypedObject, AbstractUser): return puppets and puppets[0] or None return puppets character = property(__get_single_puppet) + puppet = property(__get_single_puppet) # utility methods @@ -442,34 +443,30 @@ class PlayerDB(TypedObject, AbstractUser): return cmdhandler.cmdhandler(self.typeclass, raw_string, callertype="player", sessid=sessid) - def search(self, ostring, return_puppet=False, - return_character=False, **kwargs): + def search(self, searchdata, return_puppet=False, **kwargs): """ This is similar to the ObjectDB search method but will search for Players only. Errors will be echoed, and None returned if no Player is found. - - return_character - will try to return the character the player controls + searchdata - search criterion, the Player's key or dbref to search for + return_puppet - will try to return the object the player controls instead of the Player object itself. If no - Character exists (since Player is OOC), None will + puppeted object exists (since Player is OOC), None will be returned. Extra keywords are ignored, but are allowed in call in order to make - API more consistent with objects.models. - TypedObject.search. + API more consistent with objects.models.TypedObject.search. """ - if return_character: + #TODO deprecation + if "return_character" in kwargs: logger.log_depmsg("Player.search's 'return_character' keyword is deprecated. Use the return_puppet keyword instead.") - #return_puppet = return_character - # handle me, self - if ostring in (_ME, _SELF, '*' + _ME, '*' + _SELF): - return self + return_puppet = kwargs.get("return_character") - matches = _GA(self, "__class__").objects.player_search(ostring) - matches = _AT_SEARCH_RESULT(self, ostring, matches, global_search=True) - if matches and return_character: + matches = _GA(self, "__class__").objects.player_search(searchdata) + matches = _AT_SEARCH_RESULT(self, searchdata, matches, global_search=True) + if matches and return_puppet: try: - return _GA(matches, "character") - except: - pass + return _GA(matches, "puppet") + except AttributeError: + return None return matches diff --git a/src/players/player.py b/src/players/player.py index 88efdd201c..8c15b74486 100644 --- a/src/players/player.py +++ b/src/players/player.py @@ -157,14 +157,25 @@ class Player(TypeClass): """ return self.dbobj.execute_cmd(raw_string, sessid=sessid) - def search(self, ostring, return_character=False, **kwargs): + def search(self, searchdata, return_puppet=False, **kwargs): """ - This method mimicks object.search if self.character is set. Otherwise only - other Players can be searched with this method. - extra keywords are accepted but ignored to make API more consistent with - TypedObject.search. + This is similar to the Object search method but will search for + Players only. Errors will be echoed, and None returned if no Player + is found. + searchdata - search criterion, the Player's key or dbref to search for + return_puppet - will try to return the object the player controls + instead of the Player object itself. If no + puppeted object exists (since Player is OOC), None will + be returned. + Extra keywords are ignored, but are allowed in call in order to make + API more consistent with objects.models.TypedObject.search. """ - return self.dbobj.search(ostring, return_character=return_character) + # handle me, self and *me, *self + if isinstance(searchdata, basestring): + # handle wrapping of common terms + if searchdata.lower() in ("me", "*me", "self", "*self",): + return self + return self.dbobj.search(searchdata, return_puppet=return_puppet, **kwargs) def is_typeclass(self, typeclass, exact=False): """