airbyte-cdk 6.47.1__py3-none-any.whl → 6.48.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 +6 -2
- airbyte_cdk/sources/declarative/extractors/record_selector.py +2 -2
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py +7 -0
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +60 -13
- airbyte_cdk/sources/declarative/requesters/query_properties/query_properties.py +0 -10
- airbyte_cdk/sources/declarative/retrievers/file_uploader/__init__.py +15 -0
- airbyte_cdk/sources/declarative/retrievers/file_uploader/connector_builder_file_uploader.py +26 -0
- airbyte_cdk/sources/declarative/retrievers/{file_uploader.py → file_uploader/default_file_uploader.py} +31 -27
- airbyte_cdk/sources/declarative/retrievers/file_uploader/file_uploader.py +22 -0
- airbyte_cdk/sources/declarative/retrievers/file_uploader/file_writer.py +19 -0
- airbyte_cdk/sources/declarative/retrievers/file_uploader/local_file_system_file_writer.py +18 -0
- airbyte_cdk/sources/declarative/retrievers/file_uploader/noop_file_writer.py +17 -0
- {airbyte_cdk-6.47.1.dist-info → airbyte_cdk-6.48.0.dist-info}/METADATA +1 -1
- {airbyte_cdk-6.47.1.dist-info → airbyte_cdk-6.48.0.dist-info}/RECORD +18 -12
- {airbyte_cdk-6.47.1.dist-info → airbyte_cdk-6.48.0.dist-info}/LICENSE.txt +0 -0
- {airbyte_cdk-6.47.1.dist-info → airbyte_cdk-6.48.0.dist-info}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.47.1.dist-info → airbyte_cdk-6.48.0.dist-info}/WHEEL +0 -0
- {airbyte_cdk-6.47.1.dist-info → airbyte_cdk-6.48.0.dist-info}/entry_points.txt +0 -0
@@ -1464,7 +1464,7 @@ definitions:
|
|
1464
1464
|
properties:
|
1465
1465
|
type:
|
1466
1466
|
type: string
|
1467
|
-
enum: [
|
1467
|
+
enum: [FileUploader]
|
1468
1468
|
requester:
|
1469
1469
|
description: Requester component that describes how to prepare HTTP requests to send to the source API.
|
1470
1470
|
anyOf:
|
@@ -1978,6 +1978,10 @@ definitions:
|
|
1978
1978
|
- "$ref": "#/definitions/SelectiveAuthenticator"
|
1979
1979
|
- "$ref": "#/definitions/CustomAuthenticator"
|
1980
1980
|
- "$ref": "#/definitions/LegacySessionTokenAuthenticator"
|
1981
|
+
fetch_properties_from_endpoint:
|
1982
|
+
title: Fetch Properties from Endpoint
|
1983
|
+
description: Allows for retrieving a dynamic set of properties from an API endpoint which can be injected into outbound request using the stream_partition.extra_fields.
|
1984
|
+
"$ref": "#/definitions/PropertiesFromEndpoint"
|
1981
1985
|
request_body_data:
|
1982
1986
|
title: Request Body Payload (Non-JSON)
|
1983
1987
|
description: Specifies how to populate the body of the request with a non-JSON payload. Plain text will be sent as is, whereas objects will be converted to a urlencoded form.
|
@@ -2370,7 +2374,7 @@ definitions:
|
|
2370
2374
|
properties:
|
2371
2375
|
type:
|
2372
2376
|
type: string
|
2373
|
-
enum: [
|
2377
|
+
enum: [KeyTransformation]
|
2374
2378
|
prefix:
|
2375
2379
|
title: Key Prefix
|
2376
2380
|
description: Prefix to add for object keys. If not provided original keys remain unchanged.
|
@@ -15,7 +15,7 @@ from airbyte_cdk.sources.declarative.extractors.type_transformer import (
|
|
15
15
|
)
|
16
16
|
from airbyte_cdk.sources.declarative.interpolation import InterpolatedString
|
17
17
|
from airbyte_cdk.sources.declarative.models import SchemaNormalization
|
18
|
-
from airbyte_cdk.sources.declarative.retrievers.file_uploader import
|
18
|
+
from airbyte_cdk.sources.declarative.retrievers.file_uploader import DefaultFileUploader
|
19
19
|
from airbyte_cdk.sources.declarative.transformations import RecordTransformation
|
20
20
|
from airbyte_cdk.sources.types import Config, Record, StreamSlice, StreamState
|
21
21
|
from airbyte_cdk.sources.utils.transform import TypeTransformer
|
@@ -43,7 +43,7 @@ class RecordSelector(HttpSelector):
|
|
43
43
|
record_filter: Optional[RecordFilter] = None
|
44
44
|
transformations: List[RecordTransformation] = field(default_factory=lambda: [])
|
45
45
|
transform_before_filtering: bool = False
|
46
|
-
file_uploader: Optional[
|
46
|
+
file_uploader: Optional[DefaultFileUploader] = None
|
47
47
|
|
48
48
|
def __post_init__(self, parameters: Mapping[str, Any]) -> None:
|
49
49
|
self._parameters = parameters
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
2
|
+
|
1
3
|
# generated by datamodel-codegen:
|
2
4
|
# filename: declarative_component_schema.yaml
|
3
5
|
|
@@ -2252,6 +2254,11 @@ class HttpRequester(BaseModel):
|
|
2252
2254
|
description="Authentication method to use for requests sent to the API.",
|
2253
2255
|
title="Authenticator",
|
2254
2256
|
)
|
2257
|
+
fetch_properties_from_endpoint: Optional[PropertiesFromEndpoint] = Field(
|
2258
|
+
None,
|
2259
|
+
description="Allows for retrieving a dynamic set of properties from an API endpoint which can be injected into outbound request using the stream_partition.extra_fields.",
|
2260
|
+
title="Fetch Properties from Endpoint",
|
2261
|
+
)
|
2255
2262
|
request_body_data: Optional[Union[Dict[str, str], str]] = Field(
|
2256
2263
|
None,
|
2257
2264
|
description="Specifies how to populate the body of the request with a non-JSON payload. Plain text will be sent as is, whereas objects will be converted to a urlencoded form.",
|
@@ -481,7 +481,13 @@ from airbyte_cdk.sources.declarative.retrievers import (
|
|
481
481
|
SimpleRetriever,
|
482
482
|
SimpleRetrieverTestReadDecorator,
|
483
483
|
)
|
484
|
-
from airbyte_cdk.sources.declarative.retrievers.file_uploader import
|
484
|
+
from airbyte_cdk.sources.declarative.retrievers.file_uploader import (
|
485
|
+
ConnectorBuilderFileUploader,
|
486
|
+
DefaultFileUploader,
|
487
|
+
FileUploader,
|
488
|
+
LocalFileSystemFileWriter,
|
489
|
+
NoopFileWriter,
|
490
|
+
)
|
485
491
|
from airbyte_cdk.sources.declarative.schema import (
|
486
492
|
ComplexFieldType,
|
487
493
|
DefaultSchemaLoader,
|
@@ -2815,7 +2821,7 @@ class ModelToComponentFactory:
|
|
2815
2821
|
transformations: List[RecordTransformation] | None = None,
|
2816
2822
|
decoder: Decoder | None = None,
|
2817
2823
|
client_side_incremental_sync: Dict[str, Any] | None = None,
|
2818
|
-
file_uploader: Optional[
|
2824
|
+
file_uploader: Optional[DefaultFileUploader] = None,
|
2819
2825
|
**kwargs: Any,
|
2820
2826
|
) -> RecordSelector:
|
2821
2827
|
extractor = self._create_component_from_model(
|
@@ -2919,7 +2925,7 @@ class ModelToComponentFactory:
|
|
2919
2925
|
stop_condition_on_cursor: bool = False,
|
2920
2926
|
client_side_incremental_sync: Optional[Dict[str, Any]] = None,
|
2921
2927
|
transformations: List[RecordTransformation],
|
2922
|
-
file_uploader: Optional[
|
2928
|
+
file_uploader: Optional[DefaultFileUploader] = None,
|
2923
2929
|
incremental_sync: Optional[
|
2924
2930
|
Union[
|
2925
2931
|
IncrementingCountCursorModel, DatetimeBasedCursorModel, CustomIncrementalSyncModel
|
@@ -2945,16 +2951,19 @@ class ModelToComponentFactory:
|
|
2945
2951
|
|
2946
2952
|
query_properties: Optional[QueryProperties] = None
|
2947
2953
|
query_properties_key: Optional[str] = None
|
2948
|
-
if (
|
2949
|
-
|
2950
|
-
|
2951
|
-
|
2952
|
-
|
2954
|
+
if self._query_properties_in_request_parameters(model.requester):
|
2955
|
+
# It is better to be explicit about an error if PropertiesFromEndpoint is defined in multiple
|
2956
|
+
# places instead of default to request_parameters which isn't clearly documented
|
2957
|
+
if (
|
2958
|
+
hasattr(model.requester, "fetch_properties_from_endpoint")
|
2959
|
+
and model.requester.fetch_properties_from_endpoint
|
2960
|
+
):
|
2961
|
+
raise ValueError(
|
2962
|
+
f"PropertiesFromEndpoint should only be specified once per stream, but found in {model.requester.type}.fetch_properties_from_endpoint and {model.requester.type}.request_parameters"
|
2963
|
+
)
|
2964
|
+
|
2953
2965
|
query_properties_definitions = []
|
2954
|
-
for key, request_parameter in model.requester.request_parameters.items():
|
2955
|
-
# When translating JSON schema into Pydantic models, enforcing types for arrays containing both
|
2956
|
-
# concrete string complex object definitions like QueryProperties would get resolved to Union[str, Any].
|
2957
|
-
# This adds the extra validation that we couldn't get for free in Pydantic model generation
|
2966
|
+
for key, request_parameter in model.requester.request_parameters.items(): # type: ignore # request_parameters is already validated to be a Mapping using _query_properties_in_request_parameters()
|
2958
2967
|
if isinstance(request_parameter, QueryPropertiesModel):
|
2959
2968
|
query_properties_key = key
|
2960
2969
|
query_properties_definitions.append(request_parameter)
|
@@ -2968,6 +2977,21 @@ class ModelToComponentFactory:
|
|
2968
2977
|
query_properties = self._create_component_from_model(
|
2969
2978
|
model=query_properties_definitions[0], config=config
|
2970
2979
|
)
|
2980
|
+
elif (
|
2981
|
+
hasattr(model.requester, "fetch_properties_from_endpoint")
|
2982
|
+
and model.requester.fetch_properties_from_endpoint
|
2983
|
+
):
|
2984
|
+
query_properties_definition = QueryPropertiesModel(
|
2985
|
+
type="QueryProperties",
|
2986
|
+
property_list=model.requester.fetch_properties_from_endpoint,
|
2987
|
+
always_include_properties=None,
|
2988
|
+
property_chunking=None,
|
2989
|
+
) # type: ignore # $parameters has a default value
|
2990
|
+
|
2991
|
+
query_properties = self.create_query_properties(
|
2992
|
+
model=query_properties_definition,
|
2993
|
+
config=config,
|
2994
|
+
)
|
2971
2995
|
|
2972
2996
|
requester = self._create_component_from_model(
|
2973
2997
|
model=model.requester,
|
@@ -3087,6 +3111,19 @@ class ModelToComponentFactory:
|
|
3087
3111
|
parameters=model.parameters or {},
|
3088
3112
|
)
|
3089
3113
|
|
3114
|
+
@staticmethod
|
3115
|
+
def _query_properties_in_request_parameters(
|
3116
|
+
requester: Union[HttpRequesterModel, CustomRequesterModel],
|
3117
|
+
) -> bool:
|
3118
|
+
if not hasattr(requester, "request_parameters"):
|
3119
|
+
return False
|
3120
|
+
request_parameters = requester.request_parameters
|
3121
|
+
if request_parameters and isinstance(request_parameters, Mapping):
|
3122
|
+
for request_parameter in request_parameters.values():
|
3123
|
+
if isinstance(request_parameter, QueryPropertiesModel):
|
3124
|
+
return True
|
3125
|
+
return False
|
3126
|
+
|
3090
3127
|
@staticmethod
|
3091
3128
|
def _remove_query_properties(
|
3092
3129
|
request_parameters: Mapping[str, Union[str, QueryPropertiesModel]],
|
@@ -3606,14 +3643,24 @@ class ModelToComponentFactory:
|
|
3606
3643
|
name=name,
|
3607
3644
|
**kwargs,
|
3608
3645
|
)
|
3609
|
-
|
3646
|
+
emit_connector_builder_messages = self._emit_connector_builder_messages
|
3647
|
+
file_uploader = DefaultFileUploader(
|
3610
3648
|
requester=requester,
|
3611
3649
|
download_target_extractor=download_target_extractor,
|
3612
3650
|
config=config,
|
3651
|
+
file_writer=NoopFileWriter()
|
3652
|
+
if emit_connector_builder_messages
|
3653
|
+
else LocalFileSystemFileWriter(),
|
3613
3654
|
parameters=model.parameters or {},
|
3614
3655
|
filename_extractor=model.filename_extractor if model.filename_extractor else None,
|
3615
3656
|
)
|
3616
3657
|
|
3658
|
+
return (
|
3659
|
+
ConnectorBuilderFileUploader(file_uploader)
|
3660
|
+
if emit_connector_builder_messages
|
3661
|
+
else file_uploader
|
3662
|
+
)
|
3663
|
+
|
3617
3664
|
def create_moving_window_call_rate_policy(
|
3618
3665
|
self, model: MovingWindowCallRatePolicyModel, config: Config, **kwargs: Any
|
3619
3666
|
) -> MovingWindowCallRatePolicy:
|
@@ -46,13 +46,3 @@ class QueryProperties:
|
|
46
46
|
)
|
47
47
|
else:
|
48
48
|
yield list(fields)
|
49
|
-
|
50
|
-
# delete later, but leaving this to keep the discussion thread on the PR from getting hidden
|
51
|
-
def has_multiple_chunks(self, stream_slice: Optional[StreamSlice]) -> bool:
|
52
|
-
property_chunks = iter(self.get_request_property_chunks(stream_slice=stream_slice))
|
53
|
-
try:
|
54
|
-
next(property_chunks)
|
55
|
-
next(property_chunks)
|
56
|
-
return True
|
57
|
-
except StopIteration:
|
58
|
-
return False
|
@@ -0,0 +1,15 @@
|
|
1
|
+
from .connector_builder_file_uploader import ConnectorBuilderFileUploader
|
2
|
+
from .default_file_uploader import DefaultFileUploader
|
3
|
+
from .file_uploader import FileUploader
|
4
|
+
from .file_writer import FileWriter
|
5
|
+
from .local_file_system_file_writer import LocalFileSystemFileWriter
|
6
|
+
from .noop_file_writer import NoopFileWriter
|
7
|
+
|
8
|
+
__all__ = [
|
9
|
+
"DefaultFileUploader",
|
10
|
+
"LocalFileSystemFileWriter",
|
11
|
+
"NoopFileWriter",
|
12
|
+
"ConnectorBuilderFileUploader",
|
13
|
+
"FileUploader",
|
14
|
+
"FileWriter",
|
15
|
+
]
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
3
|
+
#
|
4
|
+
|
5
|
+
from dataclasses import dataclass
|
6
|
+
|
7
|
+
from airbyte_cdk.sources.declarative.types import Record
|
8
|
+
|
9
|
+
from .default_file_uploader import DefaultFileUploader
|
10
|
+
from .file_uploader import FileUploader
|
11
|
+
|
12
|
+
|
13
|
+
@dataclass
|
14
|
+
class ConnectorBuilderFileUploader(FileUploader):
|
15
|
+
"""
|
16
|
+
Connector builder file uploader
|
17
|
+
Acts as a decorator or wrapper around a FileUploader instance, copying the attributes from record.file_reference into the record.data.
|
18
|
+
"""
|
19
|
+
|
20
|
+
file_uploader: DefaultFileUploader
|
21
|
+
|
22
|
+
def upload(self, record: Record) -> None:
|
23
|
+
self.file_uploader.upload(record=record)
|
24
|
+
for file_reference_key, file_reference_value in record.file_reference.__dict__.items():
|
25
|
+
if not file_reference_key.startswith("_"):
|
26
|
+
record.data[file_reference_key] = file_reference_value # type: ignore
|
@@ -22,18 +22,27 @@ from airbyte_cdk.sources.declarative.types import Record, StreamSlice
|
|
22
22
|
from airbyte_cdk.sources.types import Config
|
23
23
|
from airbyte_cdk.sources.utils.files_directory import get_files_directory
|
24
24
|
|
25
|
+
from .file_uploader import FileUploader
|
26
|
+
from .file_writer import FileWriter
|
27
|
+
|
25
28
|
logger = logging.getLogger("airbyte")
|
26
29
|
|
27
30
|
|
28
31
|
@dataclass
|
29
|
-
class FileUploader:
|
32
|
+
class DefaultFileUploader(FileUploader):
|
33
|
+
"""
|
34
|
+
File uploader class
|
35
|
+
Handles the upload logic: fetching the download target, making the request via its requester, determining the file path, and calling self.file_writer.write()
|
36
|
+
Different types of file_writer:BaseFileWriter can be injected to handle different file writing strategies.
|
37
|
+
"""
|
38
|
+
|
30
39
|
requester: Requester
|
31
40
|
download_target_extractor: RecordExtractor
|
32
41
|
config: Config
|
42
|
+
file_writer: FileWriter
|
33
43
|
parameters: InitVar[Mapping[str, Any]]
|
34
44
|
|
35
45
|
filename_extractor: Optional[Union[InterpolatedString, str]] = None
|
36
|
-
content_extractor: Optional[RecordExtractor] = None
|
37
46
|
|
38
47
|
def __post_init__(self, parameters: Mapping[str, Any]) -> None:
|
39
48
|
if self.filename_extractor:
|
@@ -61,33 +70,28 @@ class FileUploader:
|
|
61
70
|
),
|
62
71
|
)
|
63
72
|
|
64
|
-
|
65
|
-
raise NotImplementedError("TODO")
|
66
|
-
else:
|
67
|
-
files_directory = Path(get_files_directory())
|
73
|
+
files_directory = Path(get_files_directory())
|
68
74
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
75
|
+
file_name = (
|
76
|
+
self.filename_extractor.eval(self.config, record=record)
|
77
|
+
if self.filename_extractor
|
78
|
+
else str(uuid.uuid4())
|
79
|
+
)
|
80
|
+
file_name = file_name.lstrip("/")
|
81
|
+
file_relative_path = Path(record.stream_name) / Path(file_name)
|
76
82
|
|
77
|
-
|
78
|
-
|
83
|
+
full_path = files_directory / file_relative_path
|
84
|
+
full_path.parent.mkdir(parents=True, exist_ok=True)
|
79
85
|
|
80
|
-
|
81
|
-
f.write(response.content)
|
82
|
-
file_size_bytes = full_path.stat().st_size
|
86
|
+
file_size_bytes = self.file_writer.write(full_path, content=response.content)
|
83
87
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
+
logger.info("File uploaded successfully")
|
89
|
+
logger.info(f"File url: {str(full_path)}")
|
90
|
+
logger.info(f"File size: {file_size_bytes / 1024} KB")
|
91
|
+
logger.info(f"File relative path: {str(file_relative_path)}")
|
88
92
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
93
|
+
record.file_reference = AirbyteRecordMessageFileReference(
|
94
|
+
staging_file_url=str(full_path),
|
95
|
+
source_file_relative_path=str(file_relative_path),
|
96
|
+
file_size_bytes=file_size_bytes,
|
97
|
+
)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
3
|
+
#
|
4
|
+
|
5
|
+
from abc import ABC, abstractmethod
|
6
|
+
from dataclasses import dataclass
|
7
|
+
|
8
|
+
from airbyte_cdk.sources.declarative.types import Record
|
9
|
+
|
10
|
+
|
11
|
+
@dataclass
|
12
|
+
class FileUploader(ABC):
|
13
|
+
"""
|
14
|
+
Base class for file uploader
|
15
|
+
"""
|
16
|
+
|
17
|
+
@abstractmethod
|
18
|
+
def upload(self, record: Record) -> None:
|
19
|
+
"""
|
20
|
+
Uploads the file to the specified location
|
21
|
+
"""
|
22
|
+
...
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
3
|
+
#
|
4
|
+
|
5
|
+
from abc import ABC, abstractmethod
|
6
|
+
from pathlib import Path
|
7
|
+
|
8
|
+
|
9
|
+
class FileWriter(ABC):
|
10
|
+
"""
|
11
|
+
Base File writer class
|
12
|
+
"""
|
13
|
+
|
14
|
+
@abstractmethod
|
15
|
+
def write(self, file_path: Path, content: bytes) -> int:
|
16
|
+
"""
|
17
|
+
Writes the file to the specified location
|
18
|
+
"""
|
19
|
+
...
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
3
|
+
#
|
4
|
+
|
5
|
+
from pathlib import Path
|
6
|
+
|
7
|
+
from .file_writer import FileWriter
|
8
|
+
|
9
|
+
|
10
|
+
class LocalFileSystemFileWriter(FileWriter):
|
11
|
+
def write(self, file_path: Path, content: bytes) -> int:
|
12
|
+
"""
|
13
|
+
Writes the file to the specified location
|
14
|
+
"""
|
15
|
+
with open(str(file_path), "wb") as f:
|
16
|
+
f.write(content)
|
17
|
+
|
18
|
+
return file_path.stat().st_size
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
3
|
+
#
|
4
|
+
|
5
|
+
from pathlib import Path
|
6
|
+
|
7
|
+
from .file_writer import FileWriter
|
8
|
+
|
9
|
+
|
10
|
+
class NoopFileWriter(FileWriter):
|
11
|
+
NOOP_FILE_SIZE = -1
|
12
|
+
|
13
|
+
def write(self, file_path: Path, content: bytes) -> int:
|
14
|
+
"""
|
15
|
+
Noop file writer
|
16
|
+
"""
|
17
|
+
return self.NOOP_FILE_SIZE
|
@@ -78,7 +78,7 @@ airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=GoZJ8Oxb
|
|
78
78
|
airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
|
79
79
|
airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=_zGNGq31RNy_0QBLt_EcTvgPyhj7urPdx6oA3M5-r3o,3150
|
80
80
|
airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
|
81
|
-
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=
|
81
|
+
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=I0jTe3nUqS5pW-LbdOQlYuHZIJC3nNAf_LV7XgmfA4g,162221
|
82
82
|
airbyte_cdk/sources/declarative/declarative_source.py,sha256=nF7wBqFd3AQmEKAm4CnIo29CJoQL562cJGSCeL8U8bA,1531
|
83
83
|
airbyte_cdk/sources/declarative/declarative_stream.py,sha256=dCRlddBUSaJmBNBz1pSO1r2rTw8AP5d2_vlmIeGs2gg,10767
|
84
84
|
airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=JHb_0d3SE6kNY10mxA5YBEKPeSbsWYjByq1gUQxepoE,953
|
@@ -96,7 +96,7 @@ airbyte_cdk/sources/declarative/extractors/dpath_extractor.py,sha256=wR4Ol4MG2lt
|
|
96
96
|
airbyte_cdk/sources/declarative/extractors/http_selector.py,sha256=2zWZ4ewTqQC8VwkjS0xD_u350Km3SiYP7hpOOgiLg5o,1169
|
97
97
|
airbyte_cdk/sources/declarative/extractors/record_extractor.py,sha256=XJELMjahAsaomlvQgN2zrNO0DJX0G0fr9r682gUz7Pg,691
|
98
98
|
airbyte_cdk/sources/declarative/extractors/record_filter.py,sha256=yTdEkyDUSW2KbFkEwJJMlS963C955LgCCOVfTmmScpQ,3367
|
99
|
-
airbyte_cdk/sources/declarative/extractors/record_selector.py,sha256=
|
99
|
+
airbyte_cdk/sources/declarative/extractors/record_selector.py,sha256=vCpwX1PVRFPYKMzm0DHHP3YEZ0Gmd3bBzggOsRha038,7192
|
100
100
|
airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py,sha256=WJyA2OYIEgFpVP5Y3o0tIj69AV6IKkn9B16MeXaEItI,6513
|
101
101
|
airbyte_cdk/sources/declarative/extractors/type_transformer.py,sha256=d6Y2Rfg8pMVEEnHllfVksWZdNVOU55yk34O03dP9muY,1626
|
102
102
|
airbyte_cdk/sources/declarative/incremental/__init__.py,sha256=U1oZKtBaEC6IACmvziY9Wzg7Z8EgF4ZuR7NwvjlB_Sk,1255
|
@@ -121,14 +121,14 @@ airbyte_cdk/sources/declarative/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW
|
|
121
121
|
airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py,sha256=iemy3fKLczcU0-Aor7tx5jcT6DRedKMqyK7kCOp01hg,3924
|
122
122
|
airbyte_cdk/sources/declarative/migrations/state_migration.py,sha256=KWPjealMLKSMtajXgkdGgKg7EmTLR-CqqD7UIh0-eDU,794
|
123
123
|
airbyte_cdk/sources/declarative/models/__init__.py,sha256=nUFxNCiKeYRVXuZEKA7GD-lTHxsiKcQ8FitZjKhPIvE,100
|
124
|
-
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=
|
124
|
+
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=i38088qAfh5YMIOEkHdOVqMwDDCayAYtj66EHb3eJNE,114915
|
125
125
|
airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
|
126
126
|
airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py,sha256=nlVvHC511NUyDEEIRBkoeDTAvLqKNp-hRy8D19z8tdk,5941
|
127
127
|
airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=wnRUP0Xeru9Rbu5OexXSDN9QWDo8YU4tT9M2LDVOgGA,802
|
128
128
|
airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=RUyFZS0zslLb7UfQrvqMC--k5CVLNSp7zHw6kbosvKE,9688
|
129
129
|
airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py,sha256=laBy7ebjA-PiNwc-50U4FHvMqS_mmHvnabxgFs4CjGw,17069
|
130
130
|
airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=pJmg78vqE5VfUrF_KJnWjucQ4k9IWFULeAxHCowrHXE,6806
|
131
|
-
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=
|
131
|
+
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=DGHB4nWwsm4YLuWHhuOjAdeyVDY2U3CdbAiGRdm1YF0,163771
|
132
132
|
airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=TBC9AkGaUqHm2IKHMPN6punBIcY5tWGULowcLoAVkfw,1109
|
133
133
|
airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=VelO7zKqKtzMJ35jyFeg0ypJLQC0plqqIBNXoBW1G2E,3001
|
134
134
|
airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
|
@@ -167,7 +167,7 @@ airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.
|
|
167
167
|
airbyte_cdk/sources/declarative/requesters/query_properties/__init__.py,sha256=sHwHVuN6djuRBF7zQb-HmINV0By4wE5j_i6TjmIPMzQ,494
|
168
168
|
airbyte_cdk/sources/declarative/requesters/query_properties/properties_from_endpoint.py,sha256=3h9Ae6TNGagh9sMYWdG5KoEFWDlqUWZ5fkswTPreveM,1616
|
169
169
|
airbyte_cdk/sources/declarative/requesters/query_properties/property_chunking.py,sha256=G-kHHopdScW8oLqLOEaCwgk6Ri8H-7BprZyaw1uKV4s,2982
|
170
|
-
airbyte_cdk/sources/declarative/requesters/query_properties/query_properties.py,sha256=
|
170
|
+
airbyte_cdk/sources/declarative/requesters/query_properties/query_properties.py,sha256=SWJhthd-CudJZDNOXK8maMc94BI3pDOK00xyL92Qzcs,2220
|
171
171
|
airbyte_cdk/sources/declarative/requesters/query_properties/strategies/__init__.py,sha256=ojiPj9eVU7SuNpF3RZwhZWW21IYLQYEoxpzg1rCdvNM,350
|
172
172
|
airbyte_cdk/sources/declarative/requesters/query_properties/strategies/group_by_key.py,sha256=np4uTwSpQvXxubIzVbwSDX0Xf3EgVn8kkhs6zYLOdAQ,1081
|
173
173
|
airbyte_cdk/sources/declarative/requesters/query_properties/strategies/merge_strategy.py,sha256=iuk9QxpwvKVtdrq9eadQVkZ-Sfk3qhyyAAErprBfw2s,516
|
@@ -187,7 +187,13 @@ airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py,sha256=d
|
|
187
187
|
airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py,sha256=AiojNs8wItJFrENZBFUaDvau3sgwudO6Wkra36upSPo,4639
|
188
188
|
airbyte_cdk/sources/declarative/retrievers/__init__.py,sha256=nQepwG_RfW53sgwvK5dLPqfCx0VjsQ83nYoPjBMAaLM,527
|
189
189
|
airbyte_cdk/sources/declarative/retrievers/async_retriever.py,sha256=6oZtnCHm9NdDvjTSrVwPQOXGSdETSIR7eWH2vFjM7jI,4855
|
190
|
-
airbyte_cdk/sources/declarative/retrievers/file_uploader.py,sha256=
|
190
|
+
airbyte_cdk/sources/declarative/retrievers/file_uploader/__init__.py,sha256=ovs0oZGPEEw-V4asqr0D1Xty2u7tR8ADhRuHNgXGuWQ,490
|
191
|
+
airbyte_cdk/sources/declarative/retrievers/file_uploader/connector_builder_file_uploader.py,sha256=wHGnluTJ6HVbCkSaNNQQN2t9ZzhaFGoo_pzXTz54gBY,878
|
192
|
+
airbyte_cdk/sources/declarative/retrievers/file_uploader/default_file_uploader.py,sha256=7AFJxJknE7whofFBxoBp-EUrpu2QyZh1dwEq1jb3D-I,3689
|
193
|
+
airbyte_cdk/sources/declarative/retrievers/file_uploader/file_uploader.py,sha256=bWCWQzPokZ9rWmmi3I6RfaG53FhSN5yj3JouRhtnz7E,431
|
194
|
+
airbyte_cdk/sources/declarative/retrievers/file_uploader/file_writer.py,sha256=V8gAFjQXkhX5mwj1NafdcUrMfMBNF1hi0mrdXIl5qEc,359
|
195
|
+
airbyte_cdk/sources/declarative/retrievers/file_uploader/local_file_system_file_writer.py,sha256=jLpdonre1UHfbjGSD5AK_T0codLABJByTvbqepDZtEQ,422
|
196
|
+
airbyte_cdk/sources/declarative/retrievers/file_uploader/noop_file_writer.py,sha256=1yfimzxm09d2j605cu_HhiYVDNVL1rUMi3vs_jYlIyY,330
|
191
197
|
airbyte_cdk/sources/declarative/retrievers/retriever.py,sha256=XPLs593Xv8c5cKMc37XzUAYmzlXd1a7eSsspM-CMuWA,1696
|
192
198
|
airbyte_cdk/sources/declarative/retrievers/simple_retriever.py,sha256=O7qpM71L1_ATIbEKa8y658jdiSJSPw0KmuGKgnaruQU,31008
|
193
199
|
airbyte_cdk/sources/declarative/schema/__init__.py,sha256=xU45UvM5O4c1PSM13UHpCdh5hpW3HXy9vRRGEiAC1rg,795
|
@@ -390,9 +396,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G
|
|
390
396
|
airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
|
391
397
|
airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
|
392
398
|
airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
|
393
|
-
airbyte_cdk-6.
|
394
|
-
airbyte_cdk-6.
|
395
|
-
airbyte_cdk-6.
|
396
|
-
airbyte_cdk-6.
|
397
|
-
airbyte_cdk-6.
|
398
|
-
airbyte_cdk-6.
|
399
|
+
airbyte_cdk-6.48.0.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
|
400
|
+
airbyte_cdk-6.48.0.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
|
401
|
+
airbyte_cdk-6.48.0.dist-info/METADATA,sha256=slRcZy2PXZpm5mLpefKQWolH6bgEoo1Wy285FcBhxvc,6323
|
402
|
+
airbyte_cdk-6.48.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
403
|
+
airbyte_cdk-6.48.0.dist-info/entry_points.txt,sha256=AKWbEkHfpzzk9nF9tqBUaw1MbvTM4mGtEzmZQm0ZWvM,139
|
404
|
+
airbyte_cdk-6.48.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|