airbyte-cdk 6.60.16__py3-none-any.whl → 6.60.16.post40.dev17219503797__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 (47) hide show
  1. airbyte_cdk/connector_builder/connector_builder_handler.py +32 -36
  2. airbyte_cdk/connector_builder/main.py +3 -3
  3. airbyte_cdk/connector_builder/test_reader/helpers.py +24 -2
  4. airbyte_cdk/connector_builder/test_reader/message_grouper.py +1 -1
  5. airbyte_cdk/manifest_server/Dockerfile +45 -0
  6. airbyte_cdk/manifest_server/README.md +142 -0
  7. airbyte_cdk/manifest_server/__init__.py +3 -0
  8. airbyte_cdk/manifest_server/api_models/__init__.py +41 -0
  9. airbyte_cdk/manifest_server/api_models/capabilities.py +7 -0
  10. airbyte_cdk/manifest_server/api_models/dicts.py +17 -0
  11. airbyte_cdk/manifest_server/api_models/manifest.py +73 -0
  12. airbyte_cdk/manifest_server/api_models/stream.py +76 -0
  13. airbyte_cdk/manifest_server/app.py +17 -0
  14. airbyte_cdk/manifest_server/auth.py +43 -0
  15. airbyte_cdk/manifest_server/cli/__init__.py +5 -0
  16. airbyte_cdk/manifest_server/cli/_common.py +28 -0
  17. airbyte_cdk/manifest_server/cli/_info.py +30 -0
  18. airbyte_cdk/manifest_server/cli/_openapi.py +43 -0
  19. airbyte_cdk/manifest_server/cli/_start.py +38 -0
  20. airbyte_cdk/manifest_server/cli/run.py +59 -0
  21. airbyte_cdk/manifest_server/command_processor/__init__.py +0 -0
  22. airbyte_cdk/manifest_server/command_processor/processor.py +151 -0
  23. airbyte_cdk/manifest_server/command_processor/utils.py +76 -0
  24. airbyte_cdk/manifest_server/main.py +24 -0
  25. airbyte_cdk/manifest_server/openapi.yaml +641 -0
  26. airbyte_cdk/manifest_server/routers/__init__.py +0 -0
  27. airbyte_cdk/manifest_server/routers/capabilities.py +25 -0
  28. airbyte_cdk/manifest_server/routers/health.py +13 -0
  29. airbyte_cdk/manifest_server/routers/manifest.py +137 -0
  30. airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +15 -22
  31. airbyte_cdk/sources/concurrent_source/concurrent_source.py +30 -18
  32. airbyte_cdk/sources/declarative/concurrent_declarative_source.py +73 -3
  33. airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +4 -0
  34. airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +42 -4
  35. airbyte_cdk/sources/declarative/stream_slicers/stream_slicer_test_read_decorator.py +2 -2
  36. airbyte_cdk/sources/message/concurrent_repository.py +47 -0
  37. airbyte_cdk/sources/streams/concurrent/cursor.py +23 -7
  38. airbyte_cdk/sources/streams/concurrent/partition_reader.py +46 -5
  39. airbyte_cdk/sources/streams/concurrent/partitions/types.py +7 -1
  40. airbyte_cdk/sources/streams/http/http_client.py +4 -1
  41. airbyte_cdk/sources/utils/slice_logger.py +4 -0
  42. {airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/METADATA +4 -1
  43. {airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/RECORD +47 -21
  44. {airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/entry_points.txt +1 -0
  45. {airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/LICENSE.txt +0 -0
  46. {airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/LICENSE_SHORT +0 -0
  47. {airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/WHEEL +0 -0
@@ -0,0 +1,47 @@
1
+ # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+ import logging
3
+ import os
4
+ from queue import Queue
5
+ from typing import Callable, Iterable
6
+
7
+ from airbyte_cdk.models import AirbyteMessage, Level
8
+ from airbyte_cdk.models import Type as MessageType
9
+ from airbyte_cdk.sources.message.repository import LogMessage, MessageRepository
10
+ from airbyte_cdk.sources.streams.concurrent.partitions.types import QueueItem
11
+
12
+ logger = logging.getLogger("airbyte")
13
+
14
+
15
+ class ConcurrentMessageRepository(MessageRepository):
16
+ """
17
+ Message repository that immediately loads messages onto the queue processed on the
18
+ main thread. This ensures that messages are processed in the correct order they are
19
+ received. The InMemoryMessageRepository implementation does not have guaranteed
20
+ ordering since whether to process the main thread vs. partitions is non-deterministic
21
+ and there can be a lag between reading the main-thread and consuming messages on the
22
+ MessageRepository.
23
+
24
+ This is particularly important for the connector builder which relies on grouping
25
+ of messages to organize request/response, pages, and partitions.
26
+ """
27
+
28
+ def __init__(self, queue: Queue[QueueItem], message_repository: MessageRepository):
29
+ self._queue = queue
30
+ self._decorated_message_repository = message_repository
31
+
32
+ def emit_message(self, message: AirbyteMessage) -> None:
33
+ self._decorated_message_repository.emit_message(message)
34
+ for message in self._decorated_message_repository.consume_queue():
35
+ self._queue.put(message)
36
+
37
+ def log_message(self, level: Level, message_provider: Callable[[], LogMessage]) -> None:
38
+ self._decorated_message_repository.log_message(level, message_provider)
39
+ for message in self._decorated_message_repository.consume_queue():
40
+ self._queue.put(message)
41
+
42
+ def consume_queue(self) -> Iterable[AirbyteMessage]:
43
+ """
44
+ This method shouldn't need to be called because as part of emit_message() we are already
45
+ loading messages onto the queue processed on the main thread.
46
+ """
47
+ yield from []
@@ -4,6 +4,7 @@
4
4
 
5
5
  import functools
6
6
  import logging
7
+ import threading
7
8
  from abc import ABC, abstractmethod
8
9
  from typing import (
9
10
  Any,
@@ -174,6 +175,12 @@ class ConcurrentCursor(Cursor):
174
175
  self._should_be_synced_logger_triggered = False
175
176
  self._clamping_strategy = clamping_strategy
176
177
 
178
+ # A lock is required when closing a partition because updating the cursor's concurrent_state is
179
+ # not thread safe. When multiple partitions are being closed by the cursor at the same time, it is
180
+ # possible for one partition to update concurrent_state after a second partition has already read
181
+ # the previous state. This can lead to the second partition overwriting the previous one's state.
182
+ self._lock = threading.Lock()
183
+
177
184
  @property
178
185
  def state(self) -> MutableMapping[str, Any]:
179
186
  return self._connector_state_converter.convert_to_state_message(
@@ -222,6 +229,14 @@ class ConcurrentCursor(Cursor):
222
229
  )
223
230
 
224
231
  def observe(self, record: Record) -> None:
232
+ # Because observe writes to the most_recent_cursor_value_per_partition mapping,
233
+ # it is not thread-safe. However, this shouldn't lead to concurrency issues because
234
+ # observe() is only invoked by PartitionReader.process_partition(). Since the map is
235
+ # broken down according to partition, concurrent threads processing only read/write
236
+ # from different keys which avoids any conflicts.
237
+ #
238
+ # If we were to add thread safety, we should implement a lock per-partition
239
+ # which is instantiated during stream_slices()
225
240
  most_recent_cursor_value = self._most_recent_cursor_value_per_partition.get(
226
241
  record.associated_slice
227
242
  )
@@ -237,13 +252,14 @@ class ConcurrentCursor(Cursor):
237
252
  return self._connector_state_converter.parse_value(self._cursor_field.extract_value(record))
238
253
 
239
254
  def close_partition(self, partition: Partition) -> None:
240
- slice_count_before = len(self._concurrent_state.get("slices", []))
241
- self._add_slice_to_state(partition)
242
- if slice_count_before < len(
243
- self._concurrent_state["slices"]
244
- ): # only emit if at least one slice has been processed
245
- self._merge_partitions()
246
- self._emit_state_message()
255
+ with self._lock:
256
+ slice_count_before = len(self._concurrent_state.get("slices", []))
257
+ self._add_slice_to_state(partition)
258
+ if slice_count_before < len(
259
+ self._concurrent_state["slices"]
260
+ ): # only emit if at least one slice has been processed
261
+ self._merge_partitions()
262
+ self._emit_state_message()
247
263
  self._has_closed_at_least_one_slice = True
248
264
 
249
265
  def _add_slice_to_state(self, partition: Partition) -> None:
@@ -1,14 +1,45 @@
1
- #
2
- # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
- #
1
+ # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+
3
+ import logging
4
4
  from queue import Queue
5
+ from typing import Optional
5
6
 
6
7
  from airbyte_cdk.sources.concurrent_source.stream_thread_exception import StreamThreadException
8
+ from airbyte_cdk.sources.message.repository import MessageRepository
9
+ from airbyte_cdk.sources.streams.concurrent.cursor import Cursor
7
10
  from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition
8
11
  from airbyte_cdk.sources.streams.concurrent.partitions.types import (
9
12
  PartitionCompleteSentinel,
10
13
  QueueItem,
11
14
  )
15
+ from airbyte_cdk.sources.utils.slice_logger import SliceLogger
16
+
17
+
18
+ # Since moving all the connector builder workflow to the concurrent CDK which required correct ordering
19
+ # of grouping log messages onto the main write thread using the ConcurrentMessageRepository, this
20
+ # separate flow and class that was used to log slices onto this partition's message_repository
21
+ # should just be replaced by emitting messages directly onto the repository instead of an intermediary.
22
+ class PartitionLogger:
23
+ """
24
+ Helper class that provides a mechanism for passing a log message onto the current
25
+ partitions message repository
26
+ """
27
+
28
+ def __init__(
29
+ self,
30
+ slice_logger: SliceLogger,
31
+ logger: logging.Logger,
32
+ message_repository: MessageRepository,
33
+ ):
34
+ self._slice_logger = slice_logger
35
+ self._logger = logger
36
+ self._message_repository = message_repository
37
+
38
+ def log(self, partition: Partition) -> None:
39
+ if self._slice_logger.should_log_slice_message(self._logger):
40
+ self._message_repository.emit_message(
41
+ self._slice_logger.create_slice_log_message(partition.to_slice())
42
+ )
12
43
 
13
44
 
14
45
  class PartitionReader:
@@ -18,13 +49,18 @@ class PartitionReader:
18
49
 
19
50
  _IS_SUCCESSFUL = True
20
51
 
21
- def __init__(self, queue: Queue[QueueItem]) -> None:
52
+ def __init__(
53
+ self,
54
+ queue: Queue[QueueItem],
55
+ partition_logger: Optional[PartitionLogger] = None,
56
+ ) -> None:
22
57
  """
23
58
  :param queue: The queue to put the records in.
24
59
  """
25
60
  self._queue = queue
61
+ self._partition_logger = partition_logger
26
62
 
27
- def process_partition(self, partition: Partition) -> None:
63
+ def process_partition(self, partition: Partition, cursor: Cursor) -> None:
28
64
  """
29
65
  Process a partition and put the records in the output queue.
30
66
  When all the partitions are added to the queue, a sentinel is added to the queue to indicate that all the partitions have been generated.
@@ -37,8 +73,13 @@ class PartitionReader:
37
73
  :return: None
38
74
  """
39
75
  try:
76
+ if self._partition_logger:
77
+ self._partition_logger.log(partition)
78
+
40
79
  for record in partition.read():
41
80
  self._queue.put(record)
81
+ cursor.observe(record)
82
+ cursor.close_partition(partition)
42
83
  self._queue.put(PartitionCompleteSentinel(partition, self._IS_SUCCESSFUL))
43
84
  except Exception as e:
44
85
  self._queue.put(StreamThreadException(e, partition.stream_name()))
@@ -4,6 +4,7 @@
4
4
 
5
5
  from typing import Any, Union
6
6
 
7
+ from airbyte_cdk.models import AirbyteMessage
7
8
  from airbyte_cdk.sources.concurrent_source.partition_generation_completed_sentinel import (
8
9
  PartitionGenerationCompletedSentinel,
9
10
  )
@@ -34,5 +35,10 @@ class PartitionCompleteSentinel:
34
35
  Typedef representing the items that can be added to the ThreadBasedConcurrentStream
35
36
  """
36
37
  QueueItem = Union[
37
- Record, Partition, PartitionCompleteSentinel, PartitionGenerationCompletedSentinel, Exception
38
+ Record,
39
+ Partition,
40
+ PartitionCompleteSentinel,
41
+ PartitionGenerationCompletedSentinel,
42
+ Exception,
43
+ AirbyteMessage,
38
44
  ]
@@ -153,7 +153,10 @@ class HttpClient:
153
153
  # * `If the application running SQLite crashes, the data will be safe, but the database [might become corrupted](https://www.sqlite.org/howtocorrupt.html#cfgerr) if the operating system crashes or the computer loses power before that data has been written to the disk surface.` in [this description](https://www.sqlite.org/pragma.html#pragma_synchronous).
154
154
  backend = requests_cache.SQLiteCache(sqlite_path, fast_save=True, wal=True)
155
155
  return CachedLimiterSession(
156
- sqlite_path, backend=backend, api_budget=self._api_budget, match_headers=True
156
+ cache_name=sqlite_path,
157
+ backend=backend,
158
+ api_budget=self._api_budget,
159
+ match_headers=True,
157
160
  )
158
161
  else:
159
162
  return LimiterSession(api_budget=self._api_budget)
@@ -11,6 +11,10 @@ from airbyte_cdk.models import AirbyteLogMessage, AirbyteMessage, Level
11
11
  from airbyte_cdk.models import Type as MessageType
12
12
 
13
13
 
14
+ # Once everything runs on the concurrent CDK and we've cleaned up the legacy flows, we should try to remove
15
+ # this class and write messages directly to the message_repository instead of through the logger because for
16
+ # cases like the connector builder where ordering of messages is important, using the logger can cause
17
+ # messages to be grouped out of order. Alas work for a different day.
14
18
  class SliceLogger(ABC):
15
19
  """
16
20
  SliceLogger is an interface that allows us to log slices of data in a uniform way.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 6.60.16
3
+ Version: 6.60.16.post40.dev17219503797
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -19,6 +19,7 @@ Classifier: Topic :: Scientific/Engineering
19
19
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
20
  Provides-Extra: dev
21
21
  Provides-Extra: file-based
22
+ Provides-Extra: manifest-server
22
23
  Provides-Extra: sql
23
24
  Provides-Extra: vector-db-based
24
25
  Requires-Dist: Jinja2 (>=3.1.2,<3.2.0)
@@ -35,6 +36,7 @@ Requires-Dist: cryptography (>=44.0.0,<45.0.0)
35
36
  Requires-Dist: dateparser (>=1.2.2,<2.0.0)
36
37
  Requires-Dist: dpath (>=2.1.6,<3.0.0)
37
38
  Requires-Dist: dunamai (>=1.22.0,<2.0.0)
39
+ Requires-Dist: fastapi (>=0.116.1) ; extra == "manifest-server"
38
40
  Requires-Dist: fastavro (>=1.8.0,<1.9.0) ; extra == "file-based"
39
41
  Requires-Dist: genson (==1.3.0)
40
42
  Requires-Dist: google-cloud-secret-manager (>=2.17.0,<3.0.0)
@@ -77,6 +79,7 @@ Requires-Dist: typing-extensions
77
79
  Requires-Dist: unidecode (>=1.3.8,<2.0.0)
78
80
  Requires-Dist: unstructured.pytesseract (>=0.3.12) ; extra == "file-based"
79
81
  Requires-Dist: unstructured[docx,pptx] (==0.10.27) ; extra == "file-based"
82
+ Requires-Dist: uvicorn (>=0.35.0) ; extra == "manifest-server"
80
83
  Requires-Dist: wcmatch (==10.0)
81
84
  Requires-Dist: whenever (>=0.6.16,<0.7.0)
82
85
  Requires-Dist: xmltodict (>=0.13,<0.15)
@@ -15,12 +15,12 @@ airbyte_cdk/config_observation.py,sha256=7SSPxtN0nXPkm4euGNcTTr1iLbwUL01jy-24V1H
15
15
  airbyte_cdk/connector.py,sha256=N6TUlrZOMjLAI85JrNAKkfyTqnO5xfBCw4oEfgjJd9o,4254
16
16
  airbyte_cdk/connector_builder/README.md,sha256=Hw3wvVewuHG9-QgsAq1jDiKuLlStDxKBz52ftyNRnBw,1665
17
17
  airbyte_cdk/connector_builder/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
18
- airbyte_cdk/connector_builder/connector_builder_handler.py,sha256=ySszXKleG7IGtxkwu2q9jczcwAAhZziLVzNAKtUvGY8,6664
19
- airbyte_cdk/connector_builder/main.py,sha256=j1pP5N8RsnvQZ4iYxhLdLEHsJ5Ui7IVFBUi6wYMGBkM,3839
18
+ airbyte_cdk/connector_builder/connector_builder_handler.py,sha256=jRtSfj3aca006-01Hax-THJpuoysd8QR6JPGnr8q1Xg,6371
19
+ airbyte_cdk/connector_builder/main.py,sha256=F9bmdz252pvGXAdDgPwIOPw3fl5fwTU41uG49BQyItI,3883
20
20
  airbyte_cdk/connector_builder/models.py,sha256=9pIZ98LW_d6fRS39VdnUOf3cxGt4TkC5MJ0_OrzcCRk,1578
21
21
  airbyte_cdk/connector_builder/test_reader/__init__.py,sha256=iTwBMoI9vaJotEgpqZbFjlxRcbxXYypSVJ9YxeHk7wc,120
22
- airbyte_cdk/connector_builder/test_reader/helpers.py,sha256=vqoHpZeQ0BLIw2NiTNGXr0euA8gI_X0pcNRcHOv8sHM,27942
23
- airbyte_cdk/connector_builder/test_reader/message_grouper.py,sha256=LDNl-xFQwA4RsUpn7684KbWaVH-SWWBIwhHvIgduLTE,7090
22
+ airbyte_cdk/connector_builder/test_reader/helpers.py,sha256=5GSrK9EVBDm5dwtudVbA-73EHh53-niRA-oj8eQVFHI,29236
23
+ airbyte_cdk/connector_builder/test_reader/message_grouper.py,sha256=bFoQMKCXJob98O6F4tgMW81cCquNOqCx2tkNXP7lPqc,7062
24
24
  airbyte_cdk/connector_builder/test_reader/reader.py,sha256=DugoqS6SMrtOJ--2Y0F0h_9x8m632i7fSOPMAA0JHnc,21654
25
25
  airbyte_cdk/connector_builder/test_reader/types.py,sha256=hPZG3jO03kBaPyW94NI3JHRS1jxXGSNBcN1HFzOxo5Y,2528
26
26
  airbyte_cdk/destinations/__init__.py,sha256=FyDp28PT_YceJD5HDFhA-mrGfX9AONIyMQ4d68CHNxQ,213
@@ -48,6 +48,31 @@ airbyte_cdk/manifest_migrations/migrations/http_requester_request_body_json_data
48
48
  airbyte_cdk/manifest_migrations/migrations/http_requester_url_base_to_url.py,sha256=EX1MVYVpoWypA28qoH48wA0SYZjGdlR8bcSixTDzfgo,1346
49
49
  airbyte_cdk/manifest_migrations/migrations/registry.yaml,sha256=F-hdapvl_vZnsI7CQsV00Rb7g7j4Nt2zaM83-Tbwgbg,956
50
50
  airbyte_cdk/manifest_migrations/migrations_registry.py,sha256=zly2fwaOxDukqC7eowzrDlvhA2v71FjW74kDzvRXhSY,2619
51
+ airbyte_cdk/manifest_server/Dockerfile,sha256=hNgnUguE9jA5XFkpLmzvbsQbsZTuwOxJgE7qYNkPueo,1316
52
+ airbyte_cdk/manifest_server/README.md,sha256=2B4C5BF6jqo6cRS6WkMyHOA4yJX1wd72h5Dk-dX6Vgw,3754
53
+ airbyte_cdk/manifest_server/__init__.py,sha256=EE54nk2dbtExIEEvLPCTUkJ_ESV5OYP4B2rBJlDpJ5g,33
54
+ airbyte_cdk/manifest_server/api_models/__init__.py,sha256=WRYhFv_e17oeU4RHNsqu5yQVN7PnHZfXA1ELkyjOSCc,831
55
+ airbyte_cdk/manifest_server/api_models/capabilities.py,sha256=eL88UxojIewHt97wMeCvyt92Hzh95UvLvVH6MSlsj5o,152
56
+ airbyte_cdk/manifest_server/api_models/dicts.py,sha256=Rm10IeV745MY8bLyrYyG7a9NGNrZBlnfkXct8gi7OTI,467
57
+ airbyte_cdk/manifest_server/api_models/manifest.py,sha256=9JdRQ7xLdDMcTcDX_SfoBH5gWgFgkb8RiEh5fxmJfN8,1648
58
+ airbyte_cdk/manifest_server/api_models/stream.py,sha256=RohZMLVnCyF7sjn9n6NrYskn_pY3mEluxzfxgXjg8uY,1993
59
+ airbyte_cdk/manifest_server/app.py,sha256=0G-B0kh0EukCRSPZwLYZbY83X3QGpC_J5mM18XQ_mkE,454
60
+ airbyte_cdk/manifest_server/auth.py,sha256=kKET6zg4olyf8p_UMcTnm7vkAtowxK6loSf8o83SdEM,1264
61
+ airbyte_cdk/manifest_server/cli/__init__.py,sha256=YfCEfXq3Jr7z3GOKMA6vF-D-7Y66BNHUwBLNM9UQbiQ,273
62
+ airbyte_cdk/manifest_server/cli/_common.py,sha256=5hfwKjkB5IQ4SGI54DBKMEbzLMsgN2Itv1wlQBzj8ts,799
63
+ airbyte_cdk/manifest_server/cli/_info.py,sha256=-h8U1bSD1umqLuoXfg4yDNWFR1BZuxcXxLhVKfLWB0Y,982
64
+ airbyte_cdk/manifest_server/cli/_openapi.py,sha256=rNghqbBMMT118auUIsxr89Mu6L6hqoQAifxyDbv1ZqQ,1445
65
+ airbyte_cdk/manifest_server/cli/_start.py,sha256=SgkW_dQcpCIrXYNZ6qF95oYIVaCszm9tFEbYiAZo4EQ,876
66
+ airbyte_cdk/manifest_server/cli/run.py,sha256=-Yv_Jv_hDeMBVZdzuyeJJ_JBT1WUhCyUQn4f4mA21Ds,1224
67
+ airbyte_cdk/manifest_server/command_processor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
+ airbyte_cdk/manifest_server/command_processor/processor.py,sha256=o7SE9of49d2iXvVgjMfKzAIAVbOF6B7qQNZraSaq6e4,4866
69
+ airbyte_cdk/manifest_server/command_processor/utils.py,sha256=KRBmfuOYoBN3qS8xd1MIIjZmGlMeqvE6NhNzSdBwUck,2334
70
+ airbyte_cdk/manifest_server/main.py,sha256=iSgL7x8ifBpGpXi7Dq7017QjeC20l_CYBAIsumiyJn0,573
71
+ airbyte_cdk/manifest_server/openapi.yaml,sha256=CDxXOEMCZGjSQwjhuFPhKhdJTAaJR8fmJHwe48SVaMY,16534
72
+ airbyte_cdk/manifest_server/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
+ airbyte_cdk/manifest_server/routers/capabilities.py,sha256=UeZQzbqEuDN23vizgDb_N7KEXR-YZUPnW5AkXeXy1hA,727
74
+ airbyte_cdk/manifest_server/routers/health.py,sha256=akBUaHUGN-jmN82lQ3kj_3-wdS6gsZx3iSD2KMI5dW8,200
75
+ airbyte_cdk/manifest_server/routers/manifest.py,sha256=o_V874K_hsTMDXIUK-y2wYOt06FNp8VgbpyfAYo37eI,4927
51
76
  airbyte_cdk/models/__init__.py,sha256=Et9wJWs5VOWynGbb-3aJRhsdAHAiLkNNLxdwqJAuqkw,2114
52
77
  airbyte_cdk/models/airbyte_protocol.py,sha256=oZdKsZ7yPjUt9hvxdWNpxCtgjSV2RWhf4R9Np03sqyY,3613
53
78
  airbyte_cdk/models/airbyte_protocol_serializers.py,sha256=Dq4ry_Wwvzsos6neDiaOZkY6riQYC33ZlPNWpfIIB1E,1926
@@ -57,8 +82,8 @@ airbyte_cdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
82
  airbyte_cdk/sources/__init__.py,sha256=45J83QsFH3Wky3sVapZWg4C58R_i1thm61M06t2c1AQ,1156
58
83
  airbyte_cdk/sources/abstract_source.py,sha256=50vxEBRByiNhT4WJkiFvgM-C6PWqKSJgvuNC_aeg2cw,15547
59
84
  airbyte_cdk/sources/concurrent_source/__init__.py,sha256=3D_RJsxQfiLboSCDdNei1Iv-msRp3DXsas6E9kl7dXc,386
60
- airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py,sha256=P_GA5QayzehCf0ksUbEbGoNixBnauzsepv-0ICzhH4w,12691
61
- airbyte_cdk/sources/concurrent_source/concurrent_source.py,sha256=P8B6EcLKaSstfAD9kDZsTJ0q8vRmdFrxLt-zOA5_By0,7737
85
+ airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py,sha256=qUi9zRjSEOsu3k6niRFjVn4l29OOMZVstIUoqNLw4_k,12208
86
+ airbyte_cdk/sources/concurrent_source/concurrent_source.py,sha256=2sdgOnWtvClZaibnfn4Yardv2Jjv_lfwMubublDl1ZY,8458
62
87
  airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py,sha256=f9PIRPWn2tXu0-bxVeYHL2vYdqCzZ_kgpHg5_Ep-cfQ,6103
63
88
  airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py,sha256=z1t-rAZBsqVidv2fpUlPHE9JgyXsITuGk4AMu96mXSQ,696
64
89
  airbyte_cdk/sources/concurrent_source/stream_thread_exception.py,sha256=-q6mG2145HKQ28rZGD1bUmjPlIZ1S7-Yhewl8Ntu6xI,764
@@ -86,7 +111,7 @@ airbyte_cdk/sources/declarative/checks/check_stream.py,sha256=sV-ZY7dZ03V8GdAxPY
86
111
  airbyte_cdk/sources/declarative/checks/connection_checker.py,sha256=MBRJo6WJlZQHpIfOGaNOkkHUmgUl_4wDM6VPo41z5Ss,1383
87
112
  airbyte_cdk/sources/declarative/concurrency_level/__init__.py,sha256=5XUqrmlstYlMM0j6crktlKQwALek0uiz2D3WdM46MyA,191
88
113
  airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py,sha256=YIwCTCpOr_QSNW4ltQK0yUGWInI8PKNY216HOOegYLk,2101
89
- airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=HQxvDEoMWtVdVRZgJylrT0YLx-R8sOgICjY3HnifvWs,27391
114
+ airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=5nvL9wbcAnReCeXM1Krezvyh-Plgx_yPS-CVhO_thHY,31043
90
115
  airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
91
116
  airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=_zGNGq31RNy_0QBLt_EcTvgPyhj7urPdx6oA3M5-r3o,3150
92
117
  airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
@@ -141,7 +166,7 @@ airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=wnRUP0Xeru9R
141
166
  airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=2UdpCz3yi7ISZTyqkQXSSy3dMxeyOWqV7OlAS5b9GVg,11568
142
167
  airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py,sha256=EtKjS9c94yNp3AwQC8KUCQaAYW5T3zvFYxoWYjc_buI,19729
143
168
  airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=pJmg78vqE5VfUrF_KJnWjucQ4k9IWFULeAxHCowrHXE,6806
144
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=D6QD6SxN17Fq_oX-ai8YSzI1WXsChplgcIjwDq9v-A0,184337
169
+ airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=viuNLiX3Sa3bDKSbAL6t00QpDw-U-J6wN77Us2JjGMs,184467
145
170
  airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=TBC9AkGaUqHm2IKHMPN6punBIcY5tWGULowcLoAVkfw,1109
146
171
  airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=VelO7zKqKtzMJ35jyFeg0ypJLQC0plqqIBNXoBW1G2E,3001
147
172
  airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
@@ -220,9 +245,9 @@ airbyte_cdk/sources/declarative/schema/schema_loader.py,sha256=kjt8v0N5wWKA5zyLn
220
245
  airbyte_cdk/sources/declarative/spec/__init__.py,sha256=9FYO-fVOclrwjAW4qwRTbZRVopTc9rOaauAJfThdNCQ,177
221
246
  airbyte_cdk/sources/declarative/spec/spec.py,sha256=SwL_pfXZgcLYLJY-MAeFMHug9oYh2tOWjgG0C3DoLOY,3602
222
247
  airbyte_cdk/sources/declarative/stream_slicers/__init__.py,sha256=UX-cP_C-9FIFFPL9z8nuxu_rglssRsMOqQmQHN8FLB8,341
223
- airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py,sha256=Wk7P-Jpy3f3a59mwnc9ycJbpA3zVcgykNt2grBSXhBA,4272
248
+ airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py,sha256=P3LqmgprbkW-Fy7c57meWny7D66XHY1EFjDw0ZzZLJk,5704
224
249
  airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py,sha256=SOkIPBi2Wu7yxIvA15yFzUAB95a3IzA8LPq5DEqHQQc,725
225
- airbyte_cdk/sources/declarative/stream_slicers/stream_slicer_test_read_decorator.py,sha256=aUSleOw9elq3-5TaDUvp7H8W-2qUKqpr__kaJd8-ZFA,983
250
+ airbyte_cdk/sources/declarative/stream_slicers/stream_slicer_test_read_decorator.py,sha256=4vit5ADyhoZnd1psRVeM5jdySYzhjwspLVXxh8vt1M8,944
226
251
  airbyte_cdk/sources/declarative/transformations/__init__.py,sha256=CPJ8TlMpiUmvG3624VYu_NfTzxwKcfBjM2Q2wJ7fkSA,919
227
252
  airbyte_cdk/sources/declarative/transformations/add_fields.py,sha256=Eg1jQtRObgzxbtySTQs5uEZIjEklsoHFxYSPf78x6Ng,5420
228
253
  airbyte_cdk/sources/declarative/transformations/config_transformations/__init__.py,sha256=GaU3ezFa5opeDgdlNohX6TXsWJlOD2jOfJXQWeQCh7E,263
@@ -300,6 +325,7 @@ airbyte_cdk/sources/file_based/types.py,sha256=INxG7OPnkdUP69oYNKMAbwhvV1AGvLRHs
300
325
  airbyte_cdk/sources/http_config.py,sha256=OBZeuyFilm6NlDlBhFQvHhTWabEvZww6OHDIlZujIS0,730
301
326
  airbyte_cdk/sources/http_logger.py,sha256=H93kPAujHhPmXNX0JSFG3D-SL6yEFA5PtKot9Hu3TYA,1690
302
327
  airbyte_cdk/sources/message/__init__.py,sha256=y98fzHsQBwXwp2zEa4K5mxGFqjnx9lDn9O0pTk-VS4U,395
328
+ airbyte_cdk/sources/message/concurrent_repository.py,sha256=HPMjhz5hEhjoaatjPL0Jo5VEI26B4fuo-ESIM0zIhGI,2113
303
329
  airbyte_cdk/sources/message/repository.py,sha256=SG7avgti_-dj8FcRHTTrhgLLGJbElv14_zIB0SH8AIc,4763
304
330
  airbyte_cdk/sources/source.py,sha256=KIBBH5VLEb8BZ8B9aROlfaI6OLoJqKDPMJ10jkAR7nk,3611
305
331
  airbyte_cdk/sources/specs/transfer_modes.py,sha256=sfSVO0yT6SaGKN5_TP0Nl_ftG0yPhecaBv0WkhAEXA8,932
@@ -319,18 +345,18 @@ airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py,sha256=QTry1QCB
319
345
  airbyte_cdk/sources/streams/concurrent/adapters.py,sha256=h4ZewhWn2PzPTt0lZZjcUL4rrpW9E_of7prnI3bm-c4,14004
320
346
  airbyte_cdk/sources/streams/concurrent/availability_strategy.py,sha256=M0XmvF3vjlr4GbCM0XH1hAj7udiAONM9SnmXjqufzLM,1035
321
347
  airbyte_cdk/sources/streams/concurrent/clamping.py,sha256=i26GVyui2ScEXSP-IP_61K2HaTp1-6lTlYHsZVYpuZA,3240
322
- airbyte_cdk/sources/streams/concurrent/cursor.py,sha256=xFFB8eEbtjGUdb42vkyWT5JB-WTUsaJlZ0gjKoVEycc,22307
348
+ airbyte_cdk/sources/streams/concurrent/cursor.py,sha256=Dxjx4IAHZ6HHyfJ-B5SUTTYgdb1ZiiBKsZm3pYUquzk,23411
323
349
  airbyte_cdk/sources/streams/concurrent/cursor_types.py,sha256=ZyWLPpeLX1qXcP5MwS-wxK11IBMsnVPCw9zx8gA2_Ro,843
324
350
  airbyte_cdk/sources/streams/concurrent/default_stream.py,sha256=SSufbo5f7OOYS8DZaABXeJVvodcfp9wb8J9lT5Xik3s,4744
325
351
  airbyte_cdk/sources/streams/concurrent/exceptions.py,sha256=JOZ446MCLpmF26r9KfS6OO_6rGjcjgJNZdcw6jccjEI,468
326
352
  airbyte_cdk/sources/streams/concurrent/helpers.py,sha256=S6AW8TgIASCZ2UuUcQLE8OzgYUHWt2-KPOvNPwnQf-Q,1596
327
353
  airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py,sha256=2t64b_z9cEPmlHZnjSiMTO8PEtEdiAJDG0JcYOtUqAE,3363
328
- airbyte_cdk/sources/streams/concurrent/partition_reader.py,sha256=0TIrjbTzYJGdA0AZUzbeIKr0iHbawnoEKVl7bWxOFZY,1760
354
+ airbyte_cdk/sources/streams/concurrent/partition_reader.py,sha256=qKd1NBlAjwo4mRVq9bowWr7oYg8SpgISklpkjUkie4k,3434
329
355
  airbyte_cdk/sources/streams/concurrent/partitions/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
330
356
  airbyte_cdk/sources/streams/concurrent/partitions/partition.py,sha256=CmaRcKn8y118No3qvbRV9DBeAUKv17lrVgloR4Y9TwU,1490
331
357
  airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py,sha256=_ymkkBr71_qt1fW0_MUqw96OfNBkeJngXQ09yolEDHw,441
332
358
  airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py,sha256=zQPikLIt0yhP9EwZaPglRTIqFCauo4pSsJk_7kYq9Aw,1406
333
- airbyte_cdk/sources/streams/concurrent/partitions/types.py,sha256=frPVvHtY7vLxpGEbMQzNvF1Y52ZVyct9f1DDhGoRjwY,1166
359
+ airbyte_cdk/sources/streams/concurrent/partitions/types.py,sha256=EdPHmMcyZhRYtO2cniIQAQpzPfGCBpzmAJ3NTVS4qbo,1249
334
360
  airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
335
361
  airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py,sha256=CCxCbgvUugxiWpHX8-dkkJHWKDjL5iwiIbOUj8KIJ9c,7079
336
362
  airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py,sha256=x8MLm1pTMfLNHvMF3P1ixYkYt_xjpbaIwnvhY_ofdBo,8076
@@ -349,7 +375,7 @@ airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py,sha
349
375
  airbyte_cdk/sources/streams/http/error_handlers/response_models.py,sha256=xGIVELBFY0TmH9aUq1ikoqJz8oHLr6di2JLvKWVEO-s,2236
350
376
  airbyte_cdk/sources/streams/http/exceptions.py,sha256=njC7MlMJoFYcSGz4mIp6-bqLFTr6vC8ej25X0oSeyjE,1824
351
377
  airbyte_cdk/sources/streams/http/http.py,sha256=0uariNq8OFnlX7iqOHwBhecxA-Hfd5hSY8_XCEgn3jI,28499
352
- airbyte_cdk/sources/streams/http/http_client.py,sha256=tDE0ROtxjGMVphvsw8INvGMtZ97hIF-v47pZ3jIyiwc,23011
378
+ airbyte_cdk/sources/streams/http/http_client.py,sha256=FXOBMBocszQkbK1ENfcMBQoHtL1EUWA4KsI6oJE8Ni8,23071
353
379
  airbyte_cdk/sources/streams/http/rate_limiting.py,sha256=IwdjrHKUnU97XO4qONgYRv4YYW51xQ8SJm4WLafXDB8,6351
354
380
  airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py,sha256=RN0D3nOX1xLgwEwKWu6pkGy3XqBFzKSNZ8Lf6umU2eY,413
355
381
  airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py,sha256=0WfnxuxDwRYeq-PIwdUjJujDnxuJPhNfHlX_8aNHtYU,19663
@@ -364,7 +390,7 @@ airbyte_cdk/sources/utils/casing.py,sha256=QC-gV1O4e8DR4-bhdXieUPKm_JamzslVyfABL
364
390
  airbyte_cdk/sources/utils/files_directory.py,sha256=z8Dmr-wkL1sAqdwCST4MBUFAyMHPD2cJIzVdAuCynp8,391
365
391
  airbyte_cdk/sources/utils/record_helper.py,sha256=7wL-pDYrBpcmZHa8ORtiSOqBZJEZI5hdl2dA1RYiatk,2029
366
392
  airbyte_cdk/sources/utils/schema_helpers.py,sha256=bR3I70-e11S6B8r6VK-pthQXtcYrXojgXFvuK7lRrpg,8545
367
- airbyte_cdk/sources/utils/slice_logger.py,sha256=qWWeFLAvigFz0b4O1_O3QDM1cy8PqZAMMgVPR2hEeb8,1778
393
+ airbyte_cdk/sources/utils/slice_logger.py,sha256=M1TvcYGMftXR841XdJmeEpKpQqrdOD5X-qsspfAMKMs,2168
368
394
  airbyte_cdk/sources/utils/transform.py,sha256=0LOvIJg1vmg_70AiAVe-YHMr-LHrqEuxg9cm1BnYPDM,11725
369
395
  airbyte_cdk/sources/utils/types.py,sha256=41ZQR681t5TUnOScij58d088sb99klH_ZENFcaYro_g,175
370
396
  airbyte_cdk/sql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -424,9 +450,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G
424
450
  airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
425
451
  airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
426
452
  airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
427
- airbyte_cdk-6.60.16.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
428
- airbyte_cdk-6.60.16.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
429
- airbyte_cdk-6.60.16.dist-info/METADATA,sha256=y4Lq957WOfoSOasIGdatfeOaeADM_P78JzrfvFwSubc,6478
430
- airbyte_cdk-6.60.16.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
431
- airbyte_cdk-6.60.16.dist-info/entry_points.txt,sha256=AKWbEkHfpzzk9nF9tqBUaw1MbvTM4mGtEzmZQm0ZWvM,139
432
- airbyte_cdk-6.60.16.dist-info/RECORD,,
453
+ airbyte_cdk-6.60.16.post40.dev17219503797.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
454
+ airbyte_cdk-6.60.16.post40.dev17219503797.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
455
+ airbyte_cdk-6.60.16.post40.dev17219503797.dist-info/METADATA,sha256=0aztgZ8K1olcvPfRkOIgUpXBoVTNwUAQEcMmPUtueTA,6659
456
+ airbyte_cdk-6.60.16.post40.dev17219503797.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
457
+ airbyte_cdk-6.60.16.post40.dev17219503797.dist-info/entry_points.txt,sha256=eLZ2UYvJZGm1s07Pplcs--1Gim60YhZWTb53j_dghwU,195
458
+ airbyte_cdk-6.60.16.post40.dev17219503797.dist-info/RECORD,,
@@ -1,4 +1,5 @@
1
1
  [console_scripts]
2
2
  airbyte-cdk=airbyte_cdk.cli.airbyte_cdk:cli
3
+ manifest-server=airbyte_cdk.manifest_server.cli.run:run
3
4
  source-declarative-manifest=airbyte_cdk.cli.source_declarative_manifest:run
4
5