summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2022-03-13 18:23:15 -0500
committerMichael Merickel <michael@merickel.org>2022-03-13 18:24:26 -0500
commit1f8e290a7b287c5d8aaafd0ff91692d1343ce1a9 (patch)
treef490995d5bf34627b9753b35eb2b7767ae68c3dc /src
parent1e439035e41da3767acbcae79689fb05dfdeb317 (diff)
downloadpyramid-1f8e290a7b287c5d8aaafd0ff91692d1343ce1a9.tar.gz
pyramid-1f8e290a7b287c5d8aaafd0ff91692d1343ce1a9.tar.bz2
pyramid-1f8e290a7b287c5d8aaafd0ff91692d1343ce1a9.zip
pyupgrade --py37-plus
Diffstat (limited to 'src')
-rw-r--r--src/pyramid/asset.py2
-rw-r--r--src/pyramid/authentication.py14
-rw-r--r--src/pyramid/config/__init__.py2
-rw-r--r--src/pyramid/config/actions.py2
-rw-r--r--src/pyramid/config/assets.py4
-rw-r--r--src/pyramid/config/predicates.py2
-rw-r--r--src/pyramid/config/routes.py4
-rw-r--r--src/pyramid/config/tweens.py2
-rw-r--r--src/pyramid/config/views.py10
-rw-r--r--src/pyramid/csrf.py2
-rw-r--r--src/pyramid/encode.py6
-rw-r--r--src/pyramid/exceptions.py6
-rw-r--r--src/pyramid/httpexceptions.py2
-rw-r--r--src/pyramid/i18n.py2
-rw-r--r--src/pyramid/path.py12
-rw-r--r--src/pyramid/predicates.py20
-rw-r--r--src/pyramid/registry.py2
-rw-r--r--src/pyramid/renderers.py4
-rw-r--r--src/pyramid/scripts/prequest.py2
-rw-r--r--src/pyramid/scripts/proutes.py8
-rw-r--r--src/pyramid/scripts/pserve.py6
-rw-r--r--src/pyramid/scripts/pshell.py4
-rw-r--r--src/pyramid/scripts/pviews.py20
-rw-r--r--src/pyramid/security.py2
-rw-r--r--src/pyramid/static.py4
-rw-r--r--src/pyramid/traversal.py2
-rw-r--r--src/pyramid/url.py8
-rw-r--r--src/pyramid/urldispatch.py2
-rw-r--r--src/pyramid/util.py6
-rw-r--r--src/pyramid/viewderivers.py4
30 files changed, 81 insertions, 85 deletions
diff --git a/src/pyramid/asset.py b/src/pyramid/asset.py
index f5900f443..bdf90ef5e 100644
--- a/src/pyramid/asset.py
+++ b/src/pyramid/asset.py
@@ -26,7 +26,7 @@ def asset_spec_from_abspath(abspath, package):
pp = package_path(package) + os.path.sep
if abspath.startswith(pp):
relpath = abspath[len(pp) :]
- return '%s:%s' % (
+ return '{}:{}'.format(
package_name(package),
relpath.replace(os.path.sep, '/'),
)
diff --git a/src/pyramid/authentication.py b/src/pyramid/authentication.py
index 9120ad03b..89aafdf3c 100644
--- a/src/pyramid/authentication.py
+++ b/src/pyramid/authentication.py
@@ -74,7 +74,7 @@ class CallbackAuthenticationPolicy:
if self.callback is None:
debug and self._log(
- 'there was no groupfinder callback; returning %r' % (userid,),
+ f'there was no groupfinder callback; returning {userid!r}',
'authenticated_userid',
request,
)
@@ -152,14 +152,14 @@ class CallbackAuthenticationPolicy:
else:
groups = self.callback(userid, request)
debug and self._log(
- 'groupfinder callback returned %r as groups' % (groups,),
+ f'groupfinder callback returned {groups!r} as groups',
'effective_principals',
request,
)
if groups is None: # is None!
debug and self._log(
- 'returning effective principals: %r' % (effective_principals,),
+ f'returning effective principals: {effective_principals!r}',
'effective_principals',
request,
)
@@ -170,7 +170,7 @@ class CallbackAuthenticationPolicy:
effective_principals.extend(groups)
debug and self._log(
- 'returning effective principals: %r' % (effective_principals,),
+ f'returning effective principals: {effective_principals!r}',
'effective_principals',
request,
)
@@ -717,7 +717,7 @@ class AuthTicket:
)
def cookie_value(self):
- v = '%s%08x%s!' % (self.digest(), int(self.time), quote(self.userid))
+ v = f'{self.digest()}{int(self.time):08x}{quote(self.userid)}!'
if self.tokens:
v += self.tokens + '!'
v += self.user_data
@@ -1174,9 +1174,9 @@ class AuthTktCookieHelper:
try:
token = ascii_(token)
except UnicodeEncodeError:
- raise ValueError("Invalid token %r" % (token,))
+ raise ValueError(f"Invalid token {token!r}")
if not (isinstance(token, str) and VALID_TOKEN.match(token)):
- raise ValueError("Invalid token %r" % (token,))
+ raise ValueError(f"Invalid token {token!r}")
new_tokens.append(token)
tokens = tuple(new_tokens)
diff --git a/src/pyramid/config/__init__.py b/src/pyramid/config/__init__.py
index c500c53f6..a49c15cba 100644
--- a/src/pyramid/config/__init__.py
+++ b/src/pyramid/config/__init__.py
@@ -447,7 +447,7 @@ class Configurator(
package, filename = resolve_asset_spec(path_or_spec, self.package_name)
if package is None:
return filename # absolute filename
- return '%s:%s' % (package, filename)
+ return f'{package}:{filename}'
def _fix_registry(self):
"""Fix up a ZCA component registry that is not a
diff --git a/src/pyramid/config/actions.py b/src/pyramid/config/actions.py
index d80f840ac..5088bd89a 100644
--- a/src/pyramid/config/actions.py
+++ b/src/pyramid/config/actions.py
@@ -537,7 +537,7 @@ class ActionInfo:
def __str__(self):
srclines = self.src.split('\n')
src = '\n'.join(' %s' % x for x in srclines)
- return 'Line %s of file %s:\n%s' % (self.line, self.file, src)
+ return f'Line {self.line} of file {self.file}:\n{src}'
def action_method(wrapped):
diff --git a/src/pyramid/config/assets.py b/src/pyramid/config/assets.py
index d62b04e57..6f2ddbe4a 100644
--- a/src/pyramid/config/assets.py
+++ b/src/pyramid/config/assets.py
@@ -221,7 +221,7 @@ class PackageAssetSource:
self.prefix = prefix
def get_path(self, resource_name):
- return '%s%s' % (self.prefix, resource_name)
+ return f'{self.prefix}{resource_name}'
def get_filename(self, resource_name):
path = self.get_path(resource_name)
@@ -388,7 +388,7 @@ class AssetsConfiguratorMixin:
intr = self.introspectable(
'asset overrides',
(package, override_package, path, override_prefix),
- '%s -> %s' % (to_override, override_with),
+ f'{to_override} -> {override_with}',
'asset override',
)
intr['to_override'] = to_override
diff --git a/src/pyramid/config/predicates.py b/src/pyramid/config/predicates.py
index b49bc513c..db5df0347 100644
--- a/src/pyramid/config/predicates.py
+++ b/src/pyramid/config/predicates.py
@@ -27,7 +27,7 @@ class PredicateConfiguratorMixin:
intr = self.introspectable(
'%s predicates' % type,
discriminator,
- '%s predicate named %s' % (type, name),
+ f'{type} predicate named {name}',
'%s predicate' % type,
)
intr['name'] = name
diff --git a/src/pyramid/config/routes.py b/src/pyramid/config/routes.py
index 59bc368fe..a7ff66a47 100644
--- a/src/pyramid/config/routes.py
+++ b/src/pyramid/config/routes.py
@@ -401,7 +401,7 @@ class RoutesConfiguratorMixin:
scheme = parsed.scheme
else:
scheme = request.scheme
- kw['_app_url'] = '{}://{}'.format(scheme, parsed.netloc)
+ kw['_app_url'] = f'{scheme}://{parsed.netloc}'
if original_pregenerator:
elements, kw = original_pregenerator(request, elements, kw)
@@ -423,7 +423,7 @@ class RoutesConfiguratorMixin:
introspectables = []
intr = self.introspectable(
- 'routes', name, '%s (pattern: %r)' % (name, pattern), 'route'
+ 'routes', name, f'{name} (pattern: {pattern!r})', 'route'
)
intr['name'] = name
intr['pattern'] = pattern
diff --git a/src/pyramid/config/tweens.py b/src/pyramid/config/tweens.py
index dbd6b14ed..0eeac333e 100644
--- a/src/pyramid/config/tweens.py
+++ b/src/pyramid/config/tweens.py
@@ -121,7 +121,7 @@ class TweensConfiguratorMixin:
if p is not None:
if not is_string_or_iterable(p):
raise ConfigurationError(
- '"%s" must be a string or iterable, not %s' % (t, p)
+ f'"{t}" must be a string or iterable, not {p}'
)
if over is INGRESS or is_nonstr_iter(over) and INGRESS in over:
diff --git a/src/pyramid/config/views.py b/src/pyramid/config/views.py
index e75fdd1ef..4f5806df3 100644
--- a/src/pyramid/config/views.py
+++ b/src/pyramid/config/views.py
@@ -904,7 +904,7 @@ class ViewsConfiguratorMixin:
discriminator = Deferred(discrim_func)
if inspect.isclass(view) and attr:
- view_desc = 'method %r of %s' % (
+ view_desc = 'method {!r} of {}'.format(
attr,
self.object_description(view),
)
@@ -1160,7 +1160,7 @@ class ViewsConfiguratorMixin:
for opt in getattr(deriver, 'options', []):
kw.pop(opt, None)
if kw:
- raise ConfigurationError('Unknown view options: %s' % (kw,))
+ raise ConfigurationError(f'Unknown view options: {kw}')
def _apply_view_derivers(self, info):
# These derivers are not really derivers and so have fixed order
@@ -2248,7 +2248,7 @@ class StaticURLInfo:
# pattern, plus any extras passed to us via add_static_view
pattern = "%s*subpath" % name # name already ends with slash
if config.route_prefix:
- route_name = '__%s/%s' % (config.route_prefix, name)
+ route_name = f'__{config.route_prefix}/{name}'
else:
route_name = '__%s' % name
config.add_route(route_name, pattern, **extra)
@@ -2335,7 +2335,7 @@ class StaticURLInfo:
rawspec = None
if pkg_name is not None:
- pathspec = '{}:{}{}'.format(pkg_name, pkg_subpath, subpath)
+ pathspec = f'{pkg_name}:{pkg_subpath}{subpath}'
overrides = registry.queryUtility(IPackageOverrides, name=pkg_name)
if overrides is not None:
resource_name = posixpath.join(pkg_subpath, subpath)
@@ -2343,7 +2343,7 @@ class StaticURLInfo:
for source, filtered_path in sources:
rawspec = source.get_path(filtered_path)
if hasattr(source, 'pkg_name'):
- rawspec = '{}:{}'.format(source.pkg_name, rawspec)
+ rawspec = f'{source.pkg_name}:{rawspec}'
break
else:
diff --git a/src/pyramid/csrf.py b/src/pyramid/csrf.py
index 0ade5f2d6..304ce4020 100644
--- a/src/pyramid/csrf.py
+++ b/src/pyramid/csrf.py
@@ -360,6 +360,6 @@ def check_csrf_origin(
if not any(
is_same_domain(originp.netloc, host) for host in trusted_origins
):
- return _fail("{} does not match any trusted origins.".format(origin))
+ return _fail(f"{origin} does not match any trusted origins.")
return True
diff --git a/src/pyramid/encode.py b/src/pyramid/encode.py
index b6030ed58..153940534 100644
--- a/src/pyramid/encode.py
+++ b/src/pyramid/encode.py
@@ -70,13 +70,13 @@ def urlencode(query, doseq=True, quote_via=quote_plus):
if is_nonstr_iter(v):
for x in v:
x = quote_via(x)
- result += '%s%s=%s' % (prefix, k, x)
+ result += f'{prefix}{k}={x}'
prefix = '&'
elif v is None:
- result += '%s%s=' % (prefix, k)
+ result += f'{prefix}{k}='
else:
v = quote_via(v)
- result += '%s%s=%s' % (prefix, k, v)
+ result += f'{prefix}{k}={v}'
prefix = '&'
diff --git a/src/pyramid/exceptions.py b/src/pyramid/exceptions.py
index a82463498..16aeb7e4f 100644
--- a/src/pyramid/exceptions.py
+++ b/src/pyramid/exceptions.py
@@ -91,7 +91,7 @@ class ConfigurationConflictError(ConfigurationError):
def __str__(self):
r = ["Conflicting configuration actions"]
for discriminator, infos in self._conflicts.items():
- r.append(" For: %s" % (discriminator,))
+ r.append(f" For: {discriminator}")
for info in infos:
for line in str(info).rstrip().split('\n'):
r.append(" " + line)
@@ -106,7 +106,7 @@ class ConfigurationExecutionError(ConfigurationError):
self.etype, self.evalue, self.info = etype, evalue, info
def __str__(self):
- return "%s: %s\n in:\n %s" % (self.etype, self.evalue, self.info)
+ return f"{self.etype}: {self.evalue}\n in:\n {self.info}"
class CyclicDependencyError(Exception):
@@ -122,6 +122,6 @@ class CyclicDependencyError(Exception):
for cycle in cycles:
dependent = cycle
dependees = cycles[cycle]
- L.append('%r sorts before %r' % (dependent, dependees))
+ L.append(f'{dependent!r} sorts before {dependees!r}')
msg = 'Implicit ordering cycle:' + '; '.join(L)
return msg
diff --git a/src/pyramid/httpexceptions.py b/src/pyramid/httpexceptions.py
index 06894f9b4..9d61acd8f 100644
--- a/src/pyramid/httpexceptions.py
+++ b/src/pyramid/httpexceptions.py
@@ -227,7 +227,7 @@ ${body}'''
json_formatter=None,
**kw,
):
- status = '%s %s' % (self.code, self.title)
+ status = f'{self.code} {self.title}'
Response.__init__(self, status=status, **kw)
Exception.__init__(self, detail)
self.detail = self.message = detail
diff --git a/src/pyramid/i18n.py b/src/pyramid/i18n.py
index 7c9ef3b4b..cded99ca5 100644
--- a/src/pyramid/i18n.py
+++ b/src/pyramid/i18n.py
@@ -273,7 +273,7 @@ class Translations(gettext.GNUTranslations):
return cls(fileobj=fp, domain=domain)
def __repr__(self):
- return '<%s: "%s">' % (
+ return '<{}: "{}">'.format(
type(self).__name__,
self._info.get('project-id-version'),
)
diff --git a/src/pyramid/path.py b/src/pyramid/path.py
index 3db4bf0ff..a5b7ad212 100644
--- a/src/pyramid/path.py
+++ b/src/pyramid/path.py
@@ -98,7 +98,7 @@ class Resolver:
__import__(package)
except ImportError:
raise ValueError(
- 'The dotted name %r cannot be imported' % (package,)
+ f'The dotted name {package!r} cannot be imported'
)
package = sys.modules[package]
self.package = package_of(package)
@@ -209,7 +209,7 @@ class AssetResolver(Resolver):
package_name = getattr(self.package, '__name__', None)
if package_name is None:
raise ValueError(
- 'relative spec %r irresolveable without package' % (spec,)
+ f'relative spec {spec!r} irresolveable without package'
)
return PkgResourcesAssetDescriptor(package_name, path)
@@ -300,7 +300,7 @@ class DottedNameResolver(Resolver):
"""
if not isinstance(dotted, str):
- raise ValueError('%r is not a string' % (dotted,))
+ raise ValueError(f'{dotted!r} is not a string')
package = self.package
if package is CALLER_PACKAGE:
package = caller_package()
@@ -338,7 +338,7 @@ class DottedNameResolver(Resolver):
if value.startswith(('.', ':')):
if not package:
raise ValueError(
- 'relative name %r irresolveable without package' % (value,)
+ f'relative name {value!r} irresolveable without package'
)
if value in ['.', ':']:
value = package.__name__
@@ -361,7 +361,7 @@ class DottedNameResolver(Resolver):
if value == '.':
if module is None:
raise ValueError(
- 'relative name %r irresolveable without package' % (value,)
+ f'relative name {value!r} irresolveable without package'
)
name = module.split('.')
else:
@@ -401,7 +401,7 @@ class PkgResourcesAssetDescriptor:
self.path = path
def absspec(self):
- return '%s:%s' % (self.pkg_name, self.path)
+ return f'{self.pkg_name}:{self.path}'
def abspath(self):
return os.path.abspath(
diff --git a/src/pyramid/predicates.py b/src/pyramid/predicates.py
index fe8bc228c..c4f11c798 100644
--- a/src/pyramid/predicates.py
+++ b/src/pyramid/predicates.py
@@ -52,7 +52,7 @@ class PathInfoPredicate:
self.val = val
def text(self):
- return 'path_info = %s' % (self.orig,)
+ return f'path_info = {self.orig}'
phash = text
@@ -81,7 +81,7 @@ class RequestParamPredicate:
def text(self):
return 'request_param %s' % ','.join(
- ['%s=%s' % (x, y) if y else x for x, y in self.reqs]
+ [f'{x}={y}' if y else x for x, y in self.reqs]
)
phash = text
@@ -116,7 +116,7 @@ class HeaderPredicate:
def text(self):
return 'header %s' % ', '.join(
- '%s=%s' % (name, val_str) if val_str else name
+ f'{name}={val_str}' if val_str else name
for name, _, val_str in self.val
)
@@ -144,7 +144,7 @@ class AcceptPredicate:
self.values = values
def text(self):
- return 'accept = %s' % (', '.join(self.values),)
+ return 'accept = {}'.format(', '.join(self.values))
phash = text
@@ -157,7 +157,7 @@ class ContainmentPredicate:
self.val = config.maybe_dotted(val)
def text(self):
- return 'containment = %s' % (self.val,)
+ return f'containment = {self.val}'
phash = text
@@ -171,7 +171,7 @@ class RequestTypePredicate:
self.val = val
def text(self):
- return 'request_type = %s' % (self.val,)
+ return f'request_type = {self.val}'
phash = text
@@ -187,9 +187,7 @@ class MatchParamPredicate:
self.reqs = [(x.strip(), y.strip()) for x, y in reqs]
def text(self):
- return 'match_param %s' % ','.join(
- ['%s=%s' % (x, y) for x, y in self.reqs]
- )
+ return 'match_param %s' % ','.join([f'{x}={y}' for x, y in self.reqs])
phash = text
@@ -266,7 +264,7 @@ class PhysicalPathPredicate:
self.val = ('',) + val
def text(self):
- return 'physical_path = %s' % (self.val,)
+ return f'physical_path = {self.val}'
phash = text
@@ -281,7 +279,7 @@ class IsAuthenticatedPredicate:
self.val = val
def text(self):
- return "is_authenticated = %r" % (self.val,)
+ return f"is_authenticated = {self.val!r}"
phash = text
diff --git a/src/pyramid/registry.py b/src/pyramid/registry.py
index 2d790015a..971ae786a 100644
--- a/src/pyramid/registry.py
+++ b/src/pyramid/registry.py
@@ -239,7 +239,7 @@ class Introspectable(dict):
def __repr__(self):
self._assert_resolved()
- return '<%s category %r, discriminator %r>' % (
+ return '<{} category {!r}, discriminator {!r}>'.format(
self.__class__.__name__,
self.category_name,
self.discriminator,
diff --git a/src/pyramid/renderers.py b/src/pyramid/renderers.py
index a15909cc0..943fde346 100644
--- a/src/pyramid/renderers.py
+++ b/src/pyramid/renderers.py
@@ -287,7 +287,7 @@ class JSON:
(obj_iface,), IJSONAdapter, default=_marker
)
if result is _marker:
- raise TypeError('%r is not JSON serializable' % (obj,))
+ raise TypeError(f'{obj!r} is not JSON serializable')
return result(obj, request)
return default
@@ -387,7 +387,7 @@ class JSONP(JSON):
)
ct = 'application/javascript'
- body = '/**/{}({});'.format(callback, val)
+ body = f'/**/{callback}({val});'
response = request.response
if response.content_type == response.default_content_type:
response.content_type = ct
diff --git a/src/pyramid/scripts/prequest.py b/src/pyramid/scripts/prequest.py
index 32d9bc250..ab5e81dfc 100644
--- a/src/pyramid/scripts/prequest.py
+++ b/src/pyramid/scripts/prequest.py
@@ -207,7 +207,7 @@ class PRequestCommand:
if self.args.display_headers:
self.out(response.status)
for name, value in response.headerlist:
- self.out('%s: %s' % (name, value))
+ self.out(f'{name}: {value}')
if response.charset:
self.out(response.ubody)
else:
diff --git a/src/pyramid/scripts/proutes.py b/src/pyramid/scripts/proutes.py
index 64cd37727..9c54c06cc 100644
--- a/src/pyramid/scripts/proutes.py
+++ b/src/pyramid/scripts/proutes.py
@@ -42,7 +42,7 @@ def _get_print_format(fmt, max_name, max_pattern, max_view, max_method):
for index, col in enumerate(fmt):
size = max_map[col] + PAD
- print_fmt += '{{%s: <{%s}}} ' % (col, index)
+ print_fmt += f'{{{{{col}: <{{{index}}}}}}} '
sizes.append(size)
return print_fmt.format(*sizes)
@@ -103,7 +103,7 @@ def _get_view_module(view_callable):
if isinstance(original_view, static_view):
if original_view.package_name is not None:
- return '%s:%s' % (
+ return '{}:{}'.format(
original_view.package_name,
original_view.docroot,
)
@@ -117,7 +117,7 @@ def _get_view_module(view_callable):
# for them and remove this logic
view_name = str(view_callable)
- view_module = '%s.%s' % (view_callable.__module__, view_name)
+ view_module = f'{view_callable.__module__}.{view_name}'
# If pyramid wraps something in wsgiapp or wsgiapp2 decorators
# that is currently returned as pyramid.router.decorator, lets
@@ -171,7 +171,7 @@ def get_route_data(route, registry):
if request_method is not None:
if view.get('attr') is not None:
view_callable = getattr(view['callable'], view['attr'])
- view_module = '%s.%s' % (
+ view_module = '{}.{}'.format(
_get_view_module(view['callable']),
view['attr'],
)
diff --git a/src/pyramid/scripts/pserve.py b/src/pyramid/scripts/pserve.py
index 1bcf6c543..0c4782ce5 100644
--- a/src/pyramid/scripts/pserve.py
+++ b/src/pyramid/scripts/pserve.py
@@ -296,9 +296,7 @@ def wsgiref_server_runner(wsgi_app, global_conf, **kw): # pragma: no cover
host = kw.get('host', '0.0.0.0')
port = int(kw.get('port', 8080))
server = make_server(host, port, wsgi_app)
- print(
- 'Starting HTTP server on http://%s:%s' % (host, port), file=sys.stderr
- )
+ print(f'Starting HTTP server on http://{host}:{port}', file=sys.stderr)
server.serve_forever()
@@ -423,7 +421,7 @@ def cherrypy_server_runner(
)
else:
print(
- 'serving on %s://%s:%s' % (protocol, host, port),
+ f'serving on {protocol}://{host}:{port}',
file=sys.stderr,
)
server.start()
diff --git a/src/pyramid/scripts/pshell.py b/src/pyramid/scripts/pshell.py
index 1d345ed31..819a320cf 100644
--- a/src/pyramid/scripts/pshell.py
+++ b/src/pyramid/scripts/pshell.py
@@ -19,7 +19,7 @@ def main(argv=sys.argv, quiet=False):
def python_shell_runner(env, help, interact=interact):
cprt = 'Type "help" for more information.'
- banner = "Python %s on %s\n%s" % (sys.version, sys.platform, cprt)
+ banner = f"Python {sys.version} on {sys.platform}\n{cprt}"
banner += '\n\n' + help + '\n'
interact(banner, local=env)
@@ -222,7 +222,7 @@ class PShellCommand:
self.out('Available shells:')
for name in sorted_names:
- self.out(' %s' % (name,))
+ self.out(f' {name}')
return 0
def find_all_shells(self):
diff --git a/src/pyramid/scripts/pviews.py b/src/pyramid/scripts/pviews.py
index 2731950b4..f35daad45 100644
--- a/src/pyramid/scripts/pviews.py
+++ b/src/pyramid/scripts/pviews.py
@@ -199,13 +199,13 @@ class PViewsCommand:
def output_route_attrs(self, attrs, indent):
route = attrs['matched_route']
- self.out("%sroute name: %s" % (indent, route.name))
- self.out("%sroute pattern: %s" % (indent, route.pattern))
- self.out("%sroute path: %s" % (indent, route.path))
- self.out("%ssubpath: %s" % (indent, '/'.join(attrs['subpath'])))
+ self.out(f"{indent}route name: {route.name}")
+ self.out(f"{indent}route pattern: {route.pattern}")
+ self.out(f"{indent}route path: {route.path}")
+ self.out("{}subpath: {}".format(indent, '/'.join(attrs['subpath'])))
predicates = ', '.join([p.text() for p in route.predicates])
if predicates != '':
- self.out("%sroute predicates (%s)" % (indent, predicates))
+ self.out(f"{indent}route predicates ({predicates})")
def output_view_info(self, view_wrapper, level=1):
indent = " " * level
@@ -214,12 +214,12 @@ class PViewsCommand:
attr = getattr(view_wrapper, '__view_attr__', None)
request_attrs = getattr(view_wrapper, '__request_attrs__', {})
if attr is not None:
- view_callable = "%s.%s.%s" % (module, name, attr)
+ view_callable = f"{module}.{name}.{attr}"
else:
attr = view_wrapper.__class__.__name__
if attr == 'function':
attr = name
- view_callable = "%s.%s" % (module, attr)
+ view_callable = f"{module}.{attr}"
self.out('')
if 'matched_route' in request_attrs:
self.out("%sRoute:" % indent)
@@ -233,14 +233,14 @@ class PViewsCommand:
else:
self.out("%sView:" % indent)
self.out("%s-----" % indent)
- self.out("%s%s" % (indent, view_callable))
+ self.out(f"{indent}{view_callable}")
permission = getattr(view_wrapper, '__permission__', None)
if permission is not None:
- self.out("%srequired permission = %s" % (indent, permission))
+ self.out(f"{indent}required permission = {permission}")
predicates = getattr(view_wrapper, '__predicates__', None)
if predicates is not None:
predicate_text = ', '.join([p.text() for p in predicates])
- self.out("%sview predicates (%s)" % (indent, predicate_text))
+ self.out(f"{indent}view predicates ({predicate_text})")
def run(self):
if not self.args.config_uri or not self.args.url:
diff --git a/src/pyramid/security.py b/src/pyramid/security.py
index e1de9d9a6..39e35a898 100644
--- a/src/pyramid/security.py
+++ b/src/pyramid/security.py
@@ -178,7 +178,7 @@ class PermitsResult(int):
return self.msg
def __repr__(self):
- return '<%s instance at %s with msg %r>' % (
+ return '<{} instance at {} with msg {!r}>'.format(
self.__class__.__name__,
id(self),
self.msg,
diff --git a/src/pyramid/static.py b/src/pyramid/static.py
index 5363c1671..71dd715d7 100644
--- a/src/pyramid/static.py
+++ b/src/pyramid/static.py
@@ -138,11 +138,11 @@ class static_view:
# normalize asset spec or fs path into resource_path
if self.package_name: # package resource
- resource_path = '%s/%s' % (self.docroot.rstrip('/'), path)
+ resource_path = '{}/{}'.format(self.docroot.rstrip('/'), path)
if resource_isdir(self.package_name, resource_path):
if not request.path_url.endswith('/'):
raise self.add_slash_redirect(request)
- resource_path = '%s/%s' % (
+ resource_path = '{}/{}'.format(
resource_path.rstrip('/'),
self.index,
)
diff --git a/src/pyramid/traversal.py b/src/pyramid/traversal.py
index dadeeda64..00b64bae2 100644
--- a/src/pyramid/traversal.py
+++ b/src/pyramid/traversal.py
@@ -82,7 +82,7 @@ def find_resource(resource, path):
view_name = D['view_name']
context = D['context']
if view_name:
- raise KeyError('%r has no subelement %s' % (context, view_name))
+ raise KeyError(f'{context!r} has no subelement {view_name}')
return context
diff --git a/src/pyramid/url.py b/src/pyramid/url.py
index b60bed96d..6b57ec3bb 100644
--- a/src/pyramid/url.py
+++ b/src/pyramid/url.py
@@ -634,7 +634,7 @@ class URLMethodsMixin:
# /absolute/path it's a relative/path; this means its relative
# to the package in which the caller's module is defined.
package = caller_package()
- path = '%s:%s' % (package.__name__, path)
+ path = f'{package.__name__}:{path}'
try:
reg = self.registry
@@ -679,7 +679,7 @@ class URLMethodsMixin:
# /absolute/path it's a relative/path; this means its relative
# to the package in which the caller's module is defined.
package = caller_package()
- path = '%s:%s' % (package.__name__, path)
+ path = f'{package.__name__}:{path}'
kw['_app_url'] = self.script_name
return self.static_url(path, **kw)
@@ -834,7 +834,7 @@ def static_url(path, request, **kw):
# /absolute/path it's a relative/path; this means its relative
# to the package in which the caller's module is defined.
package = caller_package()
- path = '%s:%s' % (package.__name__, path)
+ path = f'{package.__name__}:{path}'
return request.static_url(path, **kw)
@@ -853,7 +853,7 @@ def static_path(path, request, **kw):
# /absolute/path it's a relative/path; this means its relative
# to the package in which the caller's module is defined.
package = caller_package()
- path = '%s:%s' % (package.__name__, path)
+ path = f'{package.__name__}:{path}'
return request.static_path(path, **kw)
diff --git a/src/pyramid/urldispatch.py b/src/pyramid/urldispatch.py
index 7aea1146b..83b29ab4e 100644
--- a/src/pyramid/urldispatch.py
+++ b/src/pyramid/urldispatch.py
@@ -162,7 +162,7 @@ def _compile_route(route):
else:
reg = '[^/]+'
gen.append('%%(%s)s' % name) # native
- name = '(?P<%s>%s)' % (name, reg) # unicode
+ name = f'(?P<{name}>{reg})' # unicode
rpat.append(name)
s = pat.pop() # unicode
if s:
diff --git a/src/pyramid/util.py b/src/pyramid/util.py
index 191768eb3..8d384cc84 100644
--- a/src/pyramid/util.py
+++ b/src/pyramid/util.py
@@ -388,17 +388,17 @@ def object_description(object):
return 'module %s' % modulename
if inspect.ismethod(object):
oself = getattr(object, '__self__', None)
- return 'method %s of class %s.%s' % (
+ return 'method {} of class {}.{}'.format(
object.__name__,
modulename,
oself.__class__.__name__,
)
if inspect.isclass(object):
- dottedname = '%s.%s' % (modulename, object.__name__)
+ dottedname = f'{modulename}.{object.__name__}'
return 'class %s' % dottedname
if inspect.isfunction(object):
- dottedname = '%s.%s' % (modulename, object.__name__)
+ dottedname = f'{modulename}.{object.__name__}'
return 'function %s' % dottedname
return 'object %s' % str(object)
diff --git a/src/pyramid/viewderivers.py b/src/pyramid/viewderivers.py
index 6461c4829..64b973e04 100644
--- a/src/pyramid/viewderivers.py
+++ b/src/pyramid/viewderivers.py
@@ -62,7 +62,7 @@ class DefaultViewMapper:
mapped_view = self.map_class_requestonly(view)
else:
mapped_view = self.map_class_native(view)
- mapped_view.__text__ = 'method %s of %s' % (
+ mapped_view.__text__ = 'method {} of {}'.format(
self.attr or '__call__',
object_description(view),
)
@@ -92,7 +92,7 @@ class DefaultViewMapper:
return _mapped_view(context, request)
if self.attr is not None:
- mapped_view.__text__ = 'attr %s of %s' % (
+ mapped_view.__text__ = 'attr {} of {}'.format(
self.attr,
object_description(view),
)