airbyte-cdk 6.12.3__py3-none-any.whl → 6.12.4.dev0__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/auth/oauth.py +12 -27
- airbyte_cdk/sources/declarative/concurrent_declarative_source.py +57 -0
- airbyte_cdk/sources/declarative/declarative_component_schema.yaml +1 -23
- airbyte_cdk/sources/declarative/extractors/record_filter.py +3 -5
- airbyte_cdk/sources/declarative/incremental/__init__.py +3 -0
- airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +344 -0
- airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +14 -0
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py +2 -25
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +80 -53
- airbyte_cdk/sources/declarative/partition_routers/__init__.py +1 -9
- airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +14 -20
- airbyte_cdk/sources/declarative/retrievers/async_retriever.py +31 -8
- airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +1 -1
- airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +3 -20
- airbyte_cdk/sources/streams/concurrent/cursor.py +1 -0
- airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +3 -12
- {airbyte_cdk-6.12.3.dist-info → airbyte_cdk-6.12.4.dev0.dist-info}/METADATA +2 -2
- {airbyte_cdk-6.12.3.dist-info → airbyte_cdk-6.12.4.dev0.dist-info}/RECORD +21 -21
- airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -65
- {airbyte_cdk-6.12.3.dist-info → airbyte_cdk-6.12.4.dev0.dist-info}/LICENSE.txt +0 -0
- {airbyte_cdk-6.12.3.dist-info → airbyte_cdk-6.12.4.dev0.dist-info}/WHEEL +0 -0
- {airbyte_cdk-6.12.3.dist-info → airbyte_cdk-6.12.4.dev0.dist-info}/entry_points.txt +0 -0
@@ -81,6 +81,8 @@ from airbyte_cdk.sources.declarative.extractors.record_selector import (
|
|
81
81
|
)
|
82
82
|
from airbyte_cdk.sources.declarative.incremental import (
|
83
83
|
ChildPartitionResumableFullRefreshCursor,
|
84
|
+
ConcurrentCursorFactory,
|
85
|
+
ConcurrentPerPartitionCursor,
|
84
86
|
CursorFactory,
|
85
87
|
DatetimeBasedCursor,
|
86
88
|
DeclarativeCursor,
|
@@ -239,9 +241,6 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
|
|
239
241
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
240
242
|
KeysToLower as KeysToLowerModel,
|
241
243
|
)
|
242
|
-
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
243
|
-
KeysToSnakeCase as KeysToSnakeCaseModel,
|
244
|
-
)
|
245
244
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
246
245
|
LegacySessionTokenAuthenticator as LegacySessionTokenAuthenticatorModel,
|
247
246
|
)
|
@@ -329,9 +328,6 @@ from airbyte_cdk.sources.declarative.partition_routers import (
|
|
329
328
|
SinglePartitionRouter,
|
330
329
|
SubstreamPartitionRouter,
|
331
330
|
)
|
332
|
-
from airbyte_cdk.sources.declarative.partition_routers.async_job_partition_router import (
|
333
|
-
AsyncJobPartitionRouter,
|
334
|
-
)
|
335
331
|
from airbyte_cdk.sources.declarative.partition_routers.substream_partition_router import (
|
336
332
|
ParentStreamConfig,
|
337
333
|
)
|
@@ -402,13 +398,11 @@ from airbyte_cdk.sources.declarative.transformations.flatten_fields import (
|
|
402
398
|
from airbyte_cdk.sources.declarative.transformations.keys_to_lower_transformation import (
|
403
399
|
KeysToLowerTransformation,
|
404
400
|
)
|
405
|
-
from airbyte_cdk.sources.declarative.transformations.keys_to_snake_transformation import (
|
406
|
-
KeysToSnakeCaseTransformation,
|
407
|
-
)
|
408
401
|
from airbyte_cdk.sources.message import (
|
409
402
|
InMemoryMessageRepository,
|
410
403
|
LogAppenderMessageRepositoryDecorator,
|
411
404
|
MessageRepository,
|
405
|
+
NoopMessageRepository,
|
412
406
|
)
|
413
407
|
from airbyte_cdk.sources.streams.concurrent.cursor import ConcurrentCursor, CursorField
|
414
408
|
from airbyte_cdk.sources.streams.concurrent.state_converters.datetime_stream_state_converter import (
|
@@ -487,7 +481,6 @@ class ModelToComponentFactory:
|
|
487
481
|
JsonlDecoderModel: self.create_jsonl_decoder,
|
488
482
|
GzipJsonDecoderModel: self.create_gzipjson_decoder,
|
489
483
|
KeysToLowerModel: self.create_keys_to_lower_transformation,
|
490
|
-
KeysToSnakeCaseModel: self.create_keys_to_snake_transformation,
|
491
484
|
FlattenFieldsModel: self.create_flatten_fields,
|
492
485
|
IterableDecoderModel: self.create_iterable_decoder,
|
493
486
|
XmlDecoderModel: self.create_xml_decoder,
|
@@ -604,11 +597,6 @@ class ModelToComponentFactory:
|
|
604
597
|
) -> KeysToLowerTransformation:
|
605
598
|
return KeysToLowerTransformation()
|
606
599
|
|
607
|
-
def create_keys_to_snake_transformation(
|
608
|
-
self, model: KeysToSnakeCaseModel, config: Config, **kwargs: Any
|
609
|
-
) -> KeysToSnakeCaseTransformation:
|
610
|
-
return KeysToSnakeCaseTransformation()
|
611
|
-
|
612
600
|
def create_flatten_fields(
|
613
601
|
self, model: FlattenFieldsModel, config: Config, **kwargs: Any
|
614
602
|
) -> FlattenFields:
|
@@ -823,6 +811,7 @@ class ModelToComponentFactory:
|
|
823
811
|
stream_namespace: Optional[str],
|
824
812
|
config: Config,
|
825
813
|
stream_state: MutableMapping[str, Any],
|
814
|
+
message_repository: Optional[MessageRepository] = None,
|
826
815
|
**kwargs: Any,
|
827
816
|
) -> ConcurrentCursor:
|
828
817
|
component_type = component_definition.get("type")
|
@@ -958,7 +947,7 @@ class ModelToComponentFactory:
|
|
958
947
|
stream_name=stream_name,
|
959
948
|
stream_namespace=stream_namespace,
|
960
949
|
stream_state=stream_state,
|
961
|
-
message_repository=self._message_repository,
|
950
|
+
message_repository=message_repository or self._message_repository,
|
962
951
|
connector_state_manager=state_manager,
|
963
952
|
connector_state_converter=connector_state_converter,
|
964
953
|
cursor_field=cursor_field,
|
@@ -970,6 +959,63 @@ class ModelToComponentFactory:
|
|
970
959
|
cursor_granularity=cursor_granularity,
|
971
960
|
)
|
972
961
|
|
962
|
+
def create_concurrent_cursor_from_perpartition_cursor(
|
963
|
+
self,
|
964
|
+
state_manager: ConnectorStateManager,
|
965
|
+
model_type: Type[BaseModel],
|
966
|
+
component_definition: ComponentDefinition,
|
967
|
+
stream_name: str,
|
968
|
+
stream_namespace: Optional[str],
|
969
|
+
config: Config,
|
970
|
+
stream_state: MutableMapping[str, Any],
|
971
|
+
partition_router,
|
972
|
+
**kwargs: Any,
|
973
|
+
) -> ConcurrentPerPartitionCursor:
|
974
|
+
component_type = component_definition.get("type")
|
975
|
+
if component_definition.get("type") != model_type.__name__:
|
976
|
+
raise ValueError(
|
977
|
+
f"Expected manifest component of type {model_type.__name__}, but received {component_type} instead"
|
978
|
+
)
|
979
|
+
|
980
|
+
datetime_based_cursor_model = model_type.parse_obj(component_definition)
|
981
|
+
|
982
|
+
if not isinstance(datetime_based_cursor_model, DatetimeBasedCursorModel):
|
983
|
+
raise ValueError(
|
984
|
+
f"Expected {model_type.__name__} component, but received {datetime_based_cursor_model.__class__.__name__}"
|
985
|
+
)
|
986
|
+
|
987
|
+
interpolated_cursor_field = InterpolatedString.create(
|
988
|
+
datetime_based_cursor_model.cursor_field,
|
989
|
+
parameters=datetime_based_cursor_model.parameters or {},
|
990
|
+
)
|
991
|
+
cursor_field = CursorField(interpolated_cursor_field.eval(config=config))
|
992
|
+
|
993
|
+
# Create the cursor factory
|
994
|
+
cursor_factory = ConcurrentCursorFactory(
|
995
|
+
partial(
|
996
|
+
self.create_concurrent_cursor_from_datetime_based_cursor,
|
997
|
+
state_manager=state_manager,
|
998
|
+
model_type=model_type,
|
999
|
+
component_definition=component_definition,
|
1000
|
+
stream_name=stream_name,
|
1001
|
+
stream_namespace=stream_namespace,
|
1002
|
+
config=config,
|
1003
|
+
message_repository=NoopMessageRepository(),
|
1004
|
+
)
|
1005
|
+
)
|
1006
|
+
|
1007
|
+
# Return the concurrent cursor and state converter
|
1008
|
+
return ConcurrentPerPartitionCursor(
|
1009
|
+
cursor_factory=cursor_factory,
|
1010
|
+
partition_router=partition_router,
|
1011
|
+
stream_name=stream_name,
|
1012
|
+
stream_namespace=stream_namespace,
|
1013
|
+
stream_state=stream_state,
|
1014
|
+
message_repository=self._message_repository, # type: ignore
|
1015
|
+
connector_state_manager=state_manager,
|
1016
|
+
cursor_field=cursor_field,
|
1017
|
+
)
|
1018
|
+
|
973
1019
|
@staticmethod
|
974
1020
|
def create_constant_backoff_strategy(
|
975
1021
|
model: ConstantBackoffStrategyModel, config: Config, **kwargs: Any
|
@@ -1252,18 +1298,15 @@ class ModelToComponentFactory:
|
|
1252
1298
|
raise ValueError(
|
1253
1299
|
"Unsupported Slicer is used. PerPartitionWithGlobalCursor should be used here instead"
|
1254
1300
|
)
|
1255
|
-
|
1256
|
-
|
1257
|
-
|
1258
|
-
|
1259
|
-
|
1260
|
-
|
1261
|
-
|
1262
|
-
|
1263
|
-
|
1264
|
-
else None
|
1265
|
-
),
|
1266
|
-
}
|
1301
|
+
cursor = (
|
1302
|
+
combined_slicers
|
1303
|
+
if isinstance(
|
1304
|
+
combined_slicers, (PerPartitionWithGlobalCursor, GlobalSubstreamCursor)
|
1305
|
+
)
|
1306
|
+
else self._create_component_from_model(model=model.incremental_sync, config=config)
|
1307
|
+
)
|
1308
|
+
|
1309
|
+
client_side_incremental_sync = {"cursor": cursor}
|
1267
1310
|
|
1268
1311
|
if model.incremental_sync and isinstance(model.incremental_sync, DatetimeBasedCursorModel):
|
1269
1312
|
cursor_model = model.incremental_sync
|
@@ -1665,13 +1708,6 @@ class ModelToComponentFactory:
|
|
1665
1708
|
model.retriever, stream_slicer
|
1666
1709
|
)
|
1667
1710
|
|
1668
|
-
schema_transformations = []
|
1669
|
-
if model.schema_transformations:
|
1670
|
-
for transformation_model in model.schema_transformations:
|
1671
|
-
schema_transformations.append(
|
1672
|
-
self._create_component_from_model(model=transformation_model, config=config)
|
1673
|
-
)
|
1674
|
-
|
1675
1711
|
retriever = self._create_component_from_model(
|
1676
1712
|
model=model.retriever,
|
1677
1713
|
config=config,
|
@@ -1686,7 +1722,6 @@ class ModelToComponentFactory:
|
|
1686
1722
|
return DynamicSchemaLoader(
|
1687
1723
|
retriever=retriever,
|
1688
1724
|
config=config,
|
1689
|
-
schema_transformations=schema_transformations,
|
1690
1725
|
schema_type_identifier=schema_type_identifier,
|
1691
1726
|
parameters=model.parameters or {},
|
1692
1727
|
)
|
@@ -1800,8 +1835,7 @@ class ModelToComponentFactory:
|
|
1800
1835
|
return DeclarativeSingleUseRefreshTokenOauth2Authenticator( # type: ignore
|
1801
1836
|
config,
|
1802
1837
|
InterpolatedString.create(
|
1803
|
-
model.token_refresh_endpoint,
|
1804
|
-
parameters=model.parameters or {},
|
1838
|
+
model.token_refresh_endpoint, parameters=model.parameters or {}
|
1805
1839
|
).eval(config),
|
1806
1840
|
access_token_name=InterpolatedString.create(
|
1807
1841
|
model.access_token_name or "access_token", parameters=model.parameters or {}
|
@@ -1835,7 +1869,6 @@ class ModelToComponentFactory:
|
|
1835
1869
|
# ignore type error because fixing it would have a lot of dependencies, revisit later
|
1836
1870
|
return DeclarativeOauth2Authenticator( # type: ignore
|
1837
1871
|
access_token_name=model.access_token_name or "access_token",
|
1838
|
-
access_token_value=model.access_token_value,
|
1839
1872
|
client_id=model.client_id,
|
1840
1873
|
client_secret=model.client_secret,
|
1841
1874
|
expires_in_name=model.expires_in_name or "expires_in",
|
@@ -2051,7 +2084,7 @@ class ModelToComponentFactory:
|
|
2051
2084
|
if (
|
2052
2085
|
not isinstance(stream_slicer, DatetimeBasedCursor)
|
2053
2086
|
or type(stream_slicer) is not DatetimeBasedCursor
|
2054
|
-
):
|
2087
|
+
) and not isinstance(stream_slicer, PerPartitionWithGlobalCursor):
|
2055
2088
|
# Many of the custom component implementations of DatetimeBasedCursor override get_request_params() (or other methods).
|
2056
2089
|
# Because we're decoupling RequestOptionsProvider from the Cursor, custom components will eventually need to reimplement
|
2057
2090
|
# their own RequestOptionsProvider. However, right now the existing StreamSlicer/Cursor still can act as the SimpleRetriever's
|
@@ -2265,24 +2298,18 @@ class ModelToComponentFactory:
|
|
2265
2298
|
urls_extractor=urls_extractor,
|
2266
2299
|
)
|
2267
2300
|
|
2268
|
-
|
2301
|
+
return AsyncRetriever(
|
2269
2302
|
job_orchestrator_factory=lambda stream_slices: AsyncJobOrchestrator(
|
2270
2303
|
job_repository,
|
2271
2304
|
stream_slices,
|
2272
|
-
JobTracker(
|
2273
|
-
|
2305
|
+
JobTracker(
|
2306
|
+
1
|
2307
|
+
), # FIXME eventually make the number of concurrent jobs in the API configurable. Until then, we limit to 1
|
2274
2308
|
self._message_repository,
|
2275
|
-
has_bulk_parent=False,
|
2276
|
-
# FIXME work would need to be done here in order to detect if a stream as a parent stream that is bulk
|
2309
|
+
has_bulk_parent=False, # FIXME work would need to be done here in order to detect if a stream as a parent stream that is bulk
|
2277
2310
|
),
|
2278
|
-
stream_slicer=stream_slicer,
|
2279
|
-
config=config,
|
2280
|
-
parameters=model.parameters or {},
|
2281
|
-
)
|
2282
|
-
|
2283
|
-
return AsyncRetriever(
|
2284
2311
|
record_selector=record_selector,
|
2285
|
-
stream_slicer=
|
2312
|
+
stream_slicer=stream_slicer,
|
2286
2313
|
config=config,
|
2287
2314
|
parameters=model.parameters or {},
|
2288
2315
|
)
|
@@ -2396,7 +2423,7 @@ class ModelToComponentFactory:
|
|
2396
2423
|
config=config,
|
2397
2424
|
name="",
|
2398
2425
|
primary_key=None,
|
2399
|
-
stream_slicer=
|
2426
|
+
stream_slicer=combined_slicers,
|
2400
2427
|
transformations=[],
|
2401
2428
|
)
|
2402
2429
|
|
@@ -2,18 +2,10 @@
|
|
2
2
|
# Copyright (c) 2022 Airbyte, Inc., all rights reserved.
|
3
3
|
#
|
4
4
|
|
5
|
-
from airbyte_cdk.sources.declarative.partition_routers.async_job_partition_router import AsyncJobPartitionRouter
|
6
5
|
from airbyte_cdk.sources.declarative.partition_routers.cartesian_product_stream_slicer import CartesianProductStreamSlicer
|
7
6
|
from airbyte_cdk.sources.declarative.partition_routers.list_partition_router import ListPartitionRouter
|
8
7
|
from airbyte_cdk.sources.declarative.partition_routers.single_partition_router import SinglePartitionRouter
|
9
8
|
from airbyte_cdk.sources.declarative.partition_routers.substream_partition_router import SubstreamPartitionRouter
|
10
9
|
from airbyte_cdk.sources.declarative.partition_routers.partition_router import PartitionRouter
|
11
10
|
|
12
|
-
__all__ = [
|
13
|
-
"AsyncJobPartitionRouter",
|
14
|
-
"CartesianProductStreamSlicer",
|
15
|
-
"ListPartitionRouter",
|
16
|
-
"SinglePartitionRouter",
|
17
|
-
"SubstreamPartitionRouter",
|
18
|
-
"PartitionRouter"
|
19
|
-
]
|
11
|
+
__all__ = ["CartesianProductStreamSlicer", "ListPartitionRouter", "SinglePartitionRouter", "SubstreamPartitionRouter", "PartitionRouter"]
|
@@ -88,25 +88,19 @@ class HttpComponentsResolver(ComponentsResolver):
|
|
88
88
|
"""
|
89
89
|
kwargs = {"stream_template_config": stream_template_config}
|
90
90
|
|
91
|
-
for
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
valid_types
|
101
|
-
|
102
|
-
)
|
103
|
-
value = resolved_component.value.eval(
|
104
|
-
self.config, valid_types=valid_types, **kwargs
|
105
|
-
)
|
91
|
+
for components_values in self.retriever.read_records({}):
|
92
|
+
updated_config = deepcopy(stream_template_config)
|
93
|
+
kwargs["components_values"] = components_values # type: ignore[assignment] # component_values will always be of type Mapping[str, Any]
|
94
|
+
|
95
|
+
for resolved_component in self._resolved_components:
|
96
|
+
valid_types = (
|
97
|
+
(resolved_component.value_type,) if resolved_component.value_type else None
|
98
|
+
)
|
99
|
+
value = resolved_component.value.eval(
|
100
|
+
self.config, valid_types=valid_types, **kwargs
|
101
|
+
)
|
106
102
|
|
107
|
-
|
108
|
-
|
109
|
-
]
|
110
|
-
dpath.set(updated_config, path, value)
|
103
|
+
path = [path.eval(self.config, **kwargs) for path in resolved_component.field_path]
|
104
|
+
dpath.set(updated_config, path, value)
|
111
105
|
|
112
|
-
|
106
|
+
yield updated_config
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# Copyright (c) 2024 Airbyte, Inc., all rights reserved.
|
2
2
|
|
3
3
|
|
4
|
-
from dataclasses import InitVar, dataclass
|
5
|
-
from typing import Any, Iterable, Mapping, Optional
|
4
|
+
from dataclasses import InitVar, dataclass, field
|
5
|
+
from typing import Any, Callable, Iterable, Mapping, Optional
|
6
6
|
|
7
7
|
from typing_extensions import deprecated
|
8
8
|
|
@@ -12,10 +12,9 @@ from airbyte_cdk.sources.declarative.async_job.job_orchestrator import (
|
|
12
12
|
AsyncPartition,
|
13
13
|
)
|
14
14
|
from airbyte_cdk.sources.declarative.extractors.record_selector import RecordSelector
|
15
|
-
from airbyte_cdk.sources.declarative.partition_routers
|
16
|
-
AsyncJobPartitionRouter,
|
17
|
-
)
|
15
|
+
from airbyte_cdk.sources.declarative.partition_routers import SinglePartitionRouter
|
18
16
|
from airbyte_cdk.sources.declarative.retrievers import Retriever
|
17
|
+
from airbyte_cdk.sources.declarative.stream_slicers import StreamSlicer
|
19
18
|
from airbyte_cdk.sources.source import ExperimentalClassWarning
|
20
19
|
from airbyte_cdk.sources.streams.core import StreamData
|
21
20
|
from airbyte_cdk.sources.types import Config, StreamSlice, StreamState
|
@@ -30,10 +29,15 @@ from airbyte_cdk.utils.traced_exception import AirbyteTracedException
|
|
30
29
|
class AsyncRetriever(Retriever):
|
31
30
|
config: Config
|
32
31
|
parameters: InitVar[Mapping[str, Any]]
|
32
|
+
job_orchestrator_factory: Callable[[Iterable[StreamSlice]], AsyncJobOrchestrator]
|
33
33
|
record_selector: RecordSelector
|
34
|
-
stream_slicer:
|
34
|
+
stream_slicer: StreamSlicer = field(
|
35
|
+
default_factory=lambda: SinglePartitionRouter(parameters={})
|
36
|
+
)
|
35
37
|
|
36
38
|
def __post_init__(self, parameters: Mapping[str, Any]) -> None:
|
39
|
+
self._job_orchestrator_factory = self.job_orchestrator_factory
|
40
|
+
self.__job_orchestrator: Optional[AsyncJobOrchestrator] = None
|
37
41
|
self._parameters = parameters
|
38
42
|
|
39
43
|
@property
|
@@ -50,6 +54,17 @@ class AsyncRetriever(Retriever):
|
|
50
54
|
"""
|
51
55
|
pass
|
52
56
|
|
57
|
+
@property
|
58
|
+
def _job_orchestrator(self) -> AsyncJobOrchestrator:
|
59
|
+
if not self.__job_orchestrator:
|
60
|
+
raise AirbyteTracedException(
|
61
|
+
message="Invalid state within AsyncJobRetriever. Please contact Airbyte Support",
|
62
|
+
internal_message="AsyncPartitionRepository is expected to be accessed only after `stream_slices`",
|
63
|
+
failure_type=FailureType.system_error,
|
64
|
+
)
|
65
|
+
|
66
|
+
return self.__job_orchestrator
|
67
|
+
|
53
68
|
def _get_stream_state(self) -> StreamState:
|
54
69
|
"""
|
55
70
|
Gets the current state of the stream.
|
@@ -84,7 +99,15 @@ class AsyncRetriever(Retriever):
|
|
84
99
|
return stream_slice["partition"] # type: ignore # stream_slice["partition"] has been added as an AsyncPartition as part of stream_slices
|
85
100
|
|
86
101
|
def stream_slices(self) -> Iterable[Optional[StreamSlice]]:
|
87
|
-
|
102
|
+
slices = self.stream_slicer.stream_slices()
|
103
|
+
self.__job_orchestrator = self._job_orchestrator_factory(slices)
|
104
|
+
|
105
|
+
for completed_partition in self._job_orchestrator.create_and_get_completed_partitions():
|
106
|
+
yield StreamSlice(
|
107
|
+
partition=dict(completed_partition.stream_slice.partition)
|
108
|
+
| {"partition": completed_partition},
|
109
|
+
cursor_slice=completed_partition.stream_slice.cursor_slice,
|
110
|
+
)
|
88
111
|
|
89
112
|
def read_records(
|
90
113
|
self,
|
@@ -93,7 +116,7 @@ class AsyncRetriever(Retriever):
|
|
93
116
|
) -> Iterable[StreamData]:
|
94
117
|
stream_state: StreamState = self._get_stream_state()
|
95
118
|
partition: AsyncPartition = self._validate_and_get_stream_slice_partition(stream_slice)
|
96
|
-
records: Iterable[Mapping[str, Any]] = self.
|
119
|
+
records: Iterable[Mapping[str, Any]] = self._job_orchestrator.fetch_records(partition)
|
97
120
|
|
98
121
|
yield from self.record_selector.filter_and_transform(
|
99
122
|
all_data=records,
|
@@ -178,7 +178,7 @@ class SimpleRetriever(Retriever):
|
|
178
178
|
stream_slice,
|
179
179
|
next_page_token,
|
180
180
|
self._paginator.get_request_headers,
|
181
|
-
self.
|
181
|
+
self.request_option_provider.get_request_headers,
|
182
182
|
)
|
183
183
|
if isinstance(headers, str):
|
184
184
|
raise ValueError("Request headers cannot be a string")
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
from copy import deepcopy
|
7
|
-
from dataclasses import InitVar, dataclass
|
7
|
+
from dataclasses import InitVar, dataclass
|
8
8
|
from typing import Any, List, Mapping, MutableMapping, Optional, Union
|
9
9
|
|
10
10
|
import dpath
|
@@ -13,9 +13,8 @@ from typing_extensions import deprecated
|
|
13
13
|
from airbyte_cdk.sources.declarative.interpolation.interpolated_string import InterpolatedString
|
14
14
|
from airbyte_cdk.sources.declarative.retrievers.retriever import Retriever
|
15
15
|
from airbyte_cdk.sources.declarative.schema.schema_loader import SchemaLoader
|
16
|
-
from airbyte_cdk.sources.declarative.transformations import RecordTransformation
|
17
16
|
from airbyte_cdk.sources.source import ExperimentalClassWarning
|
18
|
-
from airbyte_cdk.sources.types import Config
|
17
|
+
from airbyte_cdk.sources.types import Config
|
19
18
|
|
20
19
|
AIRBYTE_DATA_TYPES: Mapping[str, Mapping[str, Any]] = {
|
21
20
|
"string": {"type": ["null", "string"]},
|
@@ -104,7 +103,6 @@ class DynamicSchemaLoader(SchemaLoader):
|
|
104
103
|
config: Config
|
105
104
|
parameters: InitVar[Mapping[str, Any]]
|
106
105
|
schema_type_identifier: SchemaTypeIdentifier
|
107
|
-
schema_transformations: List[RecordTransformation] = field(default_factory=lambda: [])
|
108
106
|
|
109
107
|
def get_json_schema(self) -> Mapping[str, Any]:
|
110
108
|
"""
|
@@ -130,27 +128,12 @@ class DynamicSchemaLoader(SchemaLoader):
|
|
130
128
|
)
|
131
129
|
properties[key] = value
|
132
130
|
|
133
|
-
transformed_properties = self._transform(properties, {})
|
134
|
-
|
135
131
|
return {
|
136
132
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
137
133
|
"type": "object",
|
138
|
-
"properties":
|
134
|
+
"properties": properties,
|
139
135
|
}
|
140
136
|
|
141
|
-
def _transform(
|
142
|
-
self,
|
143
|
-
properties: Mapping[str, Any],
|
144
|
-
stream_state: StreamState,
|
145
|
-
stream_slice: Optional[StreamSlice] = None,
|
146
|
-
) -> Mapping[str, Any]:
|
147
|
-
for transformation in self.schema_transformations:
|
148
|
-
transformation.transform(
|
149
|
-
properties, # type: ignore # properties has type Mapping[str, Any], but Dict[str, Any] expected
|
150
|
-
config=self.config,
|
151
|
-
)
|
152
|
-
return properties
|
153
|
-
|
154
137
|
def _get_key(
|
155
138
|
self,
|
156
139
|
raw_schema: MutableMapping[str, Any],
|
@@ -54,16 +54,7 @@ class AbstractOauth2Authenticator(AuthBase):
|
|
54
54
|
|
55
55
|
def get_auth_header(self) -> Mapping[str, Any]:
|
56
56
|
"""HTTP header to set on the requests"""
|
57
|
-
|
58
|
-
self.access_token
|
59
|
-
if (
|
60
|
-
not self.get_token_refresh_endpoint()
|
61
|
-
or not self.get_refresh_token()
|
62
|
-
and self.access_token
|
63
|
-
)
|
64
|
-
else self.get_access_token()
|
65
|
-
)
|
66
|
-
return {"Authorization": f"Bearer {token}"}
|
57
|
+
return {"Authorization": f"Bearer {self.get_access_token()}"}
|
67
58
|
|
68
59
|
def get_access_token(self) -> str:
|
69
60
|
"""Returns the access token"""
|
@@ -130,7 +121,7 @@ class AbstractOauth2Authenticator(AuthBase):
|
|
130
121
|
try:
|
131
122
|
response = requests.request(
|
132
123
|
method="POST",
|
133
|
-
url=self.get_token_refresh_endpoint(),
|
124
|
+
url=self.get_token_refresh_endpoint(),
|
134
125
|
data=self.build_refresh_request_body(),
|
135
126
|
)
|
136
127
|
if response.ok:
|
@@ -207,7 +198,7 @@ class AbstractOauth2Authenticator(AuthBase):
|
|
207
198
|
return None
|
208
199
|
|
209
200
|
@abstractmethod
|
210
|
-
def get_token_refresh_endpoint(self) ->
|
201
|
+
def get_token_refresh_endpoint(self) -> str:
|
211
202
|
"""Returns the endpoint to refresh the access token"""
|
212
203
|
|
213
204
|
@abstractmethod
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: airbyte-cdk
|
3
|
-
Version: 6.12.
|
3
|
+
Version: 6.12.4.dev0
|
4
4
|
Summary: A framework for writing Airbyte Connectors.
|
5
5
|
Home-page: https://airbyte.com
|
6
6
|
License: MIT
|
@@ -57,7 +57,7 @@ Requires-Dist: python-calamine (==0.2.3) ; extra == "file-based"
|
|
57
57
|
Requires-Dist: python-dateutil
|
58
58
|
Requires-Dist: python-snappy (==0.7.3) ; extra == "file-based"
|
59
59
|
Requires-Dist: python-ulid (>=3.0.0,<4.0.0)
|
60
|
-
Requires-Dist: pytz (==2024.
|
60
|
+
Requires-Dist: pytz (==2024.1)
|
61
61
|
Requires-Dist: rapidfuzz (>=3.10.1,<4.0.0)
|
62
62
|
Requires-Dist: requests
|
63
63
|
Requires-Dist: requests_cache
|
@@ -53,7 +53,7 @@ airbyte_cdk/sources/declarative/async_job/timer.py,sha256=Fb8P72CQ7jIzJyzMSSNuBf
|
|
53
53
|
airbyte_cdk/sources/declarative/auth/__init__.py,sha256=hhiJV3kU5_fja7hQYWqbYjjtJPpaJdS2NiJpJLrG2uw,294
|
54
54
|
airbyte_cdk/sources/declarative/auth/declarative_authenticator.py,sha256=nf-OmRUHYG4ORBwyb5CANzuHEssE-oNmL-Lccn41Td8,1099
|
55
55
|
airbyte_cdk/sources/declarative/auth/jwt.py,sha256=7r5q1zOekjw8kEmEk1oUyovzVt3cbD6BuFnRILeLZi8,8250
|
56
|
-
airbyte_cdk/sources/declarative/auth/oauth.py,sha256=
|
56
|
+
airbyte_cdk/sources/declarative/auth/oauth.py,sha256=_4Kaa8ZfmvMzUyLeaWm03Aux9uVBh1ia-sSlUxVB24I,8480
|
57
57
|
airbyte_cdk/sources/declarative/auth/selective_authenticator.py,sha256=qGwC6YsCldr1bIeKG6Qo-A9a5cTdHw-vcOn3OtQrS4c,1540
|
58
58
|
airbyte_cdk/sources/declarative/auth/token.py,sha256=r4u3WXyVa7WmiSZ9-eZXlrUI-pS0D4YWJnwjLzwV-Fk,11210
|
59
59
|
airbyte_cdk/sources/declarative/auth/token_provider.py,sha256=9oq3dcBPAPwXSfkISjhA05dMhIzxaDQTmwOydBrnsMk,3028
|
@@ -62,11 +62,11 @@ airbyte_cdk/sources/declarative/checks/check_stream.py,sha256=dAA-UhmMj0WLXCkRQr
|
|
62
62
|
airbyte_cdk/sources/declarative/checks/connection_checker.py,sha256=MBRJo6WJlZQHpIfOGaNOkkHUmgUl_4wDM6VPo41z5Ss,1383
|
63
63
|
airbyte_cdk/sources/declarative/concurrency_level/__init__.py,sha256=5XUqrmlstYlMM0j6crktlKQwALek0uiz2D3WdM46MyA,191
|
64
64
|
airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py,sha256=YIwCTCpOr_QSNW4ltQK0yUGWInI8PKNY216HOOegYLk,2101
|
65
|
-
airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=
|
65
|
+
airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=Z7Sf-PRVdR_Pba9S_Mxq7X9VtzDYVv3Za41ibQLU7jc,26391
|
66
66
|
airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=l9LG7Qm6e5r_qgqfVKnx3mXYtg1I9MmMjomVIPfU4XA,177
|
67
67
|
airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=SX9JjdesN1edN2WVUVMzU_ptqp2QB1OnsnjZ4mwcX7w,2579
|
68
68
|
airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
|
69
|
-
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=
|
69
|
+
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=WrcFuuXPCSnxGnczbJFYLX8rM0bBydeLQNljaZHjcBQ,128702
|
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=hNlhaB5FjNC6IfJyglj5ZJWkYD2nEAukMDmzRz5PC6o,671
|
@@ -80,14 +80,15 @@ airbyte_cdk/sources/declarative/extractors/__init__.py,sha256=YFuL4D4RuuB8E1DNSb
|
|
80
80
|
airbyte_cdk/sources/declarative/extractors/dpath_extractor.py,sha256=wR4Ol4MG2lt5UlqXF5EU_k7qa5cN4_-luu3PJ1PlO3A,3131
|
81
81
|
airbyte_cdk/sources/declarative/extractors/http_selector.py,sha256=2zWZ4ewTqQC8VwkjS0xD_u350Km3SiYP7hpOOgiLg5o,1169
|
82
82
|
airbyte_cdk/sources/declarative/extractors/record_extractor.py,sha256=XJELMjahAsaomlvQgN2zrNO0DJX0G0fr9r682gUz7Pg,691
|
83
|
-
airbyte_cdk/sources/declarative/extractors/record_filter.py,sha256=
|
83
|
+
airbyte_cdk/sources/declarative/extractors/record_filter.py,sha256=yTdEkyDUSW2KbFkEwJJMlS963C955LgCCOVfTmmScpQ,3367
|
84
84
|
airbyte_cdk/sources/declarative/extractors/record_selector.py,sha256=AkXPOWyp741cpYLBl9AbmVmOQmQ2BzZ2XjgsMEB6gGc,6583
|
85
85
|
airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py,sha256=LhqGDfX06_dDYLKsIVnwQ_nAWCln-v8PV7Wgt_QVeTI,6533
|
86
|
-
airbyte_cdk/sources/declarative/incremental/__init__.py,sha256=
|
86
|
+
airbyte_cdk/sources/declarative/incremental/__init__.py,sha256=zEERPIXz1WxCJypqlSXZCFIpT4-mIsjzRdmFlX2-nMg,1210
|
87
|
+
airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py,sha256=7E5UHVvYBIZE-NbGs4mffhyL4BaXWTDbQXbE5kZPSPE,15283
|
87
88
|
airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py,sha256=_UzUnSIUsDbRgbFTXgSyZEFb4ws-KdhdQPWO8mFbV7U,22028
|
88
89
|
airbyte_cdk/sources/declarative/incremental/declarative_cursor.py,sha256=5Bhw9VRPyIuCaD0wmmq_L3DZsa-rJgtKSEUzSd8YYD0,536
|
89
90
|
airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py,sha256=3_EEZop94bMitZaJd2PF5Q2Xt9v94tYg7p7YJz8tAFc,15869
|
90
|
-
airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py,sha256=
|
91
|
+
airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py,sha256=LpBLehdJ0ffinyFadt2ZwhwYQ4Pu3yqyQrIAlOTNbvg,16265
|
91
92
|
airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py,sha256=2YBOA2NnwAeIKlIhSwUB_W-FaGnPcmrG_liY7b4mV2Y,8365
|
92
93
|
airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py,sha256=10LFv1QPM-agVKl6eaANmEBOfd7gZgBrkoTcMggsieQ,4809
|
93
94
|
airbyte_cdk/sources/declarative/interpolation/__init__.py,sha256=tjUJkn3B-iZ-p7RP2c3dVZejrGiQeooGmS5ibWTuUL4,437
|
@@ -104,14 +105,13 @@ airbyte_cdk/sources/declarative/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW
|
|
104
105
|
airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py,sha256=iemy3fKLczcU0-Aor7tx5jcT6DRedKMqyK7kCOp01hg,3924
|
105
106
|
airbyte_cdk/sources/declarative/migrations/state_migration.py,sha256=KWPjealMLKSMtajXgkdGgKg7EmTLR-CqqD7UIh0-eDU,794
|
106
107
|
airbyte_cdk/sources/declarative/models/__init__.py,sha256=nUFxNCiKeYRVXuZEKA7GD-lTHxsiKcQ8FitZjKhPIvE,100
|
107
|
-
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=
|
108
|
+
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=7-v-EuGDDi-kCXvGu3m0ZK2FHpsMExcPzqBI-hfoAzg,90364
|
108
109
|
airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
|
109
110
|
airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=Rir9_z3Kcd5Es0-LChrzk-0qubAsiK_RSEnLmK2OXm8,553
|
110
111
|
airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=CXwTfD3wSQq3okcqwigpprbHhSURUokh4GK2OmOyKC8,9132
|
111
112
|
airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=IWUOdF03o-aQn0Occo1BJCxU0Pz-QILk5L67nzw2thw,6803
|
112
|
-
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=
|
113
|
-
airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=
|
114
|
-
airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=n82J15S8bjeMZ5uROu--P3hnbQoxkY5v7RPHYx7g7ro,2929
|
113
|
+
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=bvoj7fdaeuNuupVXOQQfeID84u6d-jki8D8P5d6JA-g,107281
|
114
|
+
airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=1NjaZoGAIefvWwj6wx-LOKIXXWS-UnBlZFnuR7y6uYA,745
|
115
115
|
airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
|
116
116
|
airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py,sha256=t7pRdFWfFWJtQQG19c9PVeMODyO2BknRTakpM5U9N-8,4844
|
117
117
|
airbyte_cdk/sources/declarative/partition_routers/partition_router.py,sha256=YyEIzdmLd1FjbVP3QbQ2VFCLW_P-OGbVh6VpZShp54k,2218
|
@@ -156,14 +156,14 @@ airbyte_cdk/sources/declarative/requesters/requester.py,sha256=iVVpXQ4KEd9OyZNwm
|
|
156
156
|
airbyte_cdk/sources/declarative/resolvers/__init__.py,sha256=RAwq1VrkC0kAaIkmKkL7so8ZeUzF0MgUQ0tciGkY7v4,1116
|
157
157
|
airbyte_cdk/sources/declarative/resolvers/components_resolver.py,sha256=KPjKc0yb9artL4ZkeqN8RmEykHH6FJgqXD7fCEnh1X0,1936
|
158
158
|
airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py,sha256=dz4iJV9liD_LzY_Mn4XmAStoUll60R3MIGWV4aN3pgg,5223
|
159
|
-
airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py,sha256=
|
159
|
+
airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py,sha256=ZA2vrHQKfXNMcH3x1iuyFOTGNzYDhUFT2qcaiOzSK0A,4271
|
160
160
|
airbyte_cdk/sources/declarative/retrievers/__init__.py,sha256=FVQpUGVwp2Gibk4gp07VmLKX5AafUlsZWFSrDpUDuJM,443
|
161
|
-
airbyte_cdk/sources/declarative/retrievers/async_retriever.py,sha256=
|
161
|
+
airbyte_cdk/sources/declarative/retrievers/async_retriever.py,sha256=WDFnjrXLz3-YEjFhmlMkWAn9AJvnZ0mk9FyC8DAhEYk,4976
|
162
162
|
airbyte_cdk/sources/declarative/retrievers/retriever.py,sha256=XPLs593Xv8c5cKMc37XzUAYmzlXd1a7eSsspM-CMuWA,1696
|
163
|
-
airbyte_cdk/sources/declarative/retrievers/simple_retriever.py,sha256=
|
163
|
+
airbyte_cdk/sources/declarative/retrievers/simple_retriever.py,sha256=6IP6e9cjGEU2y77lcOKj1bqn3bYGBAsP8vJU4Skzp30,24182
|
164
164
|
airbyte_cdk/sources/declarative/schema/__init__.py,sha256=Io9vninzlEjQ2uFmWklxfwNM0cXfljtzOz5zL1OVyT4,701
|
165
165
|
airbyte_cdk/sources/declarative/schema/default_schema_loader.py,sha256=KTACrIE23a83wsm3Rd9Eb4K6-20lrGqYxTHNp9yxsso,1820
|
166
|
-
airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py,sha256=
|
166
|
+
airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py,sha256=tP5DIEMn-k2JshWeXmo53ZEudDAVb4AJ50Z5tfme_ZU,8063
|
167
167
|
airbyte_cdk/sources/declarative/schema/inline_schema_loader.py,sha256=bVETE10hRsatRJq3R3BeyRR0wIoK3gcP1gcpVRQ_P5U,464
|
168
168
|
airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py,sha256=5Wl-fqW-pVf_dxJ4yGHMAFfC4JjKHYJhqFJT1xA57F4,4177
|
169
169
|
airbyte_cdk/sources/declarative/schema/schema_loader.py,sha256=kjt8v0N5wWKA5zyLnrDLxf1PJKdUqvQq2RVnAOAzNSY,379
|
@@ -253,7 +253,7 @@ airbyte_cdk/sources/streams/concurrent/abstract_stream.py,sha256=3OB5VsvOkJmCxIM
|
|
253
253
|
airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py,sha256=QTry1QCBUwJDw1QSCEvz23s7zIEx_7QMxkPq9j-oPIQ,1358
|
254
254
|
airbyte_cdk/sources/streams/concurrent/adapters.py,sha256=QP_64kQo-b3sRNHZA5aqrgCJqAhIVegRM3vJ8jGyuSY,15213
|
255
255
|
airbyte_cdk/sources/streams/concurrent/availability_strategy.py,sha256=4La5v2UffSjGnhmF4kwNIKt_g3RXk2ux1mSHA1ejgYM,2898
|
256
|
-
airbyte_cdk/sources/streams/concurrent/cursor.py,sha256
|
256
|
+
airbyte_cdk/sources/streams/concurrent/cursor.py,sha256=-b7jjLbGBk3dvJLZiWG_Q_f1UmZc1Bp9VeFr4NYitCg,20855
|
257
257
|
airbyte_cdk/sources/streams/concurrent/default_stream.py,sha256=K3rLMpYhS7nnmvwQ52lqBy7DQdFMJpvvT7sgBg_ckA8,3207
|
258
258
|
airbyte_cdk/sources/streams/concurrent/exceptions.py,sha256=JOZ446MCLpmF26r9KfS6OO_6rGjcjgJNZdcw6jccjEI,468
|
259
259
|
airbyte_cdk/sources/streams/concurrent/helpers.py,sha256=S6AW8TgIASCZ2UuUcQLE8OzgYUHWt2-KPOvNPwnQf-Q,1596
|
@@ -284,7 +284,7 @@ airbyte_cdk/sources/streams/http/http.py,sha256=JAMpiTdS9HFNOlwayWNvQdxoqs2rpW9w
|
|
284
284
|
airbyte_cdk/sources/streams/http/http_client.py,sha256=tDE0ROtxjGMVphvsw8INvGMtZ97hIF-v47pZ3jIyiwc,23011
|
285
285
|
airbyte_cdk/sources/streams/http/rate_limiting.py,sha256=IwdjrHKUnU97XO4qONgYRv4YYW51xQ8SJm4WLafXDB8,6351
|
286
286
|
airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py,sha256=RN0D3nOX1xLgwEwKWu6pkGy3XqBFzKSNZ8Lf6umU2eY,413
|
287
|
-
airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py,sha256=
|
287
|
+
airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py,sha256=nxI94yJ3bGfpDO8RR3QvOJ-PSW0n9CElSAkgl5ae80Y,10321
|
288
288
|
airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py,sha256=Y3n7J-sk5yGjv_OxtY6Z6k0PEsFZmtIRi-x0KCbaHdA,1010
|
289
289
|
airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py,sha256=ka-bBRWvIv09LmZNYl49p2lK9nd_Tvi2g0lIp3OkU40,14872
|
290
290
|
airbyte_cdk/sources/streams/http/requests_native_auth/token.py,sha256=h5PTzcdH-RQLeCg7xZ45w_484OPUDSwNWl_iMJQmZoI,2526
|
@@ -339,8 +339,8 @@ airbyte_cdk/utils/slice_hasher.py,sha256=-pHexlNYoWYPnXNH-M7HEbjmeJe9Zk7SJijdQ7d
|
|
339
339
|
airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
|
340
340
|
airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
|
341
341
|
airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
|
342
|
-
airbyte_cdk-6.12.
|
343
|
-
airbyte_cdk-6.12.
|
344
|
-
airbyte_cdk-6.12.
|
345
|
-
airbyte_cdk-6.12.
|
346
|
-
airbyte_cdk-6.12.
|
342
|
+
airbyte_cdk-6.12.4.dev0.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
|
343
|
+
airbyte_cdk-6.12.4.dev0.dist-info/METADATA,sha256=cJXPSxhnU8vhnxw7WA_Z9sIXzENf9UAG8IgEzLLcmvA,5993
|
344
|
+
airbyte_cdk-6.12.4.dev0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
345
|
+
airbyte_cdk-6.12.4.dev0.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
|
346
|
+
airbyte_cdk-6.12.4.dev0.dist-info/RECORD,,
|