airbyte-cdk 0.64.0__py3-none-any.whl → 0.65.0__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.
- airbyte_cdk/sources/declarative/declarative_component_schema.yaml +4 -0
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py +4 -0
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +8 -1
- airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +7 -6
- {airbyte_cdk-0.64.0.dist-info → airbyte_cdk-0.65.0.dist-info}/METADATA +1 -1
- {airbyte_cdk-0.64.0.dist-info → airbyte_cdk-0.65.0.dist-info}/RECORD +10 -10
- unit_tests/sources/declarative/retrievers/test_simple_retriever.py +40 -0
- {airbyte_cdk-0.64.0.dist-info → airbyte_cdk-0.65.0.dist-info}/LICENSE.txt +0 -0
- {airbyte_cdk-0.64.0.dist-info → airbyte_cdk-0.65.0.dist-info}/WHEEL +0 -0
- {airbyte_cdk-0.64.0.dist-info → airbyte_cdk-0.65.0.dist-info}/top_level.txt +0 -0
@@ -2001,6 +2001,10 @@ definitions:
|
|
2001
2001
|
anyOf:
|
2002
2002
|
- "$ref": "#/definitions/DefaultPaginator"
|
2003
2003
|
- "$ref": "#/definitions/NoPagination"
|
2004
|
+
ignore_stream_slicer_parameters_on_paginated_requests:
|
2005
|
+
description: If true, the partition router and incremental request options will be ignored when paginating requests. Request options set directly on the requester will not be ignored.
|
2006
|
+
type: boolean
|
2007
|
+
default: false
|
2004
2008
|
partition_router:
|
2005
2009
|
title: Partition Router
|
2006
2010
|
description: PartitionRouter component that describes how to partition the stream, enabling incremental syncs and checkpointing.
|
@@ -1338,6 +1338,10 @@ class SimpleRetriever(BaseModel):
|
|
1338
1338
|
None,
|
1339
1339
|
description="Paginator component that describes how to navigate through the API's pages.",
|
1340
1340
|
)
|
1341
|
+
ignore_stream_slicer_parameters_on_paginated_requests: Optional[bool] = Field(
|
1342
|
+
False,
|
1343
|
+
description='If true, the partition router and incremental request options will be ignored when paginating requests. Request options set directly on the requester will not be ignored.',
|
1344
|
+
)
|
1341
1345
|
partition_router: Optional[
|
1342
1346
|
Union[
|
1343
1347
|
CustomPartitionRouter,
|
@@ -958,12 +958,17 @@ class ModelToComponentFactory:
|
|
958
958
|
cursor_used_for_stop_condition = cursor if stop_condition_on_cursor else None
|
959
959
|
paginator = (
|
960
960
|
self._create_component_from_model(
|
961
|
-
model=model.paginator,
|
961
|
+
model=model.paginator,
|
962
|
+
config=config,
|
963
|
+
url_base=url_base,
|
964
|
+
cursor_used_for_stop_condition=cursor_used_for_stop_condition,
|
962
965
|
)
|
963
966
|
if model.paginator
|
964
967
|
else NoPagination(parameters={})
|
965
968
|
)
|
966
969
|
|
970
|
+
ignore_stream_slicer_parameters_on_paginated_requests = model.ignore_stream_slicer_parameters_on_paginated_requests or False
|
971
|
+
|
967
972
|
if self._limit_slices_fetched or self._emit_connector_builder_messages:
|
968
973
|
return SimpleRetrieverTestReadDecorator(
|
969
974
|
name=name,
|
@@ -975,6 +980,7 @@ class ModelToComponentFactory:
|
|
975
980
|
cursor=cursor,
|
976
981
|
config=config,
|
977
982
|
maximum_number_of_slices=self._limit_slices_fetched or 5,
|
983
|
+
ignore_stream_slicer_parameters_on_paginated_requests=ignore_stream_slicer_parameters_on_paginated_requests,
|
978
984
|
parameters=model.parameters or {},
|
979
985
|
)
|
980
986
|
return SimpleRetriever(
|
@@ -986,6 +992,7 @@ class ModelToComponentFactory:
|
|
986
992
|
stream_slicer=stream_slicer,
|
987
993
|
cursor=cursor,
|
988
994
|
config=config,
|
995
|
+
ignore_stream_slicer_parameters_on_paginated_requests=ignore_stream_slicer_parameters_on_paginated_requests,
|
989
996
|
parameters=model.parameters or {},
|
990
997
|
)
|
991
998
|
|
@@ -59,6 +59,7 @@ class SimpleRetriever(Retriever):
|
|
59
59
|
paginator: Optional[Paginator] = None
|
60
60
|
stream_slicer: StreamSlicer = SinglePartitionRouter(parameters={})
|
61
61
|
cursor: Optional[Cursor] = None
|
62
|
+
ignore_stream_slicer_parameters_on_paginated_requests: bool = False
|
62
63
|
|
63
64
|
def __post_init__(self, parameters: Mapping[str, Any]) -> None:
|
64
65
|
self._paginator = self.paginator or NoPagination(parameters=parameters)
|
@@ -105,12 +106,12 @@ class SimpleRetriever(Retriever):
|
|
105
106
|
Returned merged mapping otherwise
|
106
107
|
"""
|
107
108
|
# FIXME we should eventually remove the usage of stream_state as part of the interpolation
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
)
|
109
|
+
mappings = [
|
110
|
+
paginator_method(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token),
|
111
|
+
]
|
112
|
+
if not next_page_token or not self.ignore_stream_slicer_parameters_on_paginated_requests:
|
113
|
+
mappings.append(stream_slicer_method(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token))
|
114
|
+
return combine_mappings(mappings)
|
114
115
|
|
115
116
|
def _request_headers(
|
116
117
|
self,
|
@@ -38,7 +38,7 @@ airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py
|
|
38
38
|
airbyte_cdk/sources/concurrent_source/thread_pool_manager.py,sha256=hFj5rsRtORurl3fwH8GC9h6Uz2wbzBFOLWUxJ-YJ7J8,4801
|
39
39
|
airbyte_cdk/sources/declarative/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
|
40
40
|
airbyte_cdk/sources/declarative/create_partial.py,sha256=sUJOwD8hBzW4pxw2XhYlSTMgl-WMc5WpP5Oq_jo3fHw,3371
|
41
|
-
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=
|
41
|
+
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=KkWDEq_Aw1Zu7BwPBp-2K6jM74kVmgSe5rHsk5lj5_A,87906
|
42
42
|
airbyte_cdk/sources/declarative/declarative_source.py,sha256=U2As9PDKmcWDgbsWUo-RetJ9fxQOBlwntWZ0NOgs5Ac,1453
|
43
43
|
airbyte_cdk/sources/declarative/declarative_stream.py,sha256=3WADuP_urkJVoMZiBHN1Dw1x-KqOO1YlU030Oo9aLWs,5868
|
44
44
|
airbyte_cdk/sources/declarative/exceptions.py,sha256=kTPUA4I2NV4J6HDz-mKPGMrfuc592akJnOyYx38l_QM,176
|
@@ -80,14 +80,14 @@ airbyte_cdk/sources/declarative/interpolation/interpolation.py,sha256=dyIM-bzh54
|
|
80
80
|
airbyte_cdk/sources/declarative/interpolation/jinja.py,sha256=8bUH6xJRkao8BanwzBFj-1CDj7RR2xPO5u_-FfyRNks,5128
|
81
81
|
airbyte_cdk/sources/declarative/interpolation/macros.py,sha256=V6WGKJ9cXX1rjuM4bK3Cs9xEryMlkY2U3FMsSBhrgC8,3098
|
82
82
|
airbyte_cdk/sources/declarative/models/__init__.py,sha256=EiYnzwCHZV7EYqMJqcy6xKSeHvTKZBsQndjbEwmiTW4,93
|
83
|
-
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=
|
83
|
+
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=jqn0yYJSSVeokaG7xxgCyr1wpJrC4CsA3D0Pf7g9LI8,60440
|
84
84
|
airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
|
85
85
|
airbyte_cdk/sources/declarative/parsers/class_types_registry.py,sha256=5vOvMuyWlpALrOq2ehLxa7wO6tlFIlgUNtMYrMCKIjE,6092
|
86
86
|
airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=y7_G5mM07zxT5YG975kdC2PAja-Uc83pYp8WrV3GNdo,522
|
87
87
|
airbyte_cdk/sources/declarative/parsers/default_implementation_registry.py,sha256=W8BcK4KOg4ifNXgsdeIoV4oneHjXBKcPHEZHIC4r-hM,3801
|
88
88
|
airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=i2yUdrdlPUHI0dSQX0zBT8WSg912SMiCF8qkQ8VvlA4,8287
|
89
89
|
airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=6ukHx0bBrCJm9rek1l_MEfS3U_gdJcM4pJRyifJEOp0,6412
|
90
|
-
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=
|
90
|
+
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=yzJZx5bJVxUPWojKm3khM-ABRiVHlmXyBZGnRg0aV-A,58885
|
91
91
|
airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=27sOWhw2LBQs62HchURakHQ2M_mtnOatNgU6q8RUtpU,476
|
92
92
|
airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py,sha256=UMK5B3vVN9DYGyMfDkMmeHGF2jgm0iQ_NSggO5v_zqw,4122
|
93
93
|
airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py,sha256=CAbyL0CJRReHZtsyyvZd7X0zE2ELt5CLnE4feDJkx2Y,1575
|
@@ -128,7 +128,7 @@ airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_
|
|
128
128
|
airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py,sha256=zuHp-yfvjAF6w5zARo2LCkds-HqSRT6bXfNkDbAmq7s,2645
|
129
129
|
airbyte_cdk/sources/declarative/retrievers/__init__.py,sha256=IiHXDeKtibRqeWcRUckmSiXfk--u-sFMw3APWK8PCGQ,339
|
130
130
|
airbyte_cdk/sources/declarative/retrievers/retriever.py,sha256=pwW9BSbWOiCg8FtREYPI_cE5KfAFV3Z9sXqER1HXP_o,1677
|
131
|
-
airbyte_cdk/sources/declarative/retrievers/simple_retriever.py,sha256=
|
131
|
+
airbyte_cdk/sources/declarative/retrievers/simple_retriever.py,sha256=8JGxPsIqTyScVHOVDixcc1tDESqf9JXvD8yPxO_0Td8,19230
|
132
132
|
airbyte_cdk/sources/declarative/schema/__init__.py,sha256=ul8L9S0-__AMEdbCLHBq-PMEeA928NVp8BB83BMotfU,517
|
133
133
|
airbyte_cdk/sources/declarative/schema/default_schema_loader.py,sha256=t0ll098cIG2Wr1rq1rZ3QDZ9WnScUuqAh42YVoTRWrU,1794
|
134
134
|
airbyte_cdk/sources/declarative/schema/inline_schema_loader.py,sha256=bVETE10hRsatRJq3R3BeyRR0wIoK3gcP1gcpVRQ_P5U,464
|
@@ -358,7 +358,7 @@ unit_tests/sources/declarative/requesters/paginators/test_stop_condition.py,sha2
|
|
358
358
|
unit_tests/sources/declarative/requesters/request_options/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
|
359
359
|
unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py,sha256=bjcaTb8I37tBhs5b_FLRTLkDZAmKjGRywpcN4oGl-zI,5900
|
360
360
|
unit_tests/sources/declarative/retrievers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
|
361
|
-
unit_tests/sources/declarative/retrievers/test_simple_retriever.py,sha256=
|
361
|
+
unit_tests/sources/declarative/retrievers/test_simple_retriever.py,sha256=mDF2m-2hqTr7VkrdoIffE8vMaUU9sv5D4At0DVtgEJw,20273
|
362
362
|
unit_tests/sources/declarative/schema/__init__.py,sha256=i-iWyCqXPVgY-4miy16FH8U06gW_1_49AVq_8S8rVWY,134
|
363
363
|
unit_tests/sources/declarative/schema/test_default_schema_loader.py,sha256=cWOFJnT9fhcEU6XLHkoe3E83mCjWc8lEttT0PFcvAm8,1091
|
364
364
|
unit_tests/sources/declarative/schema/test_inline_schema_loader.py,sha256=vDJauhZ8og8M9ZqKDbf12SSYSfhUZ0_LmH7zjJHCHwI,517
|
@@ -456,8 +456,8 @@ unit_tests/utils/test_schema_inferrer.py,sha256=Z2jHBZ540wnYkylIdV_2xr75Vtwlxuyg
|
|
456
456
|
unit_tests/utils/test_secret_utils.py,sha256=CdKK8A2-5XVxbXVtX22FK9dwwMeP5KNqDH6luWRXSNw,5256
|
457
457
|
unit_tests/utils/test_stream_status_utils.py,sha256=Xr8MZ2HWgTVIyMbywDvuYkRaUF4RZLQOT8-JjvcfR24,2970
|
458
458
|
unit_tests/utils/test_traced_exception.py,sha256=bDFP5zMBizFenz6V2WvEZTRCKGB5ijh3DBezjbfoYIs,4198
|
459
|
-
airbyte_cdk-0.
|
460
|
-
airbyte_cdk-0.
|
461
|
-
airbyte_cdk-0.
|
462
|
-
airbyte_cdk-0.
|
463
|
-
airbyte_cdk-0.
|
459
|
+
airbyte_cdk-0.65.0.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
|
460
|
+
airbyte_cdk-0.65.0.dist-info/METADATA,sha256=OSX5OQNNDpUHP7s_NHPfD7FG58xiBvJEYhgCd10mKd4,11072
|
461
|
+
airbyte_cdk-0.65.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
462
|
+
airbyte_cdk-0.65.0.dist-info/top_level.txt,sha256=edvsDKTnE6sD2wfCUaeTfKf5gQIL6CPVMwVL2sWZzqo,51
|
463
|
+
airbyte_cdk-0.65.0.dist-info/RECORD,,
|
@@ -273,6 +273,46 @@ def test_get_request_headers(test_name, paginator_mapping, expected_mapping):
|
|
273
273
|
pass
|
274
274
|
|
275
275
|
|
276
|
+
@pytest.mark.parametrize(
|
277
|
+
"test_name, paginator_mapping, ignore_stream_slicer_parameters_on_paginated_requests, next_page_token, expected_mapping",
|
278
|
+
[
|
279
|
+
("test_do_not_ignore_stream_slicer_params_if_ignore_is_true_but_no_next_page_token", {"key_from_pagination": "1000"}, True, None, {"key_from_pagination": "1000"}),
|
280
|
+
("test_do_not_ignore_stream_slicer_params_if_ignore_is_false_and_no_next_page_token", {"key_from_pagination": "1000"}, False, None, {"key_from_pagination": "1000", "key_from_slicer": "value"}),
|
281
|
+
("test_ignore_stream_slicer_params_on_paginated_request", {"key_from_pagination": "1000"}, True, {"page": 2}, {"key_from_pagination": "1000"}),
|
282
|
+
("test_do_not_ignore_stream_slicer_params_on_paginated_request", {"key_from_pagination": "1000"}, False, {"page": 2}, {"key_from_pagination": "1000", "key_from_slicer": "value"}),
|
283
|
+
],
|
284
|
+
)
|
285
|
+
def test_ignore_stream_slicer_parameters_on_paginated_requests(test_name, paginator_mapping, ignore_stream_slicer_parameters_on_paginated_requests, next_page_token, expected_mapping):
|
286
|
+
# This test is separate from the other request options because request headers must be strings
|
287
|
+
paginator = MagicMock()
|
288
|
+
paginator.get_request_headers.return_value = paginator_mapping
|
289
|
+
requester = MagicMock(use_cache=False)
|
290
|
+
|
291
|
+
stream_slicer = MagicMock()
|
292
|
+
stream_slicer.get_request_headers.return_value = {"key_from_slicer": "value"}
|
293
|
+
|
294
|
+
record_selector = MagicMock()
|
295
|
+
retriever = SimpleRetriever(
|
296
|
+
name="stream_name",
|
297
|
+
primary_key=primary_key,
|
298
|
+
requester=requester,
|
299
|
+
record_selector=record_selector,
|
300
|
+
stream_slicer=stream_slicer,
|
301
|
+
paginator=paginator,
|
302
|
+
ignore_stream_slicer_parameters_on_paginated_requests=ignore_stream_slicer_parameters_on_paginated_requests,
|
303
|
+
parameters={},
|
304
|
+
config={},
|
305
|
+
)
|
306
|
+
|
307
|
+
request_option_type_to_method = {
|
308
|
+
RequestOptionType.header: retriever._request_headers,
|
309
|
+
}
|
310
|
+
|
311
|
+
for _, method in request_option_type_to_method.items():
|
312
|
+
actual_mapping = method(None, None, next_page_token={"next_page_token": "1000"})
|
313
|
+
assert expected_mapping == actual_mapping
|
314
|
+
|
315
|
+
|
276
316
|
@pytest.mark.parametrize(
|
277
317
|
"test_name, slicer_body_data, paginator_body_data, expected_body_data",
|
278
318
|
[
|
File without changes
|
File without changes
|
File without changes
|