airbyte-cdk 6.18.0.dev2__py3-none-any.whl → 6.18.0.dev3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,7 +54,6 @@ class JsonParser(Parser):
54
54
  Attempts to deserialize data using orjson library. As an extra layer of safety we fallback on the json library to deserialize the data.
55
55
  """
56
56
  raw_data = data.read()
57
-
58
57
  body_json = self._parse_orjson(raw_data) or self._parse_json(raw_data)
59
58
 
60
59
  if body_json is None:
@@ -73,8 +72,8 @@ class JsonParser(Parser):
73
72
  try:
74
73
  return orjson.loads(raw_data.decode(self.encoding))
75
74
  except Exception as exc:
76
- logger.warning(
77
- f"Failed to parse JSON data using orjson library. Falling back to json library. {exc=}"
75
+ logger.debug(
76
+ f"Failed to parse JSON data using orjson library. Falling back to json library. {exc}"
78
77
  )
79
78
  return None
80
79
 
@@ -82,7 +81,7 @@ class JsonParser(Parser):
82
81
  try:
83
82
  return json.loads(raw_data.decode(self.encoding))
84
83
  except Exception as exc:
85
- logger.error(f"Failed to parse JSON data using json library. {exc=}")
84
+ logger.error(f"Failed to parse JSON data using json library. {exc}")
86
85
  return None
87
86
 
88
87
 
@@ -73,6 +73,7 @@ from airbyte_cdk.sources.declarative.decoders.composite_raw_decoder import (
73
73
  GzipParser,
74
74
  JsonLineParser,
75
75
  JsonParser,
76
+ Parser,
76
77
  )
77
78
  from airbyte_cdk.sources.declarative.extractors import (
78
79
  DpathExtractor,
@@ -1037,17 +1038,17 @@ class ModelToComponentFactory:
1037
1038
  self, model: CursorPaginationModel, config: Config, decoder: Decoder, **kwargs: Any
1038
1039
  ) -> CursorPaginationStrategy:
1039
1040
  if isinstance(decoder, PaginationDecoderDecorator):
1040
- if not isinstance(decoder.decoder, (JsonDecoder, XmlDecoder)):
1041
- raise ValueError(
1042
- f"Provided decoder of {type(decoder.decoder)=} is not supported. Please set JsonDecoder or XmlDecoder instead."
1043
- )
1041
+ inner_decoder = decoder.decoder
1042
+ else:
1043
+ inner_decoder = decoder
1044
+ decoder = PaginationDecoderDecorator(decoder=decoder)
1045
+
1046
+ if self._is_supported_decoder_for_pagination(inner_decoder):
1044
1047
  decoder_to_use = decoder
1045
1048
  else:
1046
- if not isinstance(decoder, (JsonDecoder, XmlDecoder)):
1047
- raise ValueError(
1048
- f"Provided decoder of {type(decoder)=} is not supported. Please set JsonDecoder or XmlDecoder instead."
1049
- )
1050
- decoder_to_use = PaginationDecoderDecorator(decoder=decoder)
1049
+ raise ValueError(
1050
+ self._UNSUPPORTED_DECODER_ERROR.format(decoder_type=type(inner_decoder))
1051
+ )
1051
1052
 
1052
1053
  return CursorPaginationStrategy(
1053
1054
  cursor_value=model.cursor_value,
@@ -1520,11 +1521,10 @@ class ModelToComponentFactory:
1520
1521
  cursor_used_for_stop_condition: Optional[DeclarativeCursor] = None,
1521
1522
  ) -> Union[DefaultPaginator, PaginatorTestReadDecorator]:
1522
1523
  if decoder:
1523
- if not isinstance(decoder, (JsonDecoder, XmlDecoder)):
1524
- raise ValueError(
1525
- f"Provided decoder of {type(decoder)=} is not supported. Please set JsonDecoder or XmlDecoder instead."
1526
- )
1527
- decoder_to_use = PaginationDecoderDecorator(decoder=decoder)
1524
+ if self._is_supported_decoder_for_pagination(decoder):
1525
+ decoder_to_use = PaginationDecoderDecorator(decoder=decoder)
1526
+ else:
1527
+ raise ValueError(self._UNSUPPORTED_DECODER_ERROR.format(decoder_type=type(decoder)))
1528
1528
  else:
1529
1529
  decoder_to_use = PaginationDecoderDecorator(decoder=JsonDecoder(parameters={}))
1530
1530
  page_size_option = (
@@ -1755,7 +1755,7 @@ class ModelToComponentFactory:
1755
1755
 
1756
1756
  @staticmethod
1757
1757
  def create_json_parser(model: JsonParserModel, config: Config, **kwargs: Any) -> JsonParser:
1758
- encoding = model.encoding or "utf-8"
1758
+ encoding = model.encoding if model.encoding else "utf-8"
1759
1759
  return JsonParser(encoding=encoding)
1760
1760
 
1761
1761
  @staticmethod
@@ -1937,22 +1937,22 @@ class ModelToComponentFactory:
1937
1937
  message_repository=self._message_repository,
1938
1938
  )
1939
1939
 
1940
- @staticmethod
1941
1940
  def create_offset_increment(
1942
- model: OffsetIncrementModel, config: Config, decoder: Decoder, **kwargs: Any
1941
+ self, model: OffsetIncrementModel, config: Config, decoder: Decoder, **kwargs: Any
1943
1942
  ) -> OffsetIncrement:
1944
1943
  if isinstance(decoder, PaginationDecoderDecorator):
1945
- if not isinstance(decoder.decoder, (JsonDecoder, XmlDecoder)):
1946
- raise ValueError(
1947
- f"Provided decoder of {type(decoder.decoder)=} is not supported. Please set JsonDecoder or XmlDecoder instead."
1948
- )
1944
+ inner_decoder = decoder.decoder
1945
+ else:
1946
+ inner_decoder = decoder
1947
+ decoder = PaginationDecoderDecorator(decoder=decoder)
1948
+
1949
+ if self._is_supported_decoder_for_pagination(inner_decoder):
1949
1950
  decoder_to_use = decoder
1950
1951
  else:
1951
- if not isinstance(decoder, (JsonDecoder, XmlDecoder)):
1952
- raise ValueError(
1953
- f"Provided decoder of {type(decoder)=} is not supported. Please set JsonDecoder or XmlDecoder instead."
1954
- )
1955
- decoder_to_use = PaginationDecoderDecorator(decoder=decoder)
1952
+ raise ValueError(
1953
+ self._UNSUPPORTED_DECODER_ERROR.format(decoder_type=type(inner_decoder))
1954
+ )
1955
+
1956
1956
  return OffsetIncrement(
1957
1957
  page_size=model.page_size,
1958
1958
  config=config,
@@ -2541,3 +2541,25 @@ class ModelToComponentFactory:
2541
2541
  components_mapping=components_mapping,
2542
2542
  parameters=model.parameters or {},
2543
2543
  )
2544
+
2545
+ _UNSUPPORTED_DECODER_ERROR = (
2546
+ "Specified decoder of {decoder_type} is not supported for pagination."
2547
+ "Please set as `JsonDecoder`, `XmlDecoder`, or a `CompositeRawDecoder` with an inner_parser of `JsonParser` or `GzipParser` instead."
2548
+ "If using `GzipParser`, please ensure that the lowest level inner_parser is a `JsonParser`."
2549
+ )
2550
+
2551
+ def _is_supported_decoder_for_pagination(self, decoder: Decoder) -> bool:
2552
+ if isinstance(decoder, (JsonDecoder, XmlDecoder)):
2553
+ return True
2554
+ elif isinstance(decoder, CompositeRawDecoder):
2555
+ return self._is_supported_parser_for_pagination(decoder.parser)
2556
+ else:
2557
+ return False
2558
+
2559
+ def _is_supported_parser_for_pagination(self, parser: Parser) -> bool:
2560
+ if isinstance(parser, JsonParser):
2561
+ return True
2562
+ elif isinstance(parser, GzipParser):
2563
+ return isinstance(parser.inner_parser, JsonParser)
2564
+ else:
2565
+ return False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: airbyte-cdk
3
- Version: 6.18.0.dev2
3
+ Version: 6.18.0.dev3
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  License: MIT
6
6
  Keywords: airbyte,connector-development-kit,cdk
@@ -70,7 +70,7 @@ airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=fCvq1sF
70
70
  airbyte_cdk/sources/declarative/declarative_source.py,sha256=nF7wBqFd3AQmEKAm4CnIo29CJoQL562cJGSCeL8U8bA,1531
71
71
  airbyte_cdk/sources/declarative/declarative_stream.py,sha256=JRyNeOIpsFu4ztVZsN6sncqUEIqIE-bUkD2TPgbMgk0,10375
72
72
  airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=edGj4fGxznBk4xzRQyCA1rGfbpqe7z-RE0K3kQQWbgA,858
73
- airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py,sha256=VpKcCbRDHhU7yRvwCmc5yQO1KSSUYEOocngDLin6o2s,4359
73
+ airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py,sha256=kQfUVMVhChKe5OngwIQrs0F9KGnRUN-CKVFakCU23DQ,4354
74
74
  airbyte_cdk/sources/declarative/decoders/decoder.py,sha256=sl-Gt8lXi7yD2Q-sD8je5QS2PbgrgsYjxRLWsay7DMc,826
75
75
  airbyte_cdk/sources/declarative/decoders/json_decoder.py,sha256=qdbjeR6RffKaah_iWvMsOcDolYuxJY5DaI3b9AMTZXg,3327
76
76
  airbyte_cdk/sources/declarative/decoders/noop_decoder.py,sha256=iZh0yKY_JzgBnJWiubEusf5c0o6Khd-8EWFWT-8EgFo,542
@@ -111,7 +111,7 @@ airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQ
111
111
  airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=Rir9_z3Kcd5Es0-LChrzk-0qubAsiK_RSEnLmK2OXm8,553
112
112
  airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=CXwTfD3wSQq3okcqwigpprbHhSURUokh4GK2OmOyKC8,9132
113
113
  airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=IWUOdF03o-aQn0Occo1BJCxU0Pz-QILk5L67nzw2thw,6803
114
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=lmSh2Yp-lgRTbbSw3m6UH8L2nTRjt0w3aiISWHRG6IM,109739
114
+ airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=PEtlR6K9zCYDEXfba9QtYeUnC-KOVdaHD-9QSq_UNKY,110269
115
115
  airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=HJ-Syp3p7RpyR_OK0X_a2kSyISfu3W-PKrRI16iY0a8,957
116
116
  airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=n82J15S8bjeMZ5uROu--P3hnbQoxkY5v7RPHYx7g7ro,2929
117
117
  airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
@@ -342,8 +342,8 @@ airbyte_cdk/utils/slice_hasher.py,sha256=-pHexlNYoWYPnXNH-M7HEbjmeJe9Zk7SJijdQ7d
342
342
  airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
343
343
  airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
344
344
  airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
345
- airbyte_cdk-6.18.0.dev2.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
346
- airbyte_cdk-6.18.0.dev2.dist-info/METADATA,sha256=0EfivelRXCgquhtK-6kt045d65qTAYxlGhu5j2Vg_FY,6005
347
- airbyte_cdk-6.18.0.dev2.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
348
- airbyte_cdk-6.18.0.dev2.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
349
- airbyte_cdk-6.18.0.dev2.dist-info/RECORD,,
345
+ airbyte_cdk-6.18.0.dev3.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
346
+ airbyte_cdk-6.18.0.dev3.dist-info/METADATA,sha256=1N26t4q8cvzW-7escwWwzk2BpIgCDOhfvCsLtu4-270,6005
347
+ airbyte_cdk-6.18.0.dev3.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
348
+ airbyte_cdk-6.18.0.dev3.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
349
+ airbyte_cdk-6.18.0.dev3.dist-info/RECORD,,