Fixed a traceback in SEARCH_AT_RESULT when getting multi-matches for commands.

This commit is contained in:
Griatch 2016-06-15 21:51:43 +02:00
parent 6a160b4204
commit ddd9387777
2 changed files with 9 additions and 8 deletions

View file

@ -534,7 +534,6 @@ def cmdhandler(called_by, raw_string, _testing=False, callertype="session", sess
syscmd.matches = matches syscmd.matches = matches
else: else:
# fall back to default error handling # fall back to default error handling
print "matches:", matches
sysarg = yield _SEARCH_AT_RESULT([match[2] for match in matches], caller, query=match[0]) sysarg = yield _SEARCH_AT_RESULT([match[2] for match in matches], caller, query=match[0])
raise ExecSystemCommand(syscmd, sysarg) raise ExecSystemCommand(syscmd, sysarg)

View file

@ -1523,13 +1523,15 @@ def m_len(target):
def at_search_result(matches, caller, query="", quiet=False, **kwargs): def at_search_result(matches, caller, query="", quiet=False, **kwargs):
""" """
This is a generic hook for handling all processing of a search This is a generic hook for handling all processing of a search
result, including error reporting. result, including error reporting. This is also called by the cmdhandler
to manage errors in command lookup.
Args: Args:
matches (list): This is a list of 0, 1 or more typeclass instances, matches (list): This is a list of 0, 1 or more typeclass
the matched result of the search. If 0, a nomatch error should instances or Command instances, the matched result of the
be echoed, and if >1, multimatch errors should be given. Only search. If 0, a nomatch error should be echoed, and if >1,
if a single match should the result pass through. multimatch errors should be given. Only if a single match
should the result pass through.
caller (Object): The object performing the search and/or which should caller (Object): The object performing the search and/or which should
receive error messages. receive error messages.
query (str, optional): The search query used to produce `matches`. query (str, optional): The search query used to produce `matches`.
@ -1555,8 +1557,8 @@ def at_search_result(matches, caller, query="", quiet=False, **kwargs):
error = kwargs.get("multimatch_string") or \ error = kwargs.get("multimatch_string") or \
_("More than one match for '%s' (please narrow target):" % query) _("More than one match for '%s' (please narrow target):" % query)
for num, result in enumerate(matches): for num, result in enumerate(matches):
print ("matches:", result, result.aliases) # we need to consider Commands, where .aliases is a list
aliases = result.aliases.all() aliases = result.aliases.all() if hasattr(result.aliases, "all") else result.aliases
error += "\n %i%s%s%s%s" % ( error += "\n %i%s%s%s%s" % (
num + 1, _MULTIMATCH_SEPARATOR, num + 1, _MULTIMATCH_SEPARATOR,
result.get_display_name(caller) if hasattr(result, "get_display_name") else query, result.get_display_name(caller) if hasattr(result, "get_display_name") else query,