airbyte-cdk 7.3.9.post2.dev18667058048__py3-none-any.whl → 7.3.10.dev0__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/sources/concurrent_source/concurrent_read_processor.py +22 -12
 - airbyte_cdk/sources/streams/concurrent/cursor.py +9 -9
 - airbyte_cdk/sources/streams/concurrent/partition_reader.py +1 -3
 - {airbyte_cdk-7.3.9.post2.dev18667058048.dist-info → airbyte_cdk-7.3.10.dev0.dist-info}/METADATA +1 -1
 - {airbyte_cdk-7.3.9.post2.dev18667058048.dist-info → airbyte_cdk-7.3.10.dev0.dist-info}/RECORD +9 -9
 - {airbyte_cdk-7.3.9.post2.dev18667058048.dist-info → airbyte_cdk-7.3.10.dev0.dist-info}/LICENSE.txt +0 -0
 - {airbyte_cdk-7.3.9.post2.dev18667058048.dist-info → airbyte_cdk-7.3.10.dev0.dist-info}/LICENSE_SHORT +0 -0
 - {airbyte_cdk-7.3.9.post2.dev18667058048.dist-info → airbyte_cdk-7.3.10.dev0.dist-info}/WHEEL +0 -0
 - {airbyte_cdk-7.3.9.post2.dev18667058048.dist-info → airbyte_cdk-7.3.10.dev0.dist-info}/entry_points.txt +0 -0
 
| 
         @@ -96,13 +96,12 @@ class ConcurrentReadProcessor: 
     | 
|
| 
       96 
96 
     | 
    
         
             
                    """
         
     | 
| 
       97 
97 
     | 
    
         
             
                    stream_name = partition.stream_name()
         
     | 
| 
       98 
98 
     | 
    
         
             
                    self._streams_to_running_partitions[stream_name].add(partition)
         
     | 
| 
       99 
     | 
    
         
            -
                    cursor = self._stream_name_to_instance[stream_name].cursor
         
     | 
| 
       100 
99 
     | 
    
         
             
                    if self._slice_logger.should_log_slice_message(self._logger):
         
     | 
| 
       101 
100 
     | 
    
         
             
                        self._message_repository.emit_message(
         
     | 
| 
       102 
101 
     | 
    
         
             
                            self._slice_logger.create_slice_log_message(partition.to_slice())
         
     | 
| 
       103 
102 
     | 
    
         
             
                        )
         
     | 
| 
       104 
103 
     | 
    
         
             
                    self._thread_pool_manager.submit(
         
     | 
| 
       105 
     | 
    
         
            -
                        self._partition_reader.process_partition, partition 
     | 
| 
      
 104 
     | 
    
         
            +
                        self._partition_reader.process_partition, partition
         
     | 
| 
       106 
105 
     | 
    
         
             
                    )
         
     | 
| 
       107 
106 
     | 
    
         | 
| 
       108 
107 
     | 
    
         
             
                def on_partition_complete_sentinel(
         
     | 
| 
         @@ -116,16 +115,26 @@ class ConcurrentReadProcessor: 
     | 
|
| 
       116 
115 
     | 
    
         
             
                    """
         
     | 
| 
       117 
116 
     | 
    
         
             
                    partition = sentinel.partition
         
     | 
| 
       118 
117 
     | 
    
         | 
| 
       119 
     | 
    
         
            -
                     
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
                     
     | 
| 
      
 118 
     | 
    
         
            +
                    try:
         
     | 
| 
      
 119 
     | 
    
         
            +
                        if sentinel.is_successful:
         
     | 
| 
      
 120 
     | 
    
         
            +
                            stream = self._stream_name_to_instance[partition.stream_name()]
         
     | 
| 
      
 121 
     | 
    
         
            +
                            stream.cursor.close_partition(partition)
         
     | 
| 
      
 122 
     | 
    
         
            +
                    except Exception as exception:
         
     | 
| 
      
 123 
     | 
    
         
            +
                        self._flag_exception(partition.stream_name(), exception)
         
     | 
| 
      
 124 
     | 
    
         
            +
                        yield AirbyteTracedException.from_exception(
         
     | 
| 
      
 125 
     | 
    
         
            +
                            exception, stream_descriptor=StreamDescriptor(name=partition.stream_name())
         
     | 
| 
      
 126 
     | 
    
         
            +
                        ).as_sanitized_airbyte_message()
         
     | 
| 
      
 127 
     | 
    
         
            +
                    finally:
         
     | 
| 
      
 128 
     | 
    
         
            +
                        partitions_running = self._streams_to_running_partitions[partition.stream_name()]
         
     | 
| 
      
 129 
     | 
    
         
            +
                        if partition in partitions_running:
         
     | 
| 
      
 130 
     | 
    
         
            +
                            partitions_running.remove(partition)
         
     | 
| 
      
 131 
     | 
    
         
            +
                            # If all partitions were generated and this was the last one, the stream is done
         
     | 
| 
      
 132 
     | 
    
         
            +
                            if (
         
     | 
| 
      
 133 
     | 
    
         
            +
                                partition.stream_name() not in self._streams_currently_generating_partitions
         
     | 
| 
      
 134 
     | 
    
         
            +
                                and len(partitions_running) == 0
         
     | 
| 
      
 135 
     | 
    
         
            +
                            ):
         
     | 
| 
      
 136 
     | 
    
         
            +
                                yield from self._on_stream_is_done(partition.stream_name())
         
     | 
| 
      
 137 
     | 
    
         
            +
                        yield from self._message_repository.consume_queue()
         
     | 
| 
       129 
138 
     | 
    
         | 
| 
       130 
139 
     | 
    
         
             
                def on_record(self, record: Record) -> Iterable[AirbyteMessage]:
         
     | 
| 
       131 
140 
     | 
    
         
             
                    """
         
     | 
| 
         @@ -154,6 +163,7 @@ class ConcurrentReadProcessor: 
     | 
|
| 
       154 
163 
     | 
    
         
             
                                stream.as_airbyte_stream(), AirbyteStreamStatus.RUNNING
         
     | 
| 
       155 
164 
     | 
    
         
             
                            )
         
     | 
| 
       156 
165 
     | 
    
         
             
                        self._record_counter[stream.name] += 1
         
     | 
| 
      
 166 
     | 
    
         
            +
                        stream.cursor.observe(record)
         
     | 
| 
       157 
167 
     | 
    
         
             
                    yield message
         
     | 
| 
       158 
168 
     | 
    
         
             
                    yield from self._message_repository.consume_queue()
         
     | 
| 
       159 
169 
     | 
    
         | 
| 
         @@ -198,7 +198,7 @@ class ConcurrentCursor(Cursor): 
     | 
|
| 
       198 
198 
     | 
    
         
             
                    # not thread safe. When multiple partitions are being closed by the cursor at the same time, it is
         
     | 
| 
       199 
199 
     | 
    
         
             
                    # possible for one partition to update concurrent_state after a second partition has already read
         
     | 
| 
       200 
200 
     | 
    
         
             
                    # the previous state. This can lead to the second partition overwriting the previous one's state.
         
     | 
| 
       201 
     | 
    
         
            -
                    self._lock = threading.Lock()
         
     | 
| 
      
 201 
     | 
    
         
            +
                    # self._lock = threading.Lock()
         
     | 
| 
       202 
202 
     | 
    
         | 
| 
       203 
203 
     | 
    
         
             
                @property
         
     | 
| 
       204 
204 
     | 
    
         
             
                def state(self) -> MutableMapping[str, Any]:
         
     | 
| 
         @@ -273,14 +273,14 @@ class ConcurrentCursor(Cursor): 
     | 
|
| 
       273 
273 
     | 
    
         
             
                    return self._connector_state_converter.parse_value(self._cursor_field.extract_value(record))
         
     | 
| 
       274 
274 
     | 
    
         | 
| 
       275 
275 
     | 
    
         
             
                def close_partition(self, partition: Partition) -> None:
         
     | 
| 
       276 
     | 
    
         
            -
                    with self._lock:
         
     | 
| 
       277 
     | 
    
         
            -
             
     | 
| 
       278 
     | 
    
         
            -
             
     | 
| 
       279 
     | 
    
         
            -
             
     | 
| 
       280 
     | 
    
         
            -
             
     | 
| 
       281 
     | 
    
         
            -
             
     | 
| 
       282 
     | 
    
         
            -
             
     | 
| 
       283 
     | 
    
         
            -
             
     | 
| 
      
 276 
     | 
    
         
            +
                    #with self._lock:
         
     | 
| 
      
 277 
     | 
    
         
            +
                    slice_count_before = len(self._concurrent_state.get("slices", []))
         
     | 
| 
      
 278 
     | 
    
         
            +
                    self._add_slice_to_state(partition)
         
     | 
| 
      
 279 
     | 
    
         
            +
                    if slice_count_before < len(
         
     | 
| 
      
 280 
     | 
    
         
            +
                        self._concurrent_state["slices"]
         
     | 
| 
      
 281 
     | 
    
         
            +
                    ):  # only emit if at least one slice has been processed
         
     | 
| 
      
 282 
     | 
    
         
            +
                        self._merge_partitions()
         
     | 
| 
      
 283 
     | 
    
         
            +
                        self._emit_state_message()
         
     | 
| 
       284 
284 
     | 
    
         
             
                    self._has_closed_at_least_one_slice = True
         
     | 
| 
       285 
285 
     | 
    
         | 
| 
       286 
286 
     | 
    
         
             
                def _add_slice_to_state(self, partition: Partition) -> None:
         
     | 
| 
         @@ -60,7 +60,7 @@ class PartitionReader: 
     | 
|
| 
       60 
60 
     | 
    
         
             
                    self._queue = queue
         
     | 
| 
       61 
61 
     | 
    
         
             
                    self._partition_logger = partition_logger
         
     | 
| 
       62 
62 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
                def process_partition(self, partition: Partition 
     | 
| 
      
 63 
     | 
    
         
            +
                def process_partition(self, partition: Partition) -> None:
         
     | 
| 
       64 
64 
     | 
    
         
             
                    """
         
     | 
| 
       65 
65 
     | 
    
         
             
                    Process a partition and put the records in the output queue.
         
     | 
| 
       66 
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.
         
     | 
| 
         @@ -78,8 +78,6 @@ class PartitionReader: 
     | 
|
| 
       78 
78 
     | 
    
         | 
| 
       79 
79 
     | 
    
         
             
                        for record in partition.read():
         
     | 
| 
       80 
80 
     | 
    
         
             
                            self._queue.put(record)
         
     | 
| 
       81 
     | 
    
         
            -
                            cursor.observe(record)
         
     | 
| 
       82 
     | 
    
         
            -
                        cursor.close_partition(partition)
         
     | 
| 
       83 
81 
     | 
    
         
             
                        self._queue.put(PartitionCompleteSentinel(partition, self._IS_SUCCESSFUL))
         
     | 
| 
       84 
82 
     | 
    
         
             
                    except Exception as e:
         
     | 
| 
       85 
83 
     | 
    
         
             
                        self._queue.put(StreamThreadException(e, partition.stream_name()))
         
     | 
    
        {airbyte_cdk-7.3.9.post2.dev18667058048.dist-info → airbyte_cdk-7.3.10.dev0.dist-info}/RECORD
    RENAMED
    
    | 
         @@ -97,7 +97,7 @@ airbyte_cdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 
     | 
|
| 
       97 
97 
     | 
    
         
             
            airbyte_cdk/sources/__init__.py,sha256=45J83QsFH3Wky3sVapZWg4C58R_i1thm61M06t2c1AQ,1156
         
     | 
| 
       98 
98 
     | 
    
         
             
            airbyte_cdk/sources/abstract_source.py,sha256=50vxEBRByiNhT4WJkiFvgM-C6PWqKSJgvuNC_aeg2cw,15547
         
     | 
| 
       99 
99 
     | 
    
         
             
            airbyte_cdk/sources/concurrent_source/__init__.py,sha256=3D_RJsxQfiLboSCDdNei1Iv-msRp3DXsas6E9kl7dXc,386
         
     | 
| 
       100 
     | 
    
         
            -
            airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py,sha256= 
     | 
| 
      
 100 
     | 
    
         
            +
            airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py,sha256=DPNp3Nh1h_sarXybVMuiIjwlJcIbz0_xAq1sc7mhZvM,12723
         
     | 
| 
       101 
101 
     | 
    
         
             
            airbyte_cdk/sources/concurrent_source/concurrent_source.py,sha256=2sdgOnWtvClZaibnfn4Yardv2Jjv_lfwMubublDl1ZY,8458
         
     | 
| 
       102 
102 
     | 
    
         
             
            airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py,sha256=f9PIRPWn2tXu0-bxVeYHL2vYdqCzZ_kgpHg5_Ep-cfQ,6103
         
     | 
| 
       103 
103 
     | 
    
         
             
            airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py,sha256=z1t-rAZBsqVidv2fpUlPHE9JgyXsITuGk4AMu96mXSQ,696
         
     | 
| 
         @@ -353,13 +353,13 @@ airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py,sha256=QTry1QCB 
     | 
|
| 
       353 
353 
     | 
    
         
             
            airbyte_cdk/sources/streams/concurrent/adapters.py,sha256=h4ZewhWn2PzPTt0lZZjcUL4rrpW9E_of7prnI3bm-c4,14004
         
     | 
| 
       354 
354 
     | 
    
         
             
            airbyte_cdk/sources/streams/concurrent/availability_strategy.py,sha256=M0XmvF3vjlr4GbCM0XH1hAj7udiAONM9SnmXjqufzLM,1035
         
     | 
| 
       355 
355 
     | 
    
         
             
            airbyte_cdk/sources/streams/concurrent/clamping.py,sha256=i26GVyui2ScEXSP-IP_61K2HaTp1-6lTlYHsZVYpuZA,3240
         
     | 
| 
       356 
     | 
    
         
            -
            airbyte_cdk/sources/streams/concurrent/cursor.py,sha256= 
     | 
| 
      
 356 
     | 
    
         
            +
            airbyte_cdk/sources/streams/concurrent/cursor.py,sha256=WAJAft9GSliVXWOQVjK4Aya5FdunjoFz5j0Km5l2MDY,25688
         
     | 
| 
       357 
357 
     | 
    
         
             
            airbyte_cdk/sources/streams/concurrent/cursor_types.py,sha256=ZyWLPpeLX1qXcP5MwS-wxK11IBMsnVPCw9zx8gA2_Ro,843
         
     | 
| 
       358 
358 
     | 
    
         
             
            airbyte_cdk/sources/streams/concurrent/default_stream.py,sha256=SSufbo5f7OOYS8DZaABXeJVvodcfp9wb8J9lT5Xik3s,4744
         
     | 
| 
       359 
359 
     | 
    
         
             
            airbyte_cdk/sources/streams/concurrent/exceptions.py,sha256=JOZ446MCLpmF26r9KfS6OO_6rGjcjgJNZdcw6jccjEI,468
         
     | 
| 
       360 
360 
     | 
    
         
             
            airbyte_cdk/sources/streams/concurrent/helpers.py,sha256=S6AW8TgIASCZ2UuUcQLE8OzgYUHWt2-KPOvNPwnQf-Q,1596
         
     | 
| 
       361 
361 
     | 
    
         
             
            airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py,sha256=2t64b_z9cEPmlHZnjSiMTO8PEtEdiAJDG0JcYOtUqAE,3363
         
     | 
| 
       362 
     | 
    
         
            -
            airbyte_cdk/sources/streams/concurrent/partition_reader.py,sha256= 
     | 
| 
      
 362 
     | 
    
         
            +
            airbyte_cdk/sources/streams/concurrent/partition_reader.py,sha256=b8gTenOot1Yg5aer70onNLyCk43nlBZtBvBRKjW8VHs,3333
         
     | 
| 
       363 
363 
     | 
    
         
             
            airbyte_cdk/sources/streams/concurrent/partitions/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
         
     | 
| 
       364 
364 
     | 
    
         
             
            airbyte_cdk/sources/streams/concurrent/partitions/partition.py,sha256=CmaRcKn8y118No3qvbRV9DBeAUKv17lrVgloR4Y9TwU,1490
         
     | 
| 
       365 
365 
     | 
    
         
             
            airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py,sha256=_ymkkBr71_qt1fW0_MUqw96OfNBkeJngXQ09yolEDHw,441
         
     | 
| 
         @@ -459,9 +459,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G 
     | 
|
| 
       459 
459 
     | 
    
         
             
            airbyte_cdk/utils/spec_schema_transformations.py,sha256=9YDJmnIGFsT51CVQf2tSSvTapGimITjEFGbUTSZAGTI,963
         
     | 
| 
       460 
460 
     | 
    
         
             
            airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
         
     | 
| 
       461 
461 
     | 
    
         
             
            airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
         
     | 
| 
       462 
     | 
    
         
            -
            airbyte_cdk-7.3. 
     | 
| 
       463 
     | 
    
         
            -
            airbyte_cdk-7.3. 
     | 
| 
       464 
     | 
    
         
            -
            airbyte_cdk-7.3. 
     | 
| 
       465 
     | 
    
         
            -
            airbyte_cdk-7.3. 
     | 
| 
       466 
     | 
    
         
            -
            airbyte_cdk-7.3. 
     | 
| 
       467 
     | 
    
         
            -
            airbyte_cdk-7.3. 
     | 
| 
      
 462 
     | 
    
         
            +
            airbyte_cdk-7.3.10.dev0.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
         
     | 
| 
      
 463 
     | 
    
         
            +
            airbyte_cdk-7.3.10.dev0.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
         
     | 
| 
      
 464 
     | 
    
         
            +
            airbyte_cdk-7.3.10.dev0.dist-info/METADATA,sha256=NOmBy-jxE-RCgk5KiN_Tg-3pDHgrKUaBQwnxlNRevos,6765
         
     | 
| 
      
 465 
     | 
    
         
            +
            airbyte_cdk-7.3.10.dev0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
         
     | 
| 
      
 466 
     | 
    
         
            +
            airbyte_cdk-7.3.10.dev0.dist-info/entry_points.txt,sha256=eLZ2UYvJZGm1s07Pplcs--1Gim60YhZWTb53j_dghwU,195
         
     | 
| 
      
 467 
     | 
    
         
            +
            airbyte_cdk-7.3.10.dev0.dist-info/RECORD,,
         
     | 
    
        {airbyte_cdk-7.3.9.post2.dev18667058048.dist-info → airbyte_cdk-7.3.10.dev0.dist-info}/LICENSE.txt
    RENAMED
    
    | 
         
            File without changes
         
     | 
    
        {airbyte_cdk-7.3.9.post2.dev18667058048.dist-info → airbyte_cdk-7.3.10.dev0.dist-info}/LICENSE_SHORT
    RENAMED
    
    | 
         
            File without changes
         
     | 
    
        {airbyte_cdk-7.3.9.post2.dev18667058048.dist-info → airbyte_cdk-7.3.10.dev0.dist-info}/WHEEL
    RENAMED
    
    | 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     |