5
5
import logging
6
6
from dataclasses import InitVar , dataclass
7
7
from gzip import decompress
8
- from typing import Any , Generator , Mapping
8
+ from typing import Any , Generator , Mapping , MutableMapping
9
9
10
10
import requests
11
11
from airbyte_cdk .sources .declarative .decoders .decoder import Decoder
@@ -25,7 +25,7 @@ class JsonDecoder(Decoder):
25
25
def is_stream_response (self ) -> bool :
26
26
return False
27
27
28
- def decode (self , response : requests .Response ) -> Generator [Mapping [str , Any ], None , None ]:
28
+ def decode (self , response : requests .Response ) -> Generator [MutableMapping [str , Any ], None , None ]:
29
29
"""
30
30
Given the response is an empty string or an emtpy list, the function will return a generator with an empty mapping.
31
31
"""
@@ -41,7 +41,7 @@ def decode(self, response: requests.Response) -> Generator[Mapping[str, Any], No
41
41
@staticmethod
42
42
def parse_body_json (
43
43
body_json : Mapping [str , Any ] | list ,
44
- ) -> Generator [Mapping [str , Any ], None , None ]:
44
+ ) -> Generator [MutableMapping [str , Any ], None , None ]:
45
45
if not isinstance (body_json , list ):
46
46
body_json = [body_json ]
47
47
if len (body_json ) == 0 :
@@ -61,7 +61,7 @@ class IterableDecoder(Decoder):
61
61
def is_stream_response (self ) -> bool :
62
62
return True
63
63
64
- def decode (self , response : requests .Response ) -> Generator [Mapping [str , Any ], None , None ]:
64
+ def decode (self , response : requests .Response ) -> Generator [MutableMapping [str , Any ], None , None ]:
65
65
for line in response .iter_lines ():
66
66
yield {"record" : line .decode ()}
67
67
@@ -77,7 +77,7 @@ class JsonlDecoder(Decoder):
77
77
def is_stream_response (self ) -> bool :
78
78
return True
79
79
80
- def decode (self , response : requests .Response ) -> Generator [Mapping [str , Any ], None , None ]:
80
+ def decode (self , response : requests .Response ) -> Generator [MutableMapping [str , Any ], None , None ]:
81
81
# TODO???: set delimiter? usually it is `\n` but maybe it would be useful to set optional?
82
82
# https://github.com/airbytehq/airbyte-internal-issues/issues/8436
83
83
for record in response .iter_lines ():
@@ -88,6 +88,6 @@ def decode(self, response: requests.Response) -> Generator[Mapping[str, Any], No
88
88
class GzipJsonDecoder (JsonDecoder ):
89
89
encoding : str = "utf-8"
90
90
91
- def decode (self , response : requests .Response ) -> Generator [Mapping [str , Any ], None , None ]:
91
+ def decode (self , response : requests .Response ) -> Generator [MutableMapping [str , Any ], None , None ]:
92
92
raw_string = decompress (response .content ).decode (encoding = self .encoding )
93
93
yield from self .parse_body_json (orjson .loads (raw_string ))
0 commit comments