summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pyramid/authentication.py31
-rw-r--r--pyramid/authorization.py6
-rw-r--r--pyramid/config/__init__.py13
-rw-r--r--pyramid/config/adapters.py2
-rw-r--r--pyramid/config/assets.py8
-rw-r--r--pyramid/config/util.py2
-rw-r--r--pyramid/config/views.py63
-rw-r--r--pyramid/exceptions.py6
-rw-r--r--pyramid/httpexceptions.py74
-rw-r--r--pyramid/i18n.py7
-rw-r--r--pyramid/interfaces.py2
-rw-r--r--pyramid/path.py4
-rw-r--r--pyramid/registry.py8
-rw-r--r--pyramid/request.py9
-rw-r--r--pyramid/scaffolds/copydir.py13
-rw-r--r--pyramid/scaffolds/tests.py6
-rw-r--r--pyramid/scaffolds/zodb/+package+/models.py2
-rw-r--r--pyramid/scripts/pcreate.py2
-rw-r--r--pyramid/scripts/prequest.py14
-rw-r--r--pyramid/scripts/pserve.py12
-rw-r--r--pyramid/scripts/ptweens.py4
-rw-r--r--pyramid/scripts/pviews.py8
-rw-r--r--pyramid/static.py8
-rw-r--r--pyramid/testing.py15
-rw-r--r--pyramid/traversal.py54
-rw-r--r--pyramid/url.py19
-rw-r--r--pyramid/util.py4
-rw-r--r--pyramid/view.py2
-rw-r--r--setup.cfg4
-rw-r--r--tox.ini6
30 files changed, 224 insertions, 184 deletions
diff --git a/pyramid/authentication.py b/pyramid/authentication.py
index e0e241e52..0924b5901 100644
--- a/pyramid/authentication.py
+++ b/pyramid/authentication.py
@@ -36,6 +36,7 @@ from pyramid.util import strings_differ
VALID_TOKEN = re.compile(r"^[A-Za-z][A-Za-z0-9+_-]*$")
+
class CallbackAuthenticationPolicy(object):
""" Abstract class """
@@ -77,10 +78,10 @@ class CallbackAuthenticationPolicy(object):
debug and self._log(
('use of userid %r is disallowed by any built-in Pyramid '
'security policy, returning None' % userid),
- 'authenticated_userid' ,
+ 'authenticated_userid',
request)
return None
-
+
if self.callback is None:
debug and self._log(
'there was no groupfinder callback; returning %r' % (userid,),
@@ -146,7 +147,7 @@ class CallbackAuthenticationPolicy(object):
request
)
return effective_principals
-
+
if self.callback is None:
debug and self._log(
'groupfinder callback is None, so groups is []',
@@ -178,9 +179,10 @@ class CallbackAuthenticationPolicy(object):
effective_principals,),
'effective_principals',
request
- )
+ )
return effective_principals
+
@implementer(IAuthenticationPolicy)
class RepozeWho1AuthenticationPolicy(CallbackAuthenticationPolicy):
""" A :app:`Pyramid` :term:`authentication policy` which
@@ -248,7 +250,7 @@ class RepozeWho1AuthenticationPolicy(CallbackAuthenticationPolicy):
'authenticated_userid',
request)
return None
-
+
if self._clean_principal(userid) is None:
self.debug and self._log(
('use of userid %r is disallowed by any built-in Pyramid '
@@ -336,7 +338,7 @@ class RepozeWho1AuthenticationPolicy(CallbackAuthenticationPolicy):
def remember(self, request, userid, **kw):
""" Store the ``userid`` as ``repoze.who.userid``.
-
+
The identity to authenticated to :mod:`repoze.who`
will contain the given userid as ``userid``, and
provide all keyword arguments as additional identity
@@ -839,15 +841,15 @@ class AuthTktCookieHelper(object):
hashalg='md5', parent_domain=False, domain=None):
serializer = _SimpleSerializer()
-
+
self.cookie_profile = CookieProfile(
- cookie_name = cookie_name,
- secure = secure,
- max_age = max_age,
- httponly = http_only,
- path = path,
+ cookie_name=cookie_name,
+ secure=secure,
+ max_age=max_age,
+ httponly=http_only,
+ path=path,
serializer=serializer
- )
+ )
self.secret = secret
self.cookie_name = cookie_name
@@ -882,7 +884,7 @@ class AuthTktCookieHelper(object):
kw['domains'] = domains
if max_age is not None:
kw['max_age'] = max_age
-
+
headers = profile.get_headers(value, **kw)
return headers
@@ -1187,4 +1189,3 @@ class _SimpleSerializer(object):
def dumps(self, appstruct):
return bytes_(appstruct)
-
diff --git a/pyramid/authorization.py b/pyramid/authorization.py
index 5e7baa19d..4845762ef 100644
--- a/pyramid/authorization.py
+++ b/pyramid/authorization.py
@@ -73,7 +73,7 @@ class ACLAuthorizationPolicy(object):
:class:`pyramid.security.ACLDenied` if not."""
acl = '<No ACL found on any object in resource lineage>'
-
+
for location in lineage(context):
try:
acl = location.__acl__
@@ -121,7 +121,7 @@ class ACLAuthorizationPolicy(object):
allowed_here = set()
denied_here = set()
-
+
if acl and callable(acl):
acl = acl()
@@ -129,7 +129,7 @@ class ACLAuthorizationPolicy(object):
if not is_nonstr_iter(ace_permissions):
ace_permissions = [ace_permissions]
if (ace_action == Allow) and (permission in ace_permissions):
- if not ace_principal in denied_here:
+ if ace_principal not in denied_here:
allowed_here.add(ace_principal)
if (ace_action == Deny) and (permission in ace_permissions):
denied_here.add(ace_principal)
diff --git a/pyramid/config/__init__.py b/pyramid/config/__init__.py
index 2ab654b9a..c89c94538 100644
--- a/pyramid/config/__init__.py
+++ b/pyramid/config/__init__.py
@@ -430,7 +430,7 @@ class Configurator(
if session_factory is not None:
self.set_session_factory(session_factory)
- tweens = aslist(registry.settings.get('pyramid.tweens', []))
+ tweens = aslist(registry.settings.get('pyramid.tweens', []))
for factory in tweens:
self._add_tween(factory, explicit=True)
@@ -950,11 +950,11 @@ class Configurator(
if package is None: # pragma: no cover
package = caller_package()
- ctorkw = {'config':self}
+ ctorkw = {'config': self}
ctorkw.update(kw)
scanner = self.venusian.Scanner(**ctorkw)
-
+
scanner.scan(package, categories=categories, onerror=onerror,
ignore=ignore)
@@ -975,7 +975,7 @@ class Configurator(
# Push the registry onto the stack in case any code that depends on
# the registry threadlocal APIs used in listeners subscribed to the
# IApplicationCreated event.
- self.manager.push({'registry':self.registry, 'request':None})
+ self.manager.push({'registry': self.registry, 'request': None})
try:
self.registry.notify(ApplicationCreated(app))
finally:
@@ -983,11 +983,12 @@ class Configurator(
return app
+
# this class is licensed under the ZPL (stolen from Zope)
class ActionState(object):
def __init__(self):
# NB "actions" is an API, dep'd upon by pyramid_zcml's load_zcml func
- self.actions = []
+ self.actions = []
self._seen_files = set()
def processSpec(self, spec):
@@ -1095,7 +1096,7 @@ class ActionState(object):
ConfigurationExecutionError(t, v, info),
tb)
finally:
- del t, v, tb
+ del t, v, tb
if introspector is not None:
for introspectable in introspectables:
diff --git a/pyramid/config/adapters.py b/pyramid/config/adapters.py
index 3d11980da..a68070134 100644
--- a/pyramid/config/adapters.py
+++ b/pyramid/config/adapters.py
@@ -255,7 +255,7 @@ class AdaptersConfiguratorMixin(object):
See :ref:`changing_the_traverser` for more information.
"""
iface = self.maybe_dotted(iface)
- adapter= self.maybe_dotted(adapter)
+ adapter = self.maybe_dotted(adapter)
def register(iface=iface):
if iface is None:
iface = Interface
diff --git a/pyramid/config/assets.py b/pyramid/config/assets.py
index 9da092f08..c05a7dbf1 100644
--- a/pyramid/config/assets.py
+++ b/pyramid/config/assets.py
@@ -20,7 +20,7 @@ class OverrideProvider(pkg_resources.DefaultProvider):
reg = get_current_registry()
overrides = reg.queryUtility(IPackageOverrides, self.module_name)
return overrides
-
+
def get_resource_filename(self, manager, resource_name):
""" Return a true filesystem path for resource_name,
co-ordinating the extraction with manager, if the resource
@@ -33,12 +33,12 @@ class OverrideProvider(pkg_resources.DefaultProvider):
return filename
return pkg_resources.DefaultProvider.get_resource_filename(
self, manager, resource_name)
-
+
def get_resource_stream(self, manager, resource_name):
""" Return a readable file-like object for resource_name."""
overrides = self._get_overrides()
if overrides is not None:
- stream = overrides.get_stream(resource_name)
+ stream = overrides.get_stream(resource_name)
if stream is not None:
return stream
return pkg_resources.DefaultProvider.get_resource_stream(
@@ -383,5 +383,3 @@ class AssetsConfiguratorMixin(object):
self.action(None, register, introspectables=(intr,))
override_resource = override_asset # bw compat
-
-
diff --git a/pyramid/config/util.py b/pyramid/config/util.py
index 23cdc6be8..0fd9ef4a7 100644
--- a/pyramid/config/util.py
+++ b/pyramid/config/util.py
@@ -151,7 +151,7 @@ class PredicateList(object):
hashes = [hashes]
for h in hashes:
phash.update(bytes_(h))
- weights.append(1 << n+1)
+ weights.append(1 << n + 1)
preds.append(pred)
if kw:
raise ConfigurationError('Unknown predicate values: %r' % (kw,))
diff --git a/pyramid/config/views.py b/pyramid/config/views.py
index 85e252f2f..2b3fa98f6 100644
--- a/pyramid/config/views.py
+++ b/pyramid/config/views.py
@@ -157,7 +157,7 @@ class ViewDeriver(object):
self.decorated_view(
self.rendered_view(
self.mapped_view(
- view)))))))))
+ view)))))))))
@wraps_view
def mapped_view(self, view):
@@ -232,7 +232,11 @@ class ViewDeriver(object):
permission = None
wrapped_view = view
- if self.authn_policy and self.authz_policy and (permission is not None):
+ if (
+ self.authn_policy and
+ self.authz_policy and
+ (permission is not None)
+ ):
def _permitted(context, request):
principals = self.authn_policy.effective_principals(request)
return self.authz_policy.permits(context, principals,
@@ -270,7 +274,8 @@ class ViewDeriver(object):
else:
principals = self.authn_policy.effective_principals(
request)
- msg = str(self.authz_policy.permits(context, principals,
+ msg = str(self.authz_policy.permits(context,
+ principals,
permission))
else:
msg = 'Allowed (no authorization policy in use)'
@@ -293,14 +298,16 @@ class ViewDeriver(object):
preds = self.kw.get('predicates', ())
if not preds:
return view
+
def predicate_wrapper(context, request):
for predicate in preds:
if not predicate(context, request):
view_name = getattr(view, '__name__', view)
raise PredicateMismatch(
- 'predicate mismatch for view %s (%s)' % (
- view_name, predicate.text()))
+ 'predicate mismatch for view %s (%s)' % (
+ view_name, predicate.text()))
return view(context, request)
+
def checker(context, request):
return all((predicate(context, request) for predicate in
preds))
@@ -321,7 +328,7 @@ class ViewDeriver(object):
(accept is None) and
(order == MAX_ORDER) and
(phash == DEFAULT_PHASH)
- ):
+ ):
return view # defaults
def attr_view(context, request):
return view(context, request)
@@ -366,7 +373,7 @@ class ViewDeriver(object):
renderer = renderers.RendererHelper(
name=renderer_name,
package=self.kw.get('package'),
- registry = registry)
+ registry=registry)
if '__view__' in attrs:
view_inst = attrs.pop('__view__')
else:
@@ -630,7 +637,8 @@ class ViewsConfiguratorMixin(object):
http_cache=None,
match_param=None,
check_csrf=None,
- **predicates):
+ **predicates
+ ):
""" Add a :term:`view configuration` to the current
configuration state. Arguments to ``add_view`` are broken
down below into *predicate* arguments and *non-predicate*
@@ -1125,7 +1133,7 @@ class ViewsConfiguratorMixin(object):
if isinstance(renderer, string_types):
renderer = renderers.RendererHelper(
name=renderer, package=self.package,
- registry = self.registry)
+ registry=self.registry)
if accept is not None:
accept = accept.lower()
@@ -1153,7 +1161,11 @@ class ViewsConfiguratorMixin(object):
# is. It can't be computed any sooner because thirdparty
# predicates may not yet exist when add_view is called.
order, preds, phash = predlist.make(self, **pvals)
- view_intr.update({'phash':phash, 'order':order, 'predicates':preds})
+ view_intr.update({
+ 'phash': phash,
+ 'order': order,
+ 'predicates': preds
+ })
return ('view', context, name, route_name, phash)
discriminator = Deferred(discrim_func)
@@ -1350,7 +1362,7 @@ class ViewsConfiguratorMixin(object):
tmpl_intr is not None and
intrspc is not None and
intrspc.get('renderer factories', renderer_type) is not None
- ):
+ ):
# allow failure of registered template factories to be deferred
# until view execution, like other bad renderer factories; if
# we tried to relate this to an existing renderer factory
@@ -1392,7 +1404,7 @@ class ViewsConfiguratorMixin(object):
permission,
permission,
'permission'
- )
+ )
perm_intr['value'] = permission
perm_intr.relate('views', discriminator)
introspectables.append(perm_intr)
@@ -1424,7 +1436,7 @@ class ViewsConfiguratorMixin(object):
factory,
weighs_more_than=weighs_more_than,
weighs_less_than=weighs_less_than
- )
+ )
def add_default_view_predicates(self):
p = pyramid.config.predicates
@@ -1442,7 +1454,7 @@ class ViewsConfiguratorMixin(object):
('physical_path', p.PhysicalPathPredicate),
('effective_principals', p.EffectivePrincipalsPredicate),
('custom', p.CustomPredicate),
- ):
+ ):
self.add_view_predicate(name, factory)
def derive_view(self, view, attr=None, renderer=None):
@@ -1534,7 +1546,7 @@ class ViewsConfiguratorMixin(object):
if isinstance(renderer, string_types):
renderer = renderers.RendererHelper(
name=renderer, package=self.package,
- registry = self.registry)
+ registry=self.registry)
if renderer is None:
# use default renderer if one exists
if self.registry.queryUtility(IRendererFactory) is not None:
@@ -1582,7 +1594,7 @@ class ViewsConfiguratorMixin(object):
mapper=None,
match_param=None,
**predicates
- ):
+ ):
""" Add a forbidden view to the current configuration state. The
view will be called when Pyramid or application code raises a
:exc:`pyramid.httpexceptions.HTTPForbidden` exception and the set of
@@ -1615,7 +1627,7 @@ class ViewsConfiguratorMixin(object):
raise ConfigurationError(
'%s may not be used as an argument to add_forbidden_view'
% arg
- )
+ )
if view is None:
view = default_exceptionresponse_view
@@ -1640,7 +1652,7 @@ class ViewsConfiguratorMixin(object):
permission=NO_PERMISSION_REQUIRED,
attr=attr,
renderer=renderer,
- )
+ )
settings.update(predicates)
return self.add_view(**settings)
@@ -1669,7 +1681,7 @@ class ViewsConfiguratorMixin(object):
match_param=None,
append_slash=False,
**predicates
- ):
+ ):
""" Add a default Not Found View to the current configuration state.
The view will be called when Pyramid or application code raises an
:exc:`pyramid.httpexceptions.HTTPNotFound` exception (e.g. when a
@@ -1709,7 +1721,7 @@ class ViewsConfiguratorMixin(object):
raise ConfigurationError(
'%s may not be used as an argument to add_notfound_view'
% arg
- )
+ )
if view is None:
view = default_exceptionresponse_view
@@ -1732,7 +1744,7 @@ class ViewsConfiguratorMixin(object):
match_param=match_param,
route_name=route_name,
permission=NO_PERMISSION_REQUIRED,
- )
+ )
settings.update(predicates)
if append_slash:
view = self._derive_view(view, attr=attr, renderer=renderer)
@@ -1905,7 +1917,7 @@ def isexception(o):
return (
isinstance(o, Exception) or
(inspect.isclass(o) and (issubclass(o, Exception)))
- )
+ )
@implementer(IStaticURLInfo)
@@ -2019,7 +2031,7 @@ class StaticURLInfo(object):
# register a route using the computed view, permission, and
# pattern, plus any extras passed to us via add_static_view
- pattern = "%s*subpath" % name # name already ends with slash
+ pattern = "%s*subpath" % name # name already ends with slash
if config.route_prefix:
route_name = '__%s/%s' % (config.route_prefix, name)
else:
@@ -2031,12 +2043,12 @@ class StaticURLInfo(object):
permission=permission,
context=context,
renderer=renderer,
- )
+ )
def register():
registrations = self._get_registrations(config.registry)
- names = [ t[0] for t in registrations ]
+ names = [t[0] for t in registrations]
if name in names:
idx = names.index(name)
@@ -2053,4 +2065,3 @@ class StaticURLInfo(object):
intr['spec'] = spec
config.action(None, callable=register, introspectables=(intr,))
-
diff --git a/pyramid/exceptions.py b/pyramid/exceptions.py
index c59d109df..c1481ce9c 100644
--- a/pyramid/exceptions.py
+++ b/pyramid/exceptions.py
@@ -33,7 +33,7 @@ class PredicateMismatch(HTTPNotFound):
be treated as :class:`HTTPNotFound`` by any exception view
registrations. Thus, typically, this exception will not be seen
publicly.
-
+
However, this exception will be raised if the predicates of all
views configured to handle another exception context cannot be
successfully matched. For instance, if a view is configured to
@@ -79,7 +79,7 @@ class ConfigurationConflictError(ConfigurationError):
r.append(" For: %s" % (discriminator, ))
for info in infos:
for line in str(info).rstrip().split(CR):
- r.append(" "+line)
+ r.append(" " + line)
return CR.join(r)
@@ -109,5 +109,3 @@ class CyclicDependencyError(Exception):
L.append('%r sorts before %r' % (dependent, dependees))
msg = 'Implicit ordering cycle:' + '; '.join(L)
return msg
-
-
diff --git a/pyramid/httpexceptions.py b/pyramid/httpexceptions.py
index a30129e16..c7a9e9da9 100644
--- a/pyramid/httpexceptions.py
+++ b/pyramid/httpexceptions.py
@@ -116,10 +116,10 @@ Substitution of response headers into template values is always performed.
Substitution of WSGI environment values is performed if a ``request`` is
passed to the exception's constructor.
-The subclasses of :class:`~_HTTPMove`
+The subclasses of :class:`~_HTTPMove`
(:class:`~HTTPMultipleChoices`, :class:`~HTTPMovedPermanently`,
:class:`~HTTPFound`, :class:`~HTTPSeeOther`, :class:`~HTTPUseProxy` and
-:class:`~HTTPTemporaryRedirect`) are redirections that require a ``Location``
+:class:`~HTTPTemporaryRedirect`) are redirections that require a ``Location``
field. Reflecting this, these subclasses have one additional keyword argument:
``location``, which indicates the location to which to redirect.
"""
@@ -296,7 +296,7 @@ class HTTPError(HTTPException):
base class for exceptions with status codes in the 400s and 500s
This is an exception which indicates that an error has occurred,
- and that any work in progress should not be committed.
+ and that any work in progress should not be committed.
"""
class HTTPRedirection(HTTPException):
@@ -324,7 +324,7 @@ class HTTPOk(HTTPSuccessful):
subclass of :class:`~HTTPSuccessful`
Indicates that the request has succeeded.
-
+
code: 200, title: OK
"""
code = 200
@@ -336,7 +336,7 @@ class HTTPCreated(HTTPSuccessful):
This indicates that request has been fulfilled and resulted in a new
resource being created.
-
+
code: 201, title: Created
"""
code = 201
@@ -375,7 +375,7 @@ class HTTPNoContent(HTTPSuccessful):
This indicates that the server has fulfilled the request but does
not need to return an entity-body, and might want to return updated
metainformation.
-
+
code: 204, title: No Content
"""
code = 204
@@ -389,7 +389,7 @@ class HTTPResetContent(HTTPSuccessful):
This indicates that the server has fulfilled the request and
the user agent SHOULD reset the document view which caused the
request to be sent.
-
+
code: 205, title: Reset Content
"""
code = 205
@@ -402,7 +402,7 @@ class HTTPPartialContent(HTTPSuccessful):
This indicates that the server has fulfilled the partial GET
request for the resource.
-
+
code: 206, title: Partial Content
"""
code = 206
@@ -460,7 +460,7 @@ class HTTPMultipleChoices(_HTTPMove):
and agent-driven negotiation information is being provided so that
the user can select a preferred representation and redirect its
request to that location.
-
+
code: 300, title: Multiple Choices
"""
code = 300
@@ -485,7 +485,7 @@ class HTTPFound(_HTTPMove):
This indicates that the requested resource resides temporarily under
a different URI.
-
+
code: 302, title: Found
"""
code = 302
@@ -501,7 +501,7 @@ class HTTPSeeOther(_HTTPMove):
This indicates that the response to the request can be found under
a different URI and SHOULD be retrieved using a GET method on that
resource.
-
+
code: 303, title: See Other
"""
code = 303
@@ -528,7 +528,7 @@ class HTTPUseProxy(_HTTPMove):
This indicates that the requested resource MUST be accessed through
the proxy given by the Location field.
-
+
code: 305, title: Use Proxy
"""
# Not a move, but looks a little like one
@@ -543,7 +543,7 @@ class HTTPTemporaryRedirect(_HTTPMove):
This indicates that the requested resource resides temporarily
under a different URI.
-
+
code: 307, title: Temporary Redirect
"""
code = 307
@@ -583,7 +583,7 @@ class HTTPUnauthorized(HTTPClientError):
subclass of :class:`~HTTPClientError`
This indicates that the request requires user authentication.
-
+
code: 401, title: Unauthorized
"""
code = 401
@@ -597,7 +597,7 @@ class HTTPUnauthorized(HTTPClientError):
class HTTPPaymentRequired(HTTPClientError):
"""
subclass of :class:`~HTTPClientError`
-
+
code: 402, title: Payment Required
"""
code = 402
@@ -636,7 +636,7 @@ class HTTPForbidden(HTTPClientError):
# differences from webob.exc.HTTPForbidden:
#
# - accepts a ``result`` keyword argument
- #
+ #
# - overrides constructor to set ``self.result``
#
# differences from older ``pyramid.exceptions.Forbidden``:
@@ -659,7 +659,7 @@ class HTTPNotFound(HTTPClientError):
This indicates that the server did not find anything matching the
Request-URI.
-
+
code: 404, title: Not Found
Raise this exception within :term:`view` code to immediately
@@ -702,7 +702,7 @@ class HTTPNotAcceptable(HTTPClientError):
capable of generating response entities which have content
characteristics not acceptable according to the accept headers
sent in the request.
-
+
code: 406, title: Not Acceptable
"""
# differences from webob.exc.HTTPNotAcceptable:
@@ -717,7 +717,7 @@ class HTTPProxyAuthenticationRequired(HTTPClientError):
This is similar to 401, but indicates that the client must first
authenticate itself with the proxy.
-
+
code: 407, title: Proxy Authentication Required
"""
code = 407
@@ -730,7 +730,7 @@ class HTTPRequestTimeout(HTTPClientError):
This indicates that the client did not produce a request within
the time that the server was prepared to wait.
-
+
code: 408, title: Request Timeout
"""
code = 408
@@ -744,7 +744,7 @@ class HTTPConflict(HTTPClientError):
This indicates that the request could not be completed due to a
conflict with the current state of the resource.
-
+
code: 409, title: Conflict
"""
code = 409
@@ -758,7 +758,7 @@ class HTTPGone(HTTPClientError):
This indicates that the requested resource is no longer available
at the server and no forwarding address is known.
-
+
code: 410, title: Gone
"""
code = 410
@@ -772,7 +772,7 @@ class HTTPLengthRequired(HTTPClientError):
This indicates that the server refuses to accept the request
without a defined Content-Length.
-
+
code: 411, title: Length Required
"""
code = 411
@@ -786,7 +786,7 @@ class HTTPPreconditionFailed(HTTPClientError):
This indicates that the precondition given in one or more of the
request-header fields evaluated to false when it was tested on the
server.
-
+
code: 412, title: Precondition Failed
"""
code = 412
@@ -814,7 +814,7 @@ class HTTPRequestURITooLong(HTTPClientError):
This indicates that the server is refusing to service the request
because the Request-URI is longer than the server is willing to
interpret.
-
+
code: 414, title: Request-URI Too Long
"""
code = 414
@@ -828,7 +828,7 @@ class HTTPUnsupportedMediaType(HTTPClientError):
This indicates that the server is refusing to service the request
because the entity of the request is in a format not supported by
the requested resource for the requested method.
-
+
code: 415, title: Unsupported Media Type
"""
# differences from webob.exc.HTTPUnsupportedMediaType:
@@ -846,7 +846,7 @@ class HTTPRequestRangeNotSatisfiable(HTTPClientError):
range-specifier values in this field overlap the current extent
of the selected resource, and the request did not include an
If-Range request-header field.
-
+
code: 416, title: Request Range Not Satisfiable
"""
code = 416
@@ -859,7 +859,7 @@ class HTTPExpectationFailed(HTTPClientError):
This indidcates that the expectation given in an Expect
request-header field could not be met by this server.
-
+
code: 417, title: Expectation Failed
"""
code = 417
@@ -871,13 +871,13 @@ class HTTPUnprocessableEntity(HTTPClientError):
subclass of :class:`~HTTPClientError`
This indicates that the server is unable to process the contained
- instructions.
+ instructions.
May be used to notify the client that their JSON/XML is well formed, but
not correct for the current request.
See RFC4918 section 11 for more information.
-
+
code: 422, title: Unprocessable Entity
"""
## Note: from WebDAV
@@ -890,7 +890,7 @@ class HTTPLocked(HTTPClientError):
subclass of :class:`~HTTPClientError`
This indicates that the resource is locked.
-
+
code: 423, title: Locked
"""
## Note: from WebDAV
@@ -904,7 +904,7 @@ class HTTPFailedDependency(HTTPClientError):
This indicates that the method could not be performed because the
requested action depended on another action and that action failed.
-
+
code: 424, title: Failed Dependency
"""
## Note: from WebDAV
@@ -1003,7 +1003,7 @@ class HTTPNotImplemented(HTTPServerError):
This indicates that the server does not support the functionality
required to fulfill the request.
-
+
code: 501, title: Not Implemented
"""
# differences from webob.exc.HTTPNotAcceptable:
@@ -1019,7 +1019,7 @@ class HTTPBadGateway(HTTPServerError):
This indicates that the server, while acting as a gateway or proxy,
received an invalid response from the upstream server it accessed
in attempting to fulfill the request.
-
+
code: 502, title: Bad Gateway
"""
code = 502
@@ -1032,7 +1032,7 @@ class HTTPServiceUnavailable(HTTPServerError):
This indicates that the server is currently unable to handle the
request due to a temporary overloading or maintenance of the server.
-
+
code: 503, title: Service Unavailable
"""
code = 503
@@ -1075,7 +1075,7 @@ class HTTPInsufficientStorage(HTTPServerError):
This indicates that the server does not have enough space to save
the resource.
-
+
code: 507, title: Insufficient Storage
"""
code = 507
@@ -1100,7 +1100,7 @@ def default_exceptionresponse_view(context, request):
context = request.exception or context
return context # assumed to be an IResponse
-status_map={}
+status_map = {}
code = None
for name, value in list(globals().items()):
if (isinstance(value, class_types) and
diff --git a/pyramid/i18n.py b/pyramid/i18n.py
index 4c8f4b55d..dac3a609a 100644
--- a/pyramid/i18n.py
+++ b/pyramid/i18n.py
@@ -8,9 +8,6 @@ from translationstring import (
TranslationStringFactory, # API
)
-TranslationString = TranslationString # PyFlakes
-TranslationStringFactory = TranslationStringFactory # PyFlakes
-
from pyramid.compat import PY3
from pyramid.decorator import reify
@@ -22,6 +19,10 @@ from pyramid.interfaces import (
from pyramid.threadlocal import get_current_registry
+TranslationString = TranslationString # PyFlakes
+TranslationStringFactory = TranslationStringFactory # PyFlakes
+
+
class Localizer(object):
"""
An object providing translation and pluralizations related to
diff --git a/pyramid/interfaces.py b/pyramid/interfaces.py
index 0f1b4efc3..f00f106bb 100644
--- a/pyramid/interfaces.py
+++ b/pyramid/interfaces.py
@@ -149,7 +149,7 @@ class IResponse(Interface):
"""Gets and sets and deletes the Content-MD5 header. For more
information on Content-MD5 see RFC 2616 section 14.14.""")
- content_range = Attribute(
+ content_range = Attribute(
"""Gets and sets and deletes the Content-Range header. For more
information on Content-Range see section 14.16. Converts using
ContentRange object.""")
diff --git a/pyramid/path.py b/pyramid/path.py
index f2d8fff55..b79c5a6ac 100644
--- a/pyramid/path.py
+++ b/pyramid/path.py
@@ -15,7 +15,7 @@ init_names = [ '__init__%s' % x[0] for x in imp.get_suffixes() if
def caller_path(path, level=2):
if not os.path.isabs(path):
- module = caller_module(level+1)
+ module = caller_module(level + 1)
prefix = package_path(module)
path = os.path.join(prefix, path)
return path
@@ -53,7 +53,7 @@ def package_of(pkg_or_module):
def caller_package(level=2, caller_module=caller_module):
# caller_module in arglist for tests
- module = caller_module(level+1)
+ module = caller_module(level + 1)
f = getattr(module, '__file__', '')
if (('__init__.py' in f) or ('__init__$py' in f)): # empty at >>>
# Module is a package
diff --git a/pyramid/registry.py b/pyramid/registry.py
index 8c05940b9..0610a274e 100644
--- a/pyramid/registry.py
+++ b/pyramid/registry.py
@@ -117,10 +117,10 @@ class Introspector(object):
values = category.values()
values = sorted(set(values), key=sort_key)
return [
- {'introspectable':intr,
- 'related':self.related(intr)}
- for intr in values
- ]
+ {'introspectable': intr,
+ 'related': self.related(intr)}
+ for intr in values
+ ]
def categorized(self, sort_key=None):
L = []
diff --git a/pyramid/request.py b/pyramid/request.py
index b2e2efe05..be9ce0db3 100644
--- a/pyramid/request.py
+++ b/pyramid/request.py
@@ -20,7 +20,7 @@ from pyramid.compat import (
from pyramid.decorator import reify
from pyramid.i18n import LocalizerRequestMixin
-from pyramid.response import Response, _get_response_factory
+from pyramid.response import Response, _get_response_factory
from pyramid.security import (
AuthenticationAPIMixin,
AuthorizationAPIMixin,
@@ -59,7 +59,7 @@ class CallbackMethodsMixin(object):
called if an exception happens in application code, or if the
response object returned by :term:`view` code is invalid.
- All response callbacks are called *after* the tweens and
+ All response callbacks are called *after* the tweens and
*before* the :class:`pyramid.events.NewResponse` event is sent.
Errors raised by callbacks are not handled specially. They
@@ -231,7 +231,7 @@ class Request(
def json_body(self):
return json.loads(text_(self.body, self.charset))
-
+
def route_request_iface(name, bases=()):
# zope.interface treats the __name__ as the __doc__ and changes __name__
# to None for interfaces that contain spaces if you do not pass a
@@ -245,9 +245,10 @@ def route_request_iface(name, bases=()):
iface.combined = InterfaceClass(
'%s_combined_IRequest' % name,
bases=(iface, IRequest),
- __doc__ = 'route_request_iface-generated combined interface')
+ __doc__='route_request_iface-generated combined interface')
return iface
+
def add_global_response_headers(request, headerlist):
def add_headers(request, response):
for k, v in headerlist:
diff --git a/pyramid/scaffolds/copydir.py b/pyramid/scaffolds/copydir.py
index 3b871dc19..5eef2c40a 100644
--- a/pyramid/scaffolds/copydir.py
+++ b/pyramid/scaffolds/copydir.py
@@ -15,6 +15,7 @@ from pyramid.compat import (
fsenc = sys.getfilesystemencoding()
+
class SkipTemplate(Exception):
"""
Raised to indicate that the template should not be copied over.
@@ -61,7 +62,7 @@ def copy_dir(source, dest, vars, verbosity, simulate, indent=0,
names = sorted(pkg_resources.resource_listdir(source[0], source[1]))
else:
names = sorted(os.listdir(source))
- pad = ' '*(indent*2)
+ pad = ' ' * (indent * 2)
if not os.path.exists(dest):
if verbosity >= 1:
out('%sCreating %s/' % (pad, dest))
@@ -90,7 +91,7 @@ def copy_dir(source, dest, vars, verbosity, simulate, indent=0,
if verbosity:
out('%sRecursing into %s' % (pad, os.path.basename(full)))
copy_dir((source[0], full), dest_full, vars, verbosity, simulate,
- indent=indent+1, sub_vars=sub_vars,
+ indent=indent + 1, sub_vars=sub_vars,
interactive=interactive, overwrite=overwrite,
template_renderer=template_renderer, out_=out_)
continue
@@ -98,7 +99,7 @@ def copy_dir(source, dest, vars, verbosity, simulate, indent=0,
if verbosity:
out('%sRecursing into %s' % (pad, os.path.basename(full)))
copy_dir(full, dest_full, vars, verbosity, simulate,
- indent=indent+1, sub_vars=sub_vars,
+ indent=indent + 1, sub_vars=sub_vars,
interactive=interactive, overwrite=overwrite,
template_renderer=template_renderer, out_=out_)
continue
@@ -186,13 +187,13 @@ def query_interactive(src_fn, dest_fn, src_content, dest_content,
src_content.splitlines(),
dest_fn, src_fn))
added = len([l for l in u_diff if l.startswith('+')
- and not l.startswith('+++')])
+ and not l.startswith('+++')])
removed = len([l for l in u_diff if l.startswith('-')
and not l.startswith('---')])
if added > removed:
- msg = '; %i lines added' % (added-removed)
+ msg = '; %i lines added' % (added - removed)
elif removed > added:
- msg = '; %i lines removed' % (removed-added)
+ msg = '; %i lines removed' % (removed - added)
else:
msg = ''
out('Replace %i bytes with %i bytes (%i/%i lines changed%s)' % (
diff --git a/pyramid/scaffolds/tests.py b/pyramid/scaffolds/tests.py
index dfbf9b6cf..e26162f2d 100644
--- a/pyramid/scaffolds/tests.py
+++ b/pyramid/scaffolds/tests.py
@@ -8,7 +8,8 @@ import time
try:
import httplib
except ImportError: # pragma: no cover
- import http.client as httplib #py3
+ import http.client as httplib # py3
+
class TemplateTest(object):
def make_venv(self, directory): # pragma: no cover
@@ -20,6 +21,7 @@ class TemplateTest(object):
site_packages=False,
clear=False,
unzip_setuptools=True)
+
def install(self, tmpl_name): # pragma: no cover
try:
self.old_cwd = os.getcwd()
@@ -58,7 +60,7 @@ class TemplateTest(object):
if hastoolbar:
assert toolbarchunk in data, ininame
else:
- assert not toolbarchunk in data, ininame
+ assert toolbarchunk not in data, ininame
finally:
proc.terminate()
finally:
diff --git a/pyramid/scaffolds/zodb/+package+/models.py b/pyramid/scaffolds/zodb/+package+/models.py
index a94b36ef4..e5aa3e9f7 100644
--- a/pyramid/scaffolds/zodb/+package+/models.py
+++ b/pyramid/scaffolds/zodb/+package+/models.py
@@ -6,7 +6,7 @@ class MyModel(PersistentMapping):
def appmaker(zodb_root):
- if not 'app_root' in zodb_root:
+ if 'app_root' not in zodb_root:
app_root = MyModel()
zodb_root['app_root'] = app_root
import transaction
diff --git a/pyramid/scripts/pcreate.py b/pyramid/scripts/pcreate.py
index d2c5f8c27..f6376f575 100644
--- a/pyramid/scripts/pcreate.py
+++ b/pyramid/scripts/pcreate.py
@@ -132,7 +132,7 @@ class PCreateCommand(object):
for scaffold in scaffolds:
self.out(' %s:%s %s' % (
scaffold.name,
- ' '*(max_name-len(scaffold.name)), scaffold.summary))
+ ' ' * (max_name - len(scaffold.name)), scaffold.summary))
else:
self.out('No scaffolds available')
return 0
diff --git a/pyramid/scripts/prequest.py b/pyramid/scripts/prequest.py
index 34eeadf32..61e422c64 100644
--- a/pyramid/scripts/prequest.py
+++ b/pyramid/scripts/prequest.py
@@ -52,8 +52,10 @@ class PRequestCommand(object):
parser.add_option(
'-n', '--app-name',
dest='app_name',
- metavar= 'NAME',
- help="Load the named application from the config file (default 'main')",
+ metavar='NAME',
+ help=(
+ "Load the named application from the config file (default 'main')"
+ ),
type="string",
)
parser.add_option(
@@ -62,8 +64,10 @@ class PRequestCommand(object):
metavar='NAME:VALUE',
type='string',
action='append',
- help="Header to add to request (you can use this option multiple times)"
- )
+ help=(
+ "Header to add to request (you can use this option multiple times)"
+ ),
+ )
parser.add_option(
'-d', '--display-headers',
dest='display_headers',
@@ -167,7 +171,7 @@ class PRequestCommand(object):
if name.lower() == 'content-type':
name = 'CONTENT_TYPE'
else:
- name = 'HTTP_'+name.upper().replace('-', '_')
+ name = 'HTTP_' + name.upper().replace('-', '_')
environ[name] = value
request = Request.blank(path, environ=environ)
diff --git a/pyramid/scripts/pserve.py b/pyramid/scripts/pserve.py
index 314efd839..2c508170d 100644
--- a/pyramid/scripts/pserve.py
+++ b/pyramid/scripts/pserve.py
@@ -138,7 +138,7 @@ class PServeCommand(object):
default=default_verbosity,
dest='verbose',
action='count',
- help="Set verbose level (default "+str(default_verbosity)+")")
+ help="Set verbose level (default " + str(default_verbosity) + ")")
parser.add_option(
'-q', '--quiet',
action='store_const',
@@ -563,7 +563,9 @@ class PServeCommand(object):
def change_user_group(self, user, group): # pragma: no cover
if not user and not group:
return
- import pwd, grp
+ import pwd
+ import grp
+
uid = gid = None
if group:
try:
@@ -597,6 +599,7 @@ class PServeCommand(object):
if uid:
os.setuid(uid)
+
class LazyWriter(object):
"""
@@ -749,11 +752,12 @@ class _methodwrapper(object):
self.type = type
def __call__(self, *args, **kw):
- assert not 'self' in kw and not 'cls' in kw, (
+ assert 'self' not in kw and 'cls' not in kw, (
"You cannot use 'self' or 'cls' arguments to a "
"classinstancemethod")
return self.func(*((self.obj, self.type) + args), **kw)
+
class Monitor(object): # pragma: no cover
"""
A file monitor and server restarter.
@@ -847,7 +851,7 @@ class Monitor(object): # pragma: no cover
continue
if filename.endswith('.pyc') and os.path.exists(filename[:-1]):
mtime = max(os.stat(filename[:-1]).st_mtime, mtime)
- if not filename in self.module_mtimes:
+ if filename not in self.module_mtimes:
self.module_mtimes[filename] = mtime
elif self.module_mtimes[filename] < mtime:
print("%s changed; reloading..." % filename)
diff --git a/pyramid/scripts/ptweens.py b/pyramid/scripts/ptweens.py
index ad52d5d8f..a7aa009da 100644
--- a/pyramid/scripts/ptweens.py
+++ b/pyramid/scripts/ptweens.py
@@ -42,7 +42,7 @@ class PTweensCommand(object):
def _get_tweens(self, registry):
from pyramid.config import Configurator
- config = Configurator(registry = registry)
+ config = Configurator(registry=registry)
return config.registry.queryUtility(ITweens)
def out(self, msg): # pragma: no cover
@@ -52,7 +52,7 @@ class PTweensCommand(object):
def show_chain(self, chain):
fmt = '%-10s %-65s'
self.out(fmt % ('Position', 'Name'))
- self.out(fmt % ('-'*len('Position'), '-'*len('Name')))
+ self.out(fmt % ('-' * len('Position'), '-' * len('Name')))
self.out(fmt % ('-', INGRESS))
for pos, (name, _) in enumerate(chain):
self.out(fmt % (pos, name))
diff --git a/pyramid/scripts/pviews.py b/pyramid/scripts/pviews.py
index 5e92ec4e6..15eebdfb4 100644
--- a/pyramid/scripts/pviews.py
+++ b/pyramid/scripts/pviews.py
@@ -140,10 +140,8 @@ class PViewsCommand(object):
if traverser is None:
traverser = ResourceTreeTraverser(root)
tdict = traverser(request)
- context, view_name, subpath, traversed, vroot, vroot_path =(
- tdict['context'], tdict['view_name'], tdict['subpath'],
- tdict['traversed'], tdict['virtual_root'],
- tdict['virtual_root_path'])
+ context, view_name = (tdict['context'], tdict['view_name'])
+
attrs.update(tdict)
# find a view callable
@@ -201,7 +199,7 @@ class PViewsCommand(object):
if not IMultiView.providedBy(view_wrapper):
# single view for this route, so repeat call without route data
del request_attrs['matched_route']
- self.output_view_info(view_wrapper, level+1)
+ self.output_view_info(view_wrapper, level + 1)
else:
self.out("%sView:" % indent)
self.out("%s-----" % indent)
diff --git a/pyramid/static.py b/pyramid/static.py
index c4a9e3cc4..095c59a52 100644
--- a/pyramid/static.py
+++ b/pyramid/static.py
@@ -107,12 +107,14 @@ class static_view(object):
raise HTTPNotFound('Out of bounds: %s' % request.url)
if self.package_name: # package resource
-
- resource_path ='%s/%s' % (self.docroot.rstrip('/'), path)
+ resource_path = '%s/%s' % (self.docroot.rstrip('/'), path)
if resource_isdir(self.package_name, resource_path):
if not request.path_url.endswith('/'):
self.add_slash_redirect(request)
- resource_path = '%s/%s' % (resource_path.rstrip('/'),self.index)
+ resource_path = '%s/%s' % (
+ resource_path.rstrip('/'), self.index
+ )
+
if not resource_exists(self.package_name, resource_path):
raise HTTPNotFound(request.url)
filepath = resource_filename(self.package_name, resource_path)
diff --git a/pyramid/testing.py b/pyramid/testing.py
index 667e6af4e..fd24934ac 100644
--- a/pyramid/testing.py
+++ b/pyramid/testing.py
@@ -21,7 +21,7 @@ from pyramid.compat import (
from pyramid.config import Configurator
from pyramid.decorator import reify
from pyramid.path import caller_package
-from pyramid.response import Response, _get_response_factory
+from pyramid.response import _get_response_factory
from pyramid.registry import Registry
from pyramid.security import (
@@ -154,9 +154,10 @@ class DummyTemplateRenderer(object):
if myval != v:
raise AssertionError(
'\nasserted value for %s: %r\nactual value: %r' % (
- k, v, myval))
+ k, v, myval))
return True
+
class DummyResource:
""" A dummy :app:`Pyramid` :term:`resource` object."""
def __init__(self, __name__=None, __parent__=None, __provides__=None,
@@ -383,11 +384,12 @@ class DummyRequest(
@reify
def response(self):
- f = _get_response_factory(self.registry)
+ f = _get_response_factory(self.registry)
return f(self)
have_zca = True
+
def setUp(registry=None, request=None, hook_zca=True, autocommit=True,
settings=None, package=None):
"""
@@ -577,10 +579,13 @@ def skip_on(*platforms): # pragma: no cover
skip = True
if platform == 'py3' and PY3:
skip = True
+
def decorator(func):
if isinstance(func, class_types):
- if skip: return None
- else: return func
+ if skip:
+ return None
+ else:
+ return func
else:
def wrapper(*args, **kw):
if skip:
diff --git a/pyramid/traversal.py b/pyramid/traversal.py
index 4c275c4c1..ae9530258 100644
--- a/pyramid/traversal.py
+++ b/pyramid/traversal.py
@@ -14,10 +14,6 @@ from pyramid.interfaces import (
VH_ROOT_KEY,
)
-with warnings.catch_warnings():
- warnings.filterwarnings('ignore')
- from pyramid.interfaces import IContextURL
-
from pyramid.compat import (
PY3,
native_,
@@ -35,6 +31,10 @@ from pyramid.exceptions import URLDecodeError
from pyramid.location import lineage
from pyramid.threadlocal import get_current_registry
+with warnings.catch_warnings():
+ warnings.filterwarnings('ignore')
+ from pyramid.interfaces import IContextURL
+
empty = text_('')
def find_root(resource):
@@ -664,10 +664,10 @@ class ResourceTreeTraverser(object):
if VH_ROOT_KEY in environ:
# HTTP_X_VHM_ROOT
- vroot_path = decode_path_info(environ[VH_ROOT_KEY])
+ vroot_path = decode_path_info(environ[VH_ROOT_KEY])
vroot_tuple = split_path_info(vroot_path)
vpath = vroot_path + path # both will (must) be unicode or asciistr
- vroot_idx = len(vroot_tuple) -1
+ vroot_idx = len(vroot_tuple) - 1
else:
vroot_tuple = ()
vpath = path
@@ -689,34 +689,34 @@ class ResourceTreeTraverser(object):
vpath_tuple = split_path_info(vpath)
for segment in vpath_tuple:
if segment[:2] == view_selector:
- return {'context':ob,
- 'view_name':segment[2:],
- 'subpath':vpath_tuple[i+1:],
- 'traversed':vpath_tuple[:vroot_idx+i+1],
- 'virtual_root':vroot,
- 'virtual_root_path':vroot_tuple,
- 'root':root}
+ return {'context': ob,
+ 'view_name': segment[2:],
+ 'subpath': vpath_tuple[i + 1:],
+ 'traversed': vpath_tuple[:vroot_idx + i + 1],
+ 'virtual_root': vroot,
+ 'virtual_root_path': vroot_tuple,
+ 'root': root}
try:
getitem = ob.__getitem__
except AttributeError:
- return {'context':ob,
- 'view_name':segment,
- 'subpath':vpath_tuple[i+1:],
- 'traversed':vpath_tuple[:vroot_idx+i+1],
- 'virtual_root':vroot,
- 'virtual_root_path':vroot_tuple,
- 'root':root}
+ return {'context': ob,
+ 'view_name': segment,
+ 'subpath': vpath_tuple[i + 1:],
+ 'traversed': vpath_tuple[:vroot_idx + i + 1],
+ 'virtual_root': vroot,
+ 'virtual_root_path': vroot_tuple,
+ 'root': root}
try:
next = getitem(segment)
except KeyError:
- return {'context':ob,
- 'view_name':segment,
- 'subpath':vpath_tuple[i+1:],
- 'traversed':vpath_tuple[:vroot_idx+i+1],
- 'virtual_root':vroot,
- 'virtual_root_path':vroot_tuple,
- 'root':root}
+ return {'context': ob,
+ 'view_name': segment,
+ 'subpath': vpath_tuple[i + 1:],
+ 'traversed': vpath_tuple[:vroot_idx + i + 1],
+ 'virtual_root': vroot,
+ 'virtual_root_path': vroot_tuple,
+ 'root': root}
if i == vroot_idx:
vroot = next
ob = next
diff --git a/pyramid/url.py b/pyramid/url.py
index a0f3d7f2f..b004c40ec 100644
--- a/pyramid/url.py
+++ b/pyramid/url.py
@@ -606,10 +606,11 @@ class URLMethodsMixin(object):
if local_url is not None:
# the resource handles its own url generation
d = dict(
- virtual_path = virtual_path,
- physical_path = url_adapter.physical_path,
- app_url = app_url,
- )
+ virtual_path=virtual_path,
+ physical_path=url_adapter.physical_path,
+ app_url=app_url,
+ )
+
# allow __resource_url__ to punt by returning None
resource_url = local_url(self, d)
@@ -698,7 +699,7 @@ class URLMethodsMixin(object):
"""
if not os.path.isabs(path):
- if not ':' in path:
+ if ':' not in path:
# if it's not a package:relative/name and it's not an
# /absolute/path it's a relative/path; this means its relative
# to the package in which the caller's module is defined.
@@ -743,7 +744,7 @@ class URLMethodsMixin(object):
to ``static_path`` will be ignored.
"""
if not os.path.isabs(path):
- if not ':' in path:
+ if ':' not in path:
# if it's not a package:relative/name and it's not an
# /absolute/path it's a relative/path; this means its relative
# to the package in which the caller's module is defined.
@@ -884,6 +885,7 @@ def resource_url(resource, request, *elements, **kw):
model_url = resource_url # b/w compat (forever)
+
def static_url(path, request, **kw):
"""
This is a backwards compatibility function. Its result is the same as
@@ -894,7 +896,7 @@ def static_url(path, request, **kw):
See :meth:`pyramid.request.Request.static_url` for more information.
"""
if not os.path.isabs(path):
- if not ':' in path:
+ if ':' not in path:
# if it's not a package:relative/name and it's not an
# /absolute/path it's a relative/path; this means its relative
# to the package in which the caller's module is defined.
@@ -902,6 +904,7 @@ def static_url(path, request, **kw):
path = '%s:%s' % (package.__name__, path)
return request.static_url(path, **kw)
+
def static_path(path, request, **kw):
"""
This is a backwards compatibility function. Its result is the same as
@@ -912,7 +915,7 @@ def static_path(path, request, **kw):
See :meth:`pyramid.request.Request.static_path` for more information.
"""
if not os.path.isabs(path):
- if not ':' in path:
+ if ':' not in path:
# if it's not a package:relative/name and it's not an
# /absolute/path it's a relative/path; this means its relative
# to the package in which the caller's module is defined.
diff --git a/pyramid/util.py b/pyramid/util.py
index 7e8535aaf..bbae56f02 100644
--- a/pyramid/util.py
+++ b/pyramid/util.py
@@ -430,7 +430,7 @@ class TopologicalSorter(object):
order.append((a, b))
def add_node(node):
- if not node in graph:
+ if node not in graph:
roots.append(node)
graph[node] = [0] # 0 = number of arcs coming into this node
@@ -503,7 +503,7 @@ def viewdefaults(wrapped):
view = self.maybe_dotted(view)
if inspect.isclass(view):
defaults = getattr(view, '__view_defaults__', {}).copy()
- if not '_backframes' in kw:
+ if '_backframes' not in kw:
kw['_backframes'] = 1 # for action_method
defaults.update(kw)
return wrapped(self, *arg, **defaults)
diff --git a/pyramid/view.py b/pyramid/view.py
index 02ac8849f..1dd10e2ed 100644
--- a/pyramid/view.py
+++ b/pyramid/view.py
@@ -268,7 +268,7 @@ class AppendSlashNotFoundViewFactory(object):
qs = request.query_string
if qs:
qs = '?' + qs
- return HTTPFound(location=request.path+'/'+qs)
+ return HTTPFound(location=request.path + '/' + qs)
return self.notfound_view(context, request)
append_slash_notfound_view = AppendSlashNotFoundViewFactory()
diff --git a/setup.cfg b/setup.cfg
index 9633b6980..7d905e370 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -16,3 +16,7 @@ docs = develop easy_install pyramid[docs]
[bdist_wheel]
universal = 1
+[flake8]
+ignore = E301,E302,E731,E261,E123,E121,E128,E129,E125,W291,E501,W293,E303,W391,E266,E231,E201,E202,E127,E262
+exclude = pyramid/tests/,pyramid/compat.py,pyramid/resource.py
+show-source = True
diff --git a/tox.ini b/tox.ini
index 29bd48639..756988c91 100644
--- a/tox.ini
+++ b/tox.ini
@@ -16,6 +16,12 @@ commands =
deps =
nosexcover
+[testenv:pep8]
+commands =
+ flake8 pyramid/
+deps =
+ flake8
+
# we separate coverage into its own testenv because a) "last run wins" wrt
# cobertura jenkins reporting and b) pypy and jython can't handle any
# combination of versions of coverage and nosexcover that i can find.