airbyte-cdk 7.0.4__py3-none-any.whl → 7.1.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.
@@ -49,8 +49,9 @@ class CheckDynamicStream(ConnectionChecker):
49
49
  for stream in streams[: min(self.stream_count, len(streams))]:
50
50
  stream_is_available, reason = evaluate_availability(stream, logger)
51
51
  if not stream_is_available:
52
- logger.warning(f"Stream {stream.name} is not available: {reason}")
53
- return False, reason
52
+ message = f"Stream {stream.name} is not available: {reason}"
53
+ logger.warning(message)
54
+ return False, message
54
55
  except Exception as error:
55
56
  error_message = (
56
57
  f"Encountered an error trying to connect to stream {stream.name}. Error: {error}"
@@ -20,7 +20,7 @@ from typing import (
20
20
 
21
21
  import orjson
22
22
  import yaml
23
- from airbyte_protocol_dataclasses.models import Level
23
+ from airbyte_protocol_dataclasses.models import AirbyteStreamStatus, Level, StreamDescriptor
24
24
  from jsonschema.exceptions import ValidationError
25
25
  from jsonschema.validators import validate
26
26
 
@@ -88,6 +88,7 @@ from airbyte_cdk.sources.utils.slice_logger import (
88
88
  DebugSliceLogger,
89
89
  SliceLogger,
90
90
  )
91
+ from airbyte_cdk.utils.stream_status_utils import as_airbyte_message
91
92
  from airbyte_cdk.utils.traced_exception import AirbyteTracedException
92
93
 
93
94
 
@@ -630,9 +631,8 @@ class ConcurrentDeclarativeSource(Source):
630
631
 
631
632
  return dynamic_stream_configs
632
633
 
633
- @staticmethod
634
634
  def _select_streams(
635
- streams: List[AbstractStream], configured_catalog: ConfiguredAirbyteCatalog
635
+ self, streams: List[AbstractStream], configured_catalog: ConfiguredAirbyteCatalog
636
636
  ) -> List[AbstractStream]:
637
637
  stream_name_to_instance: Mapping[str, AbstractStream] = {s.name: s for s in streams}
638
638
  abstract_streams: List[AbstractStream] = []
@@ -640,5 +640,13 @@ class ConcurrentDeclarativeSource(Source):
640
640
  stream_instance = stream_name_to_instance.get(configured_stream.stream.name)
641
641
  if stream_instance:
642
642
  abstract_streams.append(stream_instance)
643
-
643
+ else:
644
+ # Previous behavior in the legacy synchronous CDK was to also raise an error TRACE message if
645
+ # the source was configured with raise_exception_on_missing_stream=True. This was used on very
646
+ # few sources like facebook-marketing and google-ads. We decided not to port this feature over,
647
+ # but we can do so if we feel it necessary. With the current behavior,we should still result
648
+ # in a partial failure since missing streams will be marked as INCOMPLETE.
649
+ self._message_repository.emit_message(
650
+ as_airbyte_message(configured_stream.stream, AirbyteStreamStatus.INCOMPLETE)
651
+ )
644
652
  return abstract_streams
@@ -31,56 +31,56 @@ DEFAULT_ERROR_MAPPING: Mapping[Union[int, str, Type[Exception]], ErrorResolution
31
31
  400: ErrorResolution(
32
32
  response_action=ResponseAction.FAIL,
33
33
  failure_type=FailureType.system_error,
34
- error_message="Bad request. Please check your request parameters.",
34
+ error_message="HTTP Status Code: 400. Error: Bad request. Please check your request parameters.",
35
35
  ),
36
36
  401: ErrorResolution(
37
37
  response_action=ResponseAction.FAIL,
38
38
  failure_type=FailureType.config_error,
39
- error_message="Unauthorized. Please ensure you are authenticated correctly.",
39
+ error_message="HTTP Status Code: 401. Error: Unauthorized. Please ensure you are authenticated correctly.",
40
40
  ),
41
41
  403: ErrorResolution(
42
42
  response_action=ResponseAction.FAIL,
43
43
  failure_type=FailureType.config_error,
44
- error_message="Forbidden. You don't have permission to access this resource.",
44
+ error_message="HTTP Status Code: 403. Error: Forbidden. You don't have permission to access this resource.",
45
45
  ),
46
46
  404: ErrorResolution(
47
47
  response_action=ResponseAction.FAIL,
48
48
  failure_type=FailureType.system_error,
49
- error_message="Not found. The requested resource was not found on the server.",
49
+ error_message="HTTP Status Code: 404. Error: Not found. The requested resource was not found on the server.",
50
50
  ),
51
51
  405: ErrorResolution(
52
52
  response_action=ResponseAction.FAIL,
53
53
  failure_type=FailureType.system_error,
54
- error_message="Method not allowed. Please check your request method.",
54
+ error_message="HTTP Status Code: 405. Error: Method not allowed. Please check your request method.",
55
55
  ),
56
56
  408: ErrorResolution(
57
57
  response_action=ResponseAction.RETRY,
58
58
  failure_type=FailureType.transient_error,
59
- error_message="Request timeout.",
59
+ error_message="HTTP Status Code: 408. Error: Request timeout.",
60
60
  ),
61
61
  429: ErrorResolution(
62
62
  response_action=ResponseAction.RATE_LIMITED,
63
63
  failure_type=FailureType.transient_error,
64
- error_message="Too many requests.",
64
+ error_message="HTTP Status Code: 429. Error: Too many requests.",
65
65
  ),
66
66
  500: ErrorResolution(
67
67
  response_action=ResponseAction.RETRY,
68
68
  failure_type=FailureType.transient_error,
69
- error_message="Internal server error.",
69
+ error_message="HTTP Status Code: 500. Error: Internal server error.",
70
70
  ),
71
71
  502: ErrorResolution(
72
72
  response_action=ResponseAction.RETRY,
73
73
  failure_type=FailureType.transient_error,
74
- error_message="Bad gateway.",
74
+ error_message="HTTP Status Code: 502. Error: Bad gateway.",
75
75
  ),
76
76
  503: ErrorResolution(
77
77
  response_action=ResponseAction.RETRY,
78
78
  failure_type=FailureType.transient_error,
79
- error_message="Service unavailable.",
79
+ error_message="HTTP Status Code: 503. Error: Service unavailable.",
80
80
  ),
81
81
  504: ErrorResolution(
82
82
  response_action=ResponseAction.RETRY,
83
83
  failure_type=FailureType.transient_error,
84
- error_message="Gateway timeout.",
84
+ error_message="HTTP Status Code: 504. Error: Gateway timeout.",
85
85
  ),
86
86
  }
@@ -7,6 +7,8 @@ from typing import Optional, Union
7
7
 
8
8
  import requests
9
9
 
10
+ from airbyte_cdk.models import FailureType
11
+
10
12
 
11
13
  class BaseBackoffException(requests.exceptions.HTTPError):
12
14
  def __init__(
@@ -14,7 +16,9 @@ class BaseBackoffException(requests.exceptions.HTTPError):
14
16
  request: requests.PreparedRequest,
15
17
  response: Optional[Union[requests.Response, Exception]],
16
18
  error_message: str = "",
19
+ failure_type: Optional[FailureType] = None,
17
20
  ):
21
+ self.failure_type = failure_type
18
22
  if isinstance(response, requests.Response):
19
23
  error_message = (
20
24
  error_message
@@ -43,6 +47,7 @@ class UserDefinedBackoffException(BaseBackoffException):
43
47
  request: requests.PreparedRequest,
44
48
  response: Optional[Union[requests.Response, Exception]],
45
49
  error_message: str = "",
50
+ failure_type: Optional[FailureType] = None,
46
51
  ):
47
52
  """
48
53
  :param backoff: how long to backoff in seconds
@@ -50,7 +55,12 @@ class UserDefinedBackoffException(BaseBackoffException):
50
55
  :param response: the response that triggered the backoff exception
51
56
  """
52
57
  self.backoff = backoff
53
- super().__init__(request=request, response=response, error_message=error_message)
58
+ super().__init__(
59
+ request=request,
60
+ response=response,
61
+ error_message=error_message,
62
+ failure_type=failure_type,
63
+ )
54
64
 
55
65
 
56
66
  class DefaultBackoffException(BaseBackoffException):
@@ -18,6 +18,7 @@ from airbyte_cdk.models import (
18
18
  AirbyteStreamStatus,
19
19
  AirbyteStreamStatusReason,
20
20
  AirbyteStreamStatusReasonType,
21
+ FailureType,
21
22
  Level,
22
23
  StreamDescriptor,
23
24
  )
@@ -35,6 +36,7 @@ from airbyte_cdk.sources.streams.http.error_handlers import (
35
36
  ResponseAction,
36
37
  )
37
38
  from airbyte_cdk.sources.streams.http.exceptions import (
39
+ BaseBackoffException,
38
40
  DefaultBackoffException,
39
41
  RateLimitBackoffException,
40
42
  RequestBodyException,
@@ -290,15 +292,25 @@ class HttpClient:
290
292
  backoff_handler = http_client_default_backoff_handler(
291
293
  max_tries=max_tries, max_time=max_time
292
294
  )
293
- # backoff handlers wrap _send, so it will always return a response
294
- response = backoff_handler(rate_limit_backoff_handler(user_backoff_handler))(
295
- request,
296
- request_kwargs,
297
- log_formatter=log_formatter,
298
- exit_on_rate_limit=exit_on_rate_limit,
299
- ) # type: ignore # mypy can't infer that backoff_handler wraps _send
300
-
301
- return response
295
+ # backoff handlers wrap _send, so it will always return a response -- except when all retries are exhausted
296
+ try:
297
+ response = backoff_handler(rate_limit_backoff_handler(user_backoff_handler))(
298
+ request,
299
+ request_kwargs,
300
+ log_formatter=log_formatter,
301
+ exit_on_rate_limit=exit_on_rate_limit,
302
+ ) # type: ignore # mypy can't infer that backoff_handler wraps _send
303
+
304
+ return response
305
+ except BaseBackoffException as e:
306
+ self._logger.error(f"Retries exhausted with backoff exception.", exc_info=True)
307
+ raise MessageRepresentationAirbyteTracedErrors(
308
+ internal_message=f"Exhausted available request attempts. Exception: {e}",
309
+ message=f"Exhausted available request attempts. Please see logs for more details. Exception: {e}",
310
+ failure_type=e.failure_type or FailureType.system_error,
311
+ exception=e,
312
+ stream_descriptor=StreamDescriptor(name=self._name),
313
+ )
302
314
 
303
315
  def _send(
304
316
  self,
@@ -492,6 +504,7 @@ class HttpClient:
492
504
  request=request,
493
505
  response=(response if response is not None else exc),
494
506
  error_message=error_message,
507
+ failure_type=error_resolution.failure_type,
495
508
  )
496
509
 
497
510
  elif retry_endlessly:
@@ -499,12 +512,14 @@ class HttpClient:
499
512
  request=request,
500
513
  response=(response if response is not None else exc),
501
514
  error_message=error_message,
515
+ failure_type=error_resolution.failure_type,
502
516
  )
503
517
 
504
518
  raise DefaultBackoffException(
505
519
  request=request,
506
520
  response=(response if response is not None else exc),
507
521
  error_message=error_message,
522
+ failure_type=error_resolution.failure_type,
508
523
  )
509
524
 
510
525
  elif response:
@@ -240,7 +240,11 @@ class AbstractOauth2Authenticator(AuthBase):
240
240
  except requests.exceptions.RequestException as e:
241
241
  if e.response is not None:
242
242
  if e.response.status_code == 429 or e.response.status_code >= 500:
243
- raise DefaultBackoffException(request=e.response.request, response=e.response)
243
+ raise DefaultBackoffException(
244
+ request=e.response.request,
245
+ response=e.response,
246
+ failure_type=FailureType.transient_error,
247
+ )
244
248
  if self._wrap_refresh_token_exception(e):
245
249
  message = "Refresh token is invalid or expired. Please re-authenticate from Sources/<your source>/Settings."
246
250
  raise AirbyteTracedException(
@@ -8,6 +8,7 @@ from enum import Flag, auto
8
8
  from typing import TYPE_CHECKING, Any, Callable, Dict, Generator, Mapping, Optional, cast
9
9
 
10
10
  from jsonschema import Draft7Validator, ValidationError, validators
11
+ from jsonschema.protocols import Validator
11
12
  from referencing import Registry, Resource
12
13
  from referencing._core import Resolver
13
14
  from referencing.exceptions import Unresolvable
@@ -17,12 +18,6 @@ from airbyte_cdk.sources.utils.schema_helpers import expand_refs
17
18
 
18
19
  from .schema_helpers import get_ref_resolver_registry
19
20
 
20
- try:
21
- from jsonschema.validators import Validator
22
- except:
23
- from jsonschema import Validator
24
-
25
-
26
21
  MAX_NESTING_DEPTH = 3
27
22
  json_to_python_simple = {
28
23
  "string": str,
@@ -82,11 +82,10 @@ assert not ab_datetime_try_parse("foo") # Invalid: not parsab
82
82
  """
83
83
 
84
84
  from datetime import datetime, timedelta, timezone
85
- from typing import Any, Optional, Union, overload
85
+ from typing import Any, Union, overload
86
86
 
87
87
  from dateutil import parser
88
- from typing_extensions import Never
89
- from whenever import Instant, LocalDateTime, ZonedDateTime
88
+ from whenever import Instant
90
89
 
91
90
 
92
91
  class AirbyteDateTime(datetime):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 7.0.4
3
+ Version: 7.1.0
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -84,7 +84,7 @@ Requires-Dist: unstructured.pytesseract (>=0.3.12) ; extra == "file-based"
84
84
  Requires-Dist: unstructured[docx,pptx] (==0.10.27) ; extra == "file-based"
85
85
  Requires-Dist: uvicorn (>=0.35.0) ; extra == "manifest-server"
86
86
  Requires-Dist: wcmatch (==10.0)
87
- Requires-Dist: whenever (>=0.6.16,<0.7.0)
87
+ Requires-Dist: whenever (>=0.7.3,<0.9.0)
88
88
  Requires-Dist: xmltodict (>=0.13,<0.15)
89
89
  Project-URL: Documentation, https://docs.airbyte.io/
90
90
  Project-URL: Repository, https://github.com/airbytehq/airbyte-python-cdk
@@ -121,12 +121,12 @@ airbyte_cdk/sources/declarative/auth/selective_authenticator.py,sha256=qGwC6YsCl
121
121
  airbyte_cdk/sources/declarative/auth/token.py,sha256=2EnE78EhBOY9hbeZnQJ9AuFaM-G7dccU-oKo_LThRQk,11070
122
122
  airbyte_cdk/sources/declarative/auth/token_provider.py,sha256=Jzuxlmt1_-_aFC_n0OmP8L1nDOacLzbEVVx3kjdX_W8,3104
123
123
  airbyte_cdk/sources/declarative/checks/__init__.py,sha256=cpoBwEbRNcMi7Rmi5pD63ppUvAOZsAWzasmc57ob9rc,873
124
- airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py,sha256=BhPAOalZuA4sdi8DS2n42UMzj4PJ0udtRZ95a2T4ZOI,2302
124
+ airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py,sha256=72d3oafXAX31dEeneFLBjRMS_3a8B8QISjlFcOlfeoY,2341
125
125
  airbyte_cdk/sources/declarative/checks/check_stream.py,sha256=G7VBOwDdybbpZstFG0hgdy20CJZkgBKILLkQBQzjZ9A,7997
126
126
  airbyte_cdk/sources/declarative/checks/connection_checker.py,sha256=HQHK3gO5xXeWYdxDjiXO3xzz5MBOYcQn0Dd6IRW7Vx8,1400
127
127
  airbyte_cdk/sources/declarative/concurrency_level/__init__.py,sha256=5XUqrmlstYlMM0j6crktlKQwALek0uiz2D3WdM46MyA,191
128
128
  airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py,sha256=YIwCTCpOr_QSNW4ltQK0yUGWInI8PKNY216HOOegYLk,2101
129
- airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=MdXptT-2ocWVFFGaCVBuXMGvEkVxTbu9WatA2hBCQEY,30374
129
+ airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=z0AgJ6AZl7F1CmvHpLgqy3mufCVCtGr6mwL0tLDvPRM,31190
130
130
  airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
131
131
  airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=_zGNGq31RNy_0QBLt_EcTvgPyhj7urPdx6oA3M5-r3o,3150
132
132
  airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
@@ -374,18 +374,18 @@ airbyte_cdk/sources/streams/http/availability_strategy.py,sha256=sovoGFThZr-doMN
374
374
  airbyte_cdk/sources/streams/http/error_handlers/__init__.py,sha256=nNO0bnD0ogDlR4AQrI-YmpcM911vWe83b7RJYgvjSYs,666
375
375
  airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py,sha256=7fIkF00wD6bqIXtiG2QAgbje_xiQ5JTs99ibwR8LLXY,1030
376
376
  airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py,sha256=1_1Gi2ImwTbh4SgIKCRh2P4kPaVeAeHc1ib6IrBfqKA,411
377
- airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py,sha256=drMniPygapMfOigh_ShJQvX6oqJaN4UA3cbRMkOgZJ4,3402
377
+ airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py,sha256=-gn0YPkoxpQMZuirzUevqNcaLkyILPA04TLtA7W0H18,3732
378
378
  airbyte_cdk/sources/streams/http/error_handlers/error_handler.py,sha256=GuqP7U1eC9RPaiD4y4Mkf17vKcOXo2ENnMB-CUBLsbo,1164
379
379
  airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py,sha256=xC93uB5BJd3iOnAXCrYLJTitWeGZlqzwe55VtsZqNnE,456
380
380
  airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py,sha256=2gqececTxxUqO6aIkVNNXADg48Px5EHUwnXHL9KiPT8,4188
381
381
  airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py,sha256=GW5rkBQLLTj7MEaDdbpG7DHxTQVRrDOg1ehLLxjqiM4,1828
382
382
  airbyte_cdk/sources/streams/http/error_handlers/response_models.py,sha256=xGIVELBFY0TmH9aUq1ikoqJz8oHLr6di2JLvKWVEO-s,2236
383
- airbyte_cdk/sources/streams/http/exceptions.py,sha256=njC7MlMJoFYcSGz4mIp6-bqLFTr6vC8ej25X0oSeyjE,1824
383
+ airbyte_cdk/sources/streams/http/exceptions.py,sha256=TTUpWq_qLPtdvXqYPpMhtYbFVQ7dGtajDVfjb6KQ8z8,2099
384
384
  airbyte_cdk/sources/streams/http/http.py,sha256=0uariNq8OFnlX7iqOHwBhecxA-Hfd5hSY8_XCEgn3jI,28499
385
- airbyte_cdk/sources/streams/http/http_client.py,sha256=8E8RBDzkBUgvDqFA5OgVBEvCjGbcUeuQPiCkDLHg31U,24182
385
+ airbyte_cdk/sources/streams/http/http_client.py,sha256=rFkMWQUzgr4C8ulqOJ5tn9JfOEwbPndC6P_UIF31Kz8,25079
386
386
  airbyte_cdk/sources/streams/http/rate_limiting.py,sha256=IwdjrHKUnU97XO4qONgYRv4YYW51xQ8SJm4WLafXDB8,6351
387
387
  airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py,sha256=RN0D3nOX1xLgwEwKWu6pkGy3XqBFzKSNZ8Lf6umU2eY,413
388
- airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py,sha256=0WfnxuxDwRYeq-PIwdUjJujDnxuJPhNfHlX_8aNHtYU,19663
388
+ airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py,sha256=aWrBmJ8AhUtvtHhHq5JGVZFXjDa7jG8DZePG4gEs9VY,19800
389
389
  airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py,sha256=Y3n7J-sk5yGjv_OxtY6Z6k0PEsFZmtIRi-x0KCbaHdA,1010
390
390
  airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py,sha256=gVLo7nU-ORJd413TZHMJQV4m_vaGnRqhoXGGWehFjDA,19253
391
391
  airbyte_cdk/sources/streams/http/requests_native_auth/token.py,sha256=h5PTzcdH-RQLeCg7xZ45w_484OPUDSwNWl_iMJQmZoI,2526
@@ -398,7 +398,7 @@ airbyte_cdk/sources/utils/files_directory.py,sha256=z8Dmr-wkL1sAqdwCST4MBUFAyMHP
398
398
  airbyte_cdk/sources/utils/record_helper.py,sha256=7wL-pDYrBpcmZHa8ORtiSOqBZJEZI5hdl2dA1RYiatk,2029
399
399
  airbyte_cdk/sources/utils/schema_helpers.py,sha256=_SCOPalKoMW3SX9J-zK6UsAO0oHsfCyW-F2wQlPJ3PU,9145
400
400
  airbyte_cdk/sources/utils/slice_logger.py,sha256=M1TvcYGMftXR841XdJmeEpKpQqrdOD5X-qsspfAMKMs,2168
401
- airbyte_cdk/sources/utils/transform.py,sha256=49xcU97dZAO7FTQItrpN0mZ4qjz5d6huftF4DYbze6c,11971
401
+ airbyte_cdk/sources/utils/transform.py,sha256=b45WBpkdhsRDJZa95DnwfTcc5eJHmBBSs1CWP6CHJt8,11914
402
402
  airbyte_cdk/sources/utils/types.py,sha256=41ZQR681t5TUnOScij58d088sb99klH_ZENFcaYro_g,175
403
403
  airbyte_cdk/sql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
404
404
  airbyte_cdk/sql/_util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -444,7 +444,7 @@ airbyte_cdk/utils/analytics_message.py,sha256=bi3uugQ2NjecnwTnz63iD5D1M8ZR8mXPbd
444
444
  airbyte_cdk/utils/connector_paths.py,sha256=MXj0RBi3HpuvQTWH6-vc62BZZ3XguHMq0CVIkjhS3qs,8779
445
445
  airbyte_cdk/utils/constants.py,sha256=QzCi7j5SqpI5I06uRvQ8FC73JVJi7rXaRnR3E_gro5c,108
446
446
  airbyte_cdk/utils/datetime_format_inferrer.py,sha256=Ne2cpk7Tx3eZDEW2Q3O7jnNOY9g-w-AUMt3Ltvwg1tY,3989
447
- airbyte_cdk/utils/datetime_helpers.py,sha256=8mqzZ67Or2PBp7tLtrhh6XFv4wFzYsjCL_DOQJRaftI,17751
447
+ airbyte_cdk/utils/datetime_helpers.py,sha256=b3jKNpz4HPwWXCeBoyYKVbuqFvnp4in1Vy1bMK8R9dI,17675
448
448
  airbyte_cdk/utils/docker.py,sha256=ub6xurQHw6qIhzgDO3V9sXOG1jkZyDGbOSSDjcazEHo,17989
449
449
  airbyte_cdk/utils/event_timing.py,sha256=aiuFmPU80buLlNdKq4fDTEqqhEIelHPF6AalFGwY8as,2557
450
450
  airbyte_cdk/utils/is_cloud_environment.py,sha256=DayV32Irh-SdnJ0MnjvstwCJ66_l5oEsd8l85rZtHoc,574
@@ -457,9 +457,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G
457
457
  airbyte_cdk/utils/spec_schema_transformations.py,sha256=9YDJmnIGFsT51CVQf2tSSvTapGimITjEFGbUTSZAGTI,963
458
458
  airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
459
459
  airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
460
- airbyte_cdk-7.0.4.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
461
- airbyte_cdk-7.0.4.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
462
- airbyte_cdk-7.0.4.dist-info/METADATA,sha256=mPycx2yG98V8BkQJp9vwCLHAjACLczgUquxx-jgf7og,6799
463
- airbyte_cdk-7.0.4.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
464
- airbyte_cdk-7.0.4.dist-info/entry_points.txt,sha256=eLZ2UYvJZGm1s07Pplcs--1Gim60YhZWTb53j_dghwU,195
465
- airbyte_cdk-7.0.4.dist-info/RECORD,,
460
+ airbyte_cdk-7.1.0.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
461
+ airbyte_cdk-7.1.0.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
462
+ airbyte_cdk-7.1.0.dist-info/METADATA,sha256=XxxRO3gjQdumZhkyuvOfchDtzLQFNDHHl3OH5oKw1ho,6798
463
+ airbyte_cdk-7.1.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
464
+ airbyte_cdk-7.1.0.dist-info/entry_points.txt,sha256=eLZ2UYvJZGm1s07Pplcs--1Gim60YhZWTb53j_dghwU,195
465
+ airbyte_cdk-7.1.0.dist-info/RECORD,,