airbyte-cdk 6.52.0.dev1__py3-none-any.whl → 6.53.1__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 +2 -0
- airbyte_cdk/sources/declarative/interpolation/macros.py +13 -0
- airbyte_cdk/sources/declarative/manifest_declarative_source.py +1 -1
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py +5 -1
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +49 -32
- airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -2
- airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -34
- airbyte_cdk/sources/declarative/stream_slicers/__init__.py +4 -1
- airbyte_cdk/sources/declarative/stream_slicers/stream_slicer_test_read_decorator.py +28 -0
- airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +21 -3
- {airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.1.dist-info}/METADATA +1 -1
- {airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.1.dist-info}/RECORD +16 -15
- {airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.1.dist-info}/LICENSE.txt +0 -0
- {airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.1.dist-info}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.1.dist-info}/WHEEL +0 -0
- {airbyte_cdk-6.52.0.dev1.dist-info → airbyte_cdk-6.53.1.dist-info}/entry_points.txt +0 -0
@@ -4056,6 +4056,8 @@ definitions:
|
|
4056
4056
|
description: The expected data type of the value. If omitted, the type will be inferred from the value provided.
|
4057
4057
|
"$ref": "#/definitions/ValueType"
|
4058
4058
|
create_or_update:
|
4059
|
+
title: Create or Update
|
4060
|
+
description: Determines whether to create a new path if it doesn't exist (true) or only update existing paths (false). When set to true, the resolver will create new paths in the stream template if they don't exist. When false (default), it will only update existing paths.
|
4059
4061
|
type: boolean
|
4060
4062
|
default: false
|
4061
4063
|
$parameters:
|
@@ -6,6 +6,7 @@ import builtins
|
|
6
6
|
import datetime
|
7
7
|
import typing
|
8
8
|
from typing import Optional, Union
|
9
|
+
from urllib.parse import quote_plus
|
9
10
|
|
10
11
|
import isodate
|
11
12
|
import pytz
|
@@ -182,6 +183,17 @@ def format_datetime(
|
|
182
183
|
return DatetimeParser().format(dt=dt_datetime, format=format)
|
183
184
|
|
184
185
|
|
186
|
+
def sanitize_url(value: str) -> str:
|
187
|
+
"""
|
188
|
+
Sanitizes a value by via urllib.parse.quote_plus
|
189
|
+
|
190
|
+
Usage:
|
191
|
+
`"{{ sanitize_url('https://example.com/path?query=value') }}"`
|
192
|
+
"""
|
193
|
+
sanitization_strategy = quote_plus
|
194
|
+
return sanitization_strategy(value)
|
195
|
+
|
196
|
+
|
185
197
|
_macros_list = [
|
186
198
|
now_utc,
|
187
199
|
today_utc,
|
@@ -193,5 +205,6 @@ _macros_list = [
|
|
193
205
|
format_datetime,
|
194
206
|
today_with_timezone,
|
195
207
|
str_to_datetime,
|
208
|
+
sanitize_url,
|
196
209
|
]
|
197
210
|
macros = {f.__name__: f for f in _macros_list}
|
@@ -128,7 +128,7 @@ class ManifestDeclarativeSource(DeclarativeSource):
|
|
128
128
|
component_factory
|
129
129
|
if component_factory
|
130
130
|
else ModelToComponentFactory(
|
131
|
-
emit_connector_builder_messages,
|
131
|
+
emit_connector_builder_messages=emit_connector_builder_messages,
|
132
132
|
max_concurrent_async_job_count=source_config.get("max_concurrent_async_job_count"),
|
133
133
|
)
|
134
134
|
)
|
@@ -1478,7 +1478,11 @@ class ComponentMappingDefinition(BaseModel):
|
|
1478
1478
|
description="The expected data type of the value. If omitted, the type will be inferred from the value provided.",
|
1479
1479
|
title="Value Type",
|
1480
1480
|
)
|
1481
|
-
create_or_update: Optional[bool] =
|
1481
|
+
create_or_update: Optional[bool] = Field(
|
1482
|
+
False,
|
1483
|
+
description="Determines whether to create a new path if it doesn't exist (true) or only update existing paths (false). When set to true, the resolver will create new paths in the stream template if they don't exist. When false (default), it will only update existing paths.",
|
1484
|
+
title="Create or Update",
|
1485
|
+
)
|
1482
1486
|
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
1483
1487
|
|
1484
1488
|
|
@@ -510,7 +510,6 @@ from airbyte_cdk.sources.declarative.retrievers import (
|
|
510
510
|
AsyncRetriever,
|
511
511
|
LazySimpleRetriever,
|
512
512
|
SimpleRetriever,
|
513
|
-
SimpleRetrieverTestReadDecorator,
|
514
513
|
)
|
515
514
|
from airbyte_cdk.sources.declarative.retrievers.file_uploader import (
|
516
515
|
ConnectorBuilderFileUploader,
|
@@ -530,7 +529,10 @@ from airbyte_cdk.sources.declarative.schema import (
|
|
530
529
|
)
|
531
530
|
from airbyte_cdk.sources.declarative.schema.composite_schema_loader import CompositeSchemaLoader
|
532
531
|
from airbyte_cdk.sources.declarative.spec import ConfigMigration, Spec
|
533
|
-
from airbyte_cdk.sources.declarative.stream_slicers import
|
532
|
+
from airbyte_cdk.sources.declarative.stream_slicers import (
|
533
|
+
StreamSlicer,
|
534
|
+
StreamSlicerTestReadDecorator,
|
535
|
+
)
|
534
536
|
from airbyte_cdk.sources.declarative.transformations import (
|
535
537
|
AddFields,
|
536
538
|
RecordTransformation,
|
@@ -3241,6 +3243,14 @@ class ModelToComponentFactory:
|
|
3241
3243
|
request_options_provider = DefaultRequestOptionsProvider(parameters={})
|
3242
3244
|
|
3243
3245
|
stream_slicer = stream_slicer or SinglePartitionRouter(parameters={})
|
3246
|
+
if self._should_limit_slices_fetched():
|
3247
|
+
stream_slicer = cast(
|
3248
|
+
StreamSlicer,
|
3249
|
+
StreamSlicerTestReadDecorator(
|
3250
|
+
wrapped_slicer=stream_slicer,
|
3251
|
+
maximum_number_of_slices=self._limit_slices_fetched or 5,
|
3252
|
+
),
|
3253
|
+
)
|
3244
3254
|
|
3245
3255
|
cursor_used_for_stop_condition = cursor if stop_condition_on_cursor else None
|
3246
3256
|
paginator = (
|
@@ -3299,22 +3309,6 @@ class ModelToComponentFactory:
|
|
3299
3309
|
parameters=model.parameters or {},
|
3300
3310
|
)
|
3301
3311
|
|
3302
|
-
if self._limit_slices_fetched or self._emit_connector_builder_messages:
|
3303
|
-
return SimpleRetrieverTestReadDecorator(
|
3304
|
-
name=name,
|
3305
|
-
paginator=paginator,
|
3306
|
-
primary_key=primary_key,
|
3307
|
-
requester=requester,
|
3308
|
-
record_selector=record_selector,
|
3309
|
-
stream_slicer=stream_slicer,
|
3310
|
-
request_option_provider=request_options_provider,
|
3311
|
-
cursor=cursor,
|
3312
|
-
config=config,
|
3313
|
-
maximum_number_of_slices=self._limit_slices_fetched or 5,
|
3314
|
-
ignore_stream_slicer_parameters_on_paginated_requests=ignore_stream_slicer_parameters_on_paginated_requests,
|
3315
|
-
log_formatter=log_formatter,
|
3316
|
-
parameters=model.parameters or {},
|
3317
|
-
)
|
3318
3312
|
return SimpleRetriever(
|
3319
3313
|
name=name,
|
3320
3314
|
paginator=paginator,
|
@@ -3327,9 +3321,35 @@ class ModelToComponentFactory:
|
|
3327
3321
|
config=config,
|
3328
3322
|
ignore_stream_slicer_parameters_on_paginated_requests=ignore_stream_slicer_parameters_on_paginated_requests,
|
3329
3323
|
additional_query_properties=query_properties,
|
3324
|
+
log_formatter=self._get_log_formatter(log_formatter, name),
|
3330
3325
|
parameters=model.parameters or {},
|
3331
3326
|
)
|
3332
3327
|
|
3328
|
+
def _get_log_formatter(
|
3329
|
+
self, log_formatter: Callable[[Response], Any] | None, name: str
|
3330
|
+
) -> Callable[[Response], Any] | None:
|
3331
|
+
if self._should_limit_slices_fetched():
|
3332
|
+
return (
|
3333
|
+
(
|
3334
|
+
lambda response: format_http_message(
|
3335
|
+
response,
|
3336
|
+
f"Stream '{name}' request",
|
3337
|
+
f"Request performed in order to extract records for stream '{name}'",
|
3338
|
+
name,
|
3339
|
+
)
|
3340
|
+
)
|
3341
|
+
if not log_formatter
|
3342
|
+
else log_formatter
|
3343
|
+
)
|
3344
|
+
return None
|
3345
|
+
|
3346
|
+
def _should_limit_slices_fetched(self) -> bool:
|
3347
|
+
"""
|
3348
|
+
Returns True if the number of slices fetched should be limited, False otherwise.
|
3349
|
+
This is used to limit the number of slices fetched during tests.
|
3350
|
+
"""
|
3351
|
+
return bool(self._limit_slices_fetched or self._emit_connector_builder_messages)
|
3352
|
+
|
3333
3353
|
@staticmethod
|
3334
3354
|
def _query_properties_in_request_parameters(
|
3335
3355
|
requester: Union[HttpRequesterModel, CustomRequesterModel],
|
@@ -3420,7 +3440,7 @@ class ModelToComponentFactory:
|
|
3420
3440
|
transformations: List[RecordTransformation],
|
3421
3441
|
**kwargs: Any,
|
3422
3442
|
) -> AsyncRetriever:
|
3423
|
-
def _get_download_retriever() ->
|
3443
|
+
def _get_download_retriever() -> SimpleRetriever:
|
3424
3444
|
record_selector = RecordSelector(
|
3425
3445
|
extractor=download_extractor,
|
3426
3446
|
name=name,
|
@@ -3440,19 +3460,6 @@ class ModelToComponentFactory:
|
|
3440
3460
|
if model.download_paginator
|
3441
3461
|
else NoPagination(parameters={})
|
3442
3462
|
)
|
3443
|
-
maximum_number_of_slices = self._limit_slices_fetched or 5
|
3444
|
-
|
3445
|
-
if self._limit_slices_fetched or self._emit_connector_builder_messages:
|
3446
|
-
return SimpleRetrieverTestReadDecorator(
|
3447
|
-
requester=download_requester,
|
3448
|
-
record_selector=record_selector,
|
3449
|
-
primary_key=None,
|
3450
|
-
name=job_download_components_name,
|
3451
|
-
paginator=paginator,
|
3452
|
-
config=config,
|
3453
|
-
parameters={},
|
3454
|
-
maximum_number_of_slices=maximum_number_of_slices,
|
3455
|
-
)
|
3456
3463
|
|
3457
3464
|
return SimpleRetriever(
|
3458
3465
|
requester=download_requester,
|
@@ -3498,7 +3505,17 @@ class ModelToComponentFactory:
|
|
3498
3505
|
transformations=transformations,
|
3499
3506
|
client_side_incremental_sync=client_side_incremental_sync,
|
3500
3507
|
)
|
3508
|
+
|
3501
3509
|
stream_slicer = stream_slicer or SinglePartitionRouter(parameters={})
|
3510
|
+
if self._should_limit_slices_fetched():
|
3511
|
+
stream_slicer = cast(
|
3512
|
+
StreamSlicer,
|
3513
|
+
StreamSlicerTestReadDecorator(
|
3514
|
+
wrapped_slicer=stream_slicer,
|
3515
|
+
maximum_number_of_slices=self._limit_slices_fetched or 5,
|
3516
|
+
),
|
3517
|
+
)
|
3518
|
+
|
3502
3519
|
creation_requester = self._create_component_from_model(
|
3503
3520
|
model=model.creation_requester,
|
3504
3521
|
decoder=decoder,
|
@@ -7,13 +7,11 @@ from airbyte_cdk.sources.declarative.retrievers.retriever import Retriever
|
|
7
7
|
from airbyte_cdk.sources.declarative.retrievers.simple_retriever import (
|
8
8
|
LazySimpleRetriever,
|
9
9
|
SimpleRetriever,
|
10
|
-
SimpleRetrieverTestReadDecorator,
|
11
10
|
)
|
12
11
|
|
13
12
|
__all__ = [
|
14
13
|
"Retriever",
|
15
14
|
"SimpleRetriever",
|
16
|
-
"SimpleRetrieverTestReadDecorator",
|
17
15
|
"AsyncRetriever",
|
18
16
|
"LazySimpleRetriever",
|
19
17
|
]
|
@@ -645,40 +645,6 @@ def _deep_merge(
|
|
645
645
|
target[key] = value
|
646
646
|
|
647
647
|
|
648
|
-
@dataclass
|
649
|
-
class SimpleRetrieverTestReadDecorator(SimpleRetriever):
|
650
|
-
"""
|
651
|
-
In some cases, we want to limit the number of requests that are made to the backend source. This class allows for limiting the number of
|
652
|
-
slices that are queried throughout a read command.
|
653
|
-
"""
|
654
|
-
|
655
|
-
maximum_number_of_slices: int = 5
|
656
|
-
|
657
|
-
def __post_init__(self, options: Mapping[str, Any]) -> None:
|
658
|
-
super().__post_init__(options)
|
659
|
-
self.log_formatter = (
|
660
|
-
(
|
661
|
-
lambda response: format_http_message(
|
662
|
-
response,
|
663
|
-
f"Stream '{self.name}' request",
|
664
|
-
f"Request performed in order to extract records for stream '{self.name}'",
|
665
|
-
self.name,
|
666
|
-
)
|
667
|
-
)
|
668
|
-
if not self.log_formatter
|
669
|
-
else self.log_formatter
|
670
|
-
)
|
671
|
-
|
672
|
-
if self.maximum_number_of_slices and self.maximum_number_of_slices < 1:
|
673
|
-
raise ValueError(
|
674
|
-
f"The maximum number of slices on a test read needs to be strictly positive. Got {self.maximum_number_of_slices}"
|
675
|
-
)
|
676
|
-
|
677
|
-
# stream_slices is defined with arguments on http stream and fixing this has a long tail of dependencies. Will be resolved by the decoupling of http stream and simple retriever
|
678
|
-
def stream_slices(self) -> Iterable[Optional[StreamSlice]]: # type: ignore
|
679
|
-
return islice(super().stream_slices(), self.maximum_number_of_slices)
|
680
|
-
|
681
|
-
|
682
648
|
@deprecated(
|
683
649
|
"This class is experimental. Use at your own risk.",
|
684
650
|
category=ExperimentalClassWarning,
|
@@ -3,5 +3,8 @@
|
|
3
3
|
#
|
4
4
|
|
5
5
|
from airbyte_cdk.sources.declarative.stream_slicers.stream_slicer import StreamSlicer
|
6
|
+
from airbyte_cdk.sources.declarative.stream_slicers.stream_slicer_test_read_decorator import (
|
7
|
+
StreamSlicerTestReadDecorator,
|
8
|
+
)
|
6
9
|
|
7
|
-
__all__ = ["StreamSlicer"]
|
10
|
+
__all__ = ["StreamSlicer", "StreamSlicerTestReadDecorator"]
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
3
|
+
#
|
4
|
+
|
5
|
+
from dataclasses import dataclass
|
6
|
+
from itertools import islice
|
7
|
+
from typing import Any, Iterable, Mapping, Optional, Union
|
8
|
+
|
9
|
+
from airbyte_cdk.sources.streams.concurrent.partitions.stream_slicer import StreamSlicer
|
10
|
+
from airbyte_cdk.sources.types import StreamSlice, StreamState
|
11
|
+
|
12
|
+
|
13
|
+
@dataclass
|
14
|
+
class StreamSlicerTestReadDecorator(StreamSlicer):
|
15
|
+
"""
|
16
|
+
In some cases, we want to limit the number of requests that are made to the backend source. This class allows for limiting the number of
|
17
|
+
slices that are queried throughout a read command.
|
18
|
+
"""
|
19
|
+
|
20
|
+
wrapped_slicer: StreamSlicer
|
21
|
+
maximum_number_of_slices: int = 5
|
22
|
+
|
23
|
+
def stream_slices(self) -> Iterable[StreamSlice]:
|
24
|
+
return islice(self.wrapped_slicer.stream_slices(), self.maximum_number_of_slices)
|
25
|
+
|
26
|
+
def __getattr__(self, name: str) -> Any:
|
27
|
+
# Delegate everything else to the wrapped object
|
28
|
+
return getattr(self.wrapped_slicer, name)
|
@@ -1,12 +1,30 @@
|
|
1
1
|
# Copyright (c) 2024 Airbyte, Inc., all rights reserved.
|
2
2
|
|
3
|
-
from abc import ABC, abstractmethod
|
4
|
-
from typing import Iterable
|
3
|
+
from abc import ABC, ABCMeta, abstractmethod
|
4
|
+
from typing import Any, Iterable
|
5
5
|
|
6
6
|
from airbyte_cdk.sources.types import StreamSlice
|
7
7
|
|
8
8
|
|
9
|
-
class
|
9
|
+
class StreamSlicerMeta(ABCMeta):
|
10
|
+
"""
|
11
|
+
Metaclass for wrapper scenario that allows it to be used as a type check for StreamSlicer.
|
12
|
+
This is necessary because StreamSlicerTestReadDecorator wraps a StreamSlicer and we want to be able to check
|
13
|
+
if an instance is a StreamSlicer, even if it is wrapped in a StreamSlicerTestReadDecorator.
|
14
|
+
|
15
|
+
For example in ConcurrentDeclarativeSource, we do things like:
|
16
|
+
isinstance(declarative_stream.retriever.stream_slicer,(GlobalSubstreamCursor, PerPartitionWithGlobalCursor))
|
17
|
+
"""
|
18
|
+
|
19
|
+
def __instancecheck__(cls, instance: Any) -> bool:
|
20
|
+
# Check if it's our wrapper with matching wrapped class
|
21
|
+
if hasattr(instance, "wrapped_slicer"):
|
22
|
+
return isinstance(instance.wrapped_slicer, cls)
|
23
|
+
|
24
|
+
return super().__instancecheck__(instance)
|
25
|
+
|
26
|
+
|
27
|
+
class StreamSlicer(ABC, metaclass=StreamSlicerMeta):
|
10
28
|
"""
|
11
29
|
Slices the stream into chunks that can be fetched independently. Slices enable state checkpointing and data retrieval parallelization.
|
12
30
|
"""
|
@@ -89,7 +89,7 @@ airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=OKor1mDD
|
|
89
89
|
airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
|
90
90
|
airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=_zGNGq31RNy_0QBLt_EcTvgPyhj7urPdx6oA3M5-r3o,3150
|
91
91
|
airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
|
92
|
-
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=
|
92
|
+
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=BQ0JKz4K8BKCpKp3C2IumJj2y2nv29lheeJUxPX6gXU,177389
|
93
93
|
airbyte_cdk/sources/declarative/declarative_source.py,sha256=qmyMnnet92eGc3C22yBtpvD5UZjqdhsAafP_zxI5wp8,1814
|
94
94
|
airbyte_cdk/sources/declarative/declarative_stream.py,sha256=dCRlddBUSaJmBNBz1pSO1r2rTw8AP5d2_vlmIeGs2gg,10767
|
95
95
|
airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=JHb_0d3SE6kNY10mxA5YBEKPeSbsWYjByq1gUQxepoE,953
|
@@ -126,21 +126,21 @@ airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py,sha
|
|
126
126
|
airbyte_cdk/sources/declarative/interpolation/interpolated_string.py,sha256=CQkHqGlfa87G6VYMtBAQWin7ECKpfMdrDcg0JO5_rhc,3212
|
127
127
|
airbyte_cdk/sources/declarative/interpolation/interpolation.py,sha256=9IoeuWam3L6GyN10L6U8xNWXmkt9cnahSDNkez1OmFY,982
|
128
128
|
airbyte_cdk/sources/declarative/interpolation/jinja.py,sha256=UQeuS4Vpyp4hlOn-R3tRyeBX0e9IoV6jQ6gH-Jz8lY0,7182
|
129
|
-
airbyte_cdk/sources/declarative/interpolation/macros.py,sha256=
|
130
|
-
airbyte_cdk/sources/declarative/manifest_declarative_source.py,sha256=
|
129
|
+
airbyte_cdk/sources/declarative/interpolation/macros.py,sha256=xRcmjape4_WGmKMJpmBsKY0k4OHJDM46Hv3V-dlSz3w,5640
|
130
|
+
airbyte_cdk/sources/declarative/manifest_declarative_source.py,sha256=ciXtM7Qhus170ZwP8B9Ac4VScX2FPBYvlbZRv_r376U,24692
|
131
131
|
airbyte_cdk/sources/declarative/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
132
132
|
airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py,sha256=V2lpYE9LJKvz6BUViHk4vaRGndxNABmPbDCtyYdkqaE,4013
|
133
133
|
airbyte_cdk/sources/declarative/migrations/state_migration.py,sha256=KWPjealMLKSMtajXgkdGgKg7EmTLR-CqqD7UIh0-eDU,794
|
134
134
|
airbyte_cdk/sources/declarative/models/__init__.py,sha256=nUFxNCiKeYRVXuZEKA7GD-lTHxsiKcQ8FitZjKhPIvE,100
|
135
135
|
airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py,sha256=Imnj3yef0aqRdLfaUxkIYISUb8YkiPrRH_wBd-x8HjM,5999
|
136
|
-
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=
|
136
|
+
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=XVfBPgNBEEkv8u6Bj1JRiXsQWa_QoipPHFxND_YsxDY,125766
|
137
137
|
airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
|
138
138
|
airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py,sha256=nlVvHC511NUyDEEIRBkoeDTAvLqKNp-hRy8D19z8tdk,5941
|
139
139
|
airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=wnRUP0Xeru9Rbu5OexXSDN9QWDo8YU4tT9M2LDVOgGA,802
|
140
140
|
airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=2UdpCz3yi7ISZTyqkQXSSy3dMxeyOWqV7OlAS5b9GVg,11568
|
141
141
|
airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py,sha256=laBy7ebjA-PiNwc-50U4FHvMqS_mmHvnabxgFs4CjGw,17069
|
142
142
|
airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=pJmg78vqE5VfUrF_KJnWjucQ4k9IWFULeAxHCowrHXE,6806
|
143
|
-
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=
|
143
|
+
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=KdOz6g57PIyXlUeVi4lYJsm2LTUxbMMpgg1wS4KUjEo,174974
|
144
144
|
airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=TBC9AkGaUqHm2IKHMPN6punBIcY5tWGULowcLoAVkfw,1109
|
145
145
|
airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=VelO7zKqKtzMJ35jyFeg0ypJLQC0plqqIBNXoBW1G2E,3001
|
146
146
|
airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
|
@@ -197,7 +197,7 @@ airbyte_cdk/sources/declarative/resolvers/__init__.py,sha256=NiDcz5qi8HPsfX94MUm
|
|
197
197
|
airbyte_cdk/sources/declarative/resolvers/components_resolver.py,sha256=oJIpy66ep8n-QOc8GwpllApTRcl4QtQhkTw5fWWra2w,2026
|
198
198
|
airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py,sha256=sD3N7nmqDjLsau8P2DE7DYOHdFTYjC_2nIB6454BNYk,7556
|
199
199
|
airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py,sha256=AiojNs8wItJFrENZBFUaDvau3sgwudO6Wkra36upSPo,4639
|
200
|
-
airbyte_cdk/sources/declarative/retrievers/__init__.py,sha256=
|
200
|
+
airbyte_cdk/sources/declarative/retrievers/__init__.py,sha256=LQQspOQS9oyOx9cGnRIz1mq-8DZCBysyDJDPqjy1HvM,449
|
201
201
|
airbyte_cdk/sources/declarative/retrievers/async_retriever.py,sha256=6oZtnCHm9NdDvjTSrVwPQOXGSdETSIR7eWH2vFjM7jI,4855
|
202
202
|
airbyte_cdk/sources/declarative/retrievers/file_uploader/__init__.py,sha256=ovs0oZGPEEw-V4asqr0D1Xty2u7tR8ADhRuHNgXGuWQ,490
|
203
203
|
airbyte_cdk/sources/declarative/retrievers/file_uploader/connector_builder_file_uploader.py,sha256=wHGnluTJ6HVbCkSaNNQQN2t9ZzhaFGoo_pzXTz54gBY,878
|
@@ -207,7 +207,7 @@ airbyte_cdk/sources/declarative/retrievers/file_uploader/file_writer.py,sha256=V
|
|
207
207
|
airbyte_cdk/sources/declarative/retrievers/file_uploader/local_file_system_file_writer.py,sha256=jLpdonre1UHfbjGSD5AK_T0codLABJByTvbqepDZtEQ,422
|
208
208
|
airbyte_cdk/sources/declarative/retrievers/file_uploader/noop_file_writer.py,sha256=1yfimzxm09d2j605cu_HhiYVDNVL1rUMi3vs_jYlIyY,330
|
209
209
|
airbyte_cdk/sources/declarative/retrievers/retriever.py,sha256=XPLs593Xv8c5cKMc37XzUAYmzlXd1a7eSsspM-CMuWA,1696
|
210
|
-
airbyte_cdk/sources/declarative/retrievers/simple_retriever.py,sha256=
|
210
|
+
airbyte_cdk/sources/declarative/retrievers/simple_retriever.py,sha256=ma6ZkDdf89ECdT1Lg0Y5p0VjzjwJG4JVC_bz8KbfI7I,28431
|
211
211
|
airbyte_cdk/sources/declarative/schema/__init__.py,sha256=xU45UvM5O4c1PSM13UHpCdh5hpW3HXy9vRRGEiAC1rg,795
|
212
212
|
airbyte_cdk/sources/declarative/schema/composite_schema_loader.py,sha256=ymGbvxS_QyGc4nnjEyRo5ch8bVedELO41PAUxKXZyMw,1113
|
213
213
|
airbyte_cdk/sources/declarative/schema/default_schema_loader.py,sha256=UnbzlExmwoQiVV8zDg4lhAEaqA_0pRfwbMRe8yqOuWk,1834
|
@@ -217,9 +217,10 @@ airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py,sha256=5Wl-fqW
|
|
217
217
|
airbyte_cdk/sources/declarative/schema/schema_loader.py,sha256=kjt8v0N5wWKA5zyLnrDLxf1PJKdUqvQq2RVnAOAzNSY,379
|
218
218
|
airbyte_cdk/sources/declarative/spec/__init__.py,sha256=9FYO-fVOclrwjAW4qwRTbZRVopTc9rOaauAJfThdNCQ,177
|
219
219
|
airbyte_cdk/sources/declarative/spec/spec.py,sha256=SwL_pfXZgcLYLJY-MAeFMHug9oYh2tOWjgG0C3DoLOY,3602
|
220
|
-
airbyte_cdk/sources/declarative/stream_slicers/__init__.py,sha256=
|
220
|
+
airbyte_cdk/sources/declarative/stream_slicers/__init__.py,sha256=UX-cP_C-9FIFFPL9z8nuxu_rglssRsMOqQmQHN8FLB8,341
|
221
221
|
airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py,sha256=cjKGm4r438dd1GxrFHJ4aYrdzG2bkncnwaWxAwlXR3M,3585
|
222
222
|
airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py,sha256=SOkIPBi2Wu7yxIvA15yFzUAB95a3IzA8LPq5DEqHQQc,725
|
223
|
+
airbyte_cdk/sources/declarative/stream_slicers/stream_slicer_test_read_decorator.py,sha256=aUSleOw9elq3-5TaDUvp7H8W-2qUKqpr__kaJd8-ZFA,983
|
223
224
|
airbyte_cdk/sources/declarative/transformations/__init__.py,sha256=CPJ8TlMpiUmvG3624VYu_NfTzxwKcfBjM2Q2wJ7fkSA,919
|
224
225
|
airbyte_cdk/sources/declarative/transformations/add_fields.py,sha256=Eg1jQtRObgzxbtySTQs5uEZIjEklsoHFxYSPf78x6Ng,5420
|
225
226
|
airbyte_cdk/sources/declarative/transformations/config_transformations/__init__.py,sha256=GaU3ezFa5opeDgdlNohX6TXsWJlOD2jOfJXQWeQCh7E,263
|
@@ -326,7 +327,7 @@ airbyte_cdk/sources/streams/concurrent/partition_reader.py,sha256=0TIrjbTzYJGdA0
|
|
326
327
|
airbyte_cdk/sources/streams/concurrent/partitions/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
|
327
328
|
airbyte_cdk/sources/streams/concurrent/partitions/partition.py,sha256=CmaRcKn8y118No3qvbRV9DBeAUKv17lrVgloR4Y9TwU,1490
|
328
329
|
airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py,sha256=_ymkkBr71_qt1fW0_MUqw96OfNBkeJngXQ09yolEDHw,441
|
329
|
-
airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py,sha256=
|
330
|
+
airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py,sha256=zQPikLIt0yhP9EwZaPglRTIqFCauo4pSsJk_7kYq9Aw,1406
|
330
331
|
airbyte_cdk/sources/streams/concurrent/partitions/types.py,sha256=frPVvHtY7vLxpGEbMQzNvF1Y52ZVyct9f1DDhGoRjwY,1166
|
331
332
|
airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
332
333
|
airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py,sha256=CCxCbgvUugxiWpHX8-dkkJHWKDjL5iwiIbOUj8KIJ9c,7079
|
@@ -419,9 +420,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G
|
|
419
420
|
airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
|
420
421
|
airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
|
421
422
|
airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
|
422
|
-
airbyte_cdk-6.
|
423
|
-
airbyte_cdk-6.
|
424
|
-
airbyte_cdk-6.
|
425
|
-
airbyte_cdk-6.
|
426
|
-
airbyte_cdk-6.
|
427
|
-
airbyte_cdk-6.
|
423
|
+
airbyte_cdk-6.53.1.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
|
424
|
+
airbyte_cdk-6.53.1.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
|
425
|
+
airbyte_cdk-6.53.1.dist-info/METADATA,sha256=PXRi9Y27Ppw4cM1C0bmAeUW0XV4w9JhF3yBS77PzhlQ,6343
|
426
|
+
airbyte_cdk-6.53.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
427
|
+
airbyte_cdk-6.53.1.dist-info/entry_points.txt,sha256=AKWbEkHfpzzk9nF9tqBUaw1MbvTM4mGtEzmZQm0ZWvM,139
|
428
|
+
airbyte_cdk-6.53.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|