| 283 | return host.lower() |
| 284 | |
| 285 | class Request: |
| 286 | |
| 287 | def __init__(self, url, data=None, headers={}, |
| 288 | origin_req_host=None, unverifiable=False, |
| 289 | method=None): |
| 290 | self.full_url = url |
| 291 | self.headers = {} |
| 292 | self.unredirected_hdrs = {} |
| 293 | self._data = None |
| 294 | self.data = data |
| 295 | self._tunnel_host = None |
| 296 | for key, value in headers.items(): |
| 297 | self.add_header(key, value) |
| 298 | if origin_req_host is None: |
| 299 | origin_req_host = request_host(self) |
| 300 | self.origin_req_host = origin_req_host |
| 301 | self.unverifiable = unverifiable |
| 302 | if method: |
| 303 | self.method = method |
| 304 | |
| 305 | @property |
| 306 | def full_url(self): |
| 307 | if self.fragment: |
| 308 | return '{}#{}'.format(self._full_url, self.fragment) |
| 309 | return self._full_url |
| 310 | |
| 311 | @full_url.setter |
| 312 | def full_url(self, url): |
| 313 | # unwrap('<URL:type://host/path>') --> 'type://host/path' |
| 314 | self._full_url = unwrap(url) |
| 315 | self._full_url, self.fragment = _splittag(self._full_url) |
| 316 | self._parse() |
| 317 | |
| 318 | @full_url.deleter |
| 319 | def full_url(self): |
| 320 | self._full_url = None |
| 321 | self.fragment = None |
| 322 | self.selector = '' |
| 323 | |
| 324 | @property |
| 325 | def data(self): |
| 326 | return self._data |
| 327 | |
| 328 | @data.setter |
| 329 | def data(self, data): |
| 330 | if data != self._data: |
| 331 | self._data = data |
| 332 | # issue 16464 |
| 333 | # if we change data we need to remove content-length header |
| 334 | # (cause it's most probably calculated for previous value) |
| 335 | if self.has_header("Content-length"): |
| 336 | self.remove_header("Content-length") |
| 337 | |
| 338 | @data.deleter |
| 339 | def data(self): |
| 340 | self.data = None |
| 341 | |
| 342 | def _parse(self): |
no outgoing calls
searching dependent graphs…