airbyte-cdk 6.41.9__py3-none-any.whl → 6.41.9.dev4101__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.
Files changed (27) hide show
  1. airbyte_cdk/models/__init__.py +1 -0
  2. airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +1 -0
  3. airbyte_cdk/sources/declarative/async_job/job.py +0 -6
  4. airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +18 -18
  5. airbyte_cdk/sources/declarative/async_job/job_tracker.py +6 -22
  6. airbyte_cdk/sources/declarative/concurrent_declarative_source.py +22 -0
  7. airbyte_cdk/sources/declarative/declarative_component_schema.yaml +39 -64
  8. airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +1 -2
  9. airbyte_cdk/sources/declarative/models/declarative_component_schema.py +25 -45
  10. airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +24 -45
  11. airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -4
  12. airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +1 -5
  13. airbyte_cdk/sources/declarative/retrievers/file_uploader.py +61 -0
  14. airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +17 -4
  15. airbyte_cdk/sources/file_based/file_types/file_transfer.py +2 -8
  16. airbyte_cdk/sources/streams/concurrent/default_stream.py +3 -0
  17. airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -4
  18. airbyte_cdk/sources/types.py +11 -0
  19. airbyte_cdk/sources/utils/files_directory.py +15 -0
  20. airbyte_cdk/sources/utils/record_helper.py +8 -1
  21. {airbyte_cdk-6.41.9.dist-info → airbyte_cdk-6.41.9.dev4101.dist-info}/METADATA +2 -2
  22. {airbyte_cdk-6.41.9.dist-info → airbyte_cdk-6.41.9.dev4101.dist-info}/RECORD +26 -25
  23. airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +0 -150
  24. {airbyte_cdk-6.41.9.dist-info → airbyte_cdk-6.41.9.dev4101.dist-info}/LICENSE.txt +0 -0
  25. {airbyte_cdk-6.41.9.dist-info → airbyte_cdk-6.41.9.dev4101.dist-info}/LICENSE_SHORT +0 -0
  26. {airbyte_cdk-6.41.9.dist-info → airbyte_cdk-6.41.9.dev4101.dist-info}/WHEEL +0 -0
  27. {airbyte_cdk-6.41.9.dist-info → airbyte_cdk-6.41.9.dev4101.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
- FixedWindowCallRatePolicy as FixedWindowCallRatePolicyModel,
224
+ FileUploader as FileUploaderModel,
226
225
  )
227
226
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
228
- FlattenFields as FlattenFieldsModel,
227
+ FixedWindowCallRatePolicy as FixedWindowCallRatePolicyModel,
229
228
  )
230
229
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
231
- GroupingPartitionRouter as GroupingPartitionRouterModel,
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
- # set the `job_max_retry` to 1 for the `Connector Builder`` use-case.
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,61 @@
1
+ import json
2
+ from pathlib import Path
3
+ from typing import Optional
4
+
5
+ from airbyte_cdk.models import AirbyteRecordMessageFileReference
6
+ from airbyte_cdk.sources.declarative.extractors.record_extractor import RecordExtractor
7
+ from airbyte_cdk.sources.declarative.partition_routers.substream_partition_router import (
8
+ SafeResponse,
9
+ )
10
+ from airbyte_cdk.sources.declarative.requesters import Requester
11
+ from airbyte_cdk.sources.declarative.types import Record, StreamSlice
12
+ from airbyte_cdk.sources.utils.files_directory import get_files_directory
13
+
14
+
15
+ class FileUploader:
16
+ def __init__(
17
+ self,
18
+ requester: Requester,
19
+ download_target_extractor: RecordExtractor,
20
+ content_extractor: Optional[RecordExtractor] = None,
21
+ ) -> None:
22
+ self._requester = requester
23
+ self._download_target_extractor = download_target_extractor
24
+ self._content_extractor = content_extractor
25
+
26
+ def upload(self, record: Record) -> None:
27
+ # TODO validate record shape - is the transformation applied at this point?
28
+ mocked_response = SafeResponse()
29
+ mocked_response.content = json.dumps(record.data).encode("utf-8")
30
+ download_target = list(self._download_target_extractor.extract_records(mocked_response))[0]
31
+ if not isinstance(download_target, str):
32
+ raise ValueError(
33
+ f"download_target is expected to be a str but was {type(download_target)}: {download_target}"
34
+ )
35
+
36
+ response = self._requester.send_request(
37
+ stream_slice=StreamSlice(
38
+ partition={}, cursor_slice={}, extra_fields={"download_target": download_target}
39
+ ),
40
+ )
41
+
42
+ if self._content_extractor:
43
+ raise NotImplementedError("TODO")
44
+ else:
45
+ files_directory = Path(get_files_directory())
46
+ # TODO:: we could either interpolate record data if some relative_path is provided or
47
+ # use partition_field value in the slice {"partition_field": some_value_id} to create a path
48
+ file_relative_path = Path(record.stream_name) / record.data["file_name"]
49
+
50
+ full_path = files_directory / file_relative_path
51
+ full_path.parent.mkdir(parents=True, exist_ok=True)
52
+
53
+ with open(str(full_path), "wb") as f:
54
+ f.write(response.content)
55
+ file_size_bytes = full_path.stat().st_size
56
+
57
+ record.file_reference = AirbyteRecordMessageFileReference(
58
+ file_url=download_target,
59
+ file_relative_path=str(file_relative_path),
60
+ file_size_bytes=file_size_bytes,
61
+ )
@@ -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
- yield Record(
62
- data=stream_data,
63
- stream_name=self.stream_name(),
64
- associated_slice=self._stream_slice,
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(
@@ -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(stream=stream_name, data=data, emitted_at=now_millis)
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.dev4101
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 (>=0.14,<0.15)
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=MOTiuML2wShBaMSIwikdjyye2uUWBjo4J1QFSbnoiM4,2075
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=dbDBNcNNg2IZU5pZb3HfZeILU7X5_EhYGSbNqq3JD4I,12711
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=aR5UZAkNUYA1I1zjUMAcvdzCFL3lXXOllkFmlhEKgkc,2001
52
- airbyte_cdk/sources/declarative/async_job/job_orchestrator.py,sha256=tcHvB5QdBnx4XQmFvr4Swdq2DLRPst5w5M-OIJHnp5c,22034
53
- airbyte_cdk/sources/declarative/async_job/job_tracker.py,sha256=JowKzdT4E6IeE1cYIf4mOtB6sVEJoCeSsfzaFi9ghQ8,3231
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=uhy0dRkA2jq89JdHZMTH5LdP200-Pm_LTaaWnCoUiaM,27687
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=Nvtm2TXNpzJ3sUEgqvnp7GnGUwM4yWgyh2D1F863cUU,152972
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=Mrx5XY6G8ZT-imsjUggpjzWo-Po_Wvi1WpylEW1ohIQ,22263
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=8ljLhODbBlMxacuKZzlWwmNeGkb6oqfKBVZA70Cg7gE,108248
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=APJkP5dmDU4aIaj7w3quGjrP1cV3MMp2gxbTckhOVRA,149720
124
- airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=TBC9AkGaUqHm2IKHMPN6punBIcY5tWGULowcLoAVkfw,1109
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=UohJB_mIeraEMH5dwTkeNR0tCNQopDbLv2aAdVQrPWU,19896
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=uhx2f3vbVqOqdZpZjOwSZc-sil7aEOKpy3fUbPzllZw,2621
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=RW1Q44ml-VWeMl4lNcV6EfyzrzCZkjj-hd0Omx_n_n4,3405
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=HyGRihJxcb_lEsffKhfF3eylLBDy51_PXSwGUFEJ5bA,1265
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=K3rLMpYhS7nnmvwQ52lqBy7DQdFMJpvvT7sgBg_ckA8,3207
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=CCxCbgvUugxiWpHX8-dkkJHWKDjL5iwiIbOUj8KIJ9c,7079
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=x5Rkfpottg46qgr1-g_O4kN6v0Fd0sWHttdYsftyo7w,5148
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/record_helper.py,sha256=jeB0mucudzna7Zvj-pCBbwFrbLJ36SlAWZTh5O4Fb9Y,2168
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=qmik5GNMcO8EPPPAj8zSqWBv5gapQW_mqfZBg7sr7nw,6071
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.dev4101.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
364
+ airbyte_cdk-6.41.9.dev4101.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
365
+ airbyte_cdk-6.41.9.dev4101.dist-info/METADATA,sha256=4PV0c_zqtlim9f2bTGnUAWfp9r5dCeUSGUzYyU8KSXg,6092
366
+ airbyte_cdk-6.41.9.dev4101.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
367
+ airbyte_cdk-6.41.9.dev4101.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
368
+ airbyte_cdk-6.41.9.dev4101.dist-info/RECORD,,