1616except ImportError : # pragma: nocover
1717 brotli = None
1818
19+ if typing .TYPE_CHECKING : # pragma: no cover
20+ from ._models import Request
21+
1922
2023class Decoder :
24+ def __init__ (self , request : "Request" ) -> None :
25+ self .request = request
26+
2127 def decode (self , data : bytes ) -> bytes :
2228 raise NotImplementedError () # pragma: nocover
2329
@@ -44,7 +50,8 @@ class DeflateDecoder(Decoder):
4450 See: https://stackoverflow.com/questions/1838699
4551 """
4652
47- def __init__ (self ) -> None :
53+ def __init__ (self , request : "Request" ) -> None :
54+ self .request = request
4855 self .first_attempt = True
4956 self .decompressor = zlib .decompressobj ()
5057
@@ -57,13 +64,13 @@ def decode(self, data: bytes) -> bytes:
5764 if was_first_attempt :
5865 self .decompressor = zlib .decompressobj (- zlib .MAX_WBITS )
5966 return self .decode (data )
60- raise DecodingError from exc
67+ raise DecodingError ( message = str ( exc ), request = self . request )
6168
6269 def flush (self ) -> bytes :
6370 try :
6471 return self .decompressor .flush ()
6572 except zlib .error as exc : # pragma: nocover
66- raise DecodingError from exc
73+ raise DecodingError ( message = str ( exc ), request = self . request )
6774
6875
6976class GZipDecoder (Decoder ):
@@ -73,20 +80,21 @@ class GZipDecoder(Decoder):
7380 See: https://stackoverflow.com/questions/1838699
7481 """
7582
76- def __init__ (self ) -> None :
83+ def __init__ (self , request : "Request" ) -> None :
84+ self .request = request
7785 self .decompressor = zlib .decompressobj (zlib .MAX_WBITS | 16 )
7886
7987 def decode (self , data : bytes ) -> bytes :
8088 try :
8189 return self .decompressor .decompress (data )
8290 except zlib .error as exc :
83- raise DecodingError from exc
91+ raise DecodingError ( message = str ( exc ), request = self . request )
8492
8593 def flush (self ) -> bytes :
8694 try :
8795 return self .decompressor .flush ()
8896 except zlib .error as exc : # pragma: nocover
89- raise DecodingError from exc
97+ raise DecodingError ( message = str ( exc ), request = self . request )
9098
9199
92100class BrotliDecoder (Decoder ):
@@ -99,10 +107,11 @@ class BrotliDecoder(Decoder):
99107 name. The top branches are for 'brotlipy' and bottom branches for 'Brotli'
100108 """
101109
102- def __init__ (self ) -> None :
110+ def __init__ (self , request : "Request" ) -> None :
103111 assert (
104112 brotli is not None
105113 ), "The 'brotlipy' or 'brotli' library must be installed to use 'BrotliDecoder'"
114+ self .request = request
106115 self .decompressor = brotli .Decompressor ()
107116 self .seen_data = False
108117 if hasattr (self .decompressor , "decompress" ):
@@ -117,7 +126,7 @@ def decode(self, data: bytes) -> bytes:
117126 try :
118127 return self ._decompress (data )
119128 except brotli .error as exc :
120- raise DecodingError from exc
129+ raise DecodingError ( message = str ( exc ), request = self . request )
121130
122131 def flush (self ) -> bytes :
123132 if not self .seen_data :
@@ -127,7 +136,7 @@ def flush(self) -> bytes:
127136 self .decompressor .finish ()
128137 return b""
129138 except brotli .error as exc : # pragma: nocover
130- raise DecodingError from exc
139+ raise DecodingError ( message = str ( exc ), request = self . request )
131140
132141
133142class MultiDecoder (Decoder ):
@@ -160,7 +169,8 @@ class TextDecoder:
160169 Handles incrementally decoding bytes into text
161170 """
162171
163- def __init__ (self , encoding : typing .Optional [str ] = None ):
172+ def __init__ (self , request : "Request" , encoding : typing .Optional [str ] = None ):
173+ self .request = request
164174 self .decoder : typing .Optional [codecs .IncrementalDecoder ] = (
165175 None if encoding is None else codecs .getincrementaldecoder (encoding )()
166176 )
@@ -194,8 +204,8 @@ def decode(self, data: bytes) -> str:
194204 self .buffer = None
195205
196206 return text
197- except UnicodeDecodeError : # pragma: nocover
198- raise DecodingError () from None
207+ except UnicodeDecodeError as exc : # pragma: nocover
208+ raise DecodingError (message = str ( exc ), request = self . request )
199209
200210 def flush (self ) -> str :
201211 try :
@@ -207,14 +217,15 @@ def flush(self) -> str:
207217 return bytes (self .buffer ).decode (self ._detector_result ())
208218
209219 return self .decoder .decode (b"" , True )
210- except UnicodeDecodeError : # pragma: nocover
211- raise DecodingError () from None
220+ except UnicodeDecodeError as exc : # pragma: nocover
221+ raise DecodingError (message = str ( exc ), request = self . request )
212222
213223 def _detector_result (self ) -> str :
214224 self .detector .close ()
215225 result = self .detector .result ["encoding" ]
216226 if not result : # pragma: nocover
217- raise DecodingError ("Unable to determine encoding of content" )
227+ message = "Unable to determine encoding of content"
228+ raise DecodingError (message , request = self .request )
218229
219230 return result
220231
0 commit comments