airbyte-cdk 6.28.0.dev0__py3-none-any.whl → 6.29.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,8 +21,12 @@ class CheckDynamicStream(ConnectionChecker):
21
21
  stream_count (int): numbers of streams to check
22
22
  """
23
23
 
24
+ # TODO: Add field stream_names to check_connection for static streams
25
+ # https://github.com/airbytehq/airbyte-python-cdk/pull/293#discussion_r1934933483
26
+
24
27
  stream_count: int
25
28
  parameters: InitVar[Mapping[str, Any]]
29
+ use_check_availability: bool = True
26
30
 
27
31
  def __post_init__(self, parameters: Mapping[str, Any]) -> None:
28
32
  self._parameters = parameters
@@ -31,21 +35,27 @@ class CheckDynamicStream(ConnectionChecker):
31
35
  self, source: AbstractSource, logger: logging.Logger, config: Mapping[str, Any]
32
36
  ) -> Tuple[bool, Any]:
33
37
  streams = source.streams(config=config)
38
+
34
39
  if len(streams) == 0:
35
40
  return False, f"No streams to connect to from source {source}"
41
+ if not self.use_check_availability:
42
+ return True, None
43
+
44
+ availability_strategy = HttpAvailabilityStrategy()
36
45
 
37
- for stream_index in range(min(self.stream_count, len(streams))):
38
- stream = streams[stream_index]
39
- availability_strategy = HttpAvailabilityStrategy()
40
- try:
46
+ try:
47
+ for stream in streams[: min(self.stream_count, len(streams))]:
41
48
  stream_is_available, reason = availability_strategy.check_availability(
42
49
  stream, logger
43
50
  )
44
51
  if not stream_is_available:
52
+ logger.warning(f"Stream {stream.name} is not available: {reason}")
45
53
  return False, reason
46
- except Exception as error:
47
- logger.error(
48
- f"Encountered an error trying to connect to stream {stream.name}. Error: \n {traceback.format_exc()}"
49
- )
50
- return False, f"Unable to connect to stream {stream.name} - {error}"
54
+ except Exception as error:
55
+ error_message = (
56
+ f"Encountered an error trying to connect to stream {stream.name}. Error: {error}"
57
+ )
58
+ logger.error(error_message, exc_info=True)
59
+ return False, error_message
60
+
51
61
  return True, None
@@ -320,6 +320,11 @@ definitions:
320
320
  title: Stream Count
321
321
  description: Numbers of the streams to try reading from when running a check operation.
322
322
  type: integer
323
+ use_check_availability:
324
+ title: Use Check Availability
325
+ description: Enables stream check availability. This field is automatically set by the CDK.
326
+ type: boolean
327
+ default: true
323
328
  CompositeErrorHandler:
324
329
  title: Composite Error Handler
325
330
  description: Error handler that sequentially iterates over a list of error handlers.
@@ -22,9 +22,6 @@ from airbyte_cdk.sources.streams.checkpoint.per_partition_key_serializer import
22
22
  )
23
23
  from airbyte_cdk.sources.streams.concurrent.cursor import ConcurrentCursor, Cursor, CursorField
24
24
  from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition
25
- from airbyte_cdk.sources.streams.concurrent.state_converters.abstract_stream_state_converter import (
26
- AbstractStreamStateConverter,
27
- )
28
25
  from airbyte_cdk.sources.types import Record, StreamSlice, StreamState
29
26
 
30
27
  logger = logging.getLogger("airbyte")
@@ -75,7 +72,6 @@ class ConcurrentPerPartitionCursor(Cursor):
75
72
  stream_state: Any,
76
73
  message_repository: MessageRepository,
77
74
  connector_state_manager: ConnectorStateManager,
78
- connector_state_converter: AbstractStreamStateConverter,
79
75
  cursor_field: CursorField,
80
76
  ) -> None:
81
77
  self._global_cursor: Optional[StreamState] = {}
@@ -83,7 +79,6 @@ class ConcurrentPerPartitionCursor(Cursor):
83
79
  self._stream_namespace = stream_namespace
84
80
  self._message_repository = message_repository
85
81
  self._connector_state_manager = connector_state_manager
86
- self._connector_state_converter = connector_state_converter
87
82
  self._cursor_field = cursor_field
88
83
 
89
84
  self._cursor_factory = cursor_factory
@@ -306,7 +301,8 @@ class ConcurrentPerPartitionCursor(Cursor):
306
301
  ):
307
302
  # We assume that `stream_state` is in a global format that can be applied to all partitions.
308
303
  # Example: {"global_state_format_key": "global_state_format_value"}
309
- self._set_global_state(stream_state)
304
+ self._global_cursor = deepcopy(stream_state)
305
+ self._new_global_cursor = deepcopy(stream_state)
310
306
 
311
307
  else:
312
308
  self._use_global_cursor = stream_state.get("use_global_cursor", False)
@@ -323,7 +319,8 @@ class ConcurrentPerPartitionCursor(Cursor):
323
319
 
324
320
  # set default state for missing partitions if it is per partition with fallback to global
325
321
  if self._GLOBAL_STATE_KEY in stream_state:
326
- self._set_global_state(stream_state[self._GLOBAL_STATE_KEY])
322
+ self._global_cursor = deepcopy(stream_state[self._GLOBAL_STATE_KEY])
323
+ self._new_global_cursor = deepcopy(stream_state[self._GLOBAL_STATE_KEY])
327
324
 
328
325
  # Set initial parent state
329
326
  if stream_state.get("parent_state"):
@@ -332,27 +329,6 @@ class ConcurrentPerPartitionCursor(Cursor):
332
329
  # Set parent state for partition routers based on parent streams
333
330
  self._partition_router.set_initial_state(stream_state)
334
331
 
335
- def _set_global_state(self, stream_state: Mapping[str, Any]) -> None:
336
- """
337
- Initializes the global cursor state from the provided stream state.
338
-
339
- If the cursor field key is present in the stream state, its value is parsed,
340
- formatted, and stored as the global cursor. This ensures consistency in state
341
- representation across partitions.
342
- """
343
- if self.cursor_field.cursor_field_key in stream_state:
344
- global_state_value = stream_state[self.cursor_field.cursor_field_key]
345
- final_format_global_state_value = self._connector_state_converter.output_format(
346
- self._connector_state_converter.parse_value(global_state_value)
347
- )
348
-
349
- fixed_global_state = {
350
- self.cursor_field.cursor_field_key: final_format_global_state_value
351
- }
352
-
353
- self._global_cursor = deepcopy(fixed_global_state)
354
- self._new_global_cursor = deepcopy(fixed_global_state)
355
-
356
332
  def observe(self, record: Record) -> None:
357
333
  if not self._use_global_cursor and self.limit_reached():
358
334
  self._use_global_cursor = True
@@ -396,10 +372,5 @@ class ConcurrentPerPartitionCursor(Cursor):
396
372
  cursor = self._cursor_per_partition[partition_key]
397
373
  return cursor
398
374
 
399
- def _extract_cursor_value_from_state(self, state: StreamState) -> Any:
400
- return self._connector_state_converter.parse_value(
401
- state[self.cursor_field.cursor_field_key]
402
- )
403
-
404
375
  def limit_reached(self) -> bool:
405
376
  return self._over_limit > self.DEFAULT_MAX_PARTITIONS_NUMBER
@@ -59,6 +59,11 @@ class CheckDynamicStream(BaseModel):
59
59
  description="Numbers of the streams to try reading from when running a check operation.",
60
60
  title="Stream Count",
61
61
  )
62
+ use_check_availability: Optional[bool] = Field(
63
+ True,
64
+ description="Enables stream check availability. This field is automatically set by the CDK.",
65
+ title="Use Check Availability",
66
+ )
62
67
 
63
68
 
64
69
  class ConcurrencyLevel(BaseModel):
@@ -903,7 +903,15 @@ class ModelToComponentFactory:
903
903
  def create_check_dynamic_stream(
904
904
  model: CheckDynamicStreamModel, config: Config, **kwargs: Any
905
905
  ) -> CheckDynamicStream:
906
- return CheckDynamicStream(stream_count=model.stream_count, parameters={})
906
+ assert model.use_check_availability is not None # for mypy
907
+
908
+ use_check_availability = model.use_check_availability
909
+
910
+ return CheckDynamicStream(
911
+ stream_count=model.stream_count,
912
+ use_check_availability=use_check_availability,
913
+ parameters={},
914
+ )
907
915
 
908
916
  def create_composite_error_handler(
909
917
  self, model: CompositeErrorHandlerModel, config: Config, **kwargs: Any
@@ -1202,22 +1210,6 @@ class ModelToComponentFactory:
1202
1210
  )
1203
1211
  cursor_field = CursorField(interpolated_cursor_field.eval(config=config))
1204
1212
 
1205
- datetime_format = datetime_based_cursor_model.datetime_format
1206
-
1207
- cursor_granularity = (
1208
- parse_duration(datetime_based_cursor_model.cursor_granularity)
1209
- if datetime_based_cursor_model.cursor_granularity
1210
- else None
1211
- )
1212
-
1213
- connector_state_converter: DateTimeStreamStateConverter
1214
- connector_state_converter = CustomFormatConcurrentStreamStateConverter(
1215
- datetime_format=datetime_format,
1216
- input_datetime_formats=datetime_based_cursor_model.cursor_datetime_formats,
1217
- is_sequential_state=True, # ConcurrentPerPartitionCursor only works with sequential state
1218
- cursor_granularity=cursor_granularity,
1219
- )
1220
-
1221
1213
  # Create the cursor factory
1222
1214
  cursor_factory = ConcurrentCursorFactory(
1223
1215
  partial(
@@ -1241,7 +1233,6 @@ class ModelToComponentFactory:
1241
1233
  stream_state=stream_state,
1242
1234
  message_repository=self._message_repository, # type: ignore
1243
1235
  connector_state_manager=state_manager,
1244
- connector_state_converter=connector_state_converter,
1245
1236
  cursor_field=cursor_field,
1246
1237
  )
1247
1238
 
@@ -151,16 +151,16 @@ class HttpResponseFilter:
151
151
  :param response: The HTTP response which can be used during interpolation
152
152
  :return: The evaluated error message string to be emitted
153
153
  """
154
- return self.error_message.eval( # type: ignore [no-any-return, union-attr]
154
+ return self.error_message.eval( # type: ignore[no-any-return, union-attr]
155
155
  self.config, response=self._safe_response_json(response), headers=response.headers
156
156
  )
157
157
 
158
158
  def _response_matches_predicate(self, response: requests.Response) -> bool:
159
159
  return (
160
160
  bool(
161
- self.predicate.condition # type: ignore [union-attr]
162
- and self.predicate.eval( # type: ignore [union-attr]
163
- None, # type: ignore [arg-type]
161
+ self.predicate.condition # type:ignore[union-attr]
162
+ and self.predicate.eval( # type:ignore[union-attr]
163
+ None, # type: ignore[arg-type]
164
164
  response=self._safe_response_json(response),
165
165
  headers=response.headers,
166
166
  )
@@ -225,6 +225,7 @@ class DynamicSchemaLoader(SchemaLoader):
225
225
  return self._get_airbyte_type(complex_type.field_type)
226
226
 
227
227
  field_type = self._get_airbyte_type(complex_type.field_type)
228
+
228
229
  field_type["items"] = (
229
230
  self._get_airbyte_type(complex_type.items)
230
231
  if isinstance(complex_type.items, str)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 6.28.0.dev0
3
+ Version: 6.29.0
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -58,7 +58,7 @@ airbyte_cdk/sources/declarative/auth/selective_authenticator.py,sha256=qGwC6YsCl
58
58
  airbyte_cdk/sources/declarative/auth/token.py,sha256=r4u3WXyVa7WmiSZ9-eZXlrUI-pS0D4YWJnwjLzwV-Fk,11210
59
59
  airbyte_cdk/sources/declarative/auth/token_provider.py,sha256=9CuSsmOoHkvlc4k-oZ3Jx5luAgfTMm1I_5HOZxw7wMU,3075
60
60
  airbyte_cdk/sources/declarative/checks/__init__.py,sha256=nsVV5Bo0E_tBNd8A4Xdsdb-75PpcLo5RQu2RQ_Gv-ME,806
61
- airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py,sha256=aXKL1YSAB-0T_eZiavb7e5rprf-DdXG77Fy81FtlcWk,1843
61
+ airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py,sha256=HUktywjI8pqOeED08UGqponUSwxs2TOAECTowlWlrRE,2138
62
62
  airbyte_cdk/sources/declarative/checks/check_stream.py,sha256=dAA-UhmMj0WLXCkRQrilWCfJmncBzXCZ18ptRNip3XA,2139
63
63
  airbyte_cdk/sources/declarative/checks/connection_checker.py,sha256=MBRJo6WJlZQHpIfOGaNOkkHUmgUl_4wDM6VPo41z5Ss,1383
64
64
  airbyte_cdk/sources/declarative/concurrency_level/__init__.py,sha256=5XUqrmlstYlMM0j6crktlKQwALek0uiz2D3WdM46MyA,191
@@ -67,7 +67,7 @@ airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=uhSXYhXD
67
67
  airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=l9LG7Qm6e5r_qgqfVKnx3mXYtg1I9MmMjomVIPfU4XA,177
68
68
  airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=SX9JjdesN1edN2WVUVMzU_ptqp2QB1OnsnjZ4mwcX7w,2579
69
69
  airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
70
- airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=yHOfjvrxDVnQmMi-mrdM27Y0Uqk4fYMmp9Rwdbq6-7s,139662
70
+ airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=43cBrshQer-KiNwjlA6peDyfrST88VQIZmfgdAZTiLc,139874
71
71
  airbyte_cdk/sources/declarative/declarative_source.py,sha256=nF7wBqFd3AQmEKAm4CnIo29CJoQL562cJGSCeL8U8bA,1531
72
72
  airbyte_cdk/sources/declarative/declarative_stream.py,sha256=JRyNeOIpsFu4ztVZsN6sncqUEIqIE-bUkD2TPgbMgk0,10375
73
73
  airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=KSpQetKGqPCv-38QgcVJ5kzM5nzbFldTSsYDCS3Xf0Y,1035
@@ -88,7 +88,7 @@ airbyte_cdk/sources/declarative/extractors/record_selector.py,sha256=tjNwcURmlyD
88
88
  airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py,sha256=LhqGDfX06_dDYLKsIVnwQ_nAWCln-v8PV7Wgt_QVeTI,6533
89
89
  airbyte_cdk/sources/declarative/extractors/type_transformer.py,sha256=d6Y2Rfg8pMVEEnHllfVksWZdNVOU55yk34O03dP9muY,1626
90
90
  airbyte_cdk/sources/declarative/incremental/__init__.py,sha256=U1oZKtBaEC6IACmvziY9Wzg7Z8EgF4ZuR7NwvjlB_Sk,1255
91
- airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py,sha256=maTJX48fXXbm3qZoX6DzRVujUTeF48eeyC1ii96BXj0,17951
91
+ airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py,sha256=ndUZaPW0MsN4_3cGpB-0Uu0otSPnmPmHgbixoJeDmjA,16660
92
92
  airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py,sha256=_UzUnSIUsDbRgbFTXgSyZEFb4ws-KdhdQPWO8mFbV7U,22028
93
93
  airbyte_cdk/sources/declarative/incremental/declarative_cursor.py,sha256=5Bhw9VRPyIuCaD0wmmq_L3DZsa-rJgtKSEUzSd8YYD0,536
94
94
  airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py,sha256=9HO-QbL9akvjq2NP7l498RwLA4iQZlBMQW1tZbt34I8,15943
@@ -109,13 +109,13 @@ airbyte_cdk/sources/declarative/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW
109
109
  airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py,sha256=iemy3fKLczcU0-Aor7tx5jcT6DRedKMqyK7kCOp01hg,3924
110
110
  airbyte_cdk/sources/declarative/migrations/state_migration.py,sha256=KWPjealMLKSMtajXgkdGgKg7EmTLR-CqqD7UIh0-eDU,794
111
111
  airbyte_cdk/sources/declarative/models/__init__.py,sha256=nUFxNCiKeYRVXuZEKA7GD-lTHxsiKcQ8FitZjKhPIvE,100
112
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=68JPw6bLHnTh7zGN3CC8B6b9NI4hxvSPOyLyY8TVRqk,98059
112
+ airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=UJ9sYWqoohaT0mr0ALxOP74t0TTJRhfZMHBoqViaoVU,98273
113
113
  airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
114
114
  airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py,sha256=958MMX6_ZOJUlDDdNr9Krosgi2bCKGx2Z765M2Woz18,5505
115
115
  airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=Rir9_z3Kcd5Es0-LChrzk-0qubAsiK_RSEnLmK2OXm8,553
116
116
  airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=CXwTfD3wSQq3okcqwigpprbHhSURUokh4GK2OmOyKC8,9132
117
117
  airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=IWUOdF03o-aQn0Occo1BJCxU0Pz-QILk5L67nzw2thw,6803
118
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=x3QC5ECRX3gn9DeWwKR8ropQXPGbDN6inQueqpDkK-k,126044
118
+ airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=y4Yd9ik37vUkN3Jw54BkcCYv4UAT0QtBLfwtqPxDPYc,125491
119
119
  airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=HJ-Syp3p7RpyR_OK0X_a2kSyISfu3W-PKrRI16iY0a8,957
120
120
  airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=n82J15S8bjeMZ5uROu--P3hnbQoxkY5v7RPHYx7g7ro,2929
121
121
  airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
@@ -137,7 +137,7 @@ airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handle
137
137
  airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py,sha256=BGED9TcbA3mlvd9D7sog_u5AiyjWGVOUq_00aK3PNzg,5111
138
138
  airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py,sha256=q0YkeYUUWO6iErUy0vjqiOkhg8_9d5YcCmtlpXAJJ9E,1314
139
139
  airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py,sha256=Tan66odx8VHzfdyyXMQkXz2pJYksllGqvxmpoajgcK4,669
140
- airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py,sha256=vhWsEKNTYEzZ4gerhHqnDNKu4wGIP485NAzpSQ5DRZg,7941
140
+ airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py,sha256=E-fQbt4ShfxZVoqfnmOx69C6FUPWZz8BIqI3DN9Kcjs,7935
141
141
  airbyte_cdk/sources/declarative/requesters/http_job_repository.py,sha256=3GtOefPH08evlSUxaILkiKLTHbIspFY4qd5B3ZqNE60,10063
142
142
  airbyte_cdk/sources/declarative/requesters/http_requester.py,sha256=RqYPkgJFAWfcZBTc-JBcGHPm4JL1ZQOhs9GKU4MP2eE,14723
143
143
  airbyte_cdk/sources/declarative/requesters/paginators/__init__.py,sha256=uArbKs9JKNCt7t9tZoeWwjDpyI1HoPp29FNW0JzvaEM,644
@@ -170,7 +170,7 @@ airbyte_cdk/sources/declarative/retrievers/retriever.py,sha256=XPLs593Xv8c5cKMc3
170
170
  airbyte_cdk/sources/declarative/retrievers/simple_retriever.py,sha256=kgnhVQxRlFqJs2-rDu2-QH-p-GzQU3nKmSp6_aq8u0s,24550
171
171
  airbyte_cdk/sources/declarative/schema/__init__.py,sha256=xU45UvM5O4c1PSM13UHpCdh5hpW3HXy9vRRGEiAC1rg,795
172
172
  airbyte_cdk/sources/declarative/schema/default_schema_loader.py,sha256=KTACrIE23a83wsm3Rd9Eb4K6-20lrGqYxTHNp9yxsso,1820
173
- airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py,sha256=d8tfDiDcJiunvN_Yalyfx5ISY5A-iIW3HbPwX2Hagh4,10702
173
+ airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py,sha256=J8Q_iJYhcSQLWyt0bTZCbDAGpxt9G8FCc6Q9jtGsNzw,10703
174
174
  airbyte_cdk/sources/declarative/schema/inline_schema_loader.py,sha256=bVETE10hRsatRJq3R3BeyRR0wIoK3gcP1gcpVRQ_P5U,464
175
175
  airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py,sha256=5Wl-fqW-pVf_dxJ4yGHMAFfC4JjKHYJhqFJT1xA57F4,4177
176
176
  airbyte_cdk/sources/declarative/schema/schema_loader.py,sha256=kjt8v0N5wWKA5zyLnrDLxf1PJKdUqvQq2RVnAOAzNSY,379
@@ -351,9 +351,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G
351
351
  airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
352
352
  airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
353
353
  airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
354
- airbyte_cdk-6.28.0.dev0.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
355
- airbyte_cdk-6.28.0.dev0.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
356
- airbyte_cdk-6.28.0.dev0.dist-info/METADATA,sha256=lOUTgiqxemt8MFagRsnNAwvwURmnoOV8WbRqSB97Kb8,6015
357
- airbyte_cdk-6.28.0.dev0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
358
- airbyte_cdk-6.28.0.dev0.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
359
- airbyte_cdk-6.28.0.dev0.dist-info/RECORD,,
354
+ airbyte_cdk-6.29.0.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
355
+ airbyte_cdk-6.29.0.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
356
+ airbyte_cdk-6.29.0.dist-info/METADATA,sha256=tBDu8ziyLjbzMqhfeqrkGFrLUjglWxY_Ga7NuDQBkBE,6010
357
+ airbyte_cdk-6.29.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
358
+ airbyte_cdk-6.29.0.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
359
+ airbyte_cdk-6.29.0.dist-info/RECORD,,