Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/routes/middleware.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author | shellac |
---|---|
date | Mon, 01 Jun 2020 08:59:25 -0400 |
parents | 79f47841a781 |
children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/routes/middleware.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,157 +0,0 @@ -"""Routes WSGI Middleware""" -import re -import logging - -from webob import Request - -from routes.base import request_config -from routes.util import URLGenerator - -log = logging.getLogger('routes.middleware') - - -class RoutesMiddleware(object): - """Routing middleware that handles resolving the PATH_INFO in - addition to optionally recognizing method overriding. - - .. Note:: - This module requires webob to be installed. To depend on it, you may - list routes[middleware] in your ``requirements.txt`` - """ - def __init__(self, wsgi_app, mapper, use_method_override=True, - path_info=True, singleton=True): - """Create a Route middleware object - - Using the use_method_override keyword will require Paste to be - installed, and your application should use Paste's WSGIRequest - object as it will properly handle POST issues with wsgi.input - should Routes check it. - - If path_info is True, then should a route var contain - path_info, the SCRIPT_NAME and PATH_INFO will be altered - accordingly. This should be used with routes like: - - .. code-block:: python - - map.connect('blog/*path_info', controller='blog', path_info='') - - """ - self.app = wsgi_app - self.mapper = mapper - self.singleton = singleton - self.use_method_override = use_method_override - self.path_info = path_info - self.log_debug = logging.DEBUG >= log.getEffectiveLevel() - if self.log_debug: - log.debug("Initialized with method overriding = %s, and path " - "info altering = %s", use_method_override, path_info) - - def __call__(self, environ, start_response): - """Resolves the URL in PATH_INFO, and uses wsgi.routing_args - to pass on URL resolver results.""" - old_method = None - if self.use_method_override: - req = None - - # In some odd cases, there's no query string - try: - qs = environ['QUERY_STRING'] - except KeyError: - qs = '' - if '_method' in qs: - req = Request(environ) - req.errors = 'ignore' - if '_method' in req.GET: - old_method = environ['REQUEST_METHOD'] - environ['REQUEST_METHOD'] = req.GET['_method'].upper() - if self.log_debug: - log.debug("_method found in QUERY_STRING, altering " - "request method to %s", - environ['REQUEST_METHOD']) - elif environ['REQUEST_METHOD'] == 'POST' and is_form_post(environ): - if req is None: - req = Request(environ) - req.errors = 'ignore' - if '_method' in req.POST: - old_method = environ['REQUEST_METHOD'] - environ['REQUEST_METHOD'] = req.POST['_method'].upper() - if self.log_debug: - log.debug("_method found in POST data, altering " - "request method to %s", - environ['REQUEST_METHOD']) - - # Run the actual route matching - # -- Assignment of environ to config triggers route matching - if self.singleton: - config = request_config() - config.mapper = self.mapper - config.environ = environ - match = config.mapper_dict - route = config.route - else: - results = self.mapper.routematch(environ=environ) - if results: - match, route = results[0], results[1] - else: - match = route = None - - if old_method: - environ['REQUEST_METHOD'] = old_method - - if not match: - match = {} - if self.log_debug: - urlinfo = "%s %s" % (environ['REQUEST_METHOD'], - environ['PATH_INFO']) - log.debug("No route matched for %s", urlinfo) - elif self.log_debug: - urlinfo = "%s %s" % (environ['REQUEST_METHOD'], - environ['PATH_INFO']) - log.debug("Matched %s", urlinfo) - log.debug("Route path: '%s', defaults: %s", route.routepath, - route.defaults) - log.debug("Match dict: %s", match) - - url = URLGenerator(self.mapper, environ) - environ['wsgiorg.routing_args'] = ((url), match) - environ['routes.route'] = route - environ['routes.url'] = url - - if route and route.redirect: - route_name = '_redirect_%s' % id(route) - location = url(route_name, **match) - log.debug("Using redirect route, redirect to '%s' with status" - "code: %s", location, route.redirect_status) - start_response(route.redirect_status, - [('Content-Type', 'text/plain; charset=utf8'), - ('Location', location)]) - return [] - - # If the route included a path_info attribute and it should be used to - # alter the environ, we'll pull it out - if self.path_info and 'path_info' in match: - oldpath = environ['PATH_INFO'] - newpath = match.get('path_info') or '' - environ['PATH_INFO'] = newpath - if not environ['PATH_INFO'].startswith('/'): - environ['PATH_INFO'] = '/' + environ['PATH_INFO'] - environ['SCRIPT_NAME'] += re.sub( - r'^(.*?)/' + re.escape(newpath) + '$', r'\1', oldpath) - - response = self.app(environ, start_response) - - # Wrapped in try as in rare cases the attribute will be gone already - try: - del self.mapper.environ - except AttributeError: - pass - return response - - -def is_form_post(environ): - """Determine whether the request is a POSTed html form""" - content_type = environ.get('CONTENT_TYPE', '').lower() - if ';' in content_type: - content_type = content_type.split(';', 1)[0] - return content_type in ('application/x-www-form-urlencoded', - 'multipart/form-data')