Mercurial > hg
comparison mercurial/wireprotoserver.py @ 35866:d747cf39cf70
wireprotoserver: make attributes private
These aren't part of the protocol interface. So they should be
_ prefixed.
Differential Revision: https://phab.mercurial-scm.org/D1984
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 31 Jan 2018 10:19:08 -0800 |
parents | f084d5131f3e |
children | d7cce6df65bb |
comparison
equal
deleted
inserted
replaced
35865:f084d5131f3e | 35866:d747cf39cf70 |
---|---|
88 | 88 |
89 return ''.join(chunks) | 89 return ''.join(chunks) |
90 | 90 |
91 class webproto(abstractserverproto): | 91 class webproto(abstractserverproto): |
92 def __init__(self, req, ui): | 92 def __init__(self, req, ui): |
93 self.req = req | 93 self._req = req |
94 self.ui = ui | 94 self._ui = ui |
95 self.name = 'http' | 95 self.name = 'http' |
96 | 96 |
97 def getargs(self, args): | 97 def getargs(self, args): |
98 knownargs = self._args() | 98 knownargs = self._args() |
99 data = {} | 99 data = {} |
108 else: | 108 else: |
109 data[k] = knownargs[k][0] | 109 data[k] = knownargs[k][0] |
110 return [data[k] for k in keys] | 110 return [data[k] for k in keys] |
111 | 111 |
112 def _args(self): | 112 def _args(self): |
113 args = self.req.form.copy() | 113 args = self._req.form.copy() |
114 if pycompat.ispy3: | 114 if pycompat.ispy3: |
115 args = {k.encode('ascii'): [v.encode('ascii') for v in vs] | 115 args = {k.encode('ascii'): [v.encode('ascii') for v in vs] |
116 for k, vs in args.items()} | 116 for k, vs in args.items()} |
117 postlen = int(self.req.env.get(r'HTTP_X_HGARGS_POST', 0)) | 117 postlen = int(self._req.env.get(r'HTTP_X_HGARGS_POST', 0)) |
118 if postlen: | 118 if postlen: |
119 args.update(cgi.parse_qs( | 119 args.update(cgi.parse_qs( |
120 self.req.read(postlen), keep_blank_values=True)) | 120 self._req.read(postlen), keep_blank_values=True)) |
121 return args | 121 return args |
122 | 122 |
123 argvalue = decodevaluefromheaders(self.req, r'X-HgArg') | 123 argvalue = decodevaluefromheaders(self._req, r'X-HgArg') |
124 args.update(cgi.parse_qs(argvalue, keep_blank_values=True)) | 124 args.update(cgi.parse_qs(argvalue, keep_blank_values=True)) |
125 return args | 125 return args |
126 | 126 |
127 def getfile(self, fp): | 127 def getfile(self, fp): |
128 length = int(self.req.env[r'CONTENT_LENGTH']) | 128 length = int(self._req.env[r'CONTENT_LENGTH']) |
129 # If httppostargs is used, we need to read Content-Length | 129 # If httppostargs is used, we need to read Content-Length |
130 # minus the amount that was consumed by args. | 130 # minus the amount that was consumed by args. |
131 length -= int(self.req.env.get(r'HTTP_X_HGARGS_POST', 0)) | 131 length -= int(self._req.env.get(r'HTTP_X_HGARGS_POST', 0)) |
132 for s in util.filechunkiter(self.req, limit=length): | 132 for s in util.filechunkiter(self._req, limit=length): |
133 fp.write(s) | 133 fp.write(s) |
134 | 134 |
135 def redirect(self): | 135 def redirect(self): |
136 self.oldio = self.ui.fout, self.ui.ferr | 136 self._oldio = self._ui.fout, self._ui.ferr |
137 self.ui.ferr = self.ui.fout = stringio() | 137 self._ui.ferr = self._ui.fout = stringio() |
138 | 138 |
139 def restore(self): | 139 def restore(self): |
140 val = self.ui.fout.getvalue() | 140 val = self._ui.fout.getvalue() |
141 self.ui.ferr, self.ui.fout = self.oldio | 141 self._ui.ferr, self._ui.fout = self._oldio |
142 return val | 142 return val |
143 | 143 |
144 def _client(self): | 144 def _client(self): |
145 return 'remote:%s:%s:%s' % ( | 145 return 'remote:%s:%s:%s' % ( |
146 self.req.env.get('wsgi.url_scheme') or 'http', | 146 self._req.env.get('wsgi.url_scheme') or 'http', |
147 urlreq.quote(self.req.env.get('REMOTE_HOST', '')), | 147 urlreq.quote(self._req.env.get('REMOTE_HOST', '')), |
148 urlreq.quote(self.req.env.get('REMOTE_USER', ''))) | 148 urlreq.quote(self._req.env.get('REMOTE_USER', ''))) |
149 | 149 |
150 def responsetype(self, prefer_uncompressed): | 150 def responsetype(self, prefer_uncompressed): |
151 """Determine the appropriate response type and compression settings. | 151 """Determine the appropriate response type and compression settings. |
152 | 152 |
153 Returns a tuple of (mediatype, compengine, engineopts). | 153 Returns a tuple of (mediatype, compengine, engineopts). |
154 """ | 154 """ |
155 # Determine the response media type and compression engine based | 155 # Determine the response media type and compression engine based |
156 # on the request parameters. | 156 # on the request parameters. |
157 protocaps = decodevaluefromheaders(self.req, r'X-HgProto').split(' ') | 157 protocaps = decodevaluefromheaders(self._req, r'X-HgProto').split(' ') |
158 | 158 |
159 if '0.2' in protocaps: | 159 if '0.2' in protocaps: |
160 # All clients are expected to support uncompressed data. | 160 # All clients are expected to support uncompressed data. |
161 if prefer_uncompressed: | 161 if prefer_uncompressed: |
162 return HGTYPE2, util._noopengine(), {} | 162 return HGTYPE2, util._noopengine(), {} |
167 if cap.startswith('comp='): | 167 if cap.startswith('comp='): |
168 compformats = cap[5:].split(',') | 168 compformats = cap[5:].split(',') |
169 break | 169 break |
170 | 170 |
171 # Now find an agreed upon compression format. | 171 # Now find an agreed upon compression format. |
172 for engine in wireproto.supportedcompengines(self.ui, self, | 172 for engine in wireproto.supportedcompengines(self._ui, self, |
173 util.SERVERROLE): | 173 util.SERVERROLE): |
174 if engine.wireprotosupport().name in compformats: | 174 if engine.wireprotosupport().name in compformats: |
175 opts = {} | 175 opts = {} |
176 level = self.ui.configint('server', | 176 level = self._ui.configint('server', |
177 '%slevel' % engine.name()) | 177 '%slevel' % engine.name()) |
178 if level is not None: | 178 if level is not None: |
179 opts['level'] = level | 179 opts['level'] = level |
180 | 180 |
181 return HGTYPE2, engine, opts | 181 return HGTYPE2, engine, opts |
184 # legacy protocol. | 184 # legacy protocol. |
185 | 185 |
186 # Don't allow untrusted settings because disabling compression or | 186 # Don't allow untrusted settings because disabling compression or |
187 # setting a very high compression level could lead to flooding | 187 # setting a very high compression level could lead to flooding |
188 # the server's network or CPU. | 188 # the server's network or CPU. |
189 opts = {'level': self.ui.configint('server', 'zliblevel')} | 189 opts = {'level': self._ui.configint('server', 'zliblevel')} |
190 return HGTYPE, util.compengines['zlib'], opts | 190 return HGTYPE, util.compengines['zlib'], opts |
191 | 191 |
192 def iscmd(cmd): | 192 def iscmd(cmd): |
193 return cmd in wireproto.commands | 193 return cmd in wireproto.commands |
194 | 194 |