179def argument(*args, **kwargs):
180 """Decorator to add an argument to a command.
181 Use the `mutual=True` keyword to specify that the argument should belong to a mutual exclusion group.
182 """
183 is_mutual = kwargs.pop('mutual', False)
184
185 def deco(fct):
186 if isinstance(fct, Command):
187 cmd = fct
188 if is_mutual:
189 if not hasattr(cmd, '_acmdlib_mutual_group'):
190 cmd._acmdlib_mutual_group = cmd.add_mutually_exclusive_group()
191 cmd._acmdlib_mutual_group.add_argument(*args, **kwargs)
192 else:
193 cmd.add_argument(*args, **kwargs)
194 else:
195 store_as = '_acmdlib_arguments_mutual' if is_mutual else '_acmdlib_arguments'
196 if not hasattr(fct, store_as):
197 setattr(fct, store_as, [])
198 getattr(fct, store_as).append((args, kwargs))
199
200 return fct
201 return deco
202