mirror of https://github.com/pypa/pip
string_formatting
This commit is contained in:
parent
b6ecc3917e
commit
d31cf696e8
|
@ -56,7 +56,7 @@ class Command(CommandContextMixIn):
|
|||
super(Command, self).__init__()
|
||||
parser_kw = {
|
||||
'usage': self.usage,
|
||||
'prog': '%s %s' % (get_prog(), name),
|
||||
'prog': '{} {}'.format(get_prog(), name),
|
||||
'formatter': UpdatingDefaultsHelpFormatter(),
|
||||
'add_help_option': False,
|
||||
'name': name,
|
||||
|
@ -69,7 +69,7 @@ class Command(CommandContextMixIn):
|
|||
self.parser = ConfigOptionParser(**parser_kw)
|
||||
|
||||
# Commands should add options to this option group
|
||||
optgroup_name = '%s Options' % self.name.capitalize()
|
||||
optgroup_name = '{} Options'.format(self.name.capitalize())
|
||||
self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name)
|
||||
|
||||
# Add the general options
|
||||
|
|
|
@ -851,12 +851,12 @@ def _handle_merge_hash(option, opt_str, value, parser):
|
|||
try:
|
||||
algo, digest = value.split(':', 1)
|
||||
except ValueError:
|
||||
parser.error('Arguments to %s must be a hash name '
|
||||
'followed by a value, like --hash=sha256:abcde...' %
|
||||
opt_str)
|
||||
parser.error('Arguments to {} must be a hash name '
|
||||
'followed by a value, like --hash=sha256:'
|
||||
'abcde...'.format(opt_str))
|
||||
if algo not in STRONG_HASHES:
|
||||
parser.error('Allowed hash algorithms for %s are %s.' %
|
||||
(opt_str, ', '.join(STRONG_HASHES)))
|
||||
parser.error('Allowed hash algorithms for {} are {}.'.format(
|
||||
opt_str, ', '.join(STRONG_HASHES)))
|
||||
parser.values.hashes.setdefault(algo, []).append(digest)
|
||||
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ def main(args=None):
|
|||
try:
|
||||
cmd_name, cmd_args = parse_command(args)
|
||||
except PipError as exc:
|
||||
sys.stderr.write("ERROR: %s" % exc)
|
||||
sys.stderr.write("ERROR: {}".format(exc))
|
||||
sys.stderr.write(os.linesep)
|
||||
sys.exit(1)
|
||||
|
||||
|
|
|
@ -86,9 +86,9 @@ def parse_command(args):
|
|||
if cmd_name not in commands_dict:
|
||||
guess = get_similar_commands(cmd_name)
|
||||
|
||||
msg = ['unknown command "%s"' % cmd_name]
|
||||
msg = ['unknown command "{}"'.format(cmd_name)]
|
||||
if guess:
|
||||
msg.append('maybe you meant "%s"' % guess)
|
||||
msg.append('maybe you meant "{}"'.format(guess))
|
||||
|
||||
raise CommandError(' - '.join(msg))
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ class PrettyHelpFormatter(optparse.IndentedHelpFormatter):
|
|||
def format_option_strings(self, option):
|
||||
return self._format_option_strings(option, ' <%s>', ', ')
|
||||
|
||||
def _format_option_strings(self, option, mvarfmt=' <%s>', optsep=', '):
|
||||
def _format_option_strings(self, option, mvarfmt=' <{}>', optsep=', '):
|
||||
"""
|
||||
Return a comma-separated list of option strings and metavars.
|
||||
|
||||
|
@ -52,7 +52,7 @@ class PrettyHelpFormatter(optparse.IndentedHelpFormatter):
|
|||
|
||||
if option.takes_value():
|
||||
metavar = option.metavar or option.dest.lower()
|
||||
opts.append(mvarfmt % metavar.lower())
|
||||
opts.append(mvarfmt.format(metavar.lower()))
|
||||
|
||||
return ''.join(opts)
|
||||
|
||||
|
@ -66,7 +66,8 @@ class PrettyHelpFormatter(optparse.IndentedHelpFormatter):
|
|||
Ensure there is only one newline between usage and the first heading
|
||||
if there is no description.
|
||||
"""
|
||||
msg = '\nUsage: %s\n' % self.indent_lines(textwrap.dedent(usage), " ")
|
||||
msg = '\nUsage: {}\n'.format(
|
||||
self.indent_lines(textwrap.dedent(usage), " "))
|
||||
return msg
|
||||
|
||||
def format_description(self, description):
|
||||
|
@ -82,7 +83,7 @@ class PrettyHelpFormatter(optparse.IndentedHelpFormatter):
|
|||
description = description.rstrip()
|
||||
# dedent, then reindent
|
||||
description = self.indent_lines(textwrap.dedent(description), " ")
|
||||
description = '%s:\n%s\n' % (label, description)
|
||||
description = '{}:\n{}\n'.format(label, description)
|
||||
return description
|
||||
else:
|
||||
return ''
|
||||
|
@ -150,7 +151,7 @@ class ConfigOptionParser(CustomOptionParser):
|
|||
try:
|
||||
return option.check_value(key, val)
|
||||
except optparse.OptionValueError as exc:
|
||||
print("An error occurred during configuration: %s" % exc)
|
||||
print("An error occurred during configuration: {}".format(exc))
|
||||
sys.exit(3)
|
||||
|
||||
def _get_ordered_configuration_items(self):
|
||||
|
@ -249,7 +250,7 @@ class ConfigOptionParser(CustomOptionParser):
|
|||
|
||||
def error(self, msg):
|
||||
self.print_usage(sys.stderr)
|
||||
self.exit(UNKNOWN_ERROR, "%s\n" % msg)
|
||||
self.exit(UNKNOWN_ERROR, "{}\n".format(msg))
|
||||
|
||||
|
||||
def invalid_config_error_message(action, key, val):
|
||||
|
|
|
@ -92,5 +92,5 @@ class CompletionCommand(Command):
|
|||
print(BASE_COMPLETION % {'script': script, 'shell': options.shell})
|
||||
else:
|
||||
sys.stderr.write(
|
||||
'ERROR: You must pass %s\n' % ' or '.join(shell_options)
|
||||
'ERROR: You must pass {}\n' .format(' or '.join(shell_options))
|
||||
)
|
||||
|
|
|
@ -65,7 +65,7 @@ class FreezeCommand(Command):
|
|||
dest='freeze_all',
|
||||
action='store_true',
|
||||
help='Do not skip these packages in the output:'
|
||||
' %s' % ', '.join(DEV_PKGS))
|
||||
' {}'.format(', '.join(DEV_PKGS)))
|
||||
self.cmd_opts.add_option(
|
||||
'--exclude-editable',
|
||||
dest='exclude_editable',
|
||||
|
|
|
@ -34,8 +34,8 @@ class HashCommand(Command):
|
|||
choices=STRONG_HASHES,
|
||||
action='store',
|
||||
default=FAVORITE_HASH,
|
||||
help='The hash algorithm to use: one of %s' %
|
||||
', '.join(STRONG_HASHES))
|
||||
help='The hash algorithm to use: one of {}'.format(
|
||||
', '.join(STRONG_HASHES)))
|
||||
self.parser.insert_option_group(0, self.cmd_opts)
|
||||
|
||||
def run(self, options, args):
|
||||
|
|
|
@ -29,9 +29,9 @@ class HelpCommand(Command):
|
|||
if cmd_name not in commands_dict:
|
||||
guess = get_similar_commands(cmd_name)
|
||||
|
||||
msg = ['unknown command "%s"' % cmd_name]
|
||||
msg = ['unknown command "{}"'.format(cmd_name)]
|
||||
if guess:
|
||||
msg.append('maybe you meant "%s"' % guess)
|
||||
msg.append('maybe you meant "{}"'.format(guess))
|
||||
|
||||
raise CommandError(' - '.join(msg))
|
||||
|
||||
|
|
|
@ -255,7 +255,7 @@ class HashMismatch(HashError):
|
|||
self.gots = gots
|
||||
|
||||
def body(self):
|
||||
return ' %s:\n%s' % (self._requirement_name(),
|
||||
return ' {}:\n{}'.format(self._requirement_name(),
|
||||
self._hash_comparison())
|
||||
|
||||
def _hash_comparison(self):
|
||||
|
@ -277,10 +277,10 @@ class HashMismatch(HashError):
|
|||
lines = []
|
||||
for hash_name, expecteds in iteritems(self.allowed):
|
||||
prefix = hash_then_or(hash_name)
|
||||
lines.extend((' Expected %s %s' % (next(prefix), e))
|
||||
lines.extend((' Expected {} {}'.format(next(prefix), e))
|
||||
for e in expecteds)
|
||||
lines.append(' Got %s\n' %
|
||||
self.gots[hash_name].hexdigest())
|
||||
lines.append(' Got {}\n'.format(
|
||||
self.gots[hash_name].hexdigest()))
|
||||
return '\n'.join(lines)
|
||||
|
||||
|
||||
|
|
|
@ -354,7 +354,7 @@ def _get_html_page(link, session=None):
|
|||
reason += str(exc)
|
||||
_handle_get_page_fail(link, reason, meth=logger.info)
|
||||
except requests.ConnectionError as exc:
|
||||
_handle_get_page_fail(link, "connection error: %s" % exc)
|
||||
_handle_get_page_fail(link, "connection error: {}".format(exc))
|
||||
except requests.Timeout:
|
||||
_handle_get_page_fail(link, "timed out")
|
||||
else:
|
||||
|
|
|
@ -177,9 +177,10 @@ class LinkEvaluator(object):
|
|||
if not ext:
|
||||
return (False, 'not a file')
|
||||
if ext not in SUPPORTED_EXTENSIONS:
|
||||
return (False, 'unsupported archive format: %s' % ext)
|
||||
return (False, 'unsupported archive format: {}'.format(ext))
|
||||
if "binary" not in self._formats and ext == WHEEL_EXTENSION:
|
||||
reason = 'No binaries permitted for %s' % self.project_name
|
||||
reason = 'No binaries permitted for {}'.format(
|
||||
self.project_name)
|
||||
return (False, reason)
|
||||
if "macosx10" in link.path and ext == '.zip':
|
||||
return (False, 'macosx10 one')
|
||||
|
@ -189,7 +190,8 @@ class LinkEvaluator(object):
|
|||
except InvalidWheelFilename:
|
||||
return (False, 'invalid wheel filename')
|
||||
if canonicalize_name(wheel.name) != self._canonical_name:
|
||||
reason = 'wrong project name (not %s)' % self.project_name
|
||||
reason = 'wrong project name (not {})'.format(
|
||||
self.project_name)
|
||||
return (False, reason)
|
||||
|
||||
supported_tags = self._target_python.get_tags()
|
||||
|
@ -208,16 +210,16 @@ class LinkEvaluator(object):
|
|||
|
||||
# This should be up by the self.ok_binary check, but see issue 2700.
|
||||
if "source" not in self._formats and ext != WHEEL_EXTENSION:
|
||||
return (False, 'No sources permitted for %s' % self.project_name)
|
||||
reason = 'No sources permitted for {}'.format(self.project_name)
|
||||
return (False, reason)
|
||||
|
||||
if not version:
|
||||
version = _extract_version_from_fragment(
|
||||
egg_info, self._canonical_name,
|
||||
)
|
||||
if not version:
|
||||
return (
|
||||
False, 'Missing project version for %s' % self.project_name,
|
||||
)
|
||||
reason = 'Missing project version for {}'.format(self.project_name)
|
||||
return (False, reason)
|
||||
|
||||
match = self._py_version_re.search(version)
|
||||
if match:
|
||||
|
@ -524,8 +526,8 @@ class CandidateEvaluator(object):
|
|||
wheel = Wheel(link.filename)
|
||||
if not wheel.supported(valid_tags):
|
||||
raise UnsupportedWheel(
|
||||
"%s is not a supported wheel for this platform. It "
|
||||
"can't be sorted." % wheel.filename
|
||||
"{} is not a supported wheel for this platform. It "
|
||||
"can't be sorted.".format(wheel.filename)
|
||||
)
|
||||
if self._prefer_binary:
|
||||
binary_preference = 1
|
||||
|
@ -924,7 +926,8 @@ class PackageFinder(object):
|
|||
)
|
||||
|
||||
raise DistributionNotFound(
|
||||
'No matching distribution found for %s' % req
|
||||
'No matching distribution found for {}'.format(
|
||||
req)
|
||||
)
|
||||
|
||||
best_installed = False
|
||||
|
|
|
@ -66,12 +66,12 @@ class Link(KeyBasedCompareMixin):
|
|||
def __str__(self):
|
||||
# type: () -> str
|
||||
if self.requires_python:
|
||||
rp = ' (requires-python:%s)' % self.requires_python
|
||||
rp = ' (requires-python:{})'.format(self.requires_python)
|
||||
else:
|
||||
rp = ''
|
||||
if self.comes_from:
|
||||
return '%s (from %s)%s' % (redact_auth_from_url(self._url),
|
||||
self.comes_from, rp)
|
||||
return '{} (from {}){}'.format(
|
||||
redact_auth_from_url(self._url), self.comes_from, rp)
|
||||
else:
|
||||
return redact_auth_from_url(str(self._url))
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ class Wheel(object):
|
|||
wheel_info = self.wheel_file_re.match(filename)
|
||||
if not wheel_info:
|
||||
raise InvalidWheelFilename(
|
||||
"%s is not a valid wheel filename." % filename
|
||||
"{} is not a valid wheel filename.".format(filename)
|
||||
)
|
||||
self.filename = filename
|
||||
self.name = wheel_info.group('name').replace('_', '-')
|
||||
|
|
|
@ -215,7 +215,7 @@ class MultiDomainBasicAuth(AuthBase):
|
|||
|
||||
# Factored out to allow for easy patching in tests
|
||||
def _prompt_for_password(self, netloc):
|
||||
username = ask_input("User for %s: " % netloc)
|
||||
username = ask_input("User for {}: ".format(netloc))
|
||||
if not username:
|
||||
return None, None
|
||||
auth = get_keyring_auth(netloc, username)
|
||||
|
|
|
@ -89,7 +89,7 @@ def build_wheel_legacy(
|
|||
destination_dir=tempd,
|
||||
)
|
||||
|
||||
spin_message = 'Building wheel for %s (setup.py)' % (name,)
|
||||
spin_message = 'Building wheel for {} (setup.py)'.format(name)
|
||||
with open_spinner(spin_message) as spinner:
|
||||
logger.debug('Destination directory: %s', tempd)
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@ def freeze(
|
|||
skip_match = re.compile(skip_regex).search
|
||||
|
||||
for link in find_links:
|
||||
yield '-f %s' % link
|
||||
yield '-f {}'.format(link)
|
||||
installations = {} # type: Dict[str, FrozenRequirement]
|
||||
for dist in get_installed_distributions(local_only=local_only,
|
||||
skip=(),
|
||||
|
@ -261,5 +261,5 @@ class FrozenRequirement(object):
|
|||
def __str__(self):
|
||||
req = self.req
|
||||
if self.editable:
|
||||
req = '-e %s' % req
|
||||
req = '-e {}'.format(req)
|
||||
return '\n'.join(list(self.comments) + [str(req)]) + '\n'
|
||||
|
|
|
@ -504,11 +504,11 @@ def install_unpacked_wheel(
|
|||
|
||||
if os.environ.get("ENSUREPIP_OPTIONS", "") != "altinstall":
|
||||
scripts_to_generate.append(
|
||||
'pip%s = %s' % (sys.version_info[0], pip_script)
|
||||
'pip{} = {}'.format(sys.version_info[0], pip_script)
|
||||
)
|
||||
|
||||
scripts_to_generate.append(
|
||||
'pip%s = %s' % (get_major_minor_version(), pip_script)
|
||||
'pip{} = {}'.format(get_major_minor_version(), pip_script)
|
||||
)
|
||||
# Delete any other versioned pip entry points
|
||||
pip_ep = [k for k in console if re.match(r'pip(\d(\.\d)?)?$', k)]
|
||||
|
@ -522,7 +522,7 @@ def install_unpacked_wheel(
|
|||
)
|
||||
|
||||
scripts_to_generate.append(
|
||||
'easy_install-%s = %s' % (
|
||||
'easy_install-{} = {}'.format(
|
||||
get_major_minor_version(), easy_install_script
|
||||
)
|
||||
)
|
||||
|
|
|
@ -48,18 +48,17 @@ def install_given_reqs(
|
|||
"""
|
||||
|
||||
if to_install:
|
||||
msg = 'Installing collected packages: {}'.format(
|
||||
', '.join([req.name for req in to_install])
|
||||
logger.info(
|
||||
'Installing collected packages: %s',
|
||||
', '.join([req.name for req in to_install]),
|
||||
)
|
||||
logger.info(msg)
|
||||
|
||||
installed = []
|
||||
|
||||
with indent_log():
|
||||
for requirement in to_install:
|
||||
if requirement.should_reinstall:
|
||||
logger.info('Attempting uninstall: {}'.format(
|
||||
requirement.name))
|
||||
logger.info('Attempting uninstall: %s', requirement.name)
|
||||
with indent_log():
|
||||
uninstalled_pathset = requirement.uninstall(
|
||||
auto_confirm=True
|
||||
|
|
|
@ -137,16 +137,17 @@ def parse_editable(editable_req):
|
|||
vc_type = url.split('+', 1)[0].lower()
|
||||
|
||||
if not vcs.get_backend(vc_type):
|
||||
error_message = 'For --editable=%s only ' % editable_req + \
|
||||
', '.join([backend.name + '+URL' for backend in vcs.backends]) + \
|
||||
' is currently supported'
|
||||
error_message = 'For --editable={} only '.format(
|
||||
editable_req + ', '.join(
|
||||
[backend.name + '+URL' for backend in vcs.backends]) +
|
||||
' is currently supported')
|
||||
raise InstallationError(error_message)
|
||||
|
||||
package_name = Link(url).egg_fragment
|
||||
if not package_name:
|
||||
raise InstallationError(
|
||||
"Could not detect requirement name for '%s', please specify one "
|
||||
"with #egg=your_package_name" % editable_req
|
||||
"Could not detect requirement name for '{}', please specify one "
|
||||
"with #egg=your_package_name".format(editable_req)
|
||||
)
|
||||
return package_name, url, None
|
||||
|
||||
|
@ -166,16 +167,18 @@ def deduce_helpful_msg(req):
|
|||
with open(req, 'r') as fp:
|
||||
# parse first line only
|
||||
next(parse_requirements(fp.read()))
|
||||
msg += " The argument you provided " + \
|
||||
"(%s) appears to be a" % (req) + \
|
||||
" requirements file. If that is the" + \
|
||||
" case, use the '-r' flag to install" + \
|
||||
msg += (
|
||||
"The argument you provided "
|
||||
"({}) appears to be a"
|
||||
" requirements file. If that is the"
|
||||
" case, use the '-r' flag to install"
|
||||
" the packages specified within it."
|
||||
).format(req)
|
||||
except RequirementParseError:
|
||||
logger.debug("Cannot parse '%s' as requirements \
|
||||
file" % (req), exc_info=True)
|
||||
else:
|
||||
msg += " File '%s' does not exist." % (req)
|
||||
msg += " File '{}' does not exist.".format(req)
|
||||
return msg
|
||||
|
||||
|
||||
|
@ -201,7 +204,7 @@ def parse_req_from_editable(editable_req):
|
|||
try:
|
||||
req = Requirement(name)
|
||||
except InvalidRequirement:
|
||||
raise InstallationError("Invalid requirement: '%s'" % name)
|
||||
raise InstallationError("Invalid requirement: '{}'".format(name))
|
||||
else:
|
||||
req = None
|
||||
|
||||
|
@ -415,7 +418,7 @@ def install_req_from_req_string(
|
|||
try:
|
||||
req = Requirement(req_string)
|
||||
except InvalidRequirement:
|
||||
raise InstallationError("Invalid requirement: '%s'" % req_string)
|
||||
raise InstallationError("Invalid requirement: '{}'".format(req_string))
|
||||
|
||||
domains_not_allowed = [
|
||||
PyPI.file_storage_domain,
|
||||
|
@ -427,7 +430,7 @@ def install_req_from_req_string(
|
|||
raise InstallationError(
|
||||
"Packages installed from PyPI cannot depend on packages "
|
||||
"which are not also hosted on PyPI.\n"
|
||||
"%s depends on %s " % (comes_from.name, req)
|
||||
"{} depends on {} ".format(comes_from.name, req)
|
||||
)
|
||||
|
||||
return InstallRequirement(
|
||||
|
|
|
@ -183,7 +183,7 @@ def handle_line(
|
|||
"""
|
||||
|
||||
# preserve for the nested code path
|
||||
line_comes_from = '%s %s (line %s)' % (
|
||||
line_comes_from = '{} {} (line {})'.format(
|
||||
'-c' if line.constraint else '-r', line.filename, line.lineno,
|
||||
)
|
||||
|
||||
|
@ -329,7 +329,7 @@ class RequirementsFileParser(object):
|
|||
args_str, opts = self._line_parser(line)
|
||||
except OptionParsingError as e:
|
||||
# add offending line
|
||||
msg = 'Invalid requirement: %s\n%s' % (line, e.msg)
|
||||
msg = 'Invalid requirement: {}\n{}'.format(line, e.msg)
|
||||
raise RequirementsFileParseError(msg)
|
||||
|
||||
yield ParsedLine(
|
||||
|
@ -520,8 +520,9 @@ def get_file_content(url, session, comes_from=None):
|
|||
elif scheme == 'file':
|
||||
if comes_from and comes_from.startswith('http'):
|
||||
raise InstallationError(
|
||||
'Requirements file %s references URL %s, which is local'
|
||||
% (comes_from, url))
|
||||
'Requirements file {} references URL {}, '
|
||||
'which is local'.format(comes_from, url)
|
||||
)
|
||||
|
||||
path = url.split(':', 1)[1]
|
||||
path = path.replace('\\', '/')
|
||||
|
@ -538,7 +539,7 @@ def get_file_content(url, session, comes_from=None):
|
|||
content = auto_decode(f.read())
|
||||
except IOError as exc:
|
||||
raise InstallationError(
|
||||
'Could not open requirements file: %s' % str(exc)
|
||||
'Could not open requirements file: {}'.format(exc)
|
||||
)
|
||||
return url, content
|
||||
|
||||
|
|
|
@ -195,25 +195,25 @@ class InstallRequirement(object):
|
|||
if self.req:
|
||||
s = str(self.req)
|
||||
if self.link:
|
||||
s += ' from %s' % redact_auth_from_url(self.link.url)
|
||||
s += ' from {}'.format(redact_auth_from_url(self.link.url))
|
||||
elif self.link:
|
||||
s = redact_auth_from_url(self.link.url)
|
||||
else:
|
||||
s = '<InstallRequirement>'
|
||||
if self.satisfied_by is not None:
|
||||
s += ' in %s' % display_path(self.satisfied_by.location)
|
||||
s += ' in {}'.format(display_path(self.satisfied_by.location))
|
||||
if self.comes_from:
|
||||
if isinstance(self.comes_from, six.string_types):
|
||||
comes_from = self.comes_from # type: Optional[str]
|
||||
else:
|
||||
comes_from = self.comes_from.from_path()
|
||||
if comes_from:
|
||||
s += ' (from %s)' % comes_from
|
||||
s += ' (from {})'.format(comes_from)
|
||||
return s
|
||||
|
||||
def __repr__(self):
|
||||
# type: () -> str
|
||||
return '<%s object: %s editable=%r>' % (
|
||||
return '<{} object: {} editable={!r}>'.format(
|
||||
self.__class__.__name__, str(self), self.editable)
|
||||
|
||||
def format_debug(self):
|
||||
|
@ -452,8 +452,8 @@ class InstallRequirement(object):
|
|||
dist_in_site_packages(existing_dist)):
|
||||
raise InstallationError(
|
||||
"Will not install to the user site because it will "
|
||||
"lack sys.path precedence to %s in %s" %
|
||||
(existing_dist.project_name, existing_dist.location)
|
||||
"lack sys.path precedence to {} in {}".format(
|
||||
existing_dist.project_name, existing_dist.location)
|
||||
)
|
||||
else:
|
||||
self.should_reinstall = True
|
||||
|
@ -483,7 +483,7 @@ class InstallRequirement(object):
|
|||
@property
|
||||
def setup_py_path(self):
|
||||
# type: () -> str
|
||||
assert self.source_dir, "No source dir for %s" % self
|
||||
assert self.source_dir, "No source dir for {}".format(self)
|
||||
setup_py = os.path.join(self.unpacked_source_directory, 'setup.py')
|
||||
|
||||
# Python2 __file__ should not be unicode
|
||||
|
@ -495,7 +495,7 @@ class InstallRequirement(object):
|
|||
@property
|
||||
def pyproject_toml_path(self):
|
||||
# type: () -> str
|
||||
assert self.source_dir, "No source dir for %s" % self
|
||||
assert self.source_dir, "No source dir for {}".format(self)
|
||||
return make_pyproject_path(self.unpacked_source_directory)
|
||||
|
||||
def load_pyproject_toml(self):
|
||||
|
@ -654,8 +654,8 @@ class InstallRequirement(object):
|
|||
vcs_backend.export(self.source_dir, url=hidden_url)
|
||||
else:
|
||||
assert 0, (
|
||||
'Unexpected version control type (in %s): %s'
|
||||
% (self.link, vc_type))
|
||||
'Unexpected version control type (in {}): {}'.format(
|
||||
self.link, vc_type))
|
||||
|
||||
# Top-level Actions
|
||||
def uninstall(self, auto_confirm=False, verbose=False):
|
||||
|
@ -710,13 +710,15 @@ class InstallRequirement(object):
|
|||
assert self.source_dir
|
||||
|
||||
create_archive = True
|
||||
archive_name = '%s-%s.zip' % (self.name, self.metadata["version"])
|
||||
archive_name = '{}-{}.zip'.format(self.name, self.metadata["version"])
|
||||
archive_path = os.path.join(build_dir, archive_name)
|
||||
|
||||
if os.path.exists(archive_path):
|
||||
response = ask_path_exists(
|
||||
'The file %s exists. (i)gnore, (w)ipe, (b)ackup, (a)bort ' %
|
||||
display_path(archive_path), ('i', 'w', 'b', 'a'))
|
||||
'The file {} exists. (i)gnore, (w)ipe, '
|
||||
'(b)ackup, (a)bort '.format(
|
||||
display_path(archive_path)),
|
||||
('i', 'w', 'b', 'a'))
|
||||
if response == 'i':
|
||||
create_archive = False
|
||||
elif response == 'w':
|
||||
|
|
|
@ -108,8 +108,8 @@ class RequirementSet(object):
|
|||
tags = pep425tags.get_supported()
|
||||
if (self.check_supported_wheels and not wheel.supported(tags)):
|
||||
raise InstallationError(
|
||||
"%s is not a supported wheel on this platform." %
|
||||
wheel.filename
|
||||
"{} is not a supported wheel on this platform.".format(
|
||||
wheel.filename)
|
||||
)
|
||||
|
||||
# This next bit is really a sanity check.
|
||||
|
@ -138,8 +138,8 @@ class RequirementSet(object):
|
|||
)
|
||||
if has_conflicting_requirement:
|
||||
raise InstallationError(
|
||||
"Double requirement given: %s (already in %s, name=%r)"
|
||||
% (install_req, existing_req, install_req.name)
|
||||
"Double requirement given: {} (already in {}, name={!r})"
|
||||
.format(install_req, existing_req, install_req.name)
|
||||
)
|
||||
|
||||
# When no existing requirement exists, add the requirement as a
|
||||
|
@ -164,9 +164,9 @@ class RequirementSet(object):
|
|||
if does_not_satisfy_constraint:
|
||||
self.reqs_to_cleanup.append(install_req)
|
||||
raise InstallationError(
|
||||
"Could not satisfy constraints for '%s': "
|
||||
"Could not satisfy constraints for '{}': "
|
||||
"installation from path or url cannot be "
|
||||
"constrained to a version" % install_req.name,
|
||||
"constrained to a version".format(install_req.name)
|
||||
)
|
||||
# If we're now installing a constraint, mark the existing
|
||||
# object for real installation.
|
||||
|
|
|
@ -60,7 +60,7 @@ def get_requirement_tracker():
|
|||
TempDirectory(kind='req-tracker')
|
||||
).path
|
||||
ctx.enter_context(update_env_context_manager(PIP_REQ_TRACKER=root))
|
||||
logger.debug("Initialized build tracking at {}".format(root))
|
||||
logger.debug("Initialized build tracking at %s", root)
|
||||
|
||||
with RequirementTracker(root) as tracker:
|
||||
yield tracker
|
||||
|
@ -111,7 +111,8 @@ class RequirementTracker(object):
|
|||
if e.errno != errno.ENOENT:
|
||||
raise
|
||||
else:
|
||||
message = '%s is already being built: %s' % (req.link, contents)
|
||||
message = '{} is already being built: {}'.format(
|
||||
req.link, contents)
|
||||
raise LookupError(message)
|
||||
|
||||
# If we're here, req should really not be building already.
|
||||
|
|
|
@ -540,8 +540,9 @@ class UninstallPathSet(object):
|
|||
with open(develop_egg_link, 'r') as fh:
|
||||
link_pointer = os.path.normcase(fh.readline().strip())
|
||||
assert (link_pointer == dist.location), (
|
||||
'Egg-link %s does not match installed location of %s '
|
||||
'(at %s)' % (link_pointer, dist.project_name, dist.location)
|
||||
'Egg-link {} does not match installed location of {} '
|
||||
'(at {})'.format(
|
||||
link_pointer, dist.project_name, dist.location)
|
||||
)
|
||||
paths_to_remove.add(develop_egg_link)
|
||||
easy_install_pth = os.path.join(os.path.dirname(develop_egg_link),
|
||||
|
@ -586,7 +587,8 @@ class UninstallPthEntries(object):
|
|||
# type: (str) -> None
|
||||
if not os.path.isfile(pth_file):
|
||||
raise UninstallationError(
|
||||
"Cannot remove entries from nonexistent file %s" % pth_file
|
||||
"Cannot remove entries from nonexistent file {}".format(
|
||||
pth_file)
|
||||
)
|
||||
self.file = pth_file
|
||||
self.entries = set() # type: Set[str]
|
||||
|
|
|
@ -184,7 +184,8 @@ def get_path_uid(path):
|
|||
else:
|
||||
# raise OSError for parity with os.O_NOFOLLOW above
|
||||
raise OSError(
|
||||
"%s is a symlink; Will not return uid for symlinks" % path
|
||||
"{} is a symlink; Will not return uid for symlinks".format(
|
||||
path)
|
||||
)
|
||||
return file_uid
|
||||
|
||||
|
|
|
@ -73,7 +73,9 @@ class Hashes(object):
|
|||
try:
|
||||
gots[hash_name] = hashlib.new(hash_name)
|
||||
except (ValueError, TypeError):
|
||||
raise InstallationError('Unknown hash name: %s' % hash_name)
|
||||
raise InstallationError(
|
||||
'Unknown hash name: {}'.format(hash_name)
|
||||
)
|
||||
|
||||
for chunk in chunks:
|
||||
for hash in itervalues(gots):
|
||||
|
|
|
@ -120,7 +120,7 @@ def get_prog():
|
|||
try:
|
||||
prog = os.path.basename(sys.argv[0])
|
||||
if prog in ('__main__.py', '-c'):
|
||||
return "%s -m pip" % sys.executable
|
||||
return "{} -m pip".format(sys.executable)
|
||||
else:
|
||||
return prog
|
||||
except (AttributeError, TypeError, IndexError):
|
||||
|
@ -228,8 +228,8 @@ def _check_no_input(message):
|
|||
"""Raise an error if no input is allowed."""
|
||||
if os.environ.get('PIP_NO_INPUT'):
|
||||
raise Exception(
|
||||
'No input was expected ($PIP_NO_INPUT set); question: %s' %
|
||||
message
|
||||
'No input was expected ($PIP_NO_INPUT set); question: {}'.format(
|
||||
message)
|
||||
)
|
||||
|
||||
|
||||
|
@ -242,8 +242,8 @@ def ask(message, options):
|
|||
response = response.strip().lower()
|
||||
if response not in options:
|
||||
print(
|
||||
'Your response (%r) was not one of the expected responses: '
|
||||
'%s' % (response, ', '.join(options))
|
||||
'Your response ({!r}) was not one of the expected responses: '
|
||||
'{}'.format(response, ', '.join(options))
|
||||
)
|
||||
else:
|
||||
return response
|
||||
|
|
|
@ -242,14 +242,14 @@ def call_subprocess(
|
|||
raise InstallationError(exc_msg)
|
||||
elif on_returncode == 'warn':
|
||||
subprocess_logger.warning(
|
||||
'Command "%s" had error code %s in %s',
|
||||
command_desc, proc.returncode, cwd,
|
||||
'Command "{}" had error code {} in {}'.format(
|
||||
command_desc, proc.returncode, cwd)
|
||||
)
|
||||
elif on_returncode == 'ignore':
|
||||
pass
|
||||
else:
|
||||
raise ValueError('Invalid value: on_returncode=%s' %
|
||||
repr(on_returncode))
|
||||
raise ValueError('Invalid value: on_returncode={!r}'.format(
|
||||
on_returncode))
|
||||
return ''.join(all_output)
|
||||
|
||||
|
||||
|
|
|
@ -153,7 +153,7 @@ class DownloadProgressMixin(object):
|
|||
@property
|
||||
def pretty_eta(self):
|
||||
if self.eta:
|
||||
return "eta %s" % self.eta_td
|
||||
return "eta {}".format(self.eta_td)
|
||||
return ""
|
||||
|
||||
def iter(self, it):
|
||||
|
@ -399,7 +399,7 @@ class NonInteractiveSpinner(SpinnerInterface):
|
|||
# type: (str) -> None
|
||||
if self._finished:
|
||||
return
|
||||
self._update("finished with status '%s'" % (final_status,))
|
||||
self._update("finished with status '{}'".format(final_status))
|
||||
self._finished = True
|
||||
|
||||
|
||||
|
|
|
@ -215,8 +215,8 @@ def check_compatibility(version, name):
|
|||
"""
|
||||
if version[0] > VERSION_COMPATIBLE[0]:
|
||||
raise UnsupportedWheel(
|
||||
"%s's Wheel-Version (%s) is not compatible with this version "
|
||||
"of pip" % (name, '.'.join(map(str, version)))
|
||||
"{}'s Wheel-Version ({}) is not compatible with this version "
|
||||
"of pip".format(name, '.'.join(map(str, version)))
|
||||
)
|
||||
elif version > VERSION_COMPATIBLE:
|
||||
logger.warning(
|
||||
|
|
|
@ -574,7 +574,8 @@ class VersionControl(object):
|
|||
self.name,
|
||||
url,
|
||||
)
|
||||
response = ask_path_exists('What to do? %s' % prompt[0], prompt[1])
|
||||
response = ask_path_exists('What to do? {}'.format(
|
||||
prompt[0]), prompt[1])
|
||||
|
||||
if response == 'a':
|
||||
sys.exit(-1)
|
||||
|
|
Loading…
Reference in New Issue