Fix multimatch aliasing. Resolve #2960.
This commit is contained in:
parent
1dabcda28b
commit
d1fc7b3cfd
1 changed files with 14 additions and 11 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue