airbyte-cdk 6.41.9__py3-none-any.whl → 6.41.9.dev41012__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/models/__init__.py +1 -0
- airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +1 -0
- airbyte_cdk/sources/declarative/async_job/job.py +0 -6
- airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +18 -18
- airbyte_cdk/sources/declarative/async_job/job_tracker.py +6 -22
- airbyte_cdk/sources/declarative/concurrent_declarative_source.py +22 -0
- airbyte_cdk/sources/declarative/declarative_component_schema.yaml +39 -64
- airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +1 -2
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py +25 -45
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +24 -45
- airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -4
- airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +1 -5
- airbyte_cdk/sources/declarative/retrievers/file_uploader.py +68 -0
- airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +17 -4
- airbyte_cdk/sources/file_based/file_types/file_transfer.py +2 -8
- airbyte_cdk/sources/streams/concurrent/default_stream.py +3 -0
- airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -4
- airbyte_cdk/sources/types.py +11 -0
- airbyte_cdk/sources/utils/files_directory.py +15 -0
- airbyte_cdk/sources/utils/record_helper.py +8 -1
- {airbyte_cdk-6.41.9.dist-info → airbyte_cdk-6.41.9.dev41012.dist-info}/METADATA +2 -2
- {airbyte_cdk-6.41.9.dist-info → airbyte_cdk-6.41.9.dev41012.dist-info}/RECORD +26 -25
- airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +0 -150
- {airbyte_cdk-6.41.9.dist-info → airbyte_cdk-6.41.9.dev41012.dist-info}/LICENSE.txt +0 -0
- {airbyte_cdk-6.41.9.dist-info → airbyte_cdk-6.41.9.dev41012.dist-info}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.41.9.dist-info → airbyte_cdk-6.41.9.dev41012.dist-info}/WHEEL +0 -0
- {airbyte_cdk-6.41.9.dist-info → airbyte_cdk-6.41.9.dev41012.dist-info}/entry_points.txt +0 -0
@@ -102,7 +102,6 @@ from airbyte_cdk.sources.declarative.migrations.legacy_to_per_partition_state_mi
|
|
102
102
|
)
|
103
103
|
from airbyte_cdk.sources.declarative.models import (
|
104
104
|
CustomStateMigration,
|
105
|
-
GzipDecoder,
|
106
105
|
)
|
107
106
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
108
107
|
AddedFieldDefinition as AddedFieldDefinitionModel,
|
@@ -222,13 +221,13 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
|
|
222
221
|
ExponentialBackoffStrategy as ExponentialBackoffStrategyModel,
|
223
222
|
)
|
224
223
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
225
|
-
|
224
|
+
FileUploader as FileUploaderModel,
|
226
225
|
)
|
227
226
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
228
|
-
|
227
|
+
FixedWindowCallRatePolicy as FixedWindowCallRatePolicyModel,
|
229
228
|
)
|
230
229
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
231
|
-
|
230
|
+
FlattenFields as FlattenFieldsModel,
|
232
231
|
)
|
233
232
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
234
233
|
GzipDecoder as GzipDecoderModel,
|
@@ -388,7 +387,6 @@ from airbyte_cdk.sources.declarative.parsers.custom_code_compiler import (
|
|
388
387
|
)
|
389
388
|
from airbyte_cdk.sources.declarative.partition_routers import (
|
390
389
|
CartesianProductStreamSlicer,
|
391
|
-
GroupingPartitionRouter,
|
392
390
|
ListPartitionRouter,
|
393
391
|
PartitionRouter,
|
394
392
|
SinglePartitionRouter,
|
@@ -446,6 +444,7 @@ from airbyte_cdk.sources.declarative.retrievers import (
|
|
446
444
|
SimpleRetriever,
|
447
445
|
SimpleRetrieverTestReadDecorator,
|
448
446
|
)
|
447
|
+
from airbyte_cdk.sources.declarative.retrievers.file_uploader import FileUploader
|
449
448
|
from airbyte_cdk.sources.declarative.schema import (
|
450
449
|
ComplexFieldType,
|
451
450
|
DefaultSchemaLoader,
|
@@ -637,12 +636,12 @@ class ModelToComponentFactory:
|
|
637
636
|
ComponentMappingDefinitionModel: self.create_components_mapping_definition,
|
638
637
|
ZipfileDecoderModel: self.create_zipfile_decoder,
|
639
638
|
HTTPAPIBudgetModel: self.create_http_api_budget,
|
639
|
+
FileUploaderModel: self.create_file_uploader,
|
640
640
|
FixedWindowCallRatePolicyModel: self.create_fixed_window_call_rate_policy,
|
641
641
|
MovingWindowCallRatePolicyModel: self.create_moving_window_call_rate_policy,
|
642
642
|
UnlimitedCallRatePolicyModel: self.create_unlimited_call_rate_policy,
|
643
643
|
RateModel: self.create_rate,
|
644
644
|
HttpRequestRegexMatcherModel: self.create_http_request_matcher,
|
645
|
-
GroupingPartitionRouterModel: self.create_grouping_partition_router,
|
646
645
|
}
|
647
646
|
|
648
647
|
# Needed for the case where we need to perform a second parse on the fields of a custom component
|
@@ -1360,9 +1359,6 @@ class ModelToComponentFactory:
|
|
1360
1359
|
)
|
1361
1360
|
stream_state = self.apply_stream_state_migrations(stream_state_migrations, stream_state)
|
1362
1361
|
|
1363
|
-
# Per-partition state doesn't make sense for GroupingPartitionRouter, so force the global state
|
1364
|
-
use_global_cursor = isinstance(partition_router, GroupingPartitionRouter)
|
1365
|
-
|
1366
1362
|
# Return the concurrent cursor and state converter
|
1367
1363
|
return ConcurrentPerPartitionCursor(
|
1368
1364
|
cursor_factory=cursor_factory,
|
@@ -1374,7 +1370,6 @@ class ModelToComponentFactory:
|
|
1374
1370
|
connector_state_manager=state_manager,
|
1375
1371
|
connector_state_converter=connector_state_converter,
|
1376
1372
|
cursor_field=cursor_field,
|
1377
|
-
use_global_cursor=use_global_cursor,
|
1378
1373
|
)
|
1379
1374
|
|
1380
1375
|
@staticmethod
|
@@ -3082,11 +3077,8 @@ class ModelToComponentFactory:
|
|
3082
3077
|
stream_slices,
|
3083
3078
|
self._job_tracker,
|
3084
3079
|
self._message_repository,
|
3085
|
-
# FIXME work would need to be done here in order to detect if a stream as a parent stream that is bulk
|
3086
3080
|
has_bulk_parent=False,
|
3087
|
-
#
|
3088
|
-
# `None` == default retry is set to 3 attempts, under the hood.
|
3089
|
-
job_max_retry=1 if self._emit_connector_builder_messages else None,
|
3081
|
+
# FIXME work would need to be done here in order to detect if a stream as a parent stream that is bulk
|
3090
3082
|
),
|
3091
3083
|
stream_slicer=stream_slicer,
|
3092
3084
|
config=config,
|
@@ -3330,6 +3322,24 @@ class ModelToComponentFactory:
|
|
3330
3322
|
matchers=matchers,
|
3331
3323
|
)
|
3332
3324
|
|
3325
|
+
def create_file_uploader(
|
3326
|
+
self, model: FileUploaderModel, config: Config, **kwargs: Any
|
3327
|
+
) -> FileUploader:
|
3328
|
+
name = "File Uploader"
|
3329
|
+
requester = self._create_component_from_model(
|
3330
|
+
model=model.requester,
|
3331
|
+
config=config,
|
3332
|
+
name=name,
|
3333
|
+
**kwargs,
|
3334
|
+
)
|
3335
|
+
download_target_extractor = self._create_component_from_model(
|
3336
|
+
model=model.download_target_extractor,
|
3337
|
+
config=config,
|
3338
|
+
name=name,
|
3339
|
+
**kwargs,
|
3340
|
+
)
|
3341
|
+
return FileUploader(requester, download_target_extractor)
|
3342
|
+
|
3333
3343
|
def create_moving_window_call_rate_policy(
|
3334
3344
|
self, model: MovingWindowCallRatePolicyModel, config: Config, **kwargs: Any
|
3335
3345
|
) -> MovingWindowCallRatePolicy:
|
@@ -3379,34 +3389,3 @@ class ModelToComponentFactory:
|
|
3379
3389
|
self._api_budget = self.create_component(
|
3380
3390
|
model_type=HTTPAPIBudgetModel, component_definition=component_definition, config=config
|
3381
3391
|
)
|
3382
|
-
|
3383
|
-
def create_grouping_partition_router(
|
3384
|
-
self, model: GroupingPartitionRouterModel, config: Config, **kwargs: Any
|
3385
|
-
) -> GroupingPartitionRouter:
|
3386
|
-
underlying_router = self._create_component_from_model(
|
3387
|
-
model=model.underlying_partition_router, config=config
|
3388
|
-
)
|
3389
|
-
if model.group_size < 1:
|
3390
|
-
raise ValueError(f"Group size must be greater than 0, got {model.group_size}")
|
3391
|
-
|
3392
|
-
# Request options in underlying partition routers are not supported for GroupingPartitionRouter
|
3393
|
-
# because they are specific to individual partitions and cannot be aggregated or handled
|
3394
|
-
# when grouping, potentially leading to incorrect API calls. Any request customization
|
3395
|
-
# should be managed at the stream level through the requester's configuration.
|
3396
|
-
if isinstance(underlying_router, SubstreamPartitionRouter):
|
3397
|
-
if any(
|
3398
|
-
parent_config.request_option
|
3399
|
-
for parent_config in underlying_router.parent_stream_configs
|
3400
|
-
):
|
3401
|
-
raise ValueError("Request options are not supported for GroupingPartitionRouter.")
|
3402
|
-
|
3403
|
-
if isinstance(underlying_router, ListPartitionRouter):
|
3404
|
-
if underlying_router.request_option:
|
3405
|
-
raise ValueError("Request options are not supported for GroupingPartitionRouter.")
|
3406
|
-
|
3407
|
-
return GroupingPartitionRouter(
|
3408
|
-
group_size=model.group_size,
|
3409
|
-
underlying_partition_router=underlying_router,
|
3410
|
-
deduplicate=model.deduplicate if model.deduplicate is not None else True,
|
3411
|
-
config=config,
|
3412
|
-
)
|
@@ -8,9 +8,6 @@ from airbyte_cdk.sources.declarative.partition_routers.async_job_partition_route
|
|
8
8
|
from airbyte_cdk.sources.declarative.partition_routers.cartesian_product_stream_slicer import (
|
9
9
|
CartesianProductStreamSlicer,
|
10
10
|
)
|
11
|
-
from airbyte_cdk.sources.declarative.partition_routers.grouping_partition_router import (
|
12
|
-
GroupingPartitionRouter,
|
13
|
-
)
|
14
11
|
from airbyte_cdk.sources.declarative.partition_routers.list_partition_router import (
|
15
12
|
ListPartitionRouter,
|
16
13
|
)
|
@@ -25,7 +22,6 @@ from airbyte_cdk.sources.declarative.partition_routers.substream_partition_route
|
|
25
22
|
__all__ = [
|
26
23
|
"AsyncJobPartitionRouter",
|
27
24
|
"CartesianProductStreamSlicer",
|
28
|
-
"GroupingPartitionRouter",
|
29
25
|
"ListPartitionRouter",
|
30
26
|
"SinglePartitionRouter",
|
31
27
|
"SubstreamPartitionRouter",
|
@@ -374,11 +374,7 @@ class SubstreamPartitionRouter(PartitionRouter):
|
|
374
374
|
# Ignore per-partition states or invalid formats.
|
375
375
|
if isinstance(substream_state, (list, dict)) or len(substream_state_values) != 1:
|
376
376
|
# If a global state is present under the key "state", use its first value.
|
377
|
-
if (
|
378
|
-
"state" in stream_state
|
379
|
-
and isinstance(stream_state["state"], dict)
|
380
|
-
and stream_state["state"] != {}
|
381
|
-
):
|
377
|
+
if "state" in stream_state and isinstance(stream_state["state"], dict):
|
382
378
|
substream_state = list(stream_state["state"].values())[0]
|
383
379
|
else:
|
384
380
|
return {}
|
@@ -0,0 +1,68 @@
|
|
1
|
+
import json
|
2
|
+
import logging
|
3
|
+
from pathlib import Path
|
4
|
+
from typing import Optional
|
5
|
+
|
6
|
+
from airbyte_cdk.models import AirbyteRecordMessageFileReference
|
7
|
+
from airbyte_cdk.sources.declarative.extractors.record_extractor import RecordExtractor
|
8
|
+
from airbyte_cdk.sources.declarative.partition_routers.substream_partition_router import (
|
9
|
+
SafeResponse,
|
10
|
+
)
|
11
|
+
from airbyte_cdk.sources.declarative.requesters import Requester
|
12
|
+
from airbyte_cdk.sources.declarative.types import Record, StreamSlice
|
13
|
+
from airbyte_cdk.sources.utils.files_directory import get_files_directory
|
14
|
+
|
15
|
+
logger = logging.getLogger("airbyte")
|
16
|
+
|
17
|
+
class FileUploader:
|
18
|
+
def __init__(
|
19
|
+
self,
|
20
|
+
requester: Requester,
|
21
|
+
download_target_extractor: RecordExtractor,
|
22
|
+
content_extractor: Optional[RecordExtractor] = None,
|
23
|
+
) -> None:
|
24
|
+
self._requester = requester
|
25
|
+
self._download_target_extractor = download_target_extractor
|
26
|
+
self._content_extractor = content_extractor
|
27
|
+
|
28
|
+
def upload(self, record: Record) -> None:
|
29
|
+
# TODO validate record shape - is the transformation applied at this point?
|
30
|
+
mocked_response = SafeResponse()
|
31
|
+
mocked_response.content = json.dumps(record.data).encode("utf-8")
|
32
|
+
download_target = list(self._download_target_extractor.extract_records(mocked_response))[0]
|
33
|
+
if not isinstance(download_target, str):
|
34
|
+
raise ValueError(
|
35
|
+
f"download_target is expected to be a str but was {type(download_target)}: {download_target}"
|
36
|
+
)
|
37
|
+
|
38
|
+
response = self._requester.send_request(
|
39
|
+
stream_slice=StreamSlice(
|
40
|
+
partition={}, cursor_slice={}, extra_fields={"download_target": download_target}
|
41
|
+
),
|
42
|
+
)
|
43
|
+
|
44
|
+
if self._content_extractor:
|
45
|
+
raise NotImplementedError("TODO")
|
46
|
+
else:
|
47
|
+
files_directory = Path(get_files_directory())
|
48
|
+
# TODO:: we could either interpolate record data if some relative_path is provided or
|
49
|
+
# use partition_field value in the slice {"partition_field": some_value_id} to create a path
|
50
|
+
file_relative_path = Path(record.stream_name) / record.data["file_name"]
|
51
|
+
|
52
|
+
full_path = files_directory / file_relative_path
|
53
|
+
full_path.parent.mkdir(parents=True, exist_ok=True)
|
54
|
+
|
55
|
+
with open(str(full_path), "wb") as f:
|
56
|
+
f.write(response.content)
|
57
|
+
file_size_bytes = full_path.stat().st_size
|
58
|
+
|
59
|
+
logger.info("File uploaded successfully")
|
60
|
+
logger.info(f"File path: {full_path} ")
|
61
|
+
logger.info(f"File size: {file_size_bytes / 1024} KB")
|
62
|
+
logger.info(f"File download target: {download_target}")
|
63
|
+
|
64
|
+
record.file_reference = AirbyteRecordMessageFileReference(
|
65
|
+
file_url=download_target,
|
66
|
+
file_relative_path=str(file_relative_path),
|
67
|
+
file_size_bytes=file_size_bytes,
|
68
|
+
)
|
@@ -3,6 +3,7 @@
|
|
3
3
|
from typing import Any, Iterable, Mapping, Optional
|
4
4
|
|
5
5
|
from airbyte_cdk.sources.declarative.retrievers import Retriever
|
6
|
+
from airbyte_cdk.sources.declarative.retrievers.file_uploader import FileUploader
|
6
7
|
from airbyte_cdk.sources.message import MessageRepository
|
7
8
|
from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition
|
8
9
|
from airbyte_cdk.sources.streams.concurrent.partitions.partition_generator import PartitionGenerator
|
@@ -18,6 +19,7 @@ class DeclarativePartitionFactory:
|
|
18
19
|
json_schema: Mapping[str, Any],
|
19
20
|
retriever: Retriever,
|
20
21
|
message_repository: MessageRepository,
|
22
|
+
file_uploader: Optional[FileUploader] = None,
|
21
23
|
) -> None:
|
22
24
|
"""
|
23
25
|
The DeclarativePartitionFactory takes a retriever_factory and not a retriever directly. The reason is that our components are not
|
@@ -28,6 +30,7 @@ class DeclarativePartitionFactory:
|
|
28
30
|
self._json_schema = json_schema
|
29
31
|
self._retriever = retriever
|
30
32
|
self._message_repository = message_repository
|
33
|
+
self._file_uploader = file_uploader
|
31
34
|
|
32
35
|
def create(self, stream_slice: StreamSlice) -> Partition:
|
33
36
|
return DeclarativePartition(
|
@@ -35,6 +38,7 @@ class DeclarativePartitionFactory:
|
|
35
38
|
self._json_schema,
|
36
39
|
self._retriever,
|
37
40
|
self._message_repository,
|
41
|
+
self._file_uploader,
|
38
42
|
stream_slice,
|
39
43
|
)
|
40
44
|
|
@@ -46,23 +50,32 @@ class DeclarativePartition(Partition):
|
|
46
50
|
json_schema: Mapping[str, Any],
|
47
51
|
retriever: Retriever,
|
48
52
|
message_repository: MessageRepository,
|
53
|
+
file_uploader: Optional[FileUploader],
|
49
54
|
stream_slice: StreamSlice,
|
50
55
|
):
|
51
56
|
self._stream_name = stream_name
|
52
57
|
self._json_schema = json_schema
|
53
58
|
self._retriever = retriever
|
54
59
|
self._message_repository = message_repository
|
60
|
+
self._file_uploader = file_uploader
|
55
61
|
self._stream_slice = stream_slice
|
56
62
|
self._hash = SliceHasher.hash(self._stream_name, self._stream_slice)
|
57
63
|
|
58
64
|
def read(self) -> Iterable[Record]:
|
59
65
|
for stream_data in self._retriever.read_records(self._json_schema, self._stream_slice):
|
60
66
|
if isinstance(stream_data, Mapping):
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
67
|
+
record = (
|
68
|
+
stream_data
|
69
|
+
if isinstance(stream_data, Record)
|
70
|
+
else Record(
|
71
|
+
data=stream_data,
|
72
|
+
stream_name=self.stream_name(),
|
73
|
+
associated_slice=self._stream_slice,
|
74
|
+
)
|
65
75
|
)
|
76
|
+
if self._file_uploader:
|
77
|
+
self._file_uploader.upload(record)
|
78
|
+
yield record
|
66
79
|
else:
|
67
80
|
self._message_repository.emit_message(stream_data)
|
68
81
|
|
@@ -8,18 +8,12 @@ from typing import Any, Dict, Iterable
|
|
8
8
|
from airbyte_cdk.sources.file_based.config.file_based_stream_config import FileBasedStreamConfig
|
9
9
|
from airbyte_cdk.sources.file_based.file_based_stream_reader import AbstractFileBasedStreamReader
|
10
10
|
from airbyte_cdk.sources.file_based.remote_file import RemoteFile
|
11
|
-
|
12
|
-
AIRBYTE_STAGING_DIRECTORY = os.getenv("AIRBYTE_STAGING_DIRECTORY", "/staging/files")
|
13
|
-
DEFAULT_LOCAL_DIRECTORY = "/tmp/airbyte-file-transfer"
|
11
|
+
from airbyte_cdk.sources.utils.files_directory import get_files_directory
|
14
12
|
|
15
13
|
|
16
14
|
class FileTransfer:
|
17
15
|
def __init__(self) -> None:
|
18
|
-
self._local_directory = (
|
19
|
-
AIRBYTE_STAGING_DIRECTORY
|
20
|
-
if os.path.exists(AIRBYTE_STAGING_DIRECTORY)
|
21
|
-
else DEFAULT_LOCAL_DIRECTORY
|
22
|
-
)
|
16
|
+
self._local_directory = get_files_directory()
|
23
17
|
|
24
18
|
def get_file(
|
25
19
|
self,
|
@@ -29,6 +29,7 @@ class DefaultStream(AbstractStream):
|
|
29
29
|
logger: Logger,
|
30
30
|
cursor: Cursor,
|
31
31
|
namespace: Optional[str] = None,
|
32
|
+
supports_file_transfer: bool = False,
|
32
33
|
) -> None:
|
33
34
|
self._stream_partition_generator = partition_generator
|
34
35
|
self._name = name
|
@@ -39,6 +40,7 @@ class DefaultStream(AbstractStream):
|
|
39
40
|
self._logger = logger
|
40
41
|
self._cursor = cursor
|
41
42
|
self._namespace = namespace
|
43
|
+
self._supports_file_transfer = supports_file_transfer
|
42
44
|
|
43
45
|
def generate_partitions(self) -> Iterable[Partition]:
|
44
46
|
yield from self._stream_partition_generator.generate()
|
@@ -68,6 +70,7 @@ class DefaultStream(AbstractStream):
|
|
68
70
|
json_schema=dict(self._json_schema),
|
69
71
|
supported_sync_modes=[SyncMode.full_refresh],
|
70
72
|
is_resumable=False,
|
73
|
+
is_file_based=self._supports_file_transfer,
|
71
74
|
)
|
72
75
|
|
73
76
|
if self._namespace:
|
@@ -71,10 +71,6 @@ class AbstractStreamStateConverter(ABC):
|
|
71
71
|
for stream_slice in state.get("slices", []):
|
72
72
|
stream_slice[self.START_KEY] = self._from_state_message(stream_slice[self.START_KEY])
|
73
73
|
stream_slice[self.END_KEY] = self._from_state_message(stream_slice[self.END_KEY])
|
74
|
-
if self.MOST_RECENT_RECORD_KEY in stream_slice:
|
75
|
-
stream_slice[self.MOST_RECENT_RECORD_KEY] = self._from_state_message(
|
76
|
-
stream_slice[self.MOST_RECENT_RECORD_KEY]
|
77
|
-
)
|
78
74
|
return state
|
79
75
|
|
80
76
|
def serialize(
|
airbyte_cdk/sources/types.py
CHANGED
@@ -6,6 +6,7 @@ from __future__ import annotations
|
|
6
6
|
|
7
7
|
from typing import Any, ItemsView, Iterator, KeysView, List, Mapping, Optional, ValuesView
|
8
8
|
|
9
|
+
from airbyte_cdk.models import AirbyteRecordMessageFileReference
|
9
10
|
from airbyte_cdk.utils.slice_hasher import SliceHasher
|
10
11
|
|
11
12
|
# A FieldPointer designates a path to a field inside a mapping. For example, retrieving ["k1", "k1.2"] in the object {"k1" :{"k1.2":
|
@@ -24,11 +25,13 @@ class Record(Mapping[str, Any]):
|
|
24
25
|
stream_name: str,
|
25
26
|
associated_slice: Optional[StreamSlice] = None,
|
26
27
|
is_file_transfer_message: bool = False,
|
28
|
+
file_reference: Optional[AirbyteRecordMessageFileReference] = None,
|
27
29
|
):
|
28
30
|
self._data = data
|
29
31
|
self._associated_slice = associated_slice
|
30
32
|
self.stream_name = stream_name
|
31
33
|
self.is_file_transfer_message = is_file_transfer_message
|
34
|
+
self._file_reference = file_reference
|
32
35
|
|
33
36
|
@property
|
34
37
|
def data(self) -> Mapping[str, Any]:
|
@@ -38,6 +41,14 @@ class Record(Mapping[str, Any]):
|
|
38
41
|
def associated_slice(self) -> Optional[StreamSlice]:
|
39
42
|
return self._associated_slice
|
40
43
|
|
44
|
+
@property
|
45
|
+
def file_reference(self) -> AirbyteRecordMessageFileReference:
|
46
|
+
return self._file_reference
|
47
|
+
|
48
|
+
@file_reference.setter
|
49
|
+
def file_reference(self, value: AirbyteRecordMessageFileReference):
|
50
|
+
self._file_reference = value
|
51
|
+
|
41
52
|
def __repr__(self) -> str:
|
42
53
|
return repr(self._data)
|
43
54
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
3
|
+
#
|
4
|
+
import os
|
5
|
+
|
6
|
+
AIRBYTE_STAGING_DIRECTORY = os.getenv("AIRBYTE_STAGING_DIRECTORY", "/staging/files")
|
7
|
+
DEFAULT_LOCAL_DIRECTORY = "/tmp/airbyte-file-transfer"
|
8
|
+
|
9
|
+
|
10
|
+
def get_files_directory() -> str:
|
11
|
+
return (
|
12
|
+
AIRBYTE_STAGING_DIRECTORY
|
13
|
+
if os.path.exists(AIRBYTE_STAGING_DIRECTORY)
|
14
|
+
else DEFAULT_LOCAL_DIRECTORY
|
15
|
+
)
|
@@ -9,6 +9,7 @@ from airbyte_cdk.models import (
|
|
9
9
|
AirbyteLogMessage,
|
10
10
|
AirbyteMessage,
|
11
11
|
AirbyteRecordMessage,
|
12
|
+
AirbyteRecordMessageFileReference,
|
12
13
|
AirbyteTraceMessage,
|
13
14
|
)
|
14
15
|
from airbyte_cdk.models import Type as MessageType
|
@@ -23,6 +24,7 @@ def stream_data_to_airbyte_message(
|
|
23
24
|
transformer: TypeTransformer = TypeTransformer(TransformConfig.NoTransform),
|
24
25
|
schema: Optional[Mapping[str, Any]] = None,
|
25
26
|
is_file_transfer_message: bool = False,
|
27
|
+
file_reference: Optional[AirbyteRecordMessageFileReference] = None,
|
26
28
|
) -> AirbyteMessage:
|
27
29
|
if schema is None:
|
28
30
|
schema = {}
|
@@ -41,7 +43,12 @@ def stream_data_to_airbyte_message(
|
|
41
43
|
stream=stream_name, file=data, emitted_at=now_millis, data={}
|
42
44
|
)
|
43
45
|
else:
|
44
|
-
message = AirbyteRecordMessage(
|
46
|
+
message = AirbyteRecordMessage(
|
47
|
+
stream=stream_name,
|
48
|
+
data=data,
|
49
|
+
emitted_at=now_millis,
|
50
|
+
file_reference=file_reference,
|
51
|
+
)
|
45
52
|
return AirbyteMessage(type=MessageType.RECORD, record=message)
|
46
53
|
case AirbyteTraceMessage():
|
47
54
|
return AirbyteMessage(type=MessageType.TRACE, trace=data_or_message)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: airbyte-cdk
|
3
|
-
Version: 6.41.9
|
3
|
+
Version: 6.41.9.dev41012
|
4
4
|
Summary: A framework for writing Airbyte Connectors.
|
5
5
|
Home-page: https://airbyte.com
|
6
6
|
License: MIT
|
@@ -22,7 +22,7 @@ Provides-Extra: sql
|
|
22
22
|
Provides-Extra: vector-db-based
|
23
23
|
Requires-Dist: Jinja2 (>=3.1.2,<3.2.0)
|
24
24
|
Requires-Dist: PyYAML (>=6.0.1,<7.0.0)
|
25
|
-
Requires-Dist: airbyte-protocol-models-dataclasses (
|
25
|
+
Requires-Dist: airbyte-protocol-models-dataclasses (==0.14.1337.dev1742858109)
|
26
26
|
Requires-Dist: anyascii (>=0.3.2,<0.4.0)
|
27
27
|
Requires-Dist: avro (>=1.11.2,<1.13.0) ; extra == "file-based"
|
28
28
|
Requires-Dist: backoff
|
@@ -29,7 +29,7 @@ airbyte_cdk/destinations/vector_db_based/writer.py,sha256=nZ00xPiohElJmYktEZZIhr
|
|
29
29
|
airbyte_cdk/entrypoint.py,sha256=NRJv5BNZRSUEVTmNBa9N7ih6fW5sg4DwL0nkB9kI99Y,18570
|
30
30
|
airbyte_cdk/exception_handler.py,sha256=D_doVl3Dt60ASXlJsfviOCswxGyKF2q0RL6rif3fNks,2013
|
31
31
|
airbyte_cdk/logger.py,sha256=1cURbvawbunCAV178q-XhTHcbAQZTSf07WhU7U9AXWU,3744
|
32
|
-
airbyte_cdk/models/__init__.py,sha256=
|
32
|
+
airbyte_cdk/models/__init__.py,sha256=Et9wJWs5VOWynGbb-3aJRhsdAHAiLkNNLxdwqJAuqkw,2114
|
33
33
|
airbyte_cdk/models/airbyte_protocol.py,sha256=MCmLir67-hF12YM5OKzeGbWrlxr7ChG_OQSE1xG8EIU,3748
|
34
34
|
airbyte_cdk/models/airbyte_protocol_serializers.py,sha256=s6SaFB2CMrG_7jTQGn_fhFbQ1FUxhCxf5kq2RWGHMVI,1749
|
35
35
|
airbyte_cdk/models/file_transfer_record_message.py,sha256=J-E-43KOmUFdpsjeKlEfNnnZRSB-Gb5AGZjonR25Drc,323
|
@@ -38,7 +38,7 @@ airbyte_cdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
38
|
airbyte_cdk/sources/__init__.py,sha256=45J83QsFH3Wky3sVapZWg4C58R_i1thm61M06t2c1AQ,1156
|
39
39
|
airbyte_cdk/sources/abstract_source.py,sha256=50vxEBRByiNhT4WJkiFvgM-C6PWqKSJgvuNC_aeg2cw,15547
|
40
40
|
airbyte_cdk/sources/concurrent_source/__init__.py,sha256=3D_RJsxQfiLboSCDdNei1Iv-msRp3DXsas6E9kl7dXc,386
|
41
|
-
airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py,sha256=
|
41
|
+
airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py,sha256=knIhSRxWbb_E0avoNFh_UIIIQ4DzyiN3a6ftuXkRtmM,12761
|
42
42
|
airbyte_cdk/sources/concurrent_source/concurrent_source.py,sha256=Bq54JBp8HUz7lGhladoX-dpyscX77Kxbs32bLwWdjdI,7737
|
43
43
|
airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py,sha256=f9PIRPWn2tXu0-bxVeYHL2vYdqCzZ_kgpHg5_Ep-cfQ,6103
|
44
44
|
airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py,sha256=z1t-rAZBsqVidv2fpUlPHE9JgyXsITuGk4AMu96mXSQ,696
|
@@ -48,9 +48,9 @@ airbyte_cdk/sources/config.py,sha256=wtwFF_7G_S2KB0IE2W5LBs7RO5e7EbgCAMzJpTcYTKo
|
|
48
48
|
airbyte_cdk/sources/connector_state_manager.py,sha256=hw3TJJWl3UJKSDsH-PypFQU7mD0ifffh1Noz-t_THr8,7486
|
49
49
|
airbyte_cdk/sources/declarative/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
|
50
50
|
airbyte_cdk/sources/declarative/async_job/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
51
|
-
airbyte_cdk/sources/declarative/async_job/job.py,sha256=
|
52
|
-
airbyte_cdk/sources/declarative/async_job/job_orchestrator.py,sha256=
|
53
|
-
airbyte_cdk/sources/declarative/async_job/job_tracker.py,sha256=
|
51
|
+
airbyte_cdk/sources/declarative/async_job/job.py,sha256=V4Z6NohXwTlOavDbD-tUUQxOr7Lzpb_r4tRC64AfvDE,1702
|
52
|
+
airbyte_cdk/sources/declarative/async_job/job_orchestrator.py,sha256=4uNdRLAx6PA5ESrvsxg9sYwQBDwRCIBh58E9byqfl3k,22207
|
53
|
+
airbyte_cdk/sources/declarative/async_job/job_tracker.py,sha256=oAaqKxj5dGKeF5wkqiOZbu5gW6JvtaROxirDU2KqT1o,2565
|
54
54
|
airbyte_cdk/sources/declarative/async_job/repository.py,sha256=2OkWiZp5IKTOi_SIpP1U-Rw3gH36LBy_a8CgXoENTtg,1044
|
55
55
|
airbyte_cdk/sources/declarative/async_job/status.py,sha256=mkExR-uOAO1ckUnclaUOa74l2N9CdhLbVFM6KDoBgBM,715
|
56
56
|
airbyte_cdk/sources/declarative/async_job/timer.py,sha256=Fb8P72CQ7jIzJyzMSSNuBf2vt8bmrg9SrfmNxKwph2A,1242
|
@@ -67,11 +67,11 @@ airbyte_cdk/sources/declarative/checks/check_stream.py,sha256=dAA-UhmMj0WLXCkRQr
|
|
67
67
|
airbyte_cdk/sources/declarative/checks/connection_checker.py,sha256=MBRJo6WJlZQHpIfOGaNOkkHUmgUl_4wDM6VPo41z5Ss,1383
|
68
68
|
airbyte_cdk/sources/declarative/concurrency_level/__init__.py,sha256=5XUqrmlstYlMM0j6crktlKQwALek0uiz2D3WdM46MyA,191
|
69
69
|
airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py,sha256=YIwCTCpOr_QSNW4ltQK0yUGWInI8PKNY216HOOegYLk,2101
|
70
|
-
airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=
|
70
|
+
airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=HwcAoeh-4-g0KMTgEm7QwqSQmKjE3lyODOVm7J-xDds,28750
|
71
71
|
airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
|
72
72
|
airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=_zGNGq31RNy_0QBLt_EcTvgPyhj7urPdx6oA3M5-r3o,3150
|
73
73
|
airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
|
74
|
-
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=
|
74
|
+
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=TqaK58NBoJ03QdSq5OpiHq9L3TWgUb1pzWmYRFuEbyY,151672
|
75
75
|
airbyte_cdk/sources/declarative/declarative_source.py,sha256=nF7wBqFd3AQmEKAm4CnIo29CJoQL562cJGSCeL8U8bA,1531
|
76
76
|
airbyte_cdk/sources/declarative/declarative_stream.py,sha256=dCRlddBUSaJmBNBz1pSO1r2rTw8AP5d2_vlmIeGs2gg,10767
|
77
77
|
airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=JHb_0d3SE6kNY10mxA5YBEKPeSbsWYjByq1gUQxepoE,953
|
@@ -93,7 +93,7 @@ airbyte_cdk/sources/declarative/extractors/record_selector.py,sha256=HCqx7IyENM_
|
|
93
93
|
airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py,sha256=WJyA2OYIEgFpVP5Y3o0tIj69AV6IKkn9B16MeXaEItI,6513
|
94
94
|
airbyte_cdk/sources/declarative/extractors/type_transformer.py,sha256=d6Y2Rfg8pMVEEnHllfVksWZdNVOU55yk34O03dP9muY,1626
|
95
95
|
airbyte_cdk/sources/declarative/incremental/__init__.py,sha256=U1oZKtBaEC6IACmvziY9Wzg7Z8EgF4ZuR7NwvjlB_Sk,1255
|
96
|
-
airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py,sha256=
|
96
|
+
airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py,sha256=MT5JbdEbnPzk3VWZGGvThe4opoX5dHhSXFrnTRYC6dg,22210
|
97
97
|
airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py,sha256=Rbe6lJLTtZ5en33MwZiB9-H9-AwDMNHgwBZs8EqhYqk,22172
|
98
98
|
airbyte_cdk/sources/declarative/incremental/declarative_cursor.py,sha256=5Bhw9VRPyIuCaD0wmmq_L3DZsa-rJgtKSEUzSd8YYD0,536
|
99
99
|
airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py,sha256=2tsE6FgXzemf4fZZ4uGtd8QpRBl9GJ2CRqSNJE5p0EI,16077
|
@@ -114,21 +114,20 @@ airbyte_cdk/sources/declarative/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW
|
|
114
114
|
airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py,sha256=iemy3fKLczcU0-Aor7tx5jcT6DRedKMqyK7kCOp01hg,3924
|
115
115
|
airbyte_cdk/sources/declarative/migrations/state_migration.py,sha256=KWPjealMLKSMtajXgkdGgKg7EmTLR-CqqD7UIh0-eDU,794
|
116
116
|
airbyte_cdk/sources/declarative/models/__init__.py,sha256=nUFxNCiKeYRVXuZEKA7GD-lTHxsiKcQ8FitZjKhPIvE,100
|
117
|
-
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=
|
117
|
+
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=rTKXtsg_TXIAetfF49OqSJZmZG5WueANBZHKqaVAd1g,107657
|
118
118
|
airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
|
119
119
|
airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py,sha256=nlVvHC511NUyDEEIRBkoeDTAvLqKNp-hRy8D19z8tdk,5941
|
120
120
|
airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=Rir9_z3Kcd5Es0-LChrzk-0qubAsiK_RSEnLmK2OXm8,553
|
121
121
|
airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=CXwTfD3wSQq3okcqwigpprbHhSURUokh4GK2OmOyKC8,9132
|
122
122
|
airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=IWUOdF03o-aQn0Occo1BJCxU0Pz-QILk5L67nzw2thw,6803
|
123
|
-
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=
|
124
|
-
airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=
|
123
|
+
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=D2DORIm1cgx54ntUEZV40O87WzOOIMqduxwC1mlEcUg,148216
|
124
|
+
airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=HJ-Syp3p7RpyR_OK0X_a2kSyISfu3W-PKrRI16iY0a8,957
|
125
125
|
airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=VelO7zKqKtzMJ35jyFeg0ypJLQC0plqqIBNXoBW1G2E,3001
|
126
126
|
airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
|
127
|
-
airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py,sha256=-W1CAg2NayCMDNj7QLWn7Nqipaz7av9sLjbMnyMGUek,6271
|
128
127
|
airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py,sha256=tmGGpMoOBmaMfhVZq53AEWxoHm2lmNVi6hA2_IVEnAA,4882
|
129
128
|
airbyte_cdk/sources/declarative/partition_routers/partition_router.py,sha256=YyEIzdmLd1FjbVP3QbQ2VFCLW_P-OGbVh6VpZShp54k,2218
|
130
129
|
airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py,sha256=SKzKjSyfccq4dxGIh-J6ejrgkCHzaiTIazmbmeQiRD4,1942
|
131
|
-
airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py,sha256=
|
130
|
+
airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py,sha256=C15zFH0r4uHZ7otsrm46lHy93uT0vJn1VGs7maFHOHA,19800
|
132
131
|
airbyte_cdk/sources/declarative/requesters/README.md,sha256=DQll2qsIzzTiiP35kJp16ONpr7cFeUQNgPfhl5krB24,2675
|
133
132
|
airbyte_cdk/sources/declarative/requesters/__init__.py,sha256=d7a3OoHbqaJDyyPli3nqqJ2yAW_SLX6XDaBAKOwvpxw,364
|
134
133
|
airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py,sha256=SkEDcJxlT1683rNx93K9whoS0OyUukkuOfToGtgpF58,776
|
@@ -172,6 +171,7 @@ airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py,sha256=d
|
|
172
171
|
airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py,sha256=AiojNs8wItJFrENZBFUaDvau3sgwudO6Wkra36upSPo,4639
|
173
172
|
airbyte_cdk/sources/declarative/retrievers/__init__.py,sha256=nQepwG_RfW53sgwvK5dLPqfCx0VjsQ83nYoPjBMAaLM,527
|
174
173
|
airbyte_cdk/sources/declarative/retrievers/async_retriever.py,sha256=6oZtnCHm9NdDvjTSrVwPQOXGSdETSIR7eWH2vFjM7jI,4855
|
174
|
+
airbyte_cdk/sources/declarative/retrievers/file_uploader.py,sha256=nmWgufWbuhG8NHyK0vJHhKZxkj0HJxFzO0k4ijPklx0,2916
|
175
175
|
airbyte_cdk/sources/declarative/retrievers/retriever.py,sha256=XPLs593Xv8c5cKMc37XzUAYmzlXd1a7eSsspM-CMuWA,1696
|
176
176
|
airbyte_cdk/sources/declarative/retrievers/simple_retriever.py,sha256=p6O4FYS7zzPq6uQT2NVnughUjI66tePaXVlyhCAyyv0,27746
|
177
177
|
airbyte_cdk/sources/declarative/schema/__init__.py,sha256=xU45UvM5O4c1PSM13UHpCdh5hpW3HXy9vRRGEiAC1rg,795
|
@@ -183,7 +183,7 @@ airbyte_cdk/sources/declarative/schema/schema_loader.py,sha256=kjt8v0N5wWKA5zyLn
|
|
183
183
|
airbyte_cdk/sources/declarative/spec/__init__.py,sha256=H0UwoRhgucbKBIzg85AXrifybVmfpwWpPdy22vZKVuo,141
|
184
184
|
airbyte_cdk/sources/declarative/spec/spec.py,sha256=ODSNUgkDOhnLQnwLjgSaME6R3kNeywjROvbNrWEnsgU,1876
|
185
185
|
airbyte_cdk/sources/declarative/stream_slicers/__init__.py,sha256=sI9vhc95RwJYOnA0VKjcbtKgFcmAbWjhdWBXFbAijOs,176
|
186
|
-
airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py,sha256=
|
186
|
+
airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py,sha256=J55EQ-ND4vTGvhfDRKpv9UsgershHQ9Oxqsjt0tMilQ,3984
|
187
187
|
airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py,sha256=SOkIPBi2Wu7yxIvA15yFzUAB95a3IzA8LPq5DEqHQQc,725
|
188
188
|
airbyte_cdk/sources/declarative/transformations/__init__.py,sha256=CPJ8TlMpiUmvG3624VYu_NfTzxwKcfBjM2Q2wJ7fkSA,919
|
189
189
|
airbyte_cdk/sources/declarative/transformations/add_fields.py,sha256=vxLh0ekB0i_m8GYFpSad9T4S7eRxxtqZaigHLGVoltA,5366
|
@@ -222,7 +222,7 @@ airbyte_cdk/sources/file_based/file_types/__init__.py,sha256=blCLn0-2LC-ZdgcNyDE
|
|
222
222
|
airbyte_cdk/sources/file_based/file_types/avro_parser.py,sha256=XNx-JC-sgzH9u3nOJ2M59FxBXvtig8LN6BIkeDOavZA,10858
|
223
223
|
airbyte_cdk/sources/file_based/file_types/csv_parser.py,sha256=QlCXB-ry3np67Q_VerQEPoWDOTcPTB6Go4ydZxY9ae4,20445
|
224
224
|
airbyte_cdk/sources/file_based/file_types/excel_parser.py,sha256=BeplCq0hmojELU6bZCvvpRLpQ9us81TqbGYwrhd3INo,7188
|
225
|
-
airbyte_cdk/sources/file_based/file_types/file_transfer.py,sha256=
|
225
|
+
airbyte_cdk/sources/file_based/file_types/file_transfer.py,sha256=p9po5ITwgRxhli0ZaSaiWNK6kTl3Tw1o9DaRX7QNb7Y,1072
|
226
226
|
airbyte_cdk/sources/file_based/file_types/file_type_parser.py,sha256=JgpH21PrbRqwK92BJklZWvh2TndA6xZ-eP1LPMo44oQ,2832
|
227
227
|
airbyte_cdk/sources/file_based/file_types/jsonl_parser.py,sha256=GwyNyxmST4RX-XpXy7xVH0D-znYWWBmGv_pVAu95oHQ,5886
|
228
228
|
airbyte_cdk/sources/file_based/file_types/parquet_parser.py,sha256=XenFg5sJ-UBnIkSmsiNJRou11NO0zZXx-RXgPHMT2NA,10487
|
@@ -271,7 +271,7 @@ airbyte_cdk/sources/streams/concurrent/availability_strategy.py,sha256=4La5v2Uff
|
|
271
271
|
airbyte_cdk/sources/streams/concurrent/clamping.py,sha256=i26GVyui2ScEXSP-IP_61K2HaTp1-6lTlYHsZVYpuZA,3240
|
272
272
|
airbyte_cdk/sources/streams/concurrent/cursor.py,sha256=LFXbKBEMtNSVz_kZs9qydS9fPvzTU5wdgXRagRRJeHo,21388
|
273
273
|
airbyte_cdk/sources/streams/concurrent/cursor_types.py,sha256=ZyWLPpeLX1qXcP5MwS-wxK11IBMsnVPCw9zx8gA2_Ro,843
|
274
|
-
airbyte_cdk/sources/streams/concurrent/default_stream.py,sha256=
|
274
|
+
airbyte_cdk/sources/streams/concurrent/default_stream.py,sha256=3SBjFa1z955pSE_2qt1C7mAky-RKjOZeQDePbZkWYYs,3371
|
275
275
|
airbyte_cdk/sources/streams/concurrent/exceptions.py,sha256=JOZ446MCLpmF26r9KfS6OO_6rGjcjgJNZdcw6jccjEI,468
|
276
276
|
airbyte_cdk/sources/streams/concurrent/helpers.py,sha256=S6AW8TgIASCZ2UuUcQLE8OzgYUHWt2-KPOvNPwnQf-Q,1596
|
277
277
|
airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py,sha256=2t64b_z9cEPmlHZnjSiMTO8PEtEdiAJDG0JcYOtUqAE,3363
|
@@ -282,7 +282,7 @@ airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py,sha256=
|
|
282
282
|
airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py,sha256=nbdkkHoN0NFeSs7YUFfzY1Lg5Jrt8fWY_ln3YrhY-Ko,544
|
283
283
|
airbyte_cdk/sources/streams/concurrent/partitions/types.py,sha256=frPVvHtY7vLxpGEbMQzNvF1Y52ZVyct9f1DDhGoRjwY,1166
|
284
284
|
airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
285
|
-
airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py,sha256=
|
285
|
+
airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py,sha256=JCRanZBAC8a0pPuzHCHiJ1irHgFkDd83l2K5jA1xRkU,6853
|
286
286
|
airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py,sha256=x8MLm1pTMfLNHvMF3P1ixYkYt_xjpbaIwnvhY_ofdBo,8076
|
287
287
|
airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py,sha256=bC6L82nsErXcFSPlxcdp4SneJ7qFuqCelP3-8svEh5E,3054
|
288
288
|
airbyte_cdk/sources/streams/core.py,sha256=jiYW6w8cjNjzXMd8U8Gt-02fYYU7b0ciXSSSnGvFRak,32219
|
@@ -308,10 +308,11 @@ airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py,sha256=C2j2uVfi9d
|
|
308
308
|
airbyte_cdk/sources/streams/http/requests_native_auth/token.py,sha256=h5PTzcdH-RQLeCg7xZ45w_484OPUDSwNWl_iMJQmZoI,2526
|
309
309
|
airbyte_cdk/sources/streams/permissions/identities_stream.py,sha256=9O9k6k18Xm3Zsiw_vnI_jsHXfMCQiek6V-jMkJJLxn8,2621
|
310
310
|
airbyte_cdk/sources/streams/utils/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
|
311
|
-
airbyte_cdk/sources/types.py,sha256=
|
311
|
+
airbyte_cdk/sources/types.py,sha256=1xZN4I5nf_VSaI7aTIukH0Lhi0RdpcIqV8sIYwIaqnk,5590
|
312
312
|
airbyte_cdk/sources/utils/__init__.py,sha256=TTN6VUxVy6Is8BhYQZR5pxJGQh8yH4duXh4O1TiMiEY,118
|
313
313
|
airbyte_cdk/sources/utils/casing.py,sha256=QC-gV1O4e8DR4-bhdXieUPKm_JamzslVyfABLYYRSXA,256
|
314
|
-
airbyte_cdk/sources/utils/
|
314
|
+
airbyte_cdk/sources/utils/files_directory.py,sha256=z8Dmr-wkL1sAqdwCST4MBUFAyMHPD2cJIzVdAuCynp8,391
|
315
|
+
airbyte_cdk/sources/utils/record_helper.py,sha256=rsBY4Nr-Ls9XIQwD44bPFLczcQ8U6PUzxccx442uY6Y,2409
|
315
316
|
airbyte_cdk/sources/utils/schema_helpers.py,sha256=bR3I70-e11S6B8r6VK-pthQXtcYrXojgXFvuK7lRrpg,8545
|
316
317
|
airbyte_cdk/sources/utils/slice_logger.py,sha256=qWWeFLAvigFz0b4O1_O3QDM1cy8PqZAMMgVPR2hEeb8,1778
|
317
318
|
airbyte_cdk/sources/utils/transform.py,sha256=0LOvIJg1vmg_70AiAVe-YHMr-LHrqEuxg9cm1BnYPDM,11725
|
@@ -359,9 +360,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G
|
|
359
360
|
airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
|
360
361
|
airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
|
361
362
|
airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
|
362
|
-
airbyte_cdk-6.41.9.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
|
363
|
-
airbyte_cdk-6.41.9.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
|
364
|
-
airbyte_cdk-6.41.9.dist-info/METADATA,sha256=
|
365
|
-
airbyte_cdk-6.41.9.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
366
|
-
airbyte_cdk-6.41.9.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
|
367
|
-
airbyte_cdk-6.41.9.dist-info/RECORD,,
|
363
|
+
airbyte_cdk-6.41.9.dev41012.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
|
364
|
+
airbyte_cdk-6.41.9.dev41012.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
|
365
|
+
airbyte_cdk-6.41.9.dev41012.dist-info/METADATA,sha256=DeC9qPHgFuFsL4SIhi4fUBCf_3KcqgUK54YX2-Nj3wQ,6093
|
366
|
+
airbyte_cdk-6.41.9.dev41012.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
367
|
+
airbyte_cdk-6.41.9.dev41012.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
|
368
|
+
airbyte_cdk-6.41.9.dev41012.dist-info/RECORD,,
|