mirror of
https://github.com/python/cpython.git
synced 2025-07-18 16:55:20 +00:00

This fixes a regression from distutils, where “setup.py --help-commands” prints out commands grouped by topic (i.e. building vs. installing), which is more useful than using sorted.
53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
"""Subpackage containing all standard commands."""
|
|
import os
|
|
from packaging.errors import PackagingModuleError
|
|
from packaging.util import resolve_name
|
|
|
|
__all__ = ['get_command_names', 'set_command', 'get_command_class',
|
|
'STANDARD_COMMANDS']
|
|
|
|
|
|
STANDARD_COMMANDS = [
|
|
# packaging
|
|
'check', 'test',
|
|
# building
|
|
'build', 'build_py', 'build_ext', 'build_clib', 'build_scripts', 'clean',
|
|
# installing
|
|
'install_dist', 'install_lib', 'install_headers', 'install_scripts',
|
|
'install_data', 'install_distinfo',
|
|
# distributing
|
|
'sdist', 'bdist', 'bdist_dumb', 'bdist_wininst',
|
|
'register', 'upload', 'upload_docs',
|
|
]
|
|
|
|
if os.name == 'nt':
|
|
STANDARD_COMMANDS.insert(STANDARD_COMMANDS.index('bdist_wininst'),
|
|
'bdist_msi')
|
|
|
|
# XXX maybe we need more than one registry, so that --list-comands can display
|
|
# standard, custom and overriden standard commands differently
|
|
_COMMANDS = dict((name, 'packaging.command.%s.%s' % (name, name))
|
|
for name in STANDARD_COMMANDS)
|
|
|
|
|
|
def get_command_names():
|
|
"""Return registered commands"""
|
|
return sorted(_COMMANDS)
|
|
|
|
|
|
def set_command(location):
|
|
cls = resolve_name(location)
|
|
# XXX we want to do the duck-type checking here
|
|
_COMMANDS[cls.get_command_name()] = cls
|
|
|
|
|
|
def get_command_class(name):
|
|
"""Return the registered command"""
|
|
try:
|
|
cls = _COMMANDS[name]
|
|
except KeyError:
|
|
raise PackagingModuleError("Invalid command %s" % name)
|
|
if isinstance(cls, str):
|
|
cls = resolve_name(cls)
|
|
_COMMANDS[name] = cls
|
|
return cls
|