Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 

78 righe
2.3 KiB

  1. from setuptools.command.setopt import config_file, edit_config, option_base
  2. from distutils.errors import DistutilsOptionError
  3. def shquote(arg):
  4. """Quote an argument for later parsing by shlex.split()"""
  5. for c in '"', "'", "\\", "#":
  6. if c in arg:
  7. return repr(arg)
  8. if arg.split() != [arg]:
  9. return repr(arg)
  10. return arg
  11. class alias(option_base):
  12. """Define a shortcut that invokes one or more commands"""
  13. description = "define a shortcut to invoke one or more commands"
  14. command_consumes_arguments = True
  15. user_options = [
  16. ('remove', 'r', 'remove (unset) the alias'),
  17. ] + option_base.user_options
  18. boolean_options = option_base.boolean_options + ['remove']
  19. def initialize_options(self):
  20. option_base.initialize_options(self)
  21. self.args = None
  22. self.remove = None
  23. def finalize_options(self) -> None:
  24. option_base.finalize_options(self)
  25. if self.remove and len(self.args) != 1:
  26. raise DistutilsOptionError(
  27. "Must specify exactly one argument (the alias name) when using --remove"
  28. )
  29. def run(self) -> None:
  30. aliases = self.distribution.get_option_dict('aliases')
  31. if not self.args:
  32. print("Command Aliases")
  33. print("---------------")
  34. for alias in aliases:
  35. print("setup.py alias", format_alias(alias, aliases))
  36. return
  37. elif len(self.args) == 1:
  38. (alias,) = self.args
  39. if self.remove:
  40. command = None
  41. elif alias in aliases:
  42. print("setup.py alias", format_alias(alias, aliases))
  43. return
  44. else:
  45. print(f"No alias definition found for {alias!r}")
  46. return
  47. else:
  48. alias = self.args[0]
  49. command = ' '.join(map(shquote, self.args[1:]))
  50. edit_config(self.filename, {'aliases': {alias: command}}, self.dry_run)
  51. def format_alias(name, aliases):
  52. source, command = aliases[name]
  53. if source == config_file('global'):
  54. source = '--global-config '
  55. elif source == config_file('user'):
  56. source = '--user-config '
  57. elif source == config_file('local'):
  58. source = ''
  59. else:
  60. source = f'--filename={source!r}'
  61. return source + name + ' ' + command