airbyte-cdk 6.13.1.dev4100__py3-none-any.whl → 6.13.1.dev4103__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 (29) hide show
  1. airbyte_cdk/entrypoint.py +13 -1
  2. airbyte_cdk/sources/declarative/concurrent_declarative_source.py +24 -51
  3. airbyte_cdk/sources/declarative/declarative_component_schema.yaml +72 -1
  4. airbyte_cdk/sources/declarative/extractors/__init__.py +2 -0
  5. airbyte_cdk/sources/declarative/extractors/record_selector.py +5 -7
  6. airbyte_cdk/sources/declarative/extractors/type_transformer.py +55 -0
  7. airbyte_cdk/sources/declarative/interpolation/macros.py +21 -0
  8. airbyte_cdk/sources/declarative/models/declarative_component_schema.py +40 -1
  9. airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +43 -12
  10. airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +52 -35
  11. airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +10 -7
  12. airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +9 -4
  13. airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +11 -6
  14. airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +13 -11
  15. airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +14 -13
  16. airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +6 -7
  17. airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +10 -7
  18. airbyte_cdk/sources/declarative/retrievers/async_retriever.py +1 -4
  19. airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +71 -64
  20. airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +4 -4
  21. airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +61 -0
  22. airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +5 -17
  23. airbyte_cdk/sources/file_based/file_based_source.py +4 -4
  24. airbyte_cdk/sources/file_based/file_based_stream_reader.py +5 -5
  25. {airbyte_cdk-6.13.1.dev4100.dist-info → airbyte_cdk-6.13.1.dev4103.dist-info}/METADATA +1 -1
  26. {airbyte_cdk-6.13.1.dev4100.dist-info → airbyte_cdk-6.13.1.dev4103.dist-info}/RECORD +29 -27
  27. {airbyte_cdk-6.13.1.dev4100.dist-info → airbyte_cdk-6.13.1.dev4103.dist-info}/LICENSE.txt +0 -0
  28. {airbyte_cdk-6.13.1.dev4100.dist-info → airbyte_cdk-6.13.1.dev4103.dist-info}/WHEEL +0 -0
  29. {airbyte_cdk-6.13.1.dev4100.dist-info → airbyte_cdk-6.13.1.dev4103.dist-info}/entry_points.txt +0 -0
@@ -6,18 +6,7 @@ import json
6
6
  from dataclasses import InitVar, dataclass, field
7
7
  from functools import partial
8
8
  from itertools import islice
9
- from typing import (
10
- Any,
11
- Callable,
12
- Iterable,
13
- List,
14
- Mapping,
15
- MutableMapping,
16
- Optional,
17
- Set,
18
- Tuple,
19
- Union,
20
- )
9
+ from typing import Any, Callable, Iterable, List, Mapping, Optional, Set, Tuple, Union
21
10
 
22
11
  import requests
23
12
 
@@ -90,9 +79,6 @@ class SimpleRetriever(Retriever):
90
79
 
91
80
  def __post_init__(self, parameters: Mapping[str, Any]) -> None:
92
81
  self._paginator = self.paginator or NoPagination(parameters=parameters)
93
- self._last_response: Optional[requests.Response] = None
94
- self._last_page_size: int = 0
95
- self._last_record: Optional[Record] = None
96
82
  self._parameters = parameters
97
83
  self._name = (
98
84
  InterpolatedString(self._name, parameters=parameters)
@@ -100,10 +86,6 @@ class SimpleRetriever(Retriever):
100
86
  else self._name
101
87
  )
102
88
 
103
- # This mapping is used during a resumable full refresh syncs to indicate whether a partition has started syncing
104
- # records. Partitions serve as the key and map to True if they already began processing records
105
- self._partition_started: MutableMapping[Any, bool] = dict()
106
-
107
89
  @property # type: ignore
108
90
  def name(self) -> str:
109
91
  """
@@ -251,17 +233,13 @@ class SimpleRetriever(Retriever):
251
233
  raise ValueError("Request body json cannot be a string")
252
234
  return body_json
253
235
 
254
- def _paginator_path(
255
- self,
256
- ) -> Optional[str]:
236
+ def _paginator_path(self, next_page_token: Optional[Mapping[str, Any]] = None) -> Optional[str]:
257
237
  """
258
238
  If the paginator points to a path, follow it, else return nothing so the requester is used.
259
- :param stream_state:
260
- :param stream_slice:
261
239
  :param next_page_token:
262
240
  :return:
263
241
  """
264
- return self._paginator.path()
242
+ return self._paginator.path(next_page_token=next_page_token)
265
243
 
266
244
  def _parse_response(
267
245
  self,
@@ -272,22 +250,15 @@ class SimpleRetriever(Retriever):
272
250
  next_page_token: Optional[Mapping[str, Any]] = None,
273
251
  ) -> Iterable[Record]:
274
252
  if not response:
275
- self._last_response = None
276
253
  yield from []
277
254
  else:
278
- self._last_response = response
279
- record_generator = self.record_selector.select_records(
255
+ yield from self.record_selector.select_records(
280
256
  response=response,
281
257
  stream_state=stream_state,
282
258
  records_schema=records_schema,
283
259
  stream_slice=stream_slice,
284
260
  next_page_token=next_page_token,
285
261
  )
286
- self._last_page_size = 0
287
- for record in record_generator:
288
- self._last_page_size += 1
289
- self._last_record = record
290
- yield record
291
262
 
292
263
  @property # type: ignore
293
264
  def primary_key(self) -> Optional[Union[str, List[str], List[List[str]]]]:
@@ -299,7 +270,13 @@ class SimpleRetriever(Retriever):
299
270
  if not isinstance(value, property):
300
271
  self._primary_key = value
301
272
 
302
- def _next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]:
273
+ def _next_page_token(
274
+ self,
275
+ response: requests.Response,
276
+ last_page_size: int,
277
+ last_record: Optional[Record],
278
+ last_page_token_value: Optional[Any],
279
+ ) -> Optional[Mapping[str, Any]]:
303
280
  """
304
281
  Specifies a pagination strategy.
305
282
 
@@ -307,7 +284,12 @@ class SimpleRetriever(Retriever):
307
284
 
308
285
  :return: The token for the next page from the input response object. Returning None means there are no more pages to read in this response.
309
286
  """
310
- return self._paginator.next_page_token(response, self._last_page_size, self._last_record)
287
+ return self._paginator.next_page_token(
288
+ response=response,
289
+ last_page_size=last_page_size,
290
+ last_record=last_record,
291
+ last_page_token_value=last_page_token_value,
292
+ )
311
293
 
312
294
  def _fetch_next_page(
313
295
  self,
@@ -316,7 +298,7 @@ class SimpleRetriever(Retriever):
316
298
  next_page_token: Optional[Mapping[str, Any]] = None,
317
299
  ) -> Optional[requests.Response]:
318
300
  return self.requester.send_request(
319
- path=self._paginator_path(),
301
+ path=self._paginator_path(next_page_token=next_page_token),
320
302
  stream_state=stream_state,
321
303
  stream_slice=stream_slice,
322
304
  next_page_token=next_page_token,
@@ -345,20 +327,37 @@ class SimpleRetriever(Retriever):
345
327
  # This logic is similar to _read_pages in the HttpStream class. When making changes here, consider making changes there as well.
346
328
  def _read_pages(
347
329
  self,
348
- records_generator_fn: Callable[[Optional[requests.Response]], Iterable[StreamData]],
330
+ records_generator_fn: Callable[[Optional[requests.Response]], Iterable[Record]],
349
331
  stream_state: Mapping[str, Any],
350
332
  stream_slice: StreamSlice,
351
- ) -> Iterable[StreamData]:
333
+ ) -> Iterable[Record]:
352
334
  pagination_complete = False
353
- next_page_token = None
335
+ initial_token = self._paginator.get_initial_token()
336
+ next_page_token: Optional[Mapping[str, Any]] = (
337
+ {"next_page_token": initial_token} if initial_token else None
338
+ )
354
339
  while not pagination_complete:
355
340
  response = self._fetch_next_page(stream_state, stream_slice, next_page_token)
356
- yield from records_generator_fn(response)
341
+
342
+ last_page_size = 0
343
+ last_record: Optional[Record] = None
344
+ for record in records_generator_fn(response):
345
+ last_page_size += 1
346
+ last_record = record
347
+ yield record
357
348
 
358
349
  if not response:
359
350
  pagination_complete = True
360
351
  else:
361
- next_page_token = self._next_page_token(response)
352
+ last_page_token_value = (
353
+ next_page_token.get("next_page_token") if next_page_token else None
354
+ )
355
+ next_page_token = self._next_page_token(
356
+ response=response,
357
+ last_page_size=last_page_size,
358
+ last_record=last_record,
359
+ last_page_token_value=last_page_token_value,
360
+ )
362
361
  if not next_page_token:
363
362
  pagination_complete = True
364
363
 
@@ -367,19 +366,38 @@ class SimpleRetriever(Retriever):
367
366
 
368
367
  def _read_single_page(
369
368
  self,
370
- records_generator_fn: Callable[[Optional[requests.Response]], Iterable[StreamData]],
369
+ records_generator_fn: Callable[[Optional[requests.Response]], Iterable[Record]],
371
370
  stream_state: Mapping[str, Any],
372
371
  stream_slice: StreamSlice,
373
372
  ) -> Iterable[StreamData]:
374
- response = self._fetch_next_page(stream_state, stream_slice)
375
- yield from records_generator_fn(response)
373
+ initial_token = stream_state.get("next_page_token")
374
+ if initial_token is None:
375
+ initial_token = self._paginator.get_initial_token()
376
+ next_page_token: Optional[Mapping[str, Any]] = (
377
+ {"next_page_token": initial_token} if initial_token else None
378
+ )
379
+
380
+ response = self._fetch_next_page(stream_state, stream_slice, next_page_token)
381
+
382
+ last_page_size = 0
383
+ last_record: Optional[Record] = None
384
+ for record in records_generator_fn(response):
385
+ last_page_size += 1
386
+ last_record = record
387
+ yield record
376
388
 
377
389
  if not response:
378
- next_page_token: Mapping[str, Any] = {FULL_REFRESH_SYNC_COMPLETE_KEY: True}
390
+ next_page_token = {FULL_REFRESH_SYNC_COMPLETE_KEY: True}
379
391
  else:
380
- next_page_token = self._next_page_token(response) or {
381
- FULL_REFRESH_SYNC_COMPLETE_KEY: True
382
- }
392
+ last_page_token_value = (
393
+ next_page_token.get("next_page_token") if next_page_token else None
394
+ )
395
+ next_page_token = self._next_page_token(
396
+ response=response,
397
+ last_page_size=last_page_size,
398
+ last_record=last_record,
399
+ last_page_token_value=last_page_token_value,
400
+ ) or {FULL_REFRESH_SYNC_COMPLETE_KEY: True}
383
401
 
384
402
  if self.cursor:
385
403
  self.cursor.close_slice(
@@ -414,25 +432,14 @@ class SimpleRetriever(Retriever):
414
432
  if self.cursor and isinstance(self.cursor, ResumableFullRefreshCursor):
415
433
  stream_state = self.state
416
434
 
417
- # Before syncing the RFR stream, we check if the job's prior attempt was successful and don't need to fetch more records
418
- # The platform deletes stream state for full refresh streams before starting a new job, so we don't need to worry about
419
- # this value existing for the initial attempt
435
+ # Before syncing the RFR stream, we check if the job's prior attempt was successful and don't need to
436
+ # fetch more records. The platform deletes stream state for full refresh streams before starting a
437
+ # new job, so we don't need to worry about this value existing for the initial attempt
420
438
  if stream_state.get(FULL_REFRESH_SYNC_COMPLETE_KEY):
421
439
  return
422
- cursor_value = stream_state.get("next_page_token")
423
-
424
- # The first attempt to read a page for the current partition should reset the paginator to the current
425
- # cursor state which is initially assigned to the incoming state from the platform
426
- partition_key = self._to_partition_key(_slice.partition)
427
- if partition_key not in self._partition_started:
428
- self._partition_started[partition_key] = True
429
- self._paginator.reset(reset_value=cursor_value)
430
440
 
431
441
  yield from self._read_single_page(record_generator, stream_state, _slice)
432
442
  else:
433
- # Fixing paginator types has a long tail of dependencies
434
- self._paginator.reset()
435
-
436
443
  for stream_data in self._read_pages(record_generator, self.state, _slice):
437
444
  current_record = self._extract_record(stream_data, _slice)
438
445
  if self.cursor and current_record:
@@ -518,7 +525,7 @@ class SimpleRetriever(Retriever):
518
525
  stream_state: Mapping[str, Any],
519
526
  records_schema: Mapping[str, Any],
520
527
  stream_slice: Optional[StreamSlice],
521
- ) -> Iterable[StreamData]:
528
+ ) -> Iterable[Record]:
522
529
  yield from self._parse_response(
523
530
  response,
524
531
  stream_slice=stream_slice,
@@ -562,7 +569,7 @@ class SimpleRetrieverTestReadDecorator(SimpleRetriever):
562
569
  next_page_token: Optional[Mapping[str, Any]] = None,
563
570
  ) -> Optional[requests.Response]:
564
571
  return self.requester.send_request(
565
- path=self._paginator_path(),
572
+ path=self._paginator_path(next_page_token=next_page_token),
566
573
  stream_state=stream_state,
567
574
  stream_slice=stream_slice,
568
575
  next_page_token=next_page_token,
@@ -1,6 +1,6 @@
1
1
  # Copyright (c) 2024 Airbyte, Inc., all rights reserved.
2
2
 
3
- from typing import Any, Callable, Iterable, Mapping, Optional
3
+ from typing import Any, Iterable, Mapping, Optional
4
4
 
5
5
  from airbyte_cdk.sources.declarative.retrievers import Retriever
6
6
  from airbyte_cdk.sources.message import MessageRepository
@@ -16,7 +16,7 @@ class DeclarativePartitionFactory:
16
16
  self,
17
17
  stream_name: str,
18
18
  json_schema: Mapping[str, Any],
19
- retriever_factory: Callable[[], Retriever],
19
+ retriever: Retriever,
20
20
  message_repository: MessageRepository,
21
21
  ) -> None:
22
22
  """
@@ -26,14 +26,14 @@ class DeclarativePartitionFactory:
26
26
  """
27
27
  self._stream_name = stream_name
28
28
  self._json_schema = json_schema
29
- self._retriever_factory = retriever_factory
29
+ self._retriever = retriever
30
30
  self._message_repository = message_repository
31
31
 
32
32
  def create(self, stream_slice: StreamSlice) -> Partition:
33
33
  return DeclarativePartition(
34
34
  self._stream_name,
35
35
  self._json_schema,
36
- self._retriever_factory(),
36
+ self._retriever,
37
37
  self._message_repository,
38
38
  stream_slice,
39
39
  )
@@ -0,0 +1,61 @@
1
+ #
2
+ # Copyright (c) 2024 Airbyte, Inc., all rights reserved.
3
+ #
4
+
5
+ from dataclasses import InitVar, dataclass
6
+ from typing import Any, Dict, Mapping, Optional
7
+
8
+ from airbyte_cdk import InterpolatedString
9
+ from airbyte_cdk.sources.declarative.transformations import RecordTransformation
10
+ from airbyte_cdk.sources.types import Config, StreamSlice, StreamState
11
+
12
+
13
+ @dataclass
14
+ class KeysReplaceTransformation(RecordTransformation):
15
+ """
16
+ Transformation that applies keys names replacement.
17
+
18
+ Example usage:
19
+ - type: KeysReplace
20
+ old: " "
21
+ new: "_"
22
+ Result:
23
+ from: {"created time": ..., "customer id": ..., "user id": ...}
24
+ to: {"created_time": ..., "customer_id": ..., "user_id": ...}
25
+ """
26
+
27
+ old: str
28
+ new: str
29
+ parameters: InitVar[Mapping[str, Any]]
30
+
31
+ def __post_init__(self, parameters: Mapping[str, Any]) -> None:
32
+ self._old = InterpolatedString.create(self.old, parameters=parameters)
33
+ self._new = InterpolatedString.create(self.new, parameters=parameters)
34
+
35
+ def transform(
36
+ self,
37
+ record: Dict[str, Any],
38
+ config: Optional[Config] = None,
39
+ stream_state: Optional[StreamState] = None,
40
+ stream_slice: Optional[StreamSlice] = None,
41
+ ) -> None:
42
+ if config is None:
43
+ config = {}
44
+
45
+ kwargs = {"record": record, "stream_state": stream_state, "stream_slice": stream_slice}
46
+ old_key = str(self._old.eval(config, **kwargs))
47
+ new_key = str(self._new.eval(config, **kwargs))
48
+
49
+ def _transform(data: Dict[str, Any]) -> Dict[str, Any]:
50
+ result = {}
51
+ for key, value in data.items():
52
+ updated_key = key.replace(old_key, new_key)
53
+ if isinstance(value, dict):
54
+ result[updated_key] = _transform(value)
55
+ else:
56
+ result[updated_key] = value
57
+ return result
58
+
59
+ transformed_record = _transform(record)
60
+ record.clear()
61
+ record.update(transformed_record)
@@ -14,13 +14,6 @@ from airbyte_cdk.sources.file_based.config.file_based_stream_config import FileB
14
14
  from airbyte_cdk.sources.utils import schema_helpers
15
15
 
16
16
 
17
- class DeliveryOptions(BaseModel):
18
- preserve_subdirectories_directories: bool = Field(
19
- True,
20
- description="Flag indicating we should preserve subdirectories directories",
21
- )
22
-
23
-
24
17
  class DeliverRecords(BaseModel):
25
18
  class Config(OneOfOptionConfig):
26
19
  title = "Replicate Records"
@@ -37,10 +30,11 @@ class DeliverRawFiles(BaseModel):
37
30
  discriminator = "delivery_type"
38
31
 
39
32
  delivery_type: Literal["use_file_transfer"] = Field("use_file_transfer", const=True)
40
- delivery_options: Optional[DeliveryOptions] = Field(
41
- title="Delivery Options",
42
- type="object",
43
- order=2,
33
+
34
+ preserve_subdirectories_directories: bool = Field(
35
+ title="Preserve Subdirectories in File Paths",
36
+ description="If enabled replicate source folder structure",
37
+ default=True,
44
38
  )
45
39
 
46
40
 
@@ -77,12 +71,6 @@ class AbstractFileBasedSpec(BaseModel):
77
71
  airbyte_hidden=True,
78
72
  )
79
73
 
80
- delivery_options: Optional[DeliveryOptions] = Field(
81
- title="Delivery Options",
82
- type="object",
83
- order=8,
84
- )
85
-
86
74
  @classmethod
87
75
  @abstractmethod
88
76
  def documentation_url(cls) -> AnyUrl:
@@ -393,9 +393,9 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
393
393
  def _preserve_subdirectories_directories(parsed_config: AbstractFileBasedSpec) -> bool:
394
394
  # fall back to preserve subdirectories if config is not present or incomplete
395
395
  if (
396
- hasattr(parsed_config, "delivery_options")
397
- and parsed_config.delivery_options is not None
398
- and hasattr(parsed_config.delivery_options, "preserve_subdirectories_directories")
396
+ FileBasedSource._use_file_transfer(parsed_config)
397
+ and hasattr(parsed_config.delivery_method, "preserve_subdirectories_directories")
398
+ and parsed_config.delivery_method.preserve_subdirectories_directories is not None
399
399
  ):
400
- return parsed_config.delivery_options.preserve_subdirectories_directories
400
+ return parsed_config.delivery_method.preserve_subdirectories_directories
401
401
  return True
@@ -138,12 +138,12 @@ class AbstractFileBasedStreamReader(ABC):
138
138
  def preserve_subdirectories_directories(self) -> bool:
139
139
  # fall back to preserve subdirectories if config is not present or incomplete
140
140
  if (
141
- self.config
142
- and hasattr(self.config, "delivery_options")
143
- and self.config.delivery_options is not None
144
- and hasattr(self.config.delivery_options, "preserve_subdirectories_directories")
141
+ self.use_file_transfer()
142
+ and self.config
143
+ and hasattr(self.config.delivery_method, "preserve_subdirectories_directories")
144
+ and self.config.delivery_method.preserve_subdirectories_directories is not None
145
145
  ):
146
- return self.config.delivery_options.preserve_subdirectories_directories
146
+ return self.config.delivery_method.preserve_subdirectories_directories
147
147
  return True
148
148
 
149
149
  @abstractmethod
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: airbyte-cdk
3
- Version: 6.13.1.dev4100
3
+ Version: 6.13.1.dev4103
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -22,7 +22,7 @@ airbyte_cdk/destinations/vector_db_based/indexer.py,sha256=beiSi2Uu67EoTr7yQSaCJ
22
22
  airbyte_cdk/destinations/vector_db_based/test_utils.py,sha256=MkqLiOJ5QyKbV4rNiJhe-BHM7FD-ADHQ4bQGf4c5lRY,1932
23
23
  airbyte_cdk/destinations/vector_db_based/utils.py,sha256=FOyEo8Lc-fY8UyhpCivhZtIqBRyxf3cUt6anmK03fUY,1127
24
24
  airbyte_cdk/destinations/vector_db_based/writer.py,sha256=nZ00xPiohElJmYktEZZIhr0m5EDETCHGhg0Lb2S7A20,5095
25
- airbyte_cdk/entrypoint.py,sha256=LZFX0bgtSs3TBzTWcDN52KHZDS-YrYPbnk5vwERGpEc,17984
25
+ airbyte_cdk/entrypoint.py,sha256=xFLY2PV8mKXUaeBAknczbK6plrs4_B1WdWA6K3iaRJI,18555
26
26
  airbyte_cdk/exception_handler.py,sha256=D_doVl3Dt60ASXlJsfviOCswxGyKF2q0RL6rif3fNks,2013
27
27
  airbyte_cdk/logger.py,sha256=qi4UGuSYQQGaFaTVJlMD9lLppwqLXt1XBhwSXo-Q5IA,3660
28
28
  airbyte_cdk/models/__init__.py,sha256=MOTiuML2wShBaMSIwikdjyye2uUWBjo4J1QFSbnoiM4,2075
@@ -62,11 +62,11 @@ airbyte_cdk/sources/declarative/checks/check_stream.py,sha256=dAA-UhmMj0WLXCkRQr
62
62
  airbyte_cdk/sources/declarative/checks/connection_checker.py,sha256=MBRJo6WJlZQHpIfOGaNOkkHUmgUl_4wDM6VPo41z5Ss,1383
63
63
  airbyte_cdk/sources/declarative/concurrency_level/__init__.py,sha256=5XUqrmlstYlMM0j6crktlKQwALek0uiz2D3WdM46MyA,191
64
64
  airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py,sha256=YIwCTCpOr_QSNW4ltQK0yUGWInI8PKNY216HOOegYLk,2101
65
- airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=PxP4p2686wsf1gjsumGKnh2o2Jjnrqg8QLGijEIrp-A,23412
65
+ airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=tSTCSmyMCu1qoGsne1Ooz3c1da-8EDZk6Suiy2gIq9Q,22475
66
66
  airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=l9LG7Qm6e5r_qgqfVKnx3mXYtg1I9MmMjomVIPfU4XA,177
67
67
  airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=SX9JjdesN1edN2WVUVMzU_ptqp2QB1OnsnjZ4mwcX7w,2579
68
68
  airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
69
- airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=w1WkfTgZN8znoC1X2XQCv6RhHdTxAO9O0pmFzQRL52k,130843
69
+ airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=inomzf30NXQINy4c21hwL0Cya4Ee-YNy20h9P-D42rk,132996
70
70
  airbyte_cdk/sources/declarative/declarative_source.py,sha256=nF7wBqFd3AQmEKAm4CnIo29CJoQL562cJGSCeL8U8bA,1531
71
71
  airbyte_cdk/sources/declarative/declarative_stream.py,sha256=JRyNeOIpsFu4ztVZsN6sncqUEIqIE-bUkD2TPgbMgk0,10375
72
72
  airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=edGj4fGxznBk4xzRQyCA1rGfbpqe7z-RE0K3kQQWbgA,858
@@ -77,13 +77,14 @@ airbyte_cdk/sources/declarative/decoders/noop_decoder.py,sha256=iZh0yKY_JzgBnJWi
77
77
  airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py,sha256=ZVBZhAOl0I0MymXN5CKTC-kIXG4GuUQAEyn0XpUDuSE,1081
78
78
  airbyte_cdk/sources/declarative/decoders/xml_decoder.py,sha256=EU-7t-5vIGRHZ14h-f0GUE4V5-eTM9Flux-A8xgI1Rc,3117
79
79
  airbyte_cdk/sources/declarative/exceptions.py,sha256=kTPUA4I2NV4J6HDz-mKPGMrfuc592akJnOyYx38l_QM,176
80
- airbyte_cdk/sources/declarative/extractors/__init__.py,sha256=J1WeMqtvGq7TwW7Ajc46S5jLcv22ptqmSuUXqUB9YG0,643
80
+ airbyte_cdk/sources/declarative/extractors/__init__.py,sha256=RmV-IkO1YLj0PSOrrqC9AV1gO8-90t8UTDVfJGshN9E,754
81
81
  airbyte_cdk/sources/declarative/extractors/dpath_extractor.py,sha256=wR4Ol4MG2lt5UlqXF5EU_k7qa5cN4_-luu3PJ1PlO3A,3131
82
82
  airbyte_cdk/sources/declarative/extractors/http_selector.py,sha256=2zWZ4ewTqQC8VwkjS0xD_u350Km3SiYP7hpOOgiLg5o,1169
83
83
  airbyte_cdk/sources/declarative/extractors/record_extractor.py,sha256=XJELMjahAsaomlvQgN2zrNO0DJX0G0fr9r682gUz7Pg,691
84
84
  airbyte_cdk/sources/declarative/extractors/record_filter.py,sha256=OJ9xmhNWNwwzxYOeIrDy1GINb1zH9MBy6suC5tm2LSk,3545
85
- airbyte_cdk/sources/declarative/extractors/record_selector.py,sha256=AkXPOWyp741cpYLBl9AbmVmOQmQ2BzZ2XjgsMEB6gGc,6583
85
+ airbyte_cdk/sources/declarative/extractors/record_selector.py,sha256=tjNwcURmlyD-TGCScXvW95ThNKyPGcx2SiWbG1-H-sc,6552
86
86
  airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py,sha256=LhqGDfX06_dDYLKsIVnwQ_nAWCln-v8PV7Wgt_QVeTI,6533
87
+ airbyte_cdk/sources/declarative/extractors/type_transformer.py,sha256=d6Y2Rfg8pMVEEnHllfVksWZdNVOU55yk34O03dP9muY,1626
87
88
  airbyte_cdk/sources/declarative/incremental/__init__.py,sha256=huRz3KQJSUFmJCg5GPE9TckEBsB5TMsCa_THhJAhPVI,1037
88
89
  airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py,sha256=_UzUnSIUsDbRgbFTXgSyZEFb4ws-KdhdQPWO8mFbV7U,22028
89
90
  airbyte_cdk/sources/declarative/incremental/declarative_cursor.py,sha256=5Bhw9VRPyIuCaD0wmmq_L3DZsa-rJgtKSEUzSd8YYD0,536
@@ -99,18 +100,18 @@ airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py,sha
99
100
  airbyte_cdk/sources/declarative/interpolation/interpolated_string.py,sha256=LYEZnZ_hB7rvBSZxG9s0RSrzsOkDWbBY0_P6qu5lEfc,3212
100
101
  airbyte_cdk/sources/declarative/interpolation/interpolation.py,sha256=-V5UddGm69UKEB6o_O1EIES9kfY8FV_X4Ji8w1yOuSA,981
101
102
  airbyte_cdk/sources/declarative/interpolation/jinja.py,sha256=BtsY_jtT4MihFqeQgc05HXj3Ndt-e2ESQgGwbg3Sdxc,6430
102
- airbyte_cdk/sources/declarative/interpolation/macros.py,sha256=jf24RK-1fBhTYDpcGEakZtGNNJfG5NS8CCF5bEgNmRo,3977
103
+ airbyte_cdk/sources/declarative/interpolation/macros.py,sha256=Y5AWYxbJTUtJ_Jm7DV9qrZDiymFR9LST7fBt4piT2-U,4585
103
104
  airbyte_cdk/sources/declarative/manifest_declarative_source.py,sha256=wX_dQ401siuwh3zHgSHRnSN1vIojI4Nufg3BwzZAzk0,16239
104
105
  airbyte_cdk/sources/declarative/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
106
  airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py,sha256=iemy3fKLczcU0-Aor7tx5jcT6DRedKMqyK7kCOp01hg,3924
106
107
  airbyte_cdk/sources/declarative/migrations/state_migration.py,sha256=KWPjealMLKSMtajXgkdGgKg7EmTLR-CqqD7UIh0-eDU,794
107
108
  airbyte_cdk/sources/declarative/models/__init__.py,sha256=nUFxNCiKeYRVXuZEKA7GD-lTHxsiKcQ8FitZjKhPIvE,100
108
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=1EdKXjEKoXVs7BuF4H9mBMSbVsDIy5uAv1Txboict7Q,91733
109
+ airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=-V0knL97aS3sxEEmQclzFo_v8j3syD4vpoQKD0DoaEY,93092
109
110
  airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
110
111
  airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=Rir9_z3Kcd5Es0-LChrzk-0qubAsiK_RSEnLmK2OXm8,553
111
112
  airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=CXwTfD3wSQq3okcqwigpprbHhSURUokh4GK2OmOyKC8,9132
112
113
  airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=IWUOdF03o-aQn0Occo1BJCxU0Pz-QILk5L67nzw2thw,6803
113
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=NYTa2KqBHq-JU2oKp0J79WADw8JgR2lgQS_unTB0bl4,107945
114
+ airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=hrFO0Xcx7Z_pzT-0farwQwZ-Wxp0AZX1SD-qPn7GVto,109244
114
115
  airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=HJ-Syp3p7RpyR_OK0X_a2kSyISfu3W-PKrRI16iY0a8,957
115
116
  airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=n82J15S8bjeMZ5uROu--P3hnbQoxkY5v7RPHYx7g7ro,2929
116
117
  airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
@@ -135,15 +136,15 @@ airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.p
135
136
  airbyte_cdk/sources/declarative/requesters/http_job_repository.py,sha256=o0520AmHMb7SAoeokVNwoOzuZzIAT6ryx9uFYGSOrs0,8664
136
137
  airbyte_cdk/sources/declarative/requesters/http_requester.py,sha256=RqYPkgJFAWfcZBTc-JBcGHPm4JL1ZQOhs9GKU4MP2eE,14723
137
138
  airbyte_cdk/sources/declarative/requesters/paginators/__init__.py,sha256=uArbKs9JKNCt7t9tZoeWwjDpyI1HoPp29FNW0JzvaEM,644
138
- airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py,sha256=LxTq1hieznRWlYlfODdZbMDUml-g6NyBkdwVI2mCNMM,10910
139
- airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py,sha256=-P-QOlefFhEe99bsB2y3yTvA8c8kCCbfBaTS6qPvF6I,1927
140
- airbyte_cdk/sources/declarative/requesters/paginators/paginator.py,sha256=ZgyvH7DOrASQ5K__J5SRAXH3REUW2n3yPHnFW9xq4NU,1972
139
+ airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py,sha256=FnSl3qPvv5wD6ieAI2Ic5c4dqBk-3fRe4tCaWzq3YwM,11840
140
+ airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py,sha256=j6j9QRPaTbKQ2N661RFVKthhkWiodEp6ut0tKeEd0Ng,2019
141
+ airbyte_cdk/sources/declarative/requesters/paginators/paginator.py,sha256=OlN-y0PEOMzlUNUh3pzonoTpIJpGwkP4ibFengvpLVU,2230
141
142
  airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py,sha256=2gly8fuZpDNwtu1Qg6oE2jBLGqQRdzSLJdnpk_iDV6I,767
142
- airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py,sha256=vFzpNv8BdgXrYO5qhi2_Un4x4y-EAQWxinZtEPWz5KI,3654
143
- airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py,sha256=pMPi6iQrhtrI9VRPj218QNM_OqD8lX8P3Tr9yloKoE8,3367
144
- airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py,sha256=kQGpfr-dOwarxTIf2S4sHVulBzm8zSwQXBM7rOhkafA,2491
145
- airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py,sha256=ABpO4t0UUziBZnyml8UT_NhlF6loekhQji57TpKnaiY,1290
146
- airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py,sha256=-8NwokW-aKwv8DdeHh1ssODTobBYSOmIhH2-IjSjlNA,2213
143
+ airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py,sha256=yLzzK5YIRTkXd2Z-BS__AZXuTd6HXjJIxq05K-lQoxI,3898
144
+ airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py,sha256=WvGt_DTFcAgTR-NHrlrR7B71yG-L6jmfW-Gwm9iYzjY,3624
145
+ airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py,sha256=Z2i6a-oKMmOTxHxsTVSnyaShkJ3u8xZw1xIJdx2yxss,2731
146
+ airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py,sha256=ZBshGQNr5Bb_V8dqnWRISqdXFcjm1CKIXnlfbRhNl8g,1308
147
+ airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py,sha256=LoKXdUbSgHEtSwtA8DFrnX6SpQbRVVwreY8NguTKTcI,2229
147
148
  airbyte_cdk/sources/declarative/requesters/request_option.py,sha256=_qmv8CLQQ3fERt6BuMZeRu6tZXscPoeARx1VJdWMQ_M,1055
148
149
  airbyte_cdk/sources/declarative/requesters/request_options/__init__.py,sha256=WCwpKqM4wKqy-DHJaCHbKAlFqRVOqMi9K5qonxIfi_Y,809
149
150
  airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py,sha256=FLkg0uzC9bc-zFnALWr0FLYpKsz8iK2xQsd4UOyeW08,3706
@@ -159,9 +160,9 @@ airbyte_cdk/sources/declarative/resolvers/components_resolver.py,sha256=KPjKc0yb
159
160
  airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py,sha256=dz4iJV9liD_LzY_Mn4XmAStoUll60R3MIGWV4aN3pgg,5223
160
161
  airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py,sha256=AiojNs8wItJFrENZBFUaDvau3sgwudO6Wkra36upSPo,4639
161
162
  airbyte_cdk/sources/declarative/retrievers/__init__.py,sha256=ix9m1dkR69DcXCXUKC5RK_ZZM7ojTLBQ4IkWQTfmfCk,456
162
- airbyte_cdk/sources/declarative/retrievers/async_retriever.py,sha256=_-d3MvHh-4r46i4wjQikD4ZygKA7TvuDu2i04qqULEg,3731
163
+ airbyte_cdk/sources/declarative/retrievers/async_retriever.py,sha256=kX9ltelK2xLIBWDJBK2ucrvVe5tc5xmhdbVbgsjvlxY,3696
163
164
  airbyte_cdk/sources/declarative/retrievers/retriever.py,sha256=XPLs593Xv8c5cKMc37XzUAYmzlXd1a7eSsspM-CMuWA,1696
164
- airbyte_cdk/sources/declarative/retrievers/simple_retriever.py,sha256=N4swGw5mfuTXJ2R7AKX18CHzizsr69pXwt5uSHLPi48,24172
165
+ airbyte_cdk/sources/declarative/retrievers/simple_retriever.py,sha256=jxQ_9xcVD07r9PKhofitAqMkdX1k8ZNyy50qz5NwkFs,24540
165
166
  airbyte_cdk/sources/declarative/schema/__init__.py,sha256=HztgVVaZdil5UfgUZcv_Hyy84r89_EKRwyO2hoewNVg,749
166
167
  airbyte_cdk/sources/declarative/schema/default_schema_loader.py,sha256=KTACrIE23a83wsm3Rd9Eb4K6-20lrGqYxTHNp9yxsso,1820
167
168
  airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py,sha256=H6A3NQ6kPPM-cUNPmdvDPc9xNzR1rQNrK95GbgCW334,8822
@@ -171,11 +172,12 @@ airbyte_cdk/sources/declarative/schema/schema_loader.py,sha256=kjt8v0N5wWKA5zyLn
171
172
  airbyte_cdk/sources/declarative/spec/__init__.py,sha256=H0UwoRhgucbKBIzg85AXrifybVmfpwWpPdy22vZKVuo,141
172
173
  airbyte_cdk/sources/declarative/spec/spec.py,sha256=ODSNUgkDOhnLQnwLjgSaME6R3kNeywjROvbNrWEnsgU,1876
173
174
  airbyte_cdk/sources/declarative/stream_slicers/__init__.py,sha256=sI9vhc95RwJYOnA0VKjcbtKgFcmAbWjhdWBXFbAijOs,176
174
- airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py,sha256=E7feZ5xkHwFHODq8FSjwdGe291RZoCMCRHT1rWnQ1lI,3463
175
+ airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py,sha256=RW1Q44ml-VWeMl4lNcV6EfyzrzCZkjj-hd0Omx_n_n4,3405
175
176
  airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py,sha256=SOkIPBi2Wu7yxIvA15yFzUAB95a3IzA8LPq5DEqHQQc,725
176
177
  airbyte_cdk/sources/declarative/transformations/__init__.py,sha256=CPJ8TlMpiUmvG3624VYu_NfTzxwKcfBjM2Q2wJ7fkSA,919
177
178
  airbyte_cdk/sources/declarative/transformations/add_fields.py,sha256=r4YdAuAk2bQtNWJMztIIy2CC-NglD9NeK1s1TeO9wkw,5027
178
179
  airbyte_cdk/sources/declarative/transformations/flatten_fields.py,sha256=ti9fLVk-EpMeDY7ImduvQq1YGounLYmH9dHzp7MIRxk,1703
180
+ airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py,sha256=vbIn6ump-Ut6g20yMub7PFoPBhOKVtrHSAUdcOUdLfw,1999
179
181
  airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py,sha256=RTs5KX4V3hM7A6QN1WlGF21YccTIyNH6qQI9IMb__hw,670
180
182
  airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py,sha256=43zwe6_F5ba5C4eY0RgXxPz7ndPKZfXGChHepFn-2lk,2263
181
183
  airbyte_cdk/sources/declarative/transformations/remove_fields.py,sha256=EwUP0SZ2p4GRJ6Q8CUzlz9dcUeEidEFDlI2IBye2tlc,2745
@@ -193,7 +195,7 @@ airbyte_cdk/sources/file_based/availability_strategy/__init__.py,sha256=ddKQfUmk
193
195
  airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py,sha256=01Nd4b7ERAbp-OZo_8rrAzFXWPTMwr02SnWiN17nx8Q,2363
194
196
  airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py,sha256=j9T5TimfWFUz7nqsaj-83G3xWmDpsmeSbDnaUNmz0UM,5849
195
197
  airbyte_cdk/sources/file_based/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
- airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py,sha256=1V7NpVdcVA7QNF_mI0uH5X3WqBvrS6U-W1iHoTiEDtY,6926
198
+ airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py,sha256=gigLToFfWcRhE2ppPFyojW2S1boMc5dtrO4w7BZjaks,6662
197
199
  airbyte_cdk/sources/file_based/config/avro_format.py,sha256=NxTF96ewzn6HuhgodsY7Rpb-ybr1ZEWW5d4Vid64g5A,716
198
200
  airbyte_cdk/sources/file_based/config/csv_format.py,sha256=NWekkyT8dTwiVK0mwa_krQD4FJPHSDfILo8kPAg3-Vs,8006
199
201
  airbyte_cdk/sources/file_based/config/excel_format.py,sha256=9qAmTsT6SoVzNfNv0oBVkVCmiyqQuVAbfRKajjoa7Js,378
@@ -205,8 +207,8 @@ airbyte_cdk/sources/file_based/discovery_policy/__init__.py,sha256=gl3ey6mZbyfra
205
207
  airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py,sha256=dCfXX529Rd5rtopg4VeEgTPJjFtqjtjzPq6LCw18Wt0,605
206
208
  airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py,sha256=-xujTidtrq6HC00WKbjQh1CZdT5LMuzkp5BLjqDmfTY,1007
207
209
  airbyte_cdk/sources/file_based/exceptions.py,sha256=KfOgQgssBKgsv3h5po2IG1DhZcH664Zf_fx96mBlPSg,6761
208
- airbyte_cdk/sources/file_based/file_based_source.py,sha256=Z-1EQS8_gczgBgBHJV75LCwHOtXgonEqxNpXmNmqVTM,17263
209
- airbyte_cdk/sources/file_based/file_based_stream_reader.py,sha256=Uwg_e9wHdJ2UaWxHcW2Ph6S4sHDhB0_MoyCEW7neVdA,6888
210
+ airbyte_cdk/sources/file_based/file_based_source.py,sha256=0rKW1XQjj6Up-e_y5ls5b9k7dWAASQHkuWy7RaDxs9Y,17303
211
+ airbyte_cdk/sources/file_based/file_based_stream_reader.py,sha256=oyncQrFQT72QoG6-0EtGaN3Woob8XG_mOBfHRMxXDZ4,6905
210
212
  airbyte_cdk/sources/file_based/file_types/__init__.py,sha256=blCLn0-2LC-ZdgcNyDEhqM2RiUvEjEBh-G4-t32ZtuM,1268
211
213
  airbyte_cdk/sources/file_based/file_types/avro_parser.py,sha256=XNx-JC-sgzH9u3nOJ2M59FxBXvtig8LN6BIkeDOavZA,10858
212
214
  airbyte_cdk/sources/file_based/file_types/csv_parser.py,sha256=QlCXB-ry3np67Q_VerQEPoWDOTcPTB6Go4ydZxY9ae4,20445
@@ -340,8 +342,8 @@ airbyte_cdk/utils/slice_hasher.py,sha256=-pHexlNYoWYPnXNH-M7HEbjmeJe9Zk7SJijdQ7d
340
342
  airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
341
343
  airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
342
344
  airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
343
- airbyte_cdk-6.13.1.dev4100.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
344
- airbyte_cdk-6.13.1.dev4100.dist-info/METADATA,sha256=P_PnklFtJqLdDdAxsiOLX7Ydkee8d7jz9m_v2XNCRAI,5996
345
- airbyte_cdk-6.13.1.dev4100.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
346
- airbyte_cdk-6.13.1.dev4100.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
347
- airbyte_cdk-6.13.1.dev4100.dist-info/RECORD,,
345
+ airbyte_cdk-6.13.1.dev4103.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
346
+ airbyte_cdk-6.13.1.dev4103.dist-info/METADATA,sha256=7w66i7NG1CTwTQ04m4ojAQhBZCjtIWCrnFUfe2SnCoY,5996
347
+ airbyte_cdk-6.13.1.dev4103.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
348
+ airbyte_cdk-6.13.1.dev4103.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
349
+ airbyte_cdk-6.13.1.dev4103.dist-info/RECORD,,