mercurial/hgweb/request.py
changeset 36859 422be99519e5
parent 36858 01f6bba64424
child 36861 a88d68dc3ee8
equal deleted inserted replaced
36858:01f6bba64424 36859:422be99519e5
    24 )
    24 )
    25 from .. import (
    25 from .. import (
    26     pycompat,
    26     pycompat,
    27     util,
    27     util,
    28 )
    28 )
    29 
       
    30 shortcuts = {
       
    31     'cl': [('cmd', ['changelog']), ('rev', None)],
       
    32     'sl': [('cmd', ['shortlog']), ('rev', None)],
       
    33     'cs': [('cmd', ['changeset']), ('node', None)],
       
    34     'f': [('cmd', ['file']), ('filenode', None)],
       
    35     'fl': [('cmd', ['filelog']), ('filenode', None)],
       
    36     'fd': [('cmd', ['filediff']), ('node', None)],
       
    37     'fa': [('cmd', ['annotate']), ('filenode', None)],
       
    38     'mf': [('cmd', ['manifest']), ('manifest', None)],
       
    39     'ca': [('cmd', ['archive']), ('node', None)],
       
    40     'tags': [('cmd', ['tags'])],
       
    41     'tip': [('cmd', ['changeset']), ('node', ['tip'])],
       
    42     'static': [('cmd', ['static']), ('file', None)]
       
    43 }
       
    44 
       
    45 def normalize(form):
       
    46     # first expand the shortcuts
       
    47     for k in shortcuts:
       
    48         if k in form:
       
    49             for name, value in shortcuts[k]:
       
    50                 if value is None:
       
    51                     value = form[k]
       
    52                 form[name] = value
       
    53             del form[k]
       
    54     # And strip the values
       
    55     bytesform = {}
       
    56     for k, v in form.iteritems():
       
    57         bytesform[pycompat.bytesurl(k)] = [
       
    58             pycompat.bytesurl(i.strip()) for i in v]
       
    59     return bytesform
       
    60 
    29 
    61 @attr.s(frozen=True)
    30 @attr.s(frozen=True)
    62 class parsedrequest(object):
    31 class parsedrequest(object):
    63     """Represents a parsed WSGI request.
    32     """Represents a parsed WSGI request.
    64 
    33 
   256         self.threaded = wsgienv[r'wsgi.multithread']
   225         self.threaded = wsgienv[r'wsgi.multithread']
   257         self.multiprocess = wsgienv[r'wsgi.multiprocess']
   226         self.multiprocess = wsgienv[r'wsgi.multiprocess']
   258         self.run_once = wsgienv[r'wsgi.run_once']
   227         self.run_once = wsgienv[r'wsgi.run_once']
   259         self.env = wsgienv
   228         self.env = wsgienv
   260         self.req = parserequestfromenv(wsgienv, inp)
   229         self.req = parserequestfromenv(wsgienv, inp)
   261         self.form = normalize(self.req.querystringdict)
   230         self.form = self.req.querystringdict
   262         self._start_response = start_response
   231         self._start_response = start_response
   263         self.server_write = None
   232         self.server_write = None
   264         self.headers = []
   233         self.headers = []
   265 
   234 
   266     def respond(self, status, type, filename=None, body=None):
   235     def respond(self, status, type, filename=None, body=None):