1818from typing import TypeAlias
1919
2020import stevedore
21+ from stevedore import extension
2122
2223from cliff import command
2324
@@ -64,15 +65,24 @@ class CommandManager:
6465 plugins to be loaded. For example, ``'cliff.formatter.list'``.
6566 :param convert_underscores: Whether cliff should convert underscores to
6667 spaces in entry_point commands.
68+ :param conflict_resolver: The conflict resolver to use in the event that
69+ there are multiple plugins sharing the same namespace and name.
6770 """
6871
6972 def __init__ (
70- self , namespace : str , convert_underscores : bool = True
73+ self ,
74+ namespace : str ,
75+ convert_underscores : bool = True ,
76+ * ,
77+ conflict_resolver : extension .ConflictResolverT [command .Command ] = (
78+ extension .ignore_conflicts
79+ ),
7180 ) -> None :
7281 self .commands : dict [str , EntryPointT ] = {}
7382 self ._legacy : dict [str , str ] = {}
7483 self .namespace = namespace
7584 self .convert_underscores = convert_underscores
85+ self .conflict_resolver = conflict_resolver
7686 self .group_list : list [str ] = []
7787 self ._load_commands ()
7888
@@ -82,10 +92,16 @@ def _load_commands(self) -> None:
8292 self .load_commands (self .namespace )
8393
8494 def load_commands (self , namespace : str ) -> None :
85- """Load all the commands from an entrypoint"""
95+ """Load all the commands from an entrypoint
96+
97+ :param namespace: The namespace to load commands from.
98+ :returns: None
99+ """
86100 self .group_list .append (namespace )
87101 em : stevedore .ExtensionManager [command .Command ]
88- em = stevedore .ExtensionManager (namespace )
102+ em = stevedore .ExtensionManager (
103+ namespace , conflict_resolver = self .conflict_resolver
104+ )
89105 for ep in em :
90106 LOG .debug ('found command %r' , ep .name )
91107 cmd_name = (
@@ -171,7 +187,9 @@ def get_command_names(self, group: str | None = None) -> list[str]:
171187 group_list : list [str ] = []
172188 if group is not None :
173189 em : stevedore .ExtensionManager [command .Command ]
174- em = stevedore .ExtensionManager (group )
190+ em = stevedore .ExtensionManager (
191+ group , conflict_resolver = self .conflict_resolver
192+ )
175193 for ep in em :
176194 cmd_name = (
177195 ep .name .replace ('_' , ' ' )
0 commit comments