summaryrefslogtreecommitdiff
path: root/setuptools/_distutils/cmd.py
diff options
context:
space:
mode:
Diffstat (limited to 'setuptools/_distutils/cmd.py')
-rw-r--r--setuptools/_distutils/cmd.py135
1 files changed, 83 insertions, 52 deletions
diff --git a/setuptools/_distutils/cmd.py b/setuptools/_distutils/cmd.py
index dba3191e..4a9bcc2a 100644
--- a/setuptools/_distutils/cmd.py
+++ b/setuptools/_distutils/cmd.py
@@ -9,6 +9,7 @@ from distutils.errors import DistutilsOptionError
from distutils import util, dir_util, file_util, archive_util, dep_util
from distutils import log
+
class Command:
"""Abstract base class for defining command classes, the "worker bees"
of the Distutils. A useful analogy for command classes is to think of
@@ -41,7 +42,6 @@ class Command:
# defined. The canonical example is the "install" command.
sub_commands = []
-
# -- Creation/initialization methods -------------------------------
def __init__(self, dist):
@@ -130,8 +130,9 @@ class Command:
This method must be implemented by all command classes.
"""
- raise RuntimeError("abstract method -- subclass %s must override"
- % self.__class__)
+ raise RuntimeError(
+ "abstract method -- subclass %s must override" % self.__class__
+ )
def finalize_options(self):
"""Set final values for all the options that this command supports.
@@ -144,12 +145,13 @@ class Command:
This method must be implemented by all command classes.
"""
- raise RuntimeError("abstract method -- subclass %s must override"
- % self.__class__)
-
+ raise RuntimeError(
+ "abstract method -- subclass %s must override" % self.__class__
+ )
def dump_options(self, header=None, indent=""):
from distutils.fancy_getopt import longopt_xlate
+
if header is None:
header = "command options for '%s':" % self.get_command_name()
self.announce(indent + header, level=log.INFO)
@@ -159,8 +161,7 @@ class Command:
if option[-1] == "=":
option = option[:-1]
value = getattr(self, option)
- self.announce(indent + "%s = %s" % (option, value),
- level=log.INFO)
+ self.announce(indent + "%s = %s" % (option, value), level=log.INFO)
def run(self):
"""A command's raison d'etre: carry out the action it exists to
@@ -172,8 +173,9 @@ class Command:
This method must be implemented by all command classes.
"""
- raise RuntimeError("abstract method -- subclass %s must override"
- % self.__class__)
+ raise RuntimeError(
+ "abstract method -- subclass %s must override" % self.__class__
+ )
def announce(self, msg, level=1):
"""If the current verbosity level is of greater than or equal to
@@ -186,11 +188,11 @@ class Command:
DISTUTILS_DEBUG environment variable) flag is true.
"""
from distutils.debug import DEBUG
+
if DEBUG:
print(msg)
sys.stdout.flush()
-
# -- Option validation methods -------------------------------------
# (these are very handy in writing the 'finalize_options()' method)
#
@@ -210,8 +212,9 @@ class Command:
setattr(self, option, default)
return default
elif not isinstance(val, str):
- raise DistutilsOptionError("'%s' must be a %s (got `%s`)"
- % (option, what, val))
+ raise DistutilsOptionError(
+ "'%s' must be a %s (got `%s`)" % (option, what, val)
+ )
return val
def ensure_string(self, option, default=None):
@@ -238,27 +241,29 @@ class Command:
ok = False
if not ok:
raise DistutilsOptionError(
- "'%s' must be a list of strings (got %r)"
- % (option, val))
+ "'%s' must be a list of strings (got %r)" % (option, val)
+ )
- def _ensure_tested_string(self, option, tester, what, error_fmt,
- default=None):
+ def _ensure_tested_string(self, option, tester, what, error_fmt, default=None):
val = self._ensure_stringlike(option, what, default)
if val is not None and not tester(val):
- raise DistutilsOptionError(("error in '%s' option: " + error_fmt)
- % (option, val))
+ raise DistutilsOptionError(
+ ("error in '%s' option: " + error_fmt) % (option, val)
+ )
def ensure_filename(self, option):
"""Ensure that 'option' is the name of an existing file."""
- self._ensure_tested_string(option, os.path.isfile,
- "filename",
- "'%s' does not exist or is not a file")
+ self._ensure_tested_string(
+ option, os.path.isfile, "filename", "'%s' does not exist or is not a file"
+ )
def ensure_dirname(self, option):
- self._ensure_tested_string(option, os.path.isdir,
- "directory name",
- "'%s' does not exist or is not a directory")
-
+ self._ensure_tested_string(
+ option,
+ os.path.isdir,
+ "directory name",
+ "'%s' does not exist or is not a directory",
+ )
# -- Convenience methods for commands ------------------------------
@@ -302,8 +307,7 @@ class Command:
# XXX rename to 'get_reinitialized_command()'? (should do the
# same in dist.py, if so)
def reinitialize_command(self, command, reinit_subcommands=0):
- return self.distribution.reinitialize_command(command,
- reinit_subcommands)
+ return self.distribution.reinitialize_command(command, reinit_subcommands)
def run_command(self, command):
"""Run some other command: uses the 'run_command()' method of
@@ -325,7 +329,6 @@ class Command:
commands.append(cmd_name)
return commands
-
# -- External world manipulation -----------------------------------
def warn(self, msg):
@@ -337,41 +340,70 @@ class Command:
def mkpath(self, name, mode=0o777):
dir_util.mkpath(name, mode, dry_run=self.dry_run)
- def copy_file(self, infile, outfile, preserve_mode=1, preserve_times=1,
- link=None, level=1):
+ def copy_file(
+ self, infile, outfile, preserve_mode=1, preserve_times=1, link=None, level=1
+ ):
"""Copy a file respecting verbose, dry-run and force flags. (The
former two default to whatever is in the Distribution object, and
the latter defaults to false for commands that don't define it.)"""
- return file_util.copy_file(infile, outfile, preserve_mode,
- preserve_times, not self.force, link,
- dry_run=self.dry_run)
-
- def copy_tree(self, infile, outfile, preserve_mode=1, preserve_times=1,
- preserve_symlinks=0, level=1):
+ return file_util.copy_file(
+ infile,
+ outfile,
+ preserve_mode,
+ preserve_times,
+ not self.force,
+ link,
+ dry_run=self.dry_run,
+ )
+
+ def copy_tree(
+ self,
+ infile,
+ outfile,
+ preserve_mode=1,
+ preserve_times=1,
+ preserve_symlinks=0,
+ level=1,
+ ):
"""Copy an entire directory tree respecting verbose, dry-run,
and force flags.
"""
- return dir_util.copy_tree(infile, outfile, preserve_mode,
- preserve_times, preserve_symlinks,
- not self.force, dry_run=self.dry_run)
-
- def move_file (self, src, dst, level=1):
+ return dir_util.copy_tree(
+ infile,
+ outfile,
+ preserve_mode,
+ preserve_times,
+ preserve_symlinks,
+ not self.force,
+ dry_run=self.dry_run,
+ )
+
+ def move_file(self, src, dst, level=1):
"""Move a file respecting dry-run flag."""
return file_util.move_file(src, dst, dry_run=self.dry_run)
def spawn(self, cmd, search_path=1, level=1):
"""Spawn an external command respecting dry-run flag."""
from distutils.spawn import spawn
- spawn(cmd, search_path, dry_run=self.dry_run)
- def make_archive(self, base_name, format, root_dir=None, base_dir=None,
- owner=None, group=None):
- return archive_util.make_archive(base_name, format, root_dir, base_dir,
- dry_run=self.dry_run,
- owner=owner, group=group)
+ spawn(cmd, search_path, dry_run=self.dry_run)
- def make_file(self, infiles, outfile, func, args,
- exec_msg=None, skip_msg=None, level=1):
+ def make_archive(
+ self, base_name, format, root_dir=None, base_dir=None, owner=None, group=None
+ ):
+ return archive_util.make_archive(
+ base_name,
+ format,
+ root_dir,
+ base_dir,
+ dry_run=self.dry_run,
+ owner=owner,
+ group=group,
+ )
+
+ def make_file(
+ self, infiles, outfile, func, args, exec_msg=None, skip_msg=None, level=1
+ ):
"""Special case of 'execute()' for operations that process one or
more input files and generate one output file. Works just like
'execute()', except the operation is skipped and a different
@@ -387,8 +419,7 @@ class Command:
if isinstance(infiles, str):
infiles = (infiles,)
elif not isinstance(infiles, (list, tuple)):
- raise TypeError(
- "'infiles' must be a string, or a list or tuple of strings")
+ raise TypeError("'infiles' must be a string, or a list or tuple of strings")
if exec_msg is None:
exec_msg = "generating %s from %s" % (outfile, ', '.join(infiles))