Upgrade syntax to 2.7 compatible niceties like string interp, set literals, dict comprehensions

This commit is contained in:
Jeff Forcier 2017-10-19 13:49:35 -07:00
parent f892d74801
commit 41dc02c808
7 changed files with 36 additions and 42 deletions

View file

@ -15,15 +15,15 @@ class integration(Spec):
def _build(self, folder, opts, target, asserts=None):
# Dynamic sphinx opt overrides
pairs = map(lambda x: '='.join(x), (opts or {}).items())
flags = map(lambda x: '-D {0}'.format(x), pairs)
flags = map(lambda x: '-D {}'.format(x), pairs)
flagstr = ' '.join(flags)
# Setup
os.chdir(os.path.join('integration', '_support'))
build = os.path.join(folder, '_build')
try:
# Build
cmd = 'sphinx-build {2} -c . -W {0} {1}'.format(
folder, build, flagstr)
cmd = 'sphinx-build {} -c . -W {} {}'.format(
flagstr, folder, build)
result = run(cmd, warn=True, hide=True)
if callable(asserts):
asserts(result, build, target)
@ -36,10 +36,10 @@ class integration(Spec):
def _basic_asserts(self, result, build, target):
# Check for errors
msg = "Build failed w/ stderr: {0}"
msg = "Build failed w/ stderr: {}"
assert result.ok, msg.format(result.stderr)
# Check for vaguely correct output
changelog = os.path.join(build, '{0}.html'.format(target))
changelog = os.path.join(build, '{}.html'.format(target))
with open(changelog) as fd:
text = fd.read()
assert "1.0.1" in text

View file

@ -46,7 +46,7 @@ class parse_changelog_(Spec):
ok_(isinstance(changelog, dict))
eq_(
set(changelog.keys()),
set(('1.0.0', '1.0.1', '1.0', 'unreleased_1_feature')),
{'1.0.0', '1.0.1', '1.0', 'unreleased_1_feature'},
)
eq_(len(changelog['1.0.0']), 0)
eq_(len(changelog['unreleased_1_feature']), 0)

View file

@ -46,7 +46,7 @@ def scan_for_spec(keyword):
# First, test for intermediate '1.2+' style
matches = release_line_re.findall(keyword)
if matches:
return Spec(">={0}".format(matches[0]))
return Spec(">={}".format(matches[0]))
# Failing that, see if Spec can make sense of it
try:
return Spec(keyword)
@ -80,7 +80,7 @@ def issues_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
# TODO: deal with % vs .format()
ref = config.releases_issue_uri % issue_no
elif config.releases_github_path:
ref = "https://github.com/{0}/issues/{1}".format(
ref = "https://github.com/{}/issues/{}".format(
config.releases_github_path, issue_no)
# Only generate a reference/link if we were able to make a URI
if ref:
@ -111,7 +111,7 @@ def issues_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
if part in ('backported', 'major'):
keyword = part
else:
err = "Gave unknown keyword {0!r} for issue no. {1}"
err = "Gave unknown keyword {!r} for issue no. {}"
raise ValueError(err.format(keyword, issue_no))
# Create temporary node w/ data & final nodes to publish
node = Issue(
@ -138,17 +138,17 @@ def release_nodes(text, slug, date, config):
# TODO: % vs .format()
uri = config.releases_release_uri % slug
elif config.releases_github_path:
uri = "https://github.com/{0}/tree/{1}".format(
uri = "https://github.com/{}/tree/{}".format(
config.releases_github_path, slug)
# Only construct link tag if user actually configured release URIs somehow
if uri:
link = '<a class="reference external" href="{0}">{1}</a>'.format(uri, text)
link = '<a class="reference external" href="{}">{}</a>'.format(uri, text)
else:
link = text
datespan = ''
if date:
datespan = ' <span style="font-size: 75%;">{0}</span>'.format(date)
header = '<h2 style="margin-bottom: 0.3em;">{0}{1}</h2>'.format(
datespan = ' <span style="font-size: 75%;">{}</span>'.format(date)
header = '<h2 style="margin-bottom: 0.3em;">{}{}</h2>'.format(
link, datespan)
return nodes.section('',
nodes.raw(rawtext='', text=header, format='html'),
@ -190,7 +190,7 @@ def generate_unreleased_entry(header, line, issues, manager, app):
None,
app.config
)]
log("Creating {0!r} faux-release with {1!r}".format(line, issues))
log("Creating {!r} faux-release with {!r}".format(line, issues))
return {
'obj': Release(number=line, date=None, nodelist=nodelist),
'entries': issues,
@ -207,13 +207,13 @@ def append_unreleased_entries(app, manager, releases):
"""
for family, lines in six.iteritems(manager):
for type_ in ('bugfix', 'feature'):
bucket = 'unreleased_{0}'.format(type_)
bucket = 'unreleased_{}'.format(type_)
if bucket not in lines: # Implies unstable prehistory + 0.x fam
continue
issues = lines[bucket]
fam_prefix = "{0}.x ".format(family) if len(manager) > 1 else ""
header = "Next {0}{1} release".format(fam_prefix, type_)
line = "unreleased_{0}.x_{1}".format(family, type_)
fam_prefix = "{}.x ".format(family) if len(manager) > 1 else ""
header = "Next {}{} release".format(fam_prefix, type_)
line = "unreleased_{}.x_{}".format(family, type_)
releases.append(
generate_unreleased_entry(header, line, issues, manager, app)
)
@ -248,7 +248,7 @@ def construct_entry_with_release(focus, issues, manager, log, releases, rest):
missing = [i for i in explicit if i not in issues]
if missing:
raise ValueError(
"Couldn't find issue(s) #{0} in the changelog!".format(
"Couldn't find issue(s) #{} in the changelog!".format(
', '.join(missing)))
# Obtain the explicitly named issues from global list
entries = []
@ -359,9 +359,9 @@ def construct_entry_without_release(focus, issues, manager, log, rest):
buried = focus.traverse(Issue)
if buried:
msg = """
Found issue node ({0!r}) buried inside another node:
Found issue node ({!r}) buried inside another node:
{1}
{}
Please double-check your ReST syntax! There is probably text in the above
output that will show you which part of your changelog to look at.
@ -629,7 +629,7 @@ def setup(app):
('unstable_prehistory', False),
):
app.add_config_value(
name='releases_{0}'.format(key), default=default, rebuild='html'
name='releases_{}'.format(key), default=default, rebuild='html'
)
# Register intermediate roles
for x in list(ISSUE_TYPES) + ['issue']:

View file

@ -34,10 +34,7 @@ class LineManager(dict):
if major_number == 0 and self.config.releases_unstable_prehistory:
keys = ['unreleased']
# Either way, the buckets default to an empty list
empty = {}
for key in keys:
empty[key] = []
self[major_number] = empty
self[major_number] = {key: [] for key in keys}
@property
def unstable_prehistory(self):

View file

@ -110,18 +110,18 @@ class Issue(nodes.Element):
# Make sure truly-default spec skips 0.x if prehistory was unstable.
stable_families = manager.stable_families
if manager.config.releases_unstable_prehistory and stable_families:
specstr = ">={0}".format(min(stable_families))
specstr = ">={}".format(min(stable_families))
if self.is_featurelike:
# TODO: if app->config-><releases_always_forwardport_features or
# w/e
if True:
specstr = ">={0}".format(max(manager.keys()))
specstr = ">={}".format(max(manager.keys()))
else:
# Can only meaningfully limit to minor release buckets if they
# actually exist yet.
buckets = self.minor_releases(manager)
if buckets:
specstr = ">={0}".format(max(buckets))
specstr = ">={}".format(max(buckets))
return Spec(specstr) if specstr else Spec()
def add_to_manager(self, manager):
@ -178,7 +178,7 @@ class Issue(nodes.Element):
elif self.spec:
flag = self.spec
if flag:
flag = ' ({0})'.format(flag)
flag = ' ({})'.format(flag)
return '<{issue.type} #{issue.number}{flag}>'.format(issue=self,
flag=flag)
@ -200,4 +200,4 @@ class Release(nodes.Element):
return int(self.number.split('.')[0])
def __repr__(self):
return '<release {0}>'.format(self.number)
return '<release {}>'.format(self.number)

View file

@ -30,8 +30,8 @@ def parse_changelog(path):
For example, answering the above questions is as simple as::
changelog = parse_changelog("/path/to/changelog")
print("Unreleased issues for 2.3.x: {0}".format(changelog['2.3']))
print("Contents of v1.2.1: {0}".format(changelog['1.2.1']))
print("Unreleased issues for 2.3.x: {}".format(changelog['2.3']))
print("Contents of v1.2.1: {}".format(changelog['1.2.1']))
:param str path: A relative or absolute file path string.
@ -75,7 +75,7 @@ def parse_changelog(path):
# unreleased_N_feature
unreleased = manager[family].pop('unreleased_feature', None)
if unreleased is not None:
ret['unreleased_{0}_feature'.format(family)] = unreleased
ret['unreleased_{}_feature'.format(family)] = unreleased
# - bring over all per-line buckets from manager (flattening)
# Here, all that's left in the per-family bucket should be lines, not
# unreleased_*
@ -212,7 +212,7 @@ def make_app(**kwargs):
app.env.temp_data['docname'] = kwargs.pop('docname')
# Allow config overrides via kwargs
for name in kwargs:
config['releases_{0}'.format(name)] = kwargs[name]
config['releases_{}'.format(name)] = kwargs[name]
# Stitch together as the sphinx app init() usually does w/ real conf files
app.config._raw_config = config
# init_values() requires a 'warn' runner on Sphinx 1.3-1.6, so if we seem
@ -231,7 +231,4 @@ def changelog2dict(changelog):
See `parse_changelog` docstring for return value details.
"""
d = {}
for r in changelog:
d[r['obj'].number] = r['entries']
return d
return {r['obj'].number: r['entries'] for r in changelog}

View file

@ -112,8 +112,8 @@ def expect_releases(entries, release_map, skip_initial=False, app=None):
kwargs['app'] = app
changelog = changelog2dict(releases(*entries, **kwargs))
snapshot = dict(changelog)
err = "Got unexpected contents for {0}: wanted {1}, got {2}"
err += "\nFull changelog: {3!r}\n"
err = "Got unexpected contents for {}: wanted {}, got {}"
err += "\nFull changelog: {!r}\n"
for rel, issues in six.iteritems(release_map):
found = changelog.pop(rel)
eq_(set(found), set(issues), err.format(rel, issues, found, snapshot))
@ -121,4 +121,4 @@ def expect_releases(entries, release_map, skip_initial=False, app=None):
for key in list(changelog.keys()):
if not changelog[key]:
del changelog[key]
ok_(not changelog, "Found leftovers: {0}".format(changelog))
ok_(not changelog, "Found leftovers: {}".format(changelog))