Fix multimatch aliasing. Resolve #2960.

This commit is contained in:
Griatch 2022-10-27 16:54:56 +02:00
parent 1dabcda28b
commit d1fc7b3cfd

View file

@ -24,8 +24,8 @@ from ast import literal_eval
from collections import OrderedDict, defaultdict from collections import OrderedDict, defaultdict
from inspect import getmembers, getmodule, getmro, ismodule, trace from inspect import getmembers, getmodule, getmro, ismodule, trace
from os.path import join as osjoin from os.path import join as osjoin
from unicodedata import east_asian_width
from string import punctuation from string import punctuation
from unicodedata import east_asian_width
from django.apps import apps from django.apps import apps
from django.conf import settings from django.conf import settings
@ -404,7 +404,7 @@ def iter_to_str(iterable, sep=",", endsep=", and", addquote=False):
if not iterable: if not iterable:
return "" return ""
len_iter = len(iterable) len_iter = len(iterable)
if addquote: if addquote:
iterable = tuple(f'"{val}"' for val in iterable) iterable = tuple(f'"{val}"' for val in iterable)
else: else:
@ -420,7 +420,7 @@ def iter_to_str(iterable, sep=",", endsep=", and", addquote=False):
# also add a leading space if separator is a word # also add a leading space if separator is a word
if sep not in punctuation: if sep not in punctuation:
sep = " "+sep sep = " " + sep
if len_iter == 1: if len_iter == 1:
return str(iterable[0]) return str(iterable[0])
@ -2287,14 +2287,17 @@ def at_search_result(matches, caller, query="", quiet=False, **kwargs):
) )
for num, result in enumerate(matches): for num, result in enumerate(matches):
# we need to consider Commands, where .aliases is a list # we need to consider that result could be a Command, where .aliases
aliases = result.aliases.all() if hasattr(result.aliases, "all") else result.aliases # is a list of strings
# remove any pluralization aliases if hasattr(result.aliases, "all"):
aliases = [ # result is a typeclassed entity where `.aliases` is an AliasHandler.
alias aliases = result.aliases.all(return_objs=True)
for alias in aliases # remove pluralization aliases
if hasattr(alias, "category") and alias.category not in ("plural_key",) aliases = [alias for alias in aliases if alias.category not in ("plural_key",)]
] else:
# result is likely a Command, where `.aliases` is a list of strings.
aliases = result.aliases
error += _MULTIMATCH_TEMPLATE.format( error += _MULTIMATCH_TEMPLATE.format(
number=num + 1, number=num + 1,
name=result.get_display_name(caller) name=result.get_display_name(caller)