parameters: (self, environ)
docstring: Return a (target, url_args) tuple or raise HTTPError(400/404/405).
docstring_summary: Return a (target, url_args) tuple or raise HTTPError(400/404/405).
docstring_tokens: Return a ( target url_args ) tuple or raise HTTPError ( 400 / 404 / 405 ) .
function: def match(self, environ):
          """ Return a (target, url_args) tuple or raise HTTPError(400/404/405). """
          verb = environ['REQUEST_METHOD'].upper()
          path = environ['PATH_INFO'] or '/'
  
          if verb == 'HEAD':
              methods = ['PROXY', verb, 'GET', 'ANY']
          else:
              methods = ['PROXY', verb, 'ANY']
  
          for method in methods:
              if method in self.static and path in self.static[method]:
                  target, getargs = self.static[method][path]
                  return target, getargs(path) if getargs else {}
              elif method in self.dyna_regexes:
                  for combined, rules in self.dyna_regexes[method]:
                      match = combined(path)
                      if match:
                          target, getargs = rules[match.lastindex - 1]
                          return target, getargs(path) if getargs else {}
  
          # No matching route found. Collect alternative methods for 405 response
          allowed = set([])
          nocheck = set(methods)
          for method in set(self.static) - nocheck:
              if path in self.static[method]:
                  allowed.add(verb)
          for method in set(self.dyna_regexes) - allowed - nocheck:
              for combined, rules in self.dyna_regexes[method]:
                  match = combined(path)
                  if match:
                      allowed.add(method)
          if allowed:
              allow_header = ",".join(sorted(allowed))
              raise HTTPError(405, "Method not allowed.", Allow=allow_header)
  
          # No matching route and no alternative method found. We give up
          raise HTTPError(404, "Not found: " + repr(path))
function_tokens: def match ( self , environ ) : verb = environ [ 'REQUEST_METHOD' ] . upper ( ) path = environ [ 'PATH_INFO' ] or '/' if verb == 'HEAD' : methods = [ 'PROXY' , verb , 'GET' , 'ANY' ] else : methods = [ 'PROXY' , verb , 'ANY' ] for method in methods : if method in self . static and path in self . static [ method ] : target , getargs = self . static [ method ] [ path ] return target , getargs ( path ) if getargs else { } elif method in self . dyna_regexes : for combined , rules in self . dyna_regexes [ method ] : match = combined ( path ) if match : target , getargs = rules [ match . lastindex - 1 ] return target , getargs ( path ) if getargs else { } # No matching route found. Collect alternative methods for 405 response allowed = set ( [ ] ) nocheck = set ( methods ) for method in set ( self . static ) - nocheck : if path in self . static [ method ] : allowed . add ( verb ) for method in set ( self . dyna_regexes ) - allowed - nocheck : for combined , rules in self . dyna_regexes [ method ] : match = combined ( path ) if match : allowed . add ( method ) if allowed : allow_header = "," . join ( sorted ( allowed ) ) raise HTTPError ( 405 , "Method not allowed." , Allow = allow_header ) # No matching route and no alternative method found. We give up raise HTTPError ( 404 , "Not found: " + repr ( path ) )