|
16 | 16 | from .compat import cached_property |
17 | 17 | from .utils import split_cookies, parse_content_type_header |
18 | 18 |
|
19 | | - |
20 | 19 | ELAPSED_TIME_LABEL = 'Elapsed time' |
21 | 20 |
|
22 | 21 |
|
@@ -67,27 +66,10 @@ def iter_body(self, chunk_size=1): |
67 | 66 | def iter_lines(self, chunk_size): |
68 | 67 | return ((line, b'\n') for line in self._orig.iter_lines(chunk_size)) |
69 | 68 |
|
70 | | - # noinspection PyProtectedMember |
71 | 69 | @property |
72 | 70 | def headers(self): |
73 | | - try: |
74 | | - raw = self._orig.raw |
75 | | - if getattr(raw, '_original_response', None): |
76 | | - raw_version = raw._original_response.version |
77 | | - else: |
78 | | - raw_version = raw.version |
79 | | - except AttributeError: |
80 | | - # Assume HTTP/1.1 |
81 | | - raw_version = 11 |
82 | | - version = { |
83 | | - 9: '0.9', |
84 | | - 10: '1.0', |
85 | | - 11: '1.1', |
86 | | - 20: '2.0', |
87 | | - }[raw_version] |
88 | | - |
89 | 71 | original = self._orig |
90 | | - status_line = f'HTTP/{version} {original.status_code} {original.reason}' |
| 72 | + status_line = f'HTTP/{self.version} {original.status_code} {original.reason}' |
91 | 73 | headers = [status_line] |
92 | 74 | headers.extend( |
93 | 75 | ': '.join(header) |
@@ -117,6 +99,32 @@ def metadata(self) -> str: |
117 | 99 | for key, value in data.items() |
118 | 100 | ) |
119 | 101 |
|
| 102 | + @property |
| 103 | + def version(self) -> str: |
| 104 | + """ |
| 105 | + Return the HTTP version used by the server, e.g. '1.1'. |
| 106 | +
|
| 107 | + Assume HTTP/1.1 if version is not available. |
| 108 | +
|
| 109 | + """ |
| 110 | + mapping = { |
| 111 | + 9: '0.9', |
| 112 | + 10: '1.0', |
| 113 | + 11: '1.1', |
| 114 | + 20: '2.0', |
| 115 | + } |
| 116 | + fallback = 11 |
| 117 | + version = None |
| 118 | + try: |
| 119 | + raw = self._orig.raw |
| 120 | + if getattr(raw, '_original_response', None): |
| 121 | + version = raw._original_response.version |
| 122 | + else: |
| 123 | + version = raw.version |
| 124 | + except AttributeError: |
| 125 | + pass |
| 126 | + return mapping[version or fallback] |
| 127 | + |
120 | 128 |
|
121 | 129 | class HTTPRequest(HTTPMessage): |
122 | 130 | """A :class:`requests.models.Request` wrapper.""" |
|
0 commit comments