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): |