airbyte-cdk 6.24.0.dev0__py3-none-any.whl → 6.25.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.
- airbyte_cdk/sources/declarative/auth/oauth.py +68 -11
- airbyte_cdk/sources/declarative/declarative_component_schema.yaml +9 -2
- airbyte_cdk/sources/declarative/models/declarative_component_schema.py +14 -4
- airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +15 -3
- airbyte_cdk/sources/http_logger.py +1 -1
- airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +20 -20
- {airbyte_cdk-6.24.0.dev0.dist-info → airbyte_cdk-6.25.0.dist-info}/METADATA +1 -1
- {airbyte_cdk-6.24.0.dev0.dist-info → airbyte_cdk-6.25.0.dist-info}/RECORD +11 -11
- {airbyte_cdk-6.24.0.dev0.dist-info → airbyte_cdk-6.25.0.dist-info}/LICENSE.txt +0 -0
- {airbyte_cdk-6.24.0.dev0.dist-info → airbyte_cdk-6.25.0.dist-info}/WHEEL +0 -0
- {airbyte_cdk-6.24.0.dev0.dist-info → airbyte_cdk-6.25.0.dist-info}/entry_points.txt +0 -0
@@ -3,11 +3,12 @@
|
|
3
3
|
#
|
4
4
|
|
5
5
|
from dataclasses import InitVar, dataclass, field
|
6
|
-
from typing import Any, List, Mapping, Optional, Union
|
6
|
+
from typing import Any, List, Mapping, MutableMapping, Optional, Union
|
7
7
|
|
8
8
|
import pendulum
|
9
9
|
|
10
10
|
from airbyte_cdk.sources.declarative.auth.declarative_authenticator import DeclarativeAuthenticator
|
11
|
+
from airbyte_cdk.sources.declarative.interpolation.interpolated_boolean import InterpolatedBoolean
|
11
12
|
from airbyte_cdk.sources.declarative.interpolation.interpolated_mapping import InterpolatedMapping
|
12
13
|
from airbyte_cdk.sources.declarative.interpolation.interpolated_string import InterpolatedString
|
13
14
|
from airbyte_cdk.sources.message import MessageRepository, NoopMessageRepository
|
@@ -44,10 +45,10 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
|
|
44
45
|
message_repository (MessageRepository): the message repository used to emit logs on HTTP requests
|
45
46
|
"""
|
46
47
|
|
47
|
-
client_id: Union[InterpolatedString, str]
|
48
|
-
client_secret: Union[InterpolatedString, str]
|
49
48
|
config: Mapping[str, Any]
|
50
49
|
parameters: InitVar[Mapping[str, Any]]
|
50
|
+
client_id: Optional[Union[InterpolatedString, str]] = None
|
51
|
+
client_secret: Optional[Union[InterpolatedString, str]] = None
|
51
52
|
token_refresh_endpoint: Optional[Union[InterpolatedString, str]] = None
|
52
53
|
refresh_token: Optional[Union[InterpolatedString, str]] = None
|
53
54
|
scopes: Optional[List[str]] = None
|
@@ -66,6 +67,8 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
|
|
66
67
|
grant_type_name: Union[InterpolatedString, str] = "grant_type"
|
67
68
|
grant_type: Union[InterpolatedString, str] = "refresh_token"
|
68
69
|
message_repository: MessageRepository = NoopMessageRepository()
|
70
|
+
profile_assertion: Optional[DeclarativeAuthenticator] = None
|
71
|
+
use_profile_assertion: Optional[Union[InterpolatedBoolean, str, bool]] = False
|
69
72
|
|
70
73
|
def __post_init__(self, parameters: Mapping[str, Any]) -> None:
|
71
74
|
super().__init__()
|
@@ -76,11 +79,19 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
|
|
76
79
|
else:
|
77
80
|
self._token_refresh_endpoint = None
|
78
81
|
self._client_id_name = InterpolatedString.create(self.client_id_name, parameters=parameters)
|
79
|
-
self._client_id =
|
82
|
+
self._client_id = (
|
83
|
+
InterpolatedString.create(self.client_id, parameters=parameters)
|
84
|
+
if self.client_id
|
85
|
+
else self.client_id
|
86
|
+
)
|
80
87
|
self._client_secret_name = InterpolatedString.create(
|
81
88
|
self.client_secret_name, parameters=parameters
|
82
89
|
)
|
83
|
-
self._client_secret =
|
90
|
+
self._client_secret = (
|
91
|
+
InterpolatedString.create(self.client_secret, parameters=parameters)
|
92
|
+
if self.client_secret
|
93
|
+
else self.client_secret
|
94
|
+
)
|
84
95
|
self._refresh_token_name = InterpolatedString.create(
|
85
96
|
self.refresh_token_name, parameters=parameters
|
86
97
|
)
|
@@ -99,7 +110,12 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
|
|
99
110
|
self.grant_type_name = InterpolatedString.create(
|
100
111
|
self.grant_type_name, parameters=parameters
|
101
112
|
)
|
102
|
-
self.grant_type = InterpolatedString.create(
|
113
|
+
self.grant_type = InterpolatedString.create(
|
114
|
+
"urn:ietf:params:oauth:grant-type:jwt-bearer"
|
115
|
+
if self.use_profile_assertion
|
116
|
+
else self.grant_type,
|
117
|
+
parameters=parameters,
|
118
|
+
)
|
103
119
|
self._refresh_request_body = InterpolatedMapping(
|
104
120
|
self.refresh_request_body or {}, parameters=parameters
|
105
121
|
)
|
@@ -115,6 +131,13 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
|
|
115
131
|
if self.token_expiry_date
|
116
132
|
else pendulum.now().subtract(days=1) # type: ignore # substract does not have type hints
|
117
133
|
)
|
134
|
+
self.use_profile_assertion = (
|
135
|
+
InterpolatedBoolean(self.use_profile_assertion, parameters=parameters)
|
136
|
+
if isinstance(self.use_profile_assertion, str)
|
137
|
+
else self.use_profile_assertion
|
138
|
+
)
|
139
|
+
self.assertion_name = "assertion"
|
140
|
+
|
118
141
|
if self.access_token_value is not None:
|
119
142
|
self._access_token_value = InterpolatedString.create(
|
120
143
|
self.access_token_value, parameters=parameters
|
@@ -126,9 +149,20 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
|
|
126
149
|
self._access_token_value if self.access_token_value else None
|
127
150
|
)
|
128
151
|
|
152
|
+
if not self.use_profile_assertion and any(
|
153
|
+
client_creds is None for client_creds in [self.client_id, self.client_secret]
|
154
|
+
):
|
155
|
+
raise ValueError(
|
156
|
+
"OAuthAuthenticator configuration error: Both 'client_id' and 'client_secret' are required for the "
|
157
|
+
"basic OAuth flow."
|
158
|
+
)
|
159
|
+
if self.profile_assertion is None and self.use_profile_assertion:
|
160
|
+
raise ValueError(
|
161
|
+
"OAuthAuthenticator configuration error: 'profile_assertion' is required when using the profile assertion flow."
|
162
|
+
)
|
129
163
|
if self.get_grant_type() == "refresh_token" and self._refresh_token is None:
|
130
164
|
raise ValueError(
|
131
|
-
"OAuthAuthenticator
|
165
|
+
"OAuthAuthenticator configuration error: A 'refresh_token' is required when the 'grant_type' is set to 'refresh_token'."
|
132
166
|
)
|
133
167
|
|
134
168
|
def get_token_refresh_endpoint(self) -> Optional[str]:
|
@@ -145,19 +179,21 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
|
|
145
179
|
return self._client_id_name.eval(self.config) # type: ignore # eval returns a string in this context
|
146
180
|
|
147
181
|
def get_client_id(self) -> str:
|
148
|
-
client_id
|
182
|
+
client_id = self._client_id.eval(self.config) if self._client_id else self._client_id
|
149
183
|
if not client_id:
|
150
184
|
raise ValueError("OAuthAuthenticator was unable to evaluate client_id parameter")
|
151
|
-
return client_id
|
185
|
+
return client_id # type: ignore # value will be returned as a string, or an error will be raised
|
152
186
|
|
153
187
|
def get_client_secret_name(self) -> str:
|
154
188
|
return self._client_secret_name.eval(self.config) # type: ignore # eval returns a string in this context
|
155
189
|
|
156
190
|
def get_client_secret(self) -> str:
|
157
|
-
client_secret
|
191
|
+
client_secret = (
|
192
|
+
self._client_secret.eval(self.config) if self._client_secret else self._client_secret
|
193
|
+
)
|
158
194
|
if not client_secret:
|
159
195
|
raise ValueError("OAuthAuthenticator was unable to evaluate client_secret parameter")
|
160
|
-
return client_secret
|
196
|
+
return client_secret # type: ignore # value will be returned as a string, or an error will be raised
|
161
197
|
|
162
198
|
def get_refresh_token_name(self) -> str:
|
163
199
|
return self._refresh_token_name.eval(self.config) # type: ignore # eval returns a string in this context
|
@@ -192,6 +228,27 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
|
|
192
228
|
def set_token_expiry_date(self, value: Union[str, int]) -> None:
|
193
229
|
self._token_expiry_date = self._parse_token_expiration_date(value)
|
194
230
|
|
231
|
+
def get_assertion_name(self) -> str:
|
232
|
+
return self.assertion_name
|
233
|
+
|
234
|
+
def get_assertion(self) -> str:
|
235
|
+
if self.profile_assertion is None:
|
236
|
+
raise ValueError("profile_assertion is not set")
|
237
|
+
return self.profile_assertion.token
|
238
|
+
|
239
|
+
def build_refresh_request_body(self) -> Mapping[str, Any]:
|
240
|
+
"""
|
241
|
+
Returns the request body to set on the refresh request
|
242
|
+
|
243
|
+
Override to define additional parameters
|
244
|
+
"""
|
245
|
+
if self.use_profile_assertion:
|
246
|
+
return {
|
247
|
+
self.get_grant_type_name(): self.get_grant_type(),
|
248
|
+
self.get_assertion_name(): self.get_assertion(),
|
249
|
+
}
|
250
|
+
return super().build_refresh_request_body()
|
251
|
+
|
195
252
|
@property
|
196
253
|
def access_token(self) -> str:
|
197
254
|
if self._access_token is None:
|
@@ -1081,8 +1081,6 @@ definitions:
|
|
1081
1081
|
type: object
|
1082
1082
|
required:
|
1083
1083
|
- type
|
1084
|
-
- client_id
|
1085
|
-
- client_secret
|
1086
1084
|
properties:
|
1087
1085
|
type:
|
1088
1086
|
type: string
|
@@ -1277,6 +1275,15 @@ definitions:
|
|
1277
1275
|
default: []
|
1278
1276
|
examples:
|
1279
1277
|
- ["invalid_grant", "invalid_permissions"]
|
1278
|
+
profile_assertion:
|
1279
|
+
title: Profile Assertion
|
1280
|
+
description: The authenticator being used to authenticate the client authenticator.
|
1281
|
+
"$ref": "#/definitions/JwtAuthenticator"
|
1282
|
+
use_profile_assertion:
|
1283
|
+
title: Use Profile Assertion
|
1284
|
+
description: Enable using profile assertion as a flow for OAuth authorization.
|
1285
|
+
type: boolean
|
1286
|
+
default: false
|
1280
1287
|
$parameters:
|
1281
1288
|
type: object
|
1282
1289
|
additionalProperties: true
|
@@ -506,8 +506,8 @@ class OAuthAuthenticator(BaseModel):
|
|
506
506
|
examples=["custom_app_id"],
|
507
507
|
title="Client ID Property Name",
|
508
508
|
)
|
509
|
-
client_id: str = Field(
|
510
|
-
|
509
|
+
client_id: Optional[str] = Field(
|
510
|
+
None,
|
511
511
|
description="The OAuth client ID. Fill it in the user inputs.",
|
512
512
|
examples=["{{ config['client_id }}", "{{ config['credentials']['client_id }}"],
|
513
513
|
title="Client ID",
|
@@ -518,8 +518,8 @@ class OAuthAuthenticator(BaseModel):
|
|
518
518
|
examples=["custom_app_secret"],
|
519
519
|
title="Client Secret Property Name",
|
520
520
|
)
|
521
|
-
client_secret: str = Field(
|
522
|
-
|
521
|
+
client_secret: Optional[str] = Field(
|
522
|
+
None,
|
523
523
|
description="The OAuth client secret. Fill it in the user inputs.",
|
524
524
|
examples=[
|
525
525
|
"{{ config['client_secret }}",
|
@@ -624,6 +624,16 @@ class OAuthAuthenticator(BaseModel):
|
|
624
624
|
description="When the token updater is defined, new refresh tokens, access tokens and the access token expiry date are written back from the authentication response to the config object. This is important if the refresh token can only used once.",
|
625
625
|
title="Token Updater",
|
626
626
|
)
|
627
|
+
profile_assertion: Optional[JwtAuthenticator] = Field(
|
628
|
+
None,
|
629
|
+
description="The authenticator being used to authenticate the client authenticator.",
|
630
|
+
title="Profile Assertion",
|
631
|
+
)
|
632
|
+
use_profile_assertion: Optional[bool] = Field(
|
633
|
+
False,
|
634
|
+
description="Enable using profile assertion as a flow for OAuth authorization.",
|
635
|
+
title="Use Profile Assertion",
|
636
|
+
)
|
627
637
|
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
628
638
|
|
629
639
|
|
@@ -2100,6 +2100,12 @@ class ModelToComponentFactory:
|
|
2100
2100
|
def create_oauth_authenticator(
|
2101
2101
|
self, model: OAuthAuthenticatorModel, config: Config, **kwargs: Any
|
2102
2102
|
) -> DeclarativeOauth2Authenticator:
|
2103
|
+
profile_assertion = (
|
2104
|
+
self._create_component_from_model(model.profile_assertion, config=config)
|
2105
|
+
if model.profile_assertion
|
2106
|
+
else None
|
2107
|
+
)
|
2108
|
+
|
2103
2109
|
if model.refresh_token_updater:
|
2104
2110
|
# ignore type error because fixing it would have a lot of dependencies, revisit later
|
2105
2111
|
return DeclarativeSingleUseRefreshTokenOauth2Authenticator( # type: ignore
|
@@ -2120,13 +2126,17 @@ class ModelToComponentFactory:
|
|
2120
2126
|
).eval(config),
|
2121
2127
|
client_id=InterpolatedString.create(
|
2122
2128
|
model.client_id, parameters=model.parameters or {}
|
2123
|
-
).eval(config)
|
2129
|
+
).eval(config)
|
2130
|
+
if model.client_id
|
2131
|
+
else model.client_id,
|
2124
2132
|
client_secret_name=InterpolatedString.create(
|
2125
2133
|
model.client_secret_name or "client_secret", parameters=model.parameters or {}
|
2126
2134
|
).eval(config),
|
2127
2135
|
client_secret=InterpolatedString.create(
|
2128
2136
|
model.client_secret, parameters=model.parameters or {}
|
2129
|
-
).eval(config)
|
2137
|
+
).eval(config)
|
2138
|
+
if model.client_secret
|
2139
|
+
else model.client_secret,
|
2130
2140
|
access_token_config_path=model.refresh_token_updater.access_token_config_path,
|
2131
2141
|
refresh_token_config_path=model.refresh_token_updater.refresh_token_config_path,
|
2132
2142
|
token_expiry_date_config_path=model.refresh_token_updater.token_expiry_date_config_path,
|
@@ -2172,6 +2182,8 @@ class ModelToComponentFactory:
|
|
2172
2182
|
config=config,
|
2173
2183
|
parameters=model.parameters or {},
|
2174
2184
|
message_repository=self._message_repository,
|
2185
|
+
profile_assertion=profile_assertion,
|
2186
|
+
use_profile_assertion=model.use_profile_assertion,
|
2175
2187
|
)
|
2176
2188
|
|
2177
2189
|
def create_offset_increment(
|
@@ -2374,7 +2386,7 @@ class ModelToComponentFactory:
|
|
2374
2386
|
if (
|
2375
2387
|
not isinstance(stream_slicer, DatetimeBasedCursor)
|
2376
2388
|
or type(stream_slicer) is not DatetimeBasedCursor
|
2377
|
-
):
|
2389
|
+
) and not isinstance(stream_slicer, PerPartitionWithGlobalCursor):
|
2378
2390
|
# Many of the custom component implementations of DatetimeBasedCursor override get_request_params() (or other methods).
|
2379
2391
|
# Because we're decoupling RequestOptionsProvider from the Cursor, custom components will eventually need to reimplement
|
2380
2392
|
# their own RequestOptionsProvider. However, right now the existing StreamSlicer/Cursor still can act as the SimpleRetriever's
|
@@ -45,7 +45,7 @@ def format_http_message(
|
|
45
45
|
log_message["http"]["is_auxiliary"] = is_auxiliary # type: ignore [index]
|
46
46
|
if stream_name:
|
47
47
|
log_message["airbyte_cdk"] = {"stream": {"name": stream_name}}
|
48
|
-
return log_message # type: ignore
|
48
|
+
return log_message # type: ignore[return-value] # got "dict[str, object]", expected "dict[str, JsonType]"
|
49
49
|
|
50
50
|
|
51
51
|
def _normalize_body_string(body_str: Optional[Union[str, bytes]]) -> Optional[str]:
|
@@ -95,16 +95,16 @@ class Oauth2Authenticator(AbstractOauth2Authenticator):
|
|
95
95
|
return self._access_token_name
|
96
96
|
|
97
97
|
def get_scopes(self) -> list[str]:
|
98
|
-
return self._scopes # type: ignore
|
98
|
+
return self._scopes # type: ignore[return-value]
|
99
99
|
|
100
100
|
def get_expires_in_name(self) -> str:
|
101
101
|
return self._expires_in_name
|
102
102
|
|
103
103
|
def get_refresh_request_body(self) -> Mapping[str, Any]:
|
104
|
-
return self._refresh_request_body # type: ignore
|
104
|
+
return self._refresh_request_body # type: ignore[return-value]
|
105
105
|
|
106
106
|
def get_refresh_request_headers(self) -> Mapping[str, Any]:
|
107
|
-
return self._refresh_request_headers # type: ignore
|
107
|
+
return self._refresh_request_headers # type: ignore[return-value]
|
108
108
|
|
109
109
|
def get_grant_type_name(self) -> str:
|
110
110
|
return self._grant_type_name
|
@@ -128,11 +128,11 @@ class Oauth2Authenticator(AbstractOauth2Authenticator):
|
|
128
128
|
|
129
129
|
@property
|
130
130
|
def access_token(self) -> str:
|
131
|
-
return self._access_token # type: ignore
|
131
|
+
return self._access_token # type: ignore[return-value]
|
132
132
|
|
133
133
|
@access_token.setter
|
134
134
|
def access_token(self, value: str) -> None:
|
135
|
-
self._access_token = value # type: ignore
|
135
|
+
self._access_token = value # type: ignore[assignment] # Incorrect type for assignment
|
136
136
|
|
137
137
|
|
138
138
|
class SingleUseRefreshTokenOauth2Authenticator(Oauth2Authenticator):
|
@@ -192,15 +192,15 @@ class SingleUseRefreshTokenOauth2Authenticator(Oauth2Authenticator):
|
|
192
192
|
message_repository (MessageRepository): the message repository used to emit logs on HTTP requests and control message on config update
|
193
193
|
"""
|
194
194
|
self._client_id = (
|
195
|
-
client_id # type: ignore
|
195
|
+
client_id # type: ignore[assignment] # Incorrect type for assignment
|
196
196
|
if client_id is not None
|
197
|
-
else dpath.get(connector_config, ("credentials", "client_id")) # type: ignore
|
197
|
+
else dpath.get(connector_config, ("credentials", "client_id")) # type: ignore[arg-type]
|
198
198
|
)
|
199
199
|
self._client_secret = (
|
200
|
-
client_secret # type: ignore
|
200
|
+
client_secret # type: ignore[assignment] # Incorrect type for assignment
|
201
201
|
if client_secret is not None
|
202
202
|
else dpath.get(
|
203
|
-
connector_config, # type: ignore
|
203
|
+
connector_config, # type: ignore[arg-type]
|
204
204
|
("credentials", "client_secret"),
|
205
205
|
)
|
206
206
|
)
|
@@ -248,8 +248,8 @@ class SingleUseRefreshTokenOauth2Authenticator(Oauth2Authenticator):
|
|
248
248
|
|
249
249
|
@property
|
250
250
|
def access_token(self) -> str:
|
251
|
-
return dpath.get( # type: ignore
|
252
|
-
self._connector_config, # type: ignore
|
251
|
+
return dpath.get( # type: ignore[return-value]
|
252
|
+
self._connector_config, # type: ignore[arg-type]
|
253
253
|
self._access_token_config_path,
|
254
254
|
default="",
|
255
255
|
)
|
@@ -257,39 +257,39 @@ class SingleUseRefreshTokenOauth2Authenticator(Oauth2Authenticator):
|
|
257
257
|
@access_token.setter
|
258
258
|
def access_token(self, new_access_token: str) -> None:
|
259
259
|
dpath.new(
|
260
|
-
self._connector_config, # type: ignore
|
260
|
+
self._connector_config, # type: ignore[arg-type]
|
261
261
|
self._access_token_config_path,
|
262
262
|
new_access_token,
|
263
263
|
)
|
264
264
|
|
265
265
|
def get_refresh_token(self) -> str:
|
266
|
-
return dpath.get( # type: ignore
|
267
|
-
self._connector_config, # type: ignore
|
266
|
+
return dpath.get( # type: ignore[return-value]
|
267
|
+
self._connector_config, # type: ignore[arg-type]
|
268
268
|
self._refresh_token_config_path,
|
269
269
|
default="",
|
270
270
|
)
|
271
271
|
|
272
272
|
def set_refresh_token(self, new_refresh_token: str) -> None:
|
273
273
|
dpath.new(
|
274
|
-
self._connector_config, # type: ignore
|
274
|
+
self._connector_config, # type: ignore[arg-type]
|
275
275
|
self._refresh_token_config_path,
|
276
276
|
new_refresh_token,
|
277
277
|
)
|
278
278
|
|
279
279
|
def get_token_expiry_date(self) -> pendulum.DateTime:
|
280
280
|
expiry_date = dpath.get(
|
281
|
-
self._connector_config, # type: ignore
|
281
|
+
self._connector_config, # type: ignore[arg-type]
|
282
282
|
self._token_expiry_date_config_path,
|
283
283
|
default="",
|
284
284
|
)
|
285
|
-
return pendulum.now().subtract(days=1) if expiry_date == "" else pendulum.parse(expiry_date) # type: ignore
|
285
|
+
return pendulum.now().subtract(days=1) if expiry_date == "" else pendulum.parse(expiry_date) # type: ignore[arg-type, return-value, no-untyped-call]
|
286
286
|
|
287
287
|
def set_token_expiry_date( # type: ignore[override]
|
288
288
|
self,
|
289
289
|
new_token_expiry_date: pendulum.DateTime,
|
290
290
|
) -> None:
|
291
291
|
dpath.new(
|
292
|
-
self._connector_config, # type: ignore
|
292
|
+
self._connector_config, # type: ignore[arg-type]
|
293
293
|
self._token_expiry_date_config_path,
|
294
294
|
str(new_token_expiry_date),
|
295
295
|
)
|
@@ -329,10 +329,10 @@ class SingleUseRefreshTokenOauth2Authenticator(Oauth2Authenticator):
|
|
329
329
|
# message directly in the console, this is needed
|
330
330
|
if not isinstance(self._message_repository, NoopMessageRepository):
|
331
331
|
self._message_repository.emit_message(
|
332
|
-
create_connector_config_control_message(self._connector_config) # type: ignore
|
332
|
+
create_connector_config_control_message(self._connector_config) # type: ignore[arg-type]
|
333
333
|
)
|
334
334
|
else:
|
335
|
-
emit_configuration_as_airbyte_control_message(self._connector_config) # type: ignore
|
335
|
+
emit_configuration_as_airbyte_control_message(self._connector_config) # type: ignore[arg-type]
|
336
336
|
return self.access_token
|
337
337
|
|
338
338
|
def refresh_access_token( # type: ignore[override] # Signature doesn't match base class
|
@@ -53,7 +53,7 @@ airbyte_cdk/sources/declarative/async_job/timer.py,sha256=Fb8P72CQ7jIzJyzMSSNuBf
|
|
53
53
|
airbyte_cdk/sources/declarative/auth/__init__.py,sha256=e2CRrcBWGhz3sQu3Oh34d1riEIwXipGS8hrSB1pu0Oo,284
|
54
54
|
airbyte_cdk/sources/declarative/auth/declarative_authenticator.py,sha256=nf-OmRUHYG4ORBwyb5CANzuHEssE-oNmL-Lccn41Td8,1099
|
55
55
|
airbyte_cdk/sources/declarative/auth/jwt.py,sha256=7r5q1zOekjw8kEmEk1oUyovzVt3cbD6BuFnRILeLZi8,8250
|
56
|
-
airbyte_cdk/sources/declarative/auth/oauth.py,sha256=
|
56
|
+
airbyte_cdk/sources/declarative/auth/oauth.py,sha256=EoSPxwe40A6VT5K4N7n7TnrGr7wQD4eMltfOBVeuMMQ,13506
|
57
57
|
airbyte_cdk/sources/declarative/auth/selective_authenticator.py,sha256=qGwC6YsCldr1bIeKG6Qo-A9a5cTdHw-vcOn3OtQrS4c,1540
|
58
58
|
airbyte_cdk/sources/declarative/auth/token.py,sha256=r4u3WXyVa7WmiSZ9-eZXlrUI-pS0D4YWJnwjLzwV-Fk,11210
|
59
59
|
airbyte_cdk/sources/declarative/auth/token_provider.py,sha256=9oq3dcBPAPwXSfkISjhA05dMhIzxaDQTmwOydBrnsMk,3028
|
@@ -67,7 +67,7 @@ airbyte_cdk/sources/declarative/concurrent_declarative_source.py,sha256=wbfk5udu
|
|
67
67
|
airbyte_cdk/sources/declarative/datetime/__init__.py,sha256=l9LG7Qm6e5r_qgqfVKnx3mXYtg1I9MmMjomVIPfU4XA,177
|
68
68
|
airbyte_cdk/sources/declarative/datetime/datetime_parser.py,sha256=SX9JjdesN1edN2WVUVMzU_ptqp2QB1OnsnjZ4mwcX7w,2579
|
69
69
|
airbyte_cdk/sources/declarative/datetime/min_max_datetime.py,sha256=0BHBtDNQZfvwM45-tY5pNlTcKAFSGGNxemoi0Jic-0E,5785
|
70
|
-
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=
|
70
|
+
airbyte_cdk/sources/declarative/declarative_component_schema.yaml,sha256=40Ts1-r0UnF3AhAj9pXE2pf6Y8WBqRAksjTaBiCuxq0,139243
|
71
71
|
airbyte_cdk/sources/declarative/declarative_source.py,sha256=nF7wBqFd3AQmEKAm4CnIo29CJoQL562cJGSCeL8U8bA,1531
|
72
72
|
airbyte_cdk/sources/declarative/declarative_stream.py,sha256=JRyNeOIpsFu4ztVZsN6sncqUEIqIE-bUkD2TPgbMgk0,10375
|
73
73
|
airbyte_cdk/sources/declarative/decoders/__init__.py,sha256=KSpQetKGqPCv-38QgcVJ5kzM5nzbFldTSsYDCS3Xf0Y,1035
|
@@ -109,13 +109,13 @@ airbyte_cdk/sources/declarative/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW
|
|
109
109
|
airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py,sha256=iemy3fKLczcU0-Aor7tx5jcT6DRedKMqyK7kCOp01hg,3924
|
110
110
|
airbyte_cdk/sources/declarative/migrations/state_migration.py,sha256=KWPjealMLKSMtajXgkdGgKg7EmTLR-CqqD7UIh0-eDU,794
|
111
111
|
airbyte_cdk/sources/declarative/models/__init__.py,sha256=nUFxNCiKeYRVXuZEKA7GD-lTHxsiKcQ8FitZjKhPIvE,100
|
112
|
-
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=
|
112
|
+
airbyte_cdk/sources/declarative/models/declarative_component_schema.py,sha256=9SHqGpoMDIysyFLzkZoAehbsroHQKYPctIwXmSqO4Zw,97888
|
113
113
|
airbyte_cdk/sources/declarative/parsers/__init__.py,sha256=ZnqYNxHsKCgO38IwB34RQyRMXTs4GTvlRi3ImKnIioo,61
|
114
114
|
airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py,sha256=958MMX6_ZOJUlDDdNr9Krosgi2bCKGx2Z765M2Woz18,5505
|
115
115
|
airbyte_cdk/sources/declarative/parsers/custom_exceptions.py,sha256=Rir9_z3Kcd5Es0-LChrzk-0qubAsiK_RSEnLmK2OXm8,553
|
116
116
|
airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py,sha256=CXwTfD3wSQq3okcqwigpprbHhSURUokh4GK2OmOyKC8,9132
|
117
117
|
airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py,sha256=IWUOdF03o-aQn0Occo1BJCxU0Pz-QILk5L67nzw2thw,6803
|
118
|
-
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=
|
118
|
+
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py,sha256=bAVnHFu1rdeL8piQs6XRFp1dRas_SV03WQUhug4nN7A,122128
|
119
119
|
airbyte_cdk/sources/declarative/partition_routers/__init__.py,sha256=HJ-Syp3p7RpyR_OK0X_a2kSyISfu3W-PKrRI16iY0a8,957
|
120
120
|
airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py,sha256=n82J15S8bjeMZ5uROu--P3hnbQoxkY5v7RPHYx7g7ro,2929
|
121
121
|
airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py,sha256=c5cuVFM6NFkuQqG8Z5IwkBuwDrvXZN1CunUOM_L0ezg,6892
|
@@ -243,7 +243,7 @@ airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py,sha256
|
|
243
243
|
airbyte_cdk/sources/file_based/stream/default_file_based_stream.py,sha256=XLU5cNqQ-5mj243gNzMyXtm_oCtg1ORyoqbCsUo9Dn4,18044
|
244
244
|
airbyte_cdk/sources/file_based/types.py,sha256=INxG7OPnkdUP69oYNKMAbwhvV1AGvLRHs1J6pIia2FI,218
|
245
245
|
airbyte_cdk/sources/http_config.py,sha256=OBZeuyFilm6NlDlBhFQvHhTWabEvZww6OHDIlZujIS0,730
|
246
|
-
airbyte_cdk/sources/http_logger.py,sha256=
|
246
|
+
airbyte_cdk/sources/http_logger.py,sha256=l_1fk5YwdonZ1wvAsTwjj6d36fj2WrVraIAMj5jTQdM,1575
|
247
247
|
airbyte_cdk/sources/message/__init__.py,sha256=y98fzHsQBwXwp2zEa4K5mxGFqjnx9lDn9O0pTk-VS4U,395
|
248
248
|
airbyte_cdk/sources/message/repository.py,sha256=SG7avgti_-dj8FcRHTTrhgLLGJbElv14_zIB0SH8AIc,4763
|
249
249
|
airbyte_cdk/sources/source.py,sha256=KIBBH5VLEb8BZ8B9aROlfaI6OLoJqKDPMJ10jkAR7nk,3611
|
@@ -297,7 +297,7 @@ airbyte_cdk/sources/streams/http/rate_limiting.py,sha256=IwdjrHKUnU97XO4qONgYRv4
|
|
297
297
|
airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py,sha256=RN0D3nOX1xLgwEwKWu6pkGy3XqBFzKSNZ8Lf6umU2eY,413
|
298
298
|
airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py,sha256=-GDNyqccdutOftFpqCvvk81NwkskHhDZ8QcsUKzNjRQ,11660
|
299
299
|
airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py,sha256=Y3n7J-sk5yGjv_OxtY6Z6k0PEsFZmtIRi-x0KCbaHdA,1010
|
300
|
-
airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py,sha256=
|
300
|
+
airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py,sha256=Zse4ve1MvPJBx-7CDtTBTmPuT6b9koGLMGpmd5188Y8,16698
|
301
301
|
airbyte_cdk/sources/streams/http/requests_native_auth/token.py,sha256=h5PTzcdH-RQLeCg7xZ45w_484OPUDSwNWl_iMJQmZoI,2526
|
302
302
|
airbyte_cdk/sources/streams/utils/__init__.py,sha256=4Hw-PX1-VgESLF16cDdvuYCzGJtHntThLF4qIiULWeo,61
|
303
303
|
airbyte_cdk/sources/types.py,sha256=nLPkTpyfGV4E6e99qcBWX4r8C3fE4I8Fvgx2EjvT9ic,5005
|
@@ -350,8 +350,8 @@ airbyte_cdk/utils/slice_hasher.py,sha256=-pHexlNYoWYPnXNH-M7HEbjmeJe9Zk7SJijdQ7d
|
|
350
350
|
airbyte_cdk/utils/spec_schema_transformations.py,sha256=-5HTuNsnDBAhj-oLeQXwpTGA0HdcjFOf2zTEMUTTg_Y,816
|
351
351
|
airbyte_cdk/utils/stream_status_utils.py,sha256=ZmBoiy5HVbUEHAMrUONxZvxnvfV9CesmQJLDTAIWnWw,1171
|
352
352
|
airbyte_cdk/utils/traced_exception.py,sha256=C8uIBuCL_E4WnBAOPSxBicD06JAldoN9fGsQDp463OY,6292
|
353
|
-
airbyte_cdk-6.
|
354
|
-
airbyte_cdk-6.
|
355
|
-
airbyte_cdk-6.
|
356
|
-
airbyte_cdk-6.
|
357
|
-
airbyte_cdk-6.
|
353
|
+
airbyte_cdk-6.25.0.dist-info/LICENSE.txt,sha256=Wfe61S4BaGPj404v8lrAbvhjYR68SHlkzeYrg3_bbuM,1051
|
354
|
+
airbyte_cdk-6.25.0.dist-info/METADATA,sha256=uZNmpOp6l04P8US2rk2P4JvBMbtlG24rfZGDeOyKrSY,5996
|
355
|
+
airbyte_cdk-6.25.0.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
356
|
+
airbyte_cdk-6.25.0.dist-info/entry_points.txt,sha256=fj-e3PAQvsxsQzyyq8UkG1k8spunWnD4BAH2AwlR6NM,95
|
357
|
+
airbyte_cdk-6.25.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|