airbyte-cdk 6.45.4.post72.dev14497997772__py3-none-any.whl → 6.45.5__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 (19) hide show
  1. airbyte_cdk/sources/declarative/auth/oauth.py +2 -2
  2. airbyte_cdk/sources/declarative/concurrent_declarative_source.py +6 -2
  3. airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +3 -1
  4. airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +28 -11
  5. airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +4 -27
  6. airbyte_cdk/test/{declarative/utils/job_runner.py → standard_tests/_job_runner.py} +1 -1
  7. airbyte_cdk/test/standard_tests/connector_base.py +2 -2
  8. airbyte_cdk/test/standard_tests/declarative_sources.py +2 -2
  9. airbyte_cdk/test/{declarative → standard_tests}/models/__init__.py +1 -1
  10. airbyte_cdk/test/standard_tests/source_base.py +4 -4
  11. {airbyte_cdk-6.45.4.post72.dev14497997772.dist-info → airbyte_cdk-6.45.5.dist-info}/METADATA +1 -1
  12. {airbyte_cdk-6.45.4.post72.dev14497997772.dist-info → airbyte_cdk-6.45.5.dist-info}/RECORD +17 -19
  13. airbyte_cdk/test/declarative/__init__.py +0 -6
  14. airbyte_cdk/test/declarative/utils/__init__.py +0 -0
  15. /airbyte_cdk/test/{declarative → standard_tests}/models/scenario.py +0 -0
  16. {airbyte_cdk-6.45.4.post72.dev14497997772.dist-info → airbyte_cdk-6.45.5.dist-info}/LICENSE.txt +0 -0
  17. {airbyte_cdk-6.45.4.post72.dev14497997772.dist-info → airbyte_cdk-6.45.5.dist-info}/LICENSE_SHORT +0 -0
  18. {airbyte_cdk-6.45.4.post72.dev14497997772.dist-info → airbyte_cdk-6.45.5.dist-info}/WHEEL +0 -0
  19. {airbyte_cdk-6.45.4.post72.dev14497997772.dist-info → airbyte_cdk-6.45.5.dist-info}/entry_points.txt +0 -0
@@ -239,8 +239,8 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
239
239
  def _has_access_token_been_initialized(self) -> bool:
240
240
  return self._access_token is not None
241
241
 
242
- def set_token_expiry_date(self, value: Union[str, int]) -> None:
243
- self._token_expiry_date = self._parse_token_expiration_date(value)
242
+ def set_token_expiry_date(self, value: AirbyteDateTime) -> None:
243
+ self._token_expiry_date = value
244
244
 
245
245
  def get_assertion_name(self) -> str:
246
246
  return self.assertion_name
@@ -19,7 +19,10 @@ from airbyte_cdk.sources.declarative.extractors import RecordSelector
19
19
  from airbyte_cdk.sources.declarative.extractors.record_filter import (
20
20
  ClientSideIncrementalRecordFilterDecorator,
21
21
  )
22
- from airbyte_cdk.sources.declarative.incremental import ConcurrentPerPartitionCursor
22
+ from airbyte_cdk.sources.declarative.incremental import (
23
+ ConcurrentPerPartitionCursor,
24
+ GlobalSubstreamCursor,
25
+ )
23
26
  from airbyte_cdk.sources.declarative.incremental.datetime_based_cursor import DatetimeBasedCursor
24
27
  from airbyte_cdk.sources.declarative.incremental.per_partition_with_global import (
25
28
  PerPartitionWithGlobalCursor,
@@ -361,7 +364,8 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
361
364
  == DatetimeBasedCursorModel.__name__
362
365
  and hasattr(declarative_stream.retriever, "stream_slicer")
363
366
  and isinstance(
364
- declarative_stream.retriever.stream_slicer, PerPartitionWithGlobalCursor
367
+ declarative_stream.retriever.stream_slicer,
368
+ (GlobalSubstreamCursor, PerPartitionWithGlobalCursor),
365
369
  )
366
370
  ):
367
371
  stream_state = self._connector_state_manager.get_stream_state(
@@ -1439,7 +1439,9 @@ class ModelToComponentFactory:
1439
1439
  stream_state = self.apply_stream_state_migrations(stream_state_migrations, stream_state)
1440
1440
 
1441
1441
  # Per-partition state doesn't make sense for GroupingPartitionRouter, so force the global state
1442
- use_global_cursor = isinstance(partition_router, GroupingPartitionRouter)
1442
+ use_global_cursor = isinstance(
1443
+ partition_router, GroupingPartitionRouter
1444
+ ) or component_definition.get("global_substream_cursor", False)
1443
1445
 
1444
1446
  # Return the concurrent cursor and state converter
1445
1447
  return ConcurrentPerPartitionCursor(
@@ -130,7 +130,7 @@ class AbstractOauth2Authenticator(AuthBase):
130
130
  headers = self.get_refresh_request_headers()
131
131
  return headers if headers else None
132
132
 
133
- def refresh_access_token(self) -> Tuple[str, Union[str, int]]:
133
+ def refresh_access_token(self) -> Tuple[str, AirbyteDateTime]:
134
134
  """
135
135
  Returns the refresh token and its expiration datetime
136
136
 
@@ -148,6 +148,14 @@ class AbstractOauth2Authenticator(AuthBase):
148
148
  # PRIVATE METHODS
149
149
  # ----------------
150
150
 
151
+ def _default_token_expiry_date(self) -> AirbyteDateTime:
152
+ """
153
+ Returns the default token expiry date
154
+ """
155
+ # 1 hour was chosen as a middle ground to avoid unnecessary frequent refreshes and token expiration
156
+ default_token_expiry_duration_hours = 1 # 1 hour
157
+ return ab_datetime_now() + timedelta(hours=default_token_expiry_duration_hours)
158
+
151
159
  def _wrap_refresh_token_exception(
152
160
  self, exception: requests.exceptions.RequestException
153
161
  ) -> bool:
@@ -257,14 +265,10 @@ class AbstractOauth2Authenticator(AuthBase):
257
265
 
258
266
  def _parse_token_expiration_date(self, value: Union[str, int]) -> AirbyteDateTime:
259
267
  """
260
- Return the expiration datetime of the refresh token
268
+ Parse a string or integer token expiration date into a datetime object
261
269
 
262
270
  :return: expiration datetime
263
271
  """
264
- if not value and not self.token_has_expired():
265
- # No expiry token was provided but the previous one is not expired so it's fine
266
- return self.get_token_expiry_date()
267
-
268
272
  if self.token_expiry_is_time_of_expiration:
269
273
  if not self.token_expiry_date_format:
270
274
  raise ValueError(
@@ -308,17 +312,30 @@ class AbstractOauth2Authenticator(AuthBase):
308
312
  """
309
313
  return self._find_and_get_value_from_response(response_data, self.get_refresh_token_name())
310
314
 
311
- def _extract_token_expiry_date(self, response_data: Mapping[str, Any]) -> Any:
315
+ def _extract_token_expiry_date(self, response_data: Mapping[str, Any]) -> AirbyteDateTime:
312
316
  """
313
317
  Extracts the token_expiry_date, like `expires_in` or `expires_at`, etc from the given response data.
314
318
 
319
+ If the token_expiry_date is not found, it will return an existing token expiry date if set, or a default token expiry date.
320
+
315
321
  Args:
316
322
  response_data (Mapping[str, Any]): The response data from which to extract the token_expiry_date.
317
323
 
318
324
  Returns:
319
- str: The extracted token_expiry_date.
325
+ The extracted token_expiry_date or None if not found.
320
326
  """
321
- return self._find_and_get_value_from_response(response_data, self.get_expires_in_name())
327
+ expires_in = self._find_and_get_value_from_response(
328
+ response_data, self.get_expires_in_name()
329
+ )
330
+ if expires_in is not None:
331
+ return self._parse_token_expiration_date(expires_in)
332
+
333
+ # expires_in is None
334
+ existing_expiry_date = self.get_token_expiry_date()
335
+ if existing_expiry_date and not self.token_has_expired():
336
+ return existing_expiry_date
337
+
338
+ return self._default_token_expiry_date()
322
339
 
323
340
  def _find_and_get_value_from_response(
324
341
  self,
@@ -344,7 +361,7 @@ class AbstractOauth2Authenticator(AuthBase):
344
361
  """
345
362
  if current_depth > max_depth:
346
363
  # this is needed to avoid an inf loop, possible with a very deep nesting observed.
347
- message = f"The maximum level of recursion is reached. Couldn't find the speficied `{key_name}` in the response."
364
+ message = f"The maximum level of recursion is reached. Couldn't find the specified `{key_name}` in the response."
348
365
  raise ResponseKeysMaxRecurtionReached(
349
366
  internal_message=message, message=message, failure_type=FailureType.config_error
350
367
  )
@@ -441,7 +458,7 @@ class AbstractOauth2Authenticator(AuthBase):
441
458
  """Expiration date of the access token"""
442
459
 
443
460
  @abstractmethod
444
- def set_token_expiry_date(self, value: Union[str, int]) -> None:
461
+ def set_token_expiry_date(self, value: AirbyteDateTime) -> None:
445
462
  """Setter for access token expiration date"""
446
463
 
447
464
  @abstractmethod
@@ -120,8 +120,8 @@ class Oauth2Authenticator(AbstractOauth2Authenticator):
120
120
  def get_token_expiry_date(self) -> AirbyteDateTime:
121
121
  return self._token_expiry_date
122
122
 
123
- def set_token_expiry_date(self, value: Union[str, int]) -> None:
124
- self._token_expiry_date = self._parse_token_expiration_date(value)
123
+ def set_token_expiry_date(self, value: AirbyteDateTime) -> None:
124
+ self._token_expiry_date = value
125
125
 
126
126
  @property
127
127
  def token_expiry_is_time_of_expiration(self) -> bool:
@@ -316,26 +316,6 @@ class SingleUseRefreshTokenOauth2Authenticator(Oauth2Authenticator):
316
316
  """Returns True if the token is expired"""
317
317
  return ab_datetime_now() > self.get_token_expiry_date()
318
318
 
319
- @staticmethod
320
- def get_new_token_expiry_date(
321
- access_token_expires_in: str,
322
- token_expiry_date_format: str | None = None,
323
- ) -> AirbyteDateTime:
324
- """
325
- Calculate the new token expiry date based on the provided expiration duration or format.
326
-
327
- Args:
328
- access_token_expires_in (str): The duration (in seconds) until the access token expires, or the expiry date in a specific format.
329
- token_expiry_date_format (str | None, optional): The format of the expiry date if provided. Defaults to None.
330
-
331
- Returns:
332
- AirbyteDateTime: The calculated expiry date of the access token.
333
- """
334
- if token_expiry_date_format:
335
- return ab_datetime_parse(access_token_expires_in)
336
- else:
337
- return ab_datetime_now() + timedelta(seconds=int(access_token_expires_in))
338
-
339
319
  def get_access_token(self) -> str:
340
320
  """Retrieve new access and refresh token if the access token has expired.
341
321
  The new refresh token is persisted with the set_refresh_token function
@@ -346,16 +326,13 @@ class SingleUseRefreshTokenOauth2Authenticator(Oauth2Authenticator):
346
326
  new_access_token, access_token_expires_in, new_refresh_token = (
347
327
  self.refresh_access_token()
348
328
  )
349
- new_token_expiry_date: AirbyteDateTime = self.get_new_token_expiry_date(
350
- access_token_expires_in, self._token_expiry_date_format
351
- )
352
329
  self.access_token = new_access_token
353
330
  self.set_refresh_token(new_refresh_token)
354
- self.set_token_expiry_date(new_token_expiry_date)
331
+ self.set_token_expiry_date(access_token_expires_in)
355
332
  self._emit_control_message()
356
333
  return self.access_token
357
334
 
358
- def refresh_access_token(self) -> Tuple[str, str, str]: # type: ignore[override]
335
+ def refresh_access_token(self) -> Tuple[str, AirbyteDateTime, str]: # type: ignore[override]
359
336
  """
360
337
  Refreshes the access token by making a handled request and extracting the necessary token information.
361
338
 
@@ -16,7 +16,7 @@ from airbyte_cdk.models import (
16
16
  Status,
17
17
  )
18
18
  from airbyte_cdk.test import entrypoint_wrapper
19
- from airbyte_cdk.test.declarative.models import (
19
+ from airbyte_cdk.test.standard_tests.models import (
20
20
  ConnectorTestScenario,
21
21
  )
22
22
 
@@ -18,10 +18,10 @@ from airbyte_cdk.models import (
18
18
  Type,
19
19
  )
20
20
  from airbyte_cdk.test import entrypoint_wrapper
21
- from airbyte_cdk.test.declarative.models import (
21
+ from airbyte_cdk.test.standard_tests._job_runner import IConnector, run_test_job
22
+ from airbyte_cdk.test.standard_tests.models import (
22
23
  ConnectorTestScenario,
23
24
  )
24
- from airbyte_cdk.test.declarative.utils.job_runner import IConnector, run_test_job
25
25
 
26
26
  ACCEPTANCE_TEST_CONFIG = "acceptance-test-config.yml"
27
27
  MANIFEST_YAML = "manifest.yaml"
@@ -9,9 +9,9 @@ from boltons.typeutils import classproperty
9
9
  from airbyte_cdk.sources.declarative.concurrent_declarative_source import (
10
10
  ConcurrentDeclarativeSource,
11
11
  )
12
- from airbyte_cdk.test.declarative.models import ConnectorTestScenario
13
- from airbyte_cdk.test.declarative.utils.job_runner import IConnector
12
+ from airbyte_cdk.test.standard_tests._job_runner import IConnector
14
13
  from airbyte_cdk.test.standard_tests.connector_base import MANIFEST_YAML
14
+ from airbyte_cdk.test.standard_tests.models import ConnectorTestScenario
15
15
  from airbyte_cdk.test.standard_tests.source_base import SourceTestSuiteBase
16
16
 
17
17
 
@@ -1,4 +1,4 @@
1
- from airbyte_cdk.test.declarative.models.scenario import (
1
+ from airbyte_cdk.test.standard_tests.models.scenario import (
2
2
  ConnectorTestScenario,
3
3
  )
4
4
 
@@ -13,13 +13,13 @@ from airbyte_cdk.models import (
13
13
  Type,
14
14
  )
15
15
  from airbyte_cdk.test import entrypoint_wrapper
16
- from airbyte_cdk.test.declarative.models import (
17
- ConnectorTestScenario,
18
- )
19
- from airbyte_cdk.test.declarative.utils.job_runner import run_test_job
16
+ from airbyte_cdk.test.standard_tests._job_runner import run_test_job
20
17
  from airbyte_cdk.test.standard_tests.connector_base import (
21
18
  ConnectorTestSuiteBase,
22
19
  )
20
+ from airbyte_cdk.test.standard_tests.models import (
21
+ ConnectorTestScenario,
22
+ )
23
23
 
24
24
 
25
25
  class SourceTestSuiteBase(ConnectorTestSuiteBase):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 6.45.4.post72.dev14497997772
3
+ Version: 6.45.5
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -57,7 +57,7 @@ airbyte_cdk/sources/declarative/async_job/timer.py,sha256=Fb8P72CQ7jIzJyzMSSNuBf
57
57
  airbyte_cdk/sources/declarative/auth/__init__.py,sha256=e2CRrcBWGhz3sQu3Oh34d1riEIwXipGS8hrSB1pu0Oo,284
58
58
  airbyte_cdk/sources/declarative/auth/declarative_authenticator.py,sha256=nf-OmRUHYG4ORBwyb5CANzuHEssE-oNmL-Lccn41Td8,1099
59
59
  airbyte_cdk/sources/declarative/auth/jwt.py,sha256=SICqNsN2Cn_EgKadIgWuZpQxuMHyzrMZD_2-Uwy10rY,8539
60
- airbyte_cdk/sources/declarative/auth/oauth.py,sha256=SUfib1oSzlyRRnOSg8Bui73mfyrcyr9OssdchbKdu4s,14162
60
+ airbyte_cdk/sources/declarative/auth/oauth.py,sha256=Uxh3EpIV0noe23e1j8efoegjk1d5B7xyVAFSaFtbwoQ,14127
61
61
  airbyte_cdk/sources/declarative/auth/selective_authenticator.py,sha256=qGwC6YsCldr1bIeKG6Qo-A9a5cTdHw-vcOn3OtQrS4c,1540
62
62
  airbyte_cdk/sources/declarative/auth/token.py,sha256=2EnE78EhBOY9hbeZnQJ9AuFaM-G7dccU-oKo_LThRQk,11070
63
63
  airbyte_cdk/sources/declarative/auth/token_provider.py,sha256=Jzuxlmt1_-_aFC_n0OmP8L1nDOacLzbEVVx3kjdX_W8,3104
@@ -67,7 +67,7 @@ airbyte_cdk/sources/declarative/checks/check_stream.py,sha256=QeExVmpSYjr_CnghHu
67
67
  airbyte_cdk/sources/declarative/checks/connection_checker.py,sha256=MBRJo6WJlZQHpIfOGaNOkkHUmgUl_4wDM6VPo41z5Ss,1383
68
68
  airbyte_cdk/sources/declarative/concurrency_level/__init__.py,sha256=5XUqrmlstYlMM0j6crktlKQwALek0uiz2D3WdM46MyA,191
69
69
  airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py,sha256=YIwCTCpOr_QSNW4ltQK0yUGWInI8PKNY216HOOegYLk,2101
70
- airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=uhy0dRkA2jq89JdHZMTH5LdP200-Pm_LTaaWnCoUiaM,27687
70
+ airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=6zvkIWIfpSrCy4jr-_UFIp5SW3LgubrBfUsDeqhjcj4,27773
71
71
  airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
72
72
  airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=_zGNGq31RNy_0QBLt_EcTvgPyhj7urPdx6oA3M5-r3o,3150
73
73
  airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
@@ -120,7 +120,7 @@ airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py,sha256=nlVvHC511
120
120
  airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=Rir9_z3Kcd5Es0-LChrzk-0qubAsiK_RSEnLmK2OXm8,553
121
121
  airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=4C15MKV-zOrMVQAm4FyohDsrJUBCSpMv5tZw0SK3aeI,9685
122
122
  airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=IWUOdF03o-aQn0Occo1BJCxU0Pz-QILk5L67nzw2thw,6803
123
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=zNVn5rLsMT_6F6KgaQKHCzqb8Vbj2yqlQimtTP2VgpY,160228
123
+ airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=JZpU1iy0x0q95tyPVLRKhUxVnh68p_Ysm6_8JcUgNJo,160312
124
124
  airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=TBC9AkGaUqHm2IKHMPN6punBIcY5tWGULowcLoAVkfw,1109
125
125
  airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=VelO7zKqKtzMJ35jyFeg0ypJLQC0plqqIBNXoBW1G2E,3001
126
126
  airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
@@ -309,9 +309,9 @@ airbyte_cdk/sources/streams/http/http.py,sha256=0uariNq8OFnlX7iqOHwBhecxA-Hfd5hS
309
309
  airbyte_cdk/sources/streams/http/http_client.py,sha256=tDE0ROtxjGMVphvsw8INvGMtZ97hIF-v47pZ3jIyiwc,23011
310
310
  airbyte_cdk/sources/streams/http/rate_limiting.py,sha256=IwdjrHKUnU97XO4qONgYRv4YYW51xQ8SJm4WLafXDB8,6351
311
311
  airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py,sha256=RN0D3nOX1xLgwEwKWu6pkGy3XqBFzKSNZ8Lf6umU2eY,413
312
- airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py,sha256=XLVbJNSSnjECQKq7mMxYp1Pi5kbpAp2VmGq0fwMuDRc,18825
312
+ airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py,sha256=2vLa1zMWxIfaj5iLi404Y2YCgC0uDhRCJCvXDwcFBys,19569
313
313
  airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py,sha256=Y3n7J-sk5yGjv_OxtY6Z6k0PEsFZmtIRi-x0KCbaHdA,1010
314
- airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py,sha256=C2j2uVfi9d-3KgHO3NGxIiFdfASjHOtsd6g_LWPYOAs,20311
314
+ airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py,sha256=gVLo7nU-ORJd413TZHMJQV4m_vaGnRqhoXGGWehFjDA,19253
315
315
  airbyte_cdk/sources/streams/http/requests_native_auth/token.py,sha256=h5PTzcdH-RQLeCg7xZ45w_484OPUDSwNWl_iMJQmZoI,2526
316
316
  airbyte_cdk/sources/streams/permissions/identities_stream.py,sha256=9O9k6k18Xm3Zsiw_vnI_jsHXfMCQiek6V-jMkJJLxn8,2621
317
317
  airbyte_cdk/sources/streams/utils/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
@@ -336,11 +336,6 @@ airbyte_cdk/sql/shared/sql_processor.py,sha256=1CwfC3fp9dWnHBpKtly7vGduf9ho_Mahi
336
336
  airbyte_cdk/sql/types.py,sha256=XEIhRAo_ASd0kVLBkdLf5bHiRhNple-IJrC9TibcDdY,5880
337
337
  airbyte_cdk/test/__init__.py,sha256=f_XdkOg4_63QT2k3BbKY34209lppwgw-svzfZstQEq4,199
338
338
  airbyte_cdk/test/catalog_builder.py,sha256=-y05Cz1x0Dlk6oE9LSKhCozssV2gYBNtMdV5YYOPOtk,3015
339
- airbyte_cdk/test/declarative/__init__.py,sha256=IpPLFCCWnlpp_eTGKK_2WGRFfenbnolxYLmkQSZMO3U,205
340
- airbyte_cdk/test/declarative/models/__init__.py,sha256=rXoywbDd-oqEhRQLuaEQIDxykMeawHjzzeN3XIpGQN8,132
341
- airbyte_cdk/test/declarative/models/scenario.py,sha256=loOfIeKWbzhqyY3JiLU-sE7RKDAsvz3SLpI9APeTPiw,2378
342
- airbyte_cdk/test/declarative/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
343
- airbyte_cdk/test/declarative/utils/job_runner.py,sha256=WFE5HS4I_nR4P3jUl8GJx_8YpE2QUONxZwXlbT8CtUo,5817
344
339
  airbyte_cdk/test/entrypoint_wrapper.py,sha256=TyUmVJyIuGelAv6y8Wy_BnwqIRw_drjfZWKlroljCuQ,9951
345
340
  airbyte_cdk/test/mock_http/__init__.py,sha256=jE5kC6CQ0OXkTqKhciDnNVZHesBFVIA2YvkdFGwva7k,322
346
341
  airbyte_cdk/test/mock_http/matcher.py,sha256=4Qj8UnJKZIs-eodshryce3SN1Ayc8GZpBETmP6hTEyc,1446
@@ -349,11 +344,14 @@ airbyte_cdk/test/mock_http/request.py,sha256=tdB8cqk2vLgCDTOKffBKsM06llYs4ZecgtH
349
344
  airbyte_cdk/test/mock_http/response.py,sha256=s4-cQQqTtmeej0pQDWqmG0vUWpHS-93lIWMpW3zSVyU,662
350
345
  airbyte_cdk/test/mock_http/response_builder.py,sha256=debPx_lRYBaQVSwCoKLa0F8KFk3h0qG7bWxFBATa0cc,7958
351
346
  airbyte_cdk/test/standard_tests/__init__.py,sha256=YS2bghoGmQ-4GNIbe6RuEmvV-V1kpM1OyxTpebrs0Ig,1338
352
- airbyte_cdk/test/standard_tests/connector_base.py,sha256=N71P3YEve6955ocHljK7MX1kz68BeyEXPAiKrUB4qEw,5617
353
- airbyte_cdk/test/standard_tests/declarative_sources.py,sha256=1ae0mIxzP0IXWZzVBONGvsB3JMd2Z0aEQSiesEAKOZQ,3175
347
+ airbyte_cdk/test/standard_tests/_job_runner.py,sha256=d2JkwxJilYIJNmyVH946YMn8x1pnP3JaNT865V8vZzQ,5820
348
+ airbyte_cdk/test/standard_tests/connector_base.py,sha256=HGdDqLq8cCdBJ5T2s92PdN5miD2Vs_HczWOUbojAebY,5618
349
+ airbyte_cdk/test/standard_tests/declarative_sources.py,sha256=2L0PMBC7U7BxkwAAjlgvdqr_4K1PIwNxN7xNoSpoZg4,3176
354
350
  airbyte_cdk/test/standard_tests/destination_base.py,sha256=MARZip2mdo_PzGvzf2VBTAfrP4tbjrJYgeJUApnAArA,731
351
+ airbyte_cdk/test/standard_tests/models/__init__.py,sha256=bS25WlzQwPNxpU5DHtUDZo1DuXd0LkEv9qesNhY1jkY,135
352
+ airbyte_cdk/test/standard_tests/models/scenario.py,sha256=loOfIeKWbzhqyY3JiLU-sE7RKDAsvz3SLpI9APeTPiw,2378
355
353
  airbyte_cdk/test/standard_tests/pytest_hooks.py,sha256=4OMy2jNQThS8y7Tyj8MiMy2-SWjoefD4lGo-zQmCUfU,1886
356
- airbyte_cdk/test/standard_tests/source_base.py,sha256=3mvuTrlrHplacvoFjDIYNQcnUANU7n3D3hETpuT8th4,5234
354
+ airbyte_cdk/test/standard_tests/source_base.py,sha256=B30Jduz5n7Z8oM3y9RF6B5upTZN3am6rFod6mqgIizo,5235
357
355
  airbyte_cdk/test/state_builder.py,sha256=kLPql9lNzUJaBg5YYRLJlY_Hy5JLHJDVyKPMZMoYM44,946
358
356
  airbyte_cdk/test/utils/__init__.py,sha256=Hu-1XT2KDoYjDF7-_ziDwv5bY3PueGjANOCbzeOegDg,57
359
357
  airbyte_cdk/test/utils/data.py,sha256=CkCR1_-rujWNmPXFR1IXTMwx1rAl06wAyIKWpDcN02w,820
@@ -377,9 +375,9 @@ airbyte_cdk/utils/slice_hasher.py,sha256=EDxgROHDbfG-QKQb59m7h_7crN1tRiawdf5uU7G
377
375
  airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
378
376
  airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
379
377
  airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
380
- airbyte_cdk-6.45.4.post72.dev14497997772.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
381
- airbyte_cdk-6.45.4.post72.dev14497997772.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
382
- airbyte_cdk-6.45.4.post72.dev14497997772.dist-info/METADATA,sha256=rag54tcvQ3jJOZFoe7zqVXDQvAc9r3gZLL5Wc_q62zk,6135
383
- airbyte_cdk-6.45.4.post72.dev14497997772.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
384
- airbyte_cdk-6.45.4.post72.dev14497997772.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
385
- airbyte_cdk-6.45.4.post72.dev14497997772.dist-info/RECORD,,
378
+ airbyte_cdk-6.45.5.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
379
+ airbyte_cdk-6.45.5.dist-info/LICENSE_SHORT,sha256=aqF6D1NcESmpn-cqsxBtszTEnHKnlsp8L4x9wAh3Nxg,55
380
+ airbyte_cdk-6.45.5.dist-info/METADATA,sha256=Yx9K_oEn6WPdgAKJx7ObyeMQRTXpF8JYps2DLKjkdwM,6113
381
+ airbyte_cdk-6.45.5.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
382
+ airbyte_cdk-6.45.5.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
383
+ airbyte_cdk-6.45.5.dist-info/RECORD,,
@@ -1,6 +0,0 @@
1
- # Copyright (c) 2024 Airbyte, Inc., all rights reserved.
2
- """Declarative tests framework.
3
-
4
- This module provides fixtures and utilities for testing Airbyte sources and destinations
5
- in a declarative way.
6
- """
File without changes