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.
- airbyte_cdk/connector_builder/connector_builder_handler.py +32 -36
- airbyte_cdk/connector_builder/main.py +3 -3
- airbyte_cdk/connector_builder/test_reader/helpers.py +24 -2
- airbyte_cdk/connector_builder/test_reader/message_grouper.py +1 -1
- airbyte_cdk/manifest_server/Dockerfile +45 -0
- airbyte_cdk/manifest_server/README.md +142 -0
- airbyte_cdk/manifest_server/__init__.py +3 -0
- airbyte_cdk/manifest_server/api_models/__init__.py +41 -0
- airbyte_cdk/manifest_server/api_models/capabilities.py +7 -0
- airbyte_cdk/manifest_server/api_models/dicts.py +17 -0
- airbyte_cdk/manifest_server/api_models/manifest.py +73 -0
- airbyte_cdk/manifest_server/api_models/stream.py +76 -0
- airbyte_cdk/manifest_server/app.py +17 -0
- airbyte_cdk/manifest_server/auth.py +43 -0
- airbyte_cdk/manifest_server/cli/__init__.py +5 -0
- airbyte_cdk/manifest_server/cli/_common.py +28 -0
- airbyte_cdk/manifest_server/cli/_info.py +30 -0
- airbyte_cdk/manifest_server/cli/_openapi.py +43 -0
- airbyte_cdk/manifest_server/cli/_start.py +38 -0
- airbyte_cdk/manifest_server/cli/run.py +59 -0
- airbyte_cdk/manifest_server/command_processor/__init__.py +0 -0
- airbyte_cdk/manifest_server/command_processor/processor.py +151 -0
- airbyte_cdk/manifest_server/command_processor/utils.py +76 -0
- airbyte_cdk/manifest_server/main.py +24 -0
- airbyte_cdk/manifest_server/openapi.yaml +641 -0
- airbyte_cdk/manifest_server/routers/__init__.py +0 -0
- airbyte_cdk/manifest_server/routers/capabilities.py +25 -0
- airbyte_cdk/manifest_server/routers/health.py +13 -0
- airbyte_cdk/manifest_server/routers/manifest.py +137 -0
- airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +15 -22
- airbyte_cdk/sources/concurrent_source/concurrent_source.py +30 -18
- airbyte_cdk/sources/declarative/concurrent_declarative_source.py +73 -3
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +4 -0
- airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +42 -4
- airbyte_cdk/sources/declarative/stream_slicers/stream_slicer_test_read_decorator.py +2 -2
- airbyte_cdk/sources/message/concurrent_repository.py +47 -0
- airbyte_cdk/sources/streams/concurrent/cursor.py +23 -7
- airbyte_cdk/sources/streams/concurrent/partition_reader.py +46 -5
- airbyte_cdk/sources/streams/concurrent/partitions/types.py +7 -1
- airbyte_cdk/sources/streams/http/http_client.py +4 -1
- airbyte_cdk/sources/utils/slice_logger.py +4 -0
- {airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/METADATA +4 -1
- {airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/RECORD +47 -21
- {airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/entry_points.txt +1 -0
- {airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/LICENSE.txt +0 -0
- {airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/LICENSE_SHORT +0 -0
- {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
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
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
|
-
|
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__(
|
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,
|
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,
|
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.
|
{airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/METADATA
RENAMED
@@ -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)
|
{airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/RECORD
RENAMED
@@ -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=
|
19
|
-
airbyte_cdk/connector_builder/main.py,sha256=
|
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=
|
23
|
-
airbyte_cdk/connector_builder/test_reader/message_grouper.py,sha256=
|
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=
|
61
|
-
airbyte_cdk/sources/concurrent_source/concurrent_source.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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,,
|
{airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/LICENSE.txt
RENAMED
File without changes
|
{airbyte_cdk-6.60.16.dist-info → airbyte_cdk-6.60.16.post40.dev17219503797.dist-info}/LICENSE_SHORT
RENAMED
File without changes
|
File without changes
|