kard-financial-sdk 0.0.78939__py3-none-any.whl → 0.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.
- kard/core/client_wrapper.py +2 -2
- kard/users/__init__.py +6 -1
- kard/users/auth/__init__.py +34 -0
- kard/users/auth/client.py +128 -0
- kard/users/auth/raw_client.py +157 -0
- kard/users/auth/types/__init__.py +34 -0
- kard/users/auth/types/webview_token_response.py +35 -0
- kard/users/client.py +19 -0
- {kard_financial_sdk-0.0.78939.dist-info → kard_financial_sdk-0.1.0.dist-info}/METADATA +1 -1
- {kard_financial_sdk-0.0.78939.dist-info → kard_financial_sdk-0.1.0.dist-info}/RECORD +11 -6
- {kard_financial_sdk-0.0.78939.dist-info → kard_financial_sdk-0.1.0.dist-info}/WHEEL +0 -0
kard/core/client_wrapper.py
CHANGED
|
@@ -22,10 +22,10 @@ class BaseClientWrapper:
|
|
|
22
22
|
|
|
23
23
|
def get_headers(self) -> typing.Dict[str, str]:
|
|
24
24
|
headers: typing.Dict[str, str] = {
|
|
25
|
-
"User-Agent": "kard-financial-sdk/0.0
|
|
25
|
+
"User-Agent": "kard-financial-sdk/0.1.0",
|
|
26
26
|
"X-Fern-Language": "Python",
|
|
27
27
|
"X-Fern-SDK-Name": "kard-financial-sdk",
|
|
28
|
-
"X-Fern-SDK-Version": "0.0
|
|
28
|
+
"X-Fern-SDK-Version": "0.1.0",
|
|
29
29
|
**(self.get_custom_headers() or {}),
|
|
30
30
|
}
|
|
31
31
|
token = self._get_token()
|
kard/users/__init__.py
CHANGED
|
@@ -20,7 +20,7 @@ if typing.TYPE_CHECKING:
|
|
|
20
20
|
UserResponseUnionNoData_User,
|
|
21
21
|
)
|
|
22
22
|
from .errors import MultiStatus
|
|
23
|
-
from . import attributions, rewards, uploads
|
|
23
|
+
from . import attributions, auth, rewards, uploads
|
|
24
24
|
from .attributions import (
|
|
25
25
|
CreateAttributionRequestObject,
|
|
26
26
|
CreateAttributionRequestUnion,
|
|
@@ -35,6 +35,7 @@ if typing.TYPE_CHECKING:
|
|
|
35
35
|
OfferAttributionRequest,
|
|
36
36
|
OfferMedium,
|
|
37
37
|
)
|
|
38
|
+
from .auth import WebviewTokenResponse
|
|
38
39
|
from .rewards import (
|
|
39
40
|
Amount,
|
|
40
41
|
AmountType,
|
|
@@ -178,7 +179,9 @@ _dynamic_imports: typing.Dict[str, str] = {
|
|
|
178
179
|
"UserResponseNoData": ".types",
|
|
179
180
|
"UserResponseUnionNoData": ".types",
|
|
180
181
|
"UserResponseUnionNoData_User": ".types",
|
|
182
|
+
"WebviewTokenResponse": ".auth",
|
|
181
183
|
"attributions": ".attributions",
|
|
184
|
+
"auth": ".auth",
|
|
182
185
|
"rewards": ".rewards",
|
|
183
186
|
"uploads": ".uploads",
|
|
184
187
|
}
|
|
@@ -287,7 +290,9 @@ __all__ = [
|
|
|
287
290
|
"UserResponseNoData",
|
|
288
291
|
"UserResponseUnionNoData",
|
|
289
292
|
"UserResponseUnionNoData_User",
|
|
293
|
+
"WebviewTokenResponse",
|
|
290
294
|
"attributions",
|
|
295
|
+
"auth",
|
|
291
296
|
"rewards",
|
|
292
297
|
"uploads",
|
|
293
298
|
]
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
# isort: skip_file
|
|
4
|
+
|
|
5
|
+
import typing
|
|
6
|
+
from importlib import import_module
|
|
7
|
+
|
|
8
|
+
if typing.TYPE_CHECKING:
|
|
9
|
+
from .types import WebviewTokenResponse
|
|
10
|
+
_dynamic_imports: typing.Dict[str, str] = {"WebviewTokenResponse": ".types"}
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def __getattr__(attr_name: str) -> typing.Any:
|
|
14
|
+
module_name = _dynamic_imports.get(attr_name)
|
|
15
|
+
if module_name is None:
|
|
16
|
+
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
|
|
17
|
+
try:
|
|
18
|
+
module = import_module(module_name, __package__)
|
|
19
|
+
if module_name == f".{attr_name}":
|
|
20
|
+
return module
|
|
21
|
+
else:
|
|
22
|
+
return getattr(module, attr_name)
|
|
23
|
+
except ImportError as e:
|
|
24
|
+
raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
|
|
25
|
+
except AttributeError as e:
|
|
26
|
+
raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def __dir__():
|
|
30
|
+
lazy_attrs = list(_dynamic_imports.keys())
|
|
31
|
+
return sorted(lazy_attrs)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
__all__ = ["WebviewTokenResponse"]
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from ...commons.types.organization_id import OrganizationId
|
|
6
|
+
from ...commons.types.user_id import UserId
|
|
7
|
+
from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
|
|
8
|
+
from ...core.request_options import RequestOptions
|
|
9
|
+
from .raw_client import AsyncRawAuthClient, RawAuthClient
|
|
10
|
+
from .types.webview_token_response import WebviewTokenResponse
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class AuthClient:
|
|
14
|
+
def __init__(self, *, client_wrapper: SyncClientWrapper):
|
|
15
|
+
self._raw_client = RawAuthClient(client_wrapper=client_wrapper)
|
|
16
|
+
|
|
17
|
+
@property
|
|
18
|
+
def with_raw_response(self) -> RawAuthClient:
|
|
19
|
+
"""
|
|
20
|
+
Retrieves a raw implementation of this client that returns raw responses.
|
|
21
|
+
|
|
22
|
+
Returns
|
|
23
|
+
-------
|
|
24
|
+
RawAuthClient
|
|
25
|
+
"""
|
|
26
|
+
return self._raw_client
|
|
27
|
+
|
|
28
|
+
def get_webview_token(
|
|
29
|
+
self,
|
|
30
|
+
organization_id: OrganizationId,
|
|
31
|
+
user_id: UserId,
|
|
32
|
+
*,
|
|
33
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
34
|
+
) -> WebviewTokenResponse:
|
|
35
|
+
"""
|
|
36
|
+
Retrieves an OAuth token for webview authentication.
|
|
37
|
+
|
|
38
|
+
Parameters
|
|
39
|
+
----------
|
|
40
|
+
organization_id : OrganizationId
|
|
41
|
+
|
|
42
|
+
user_id : UserId
|
|
43
|
+
|
|
44
|
+
request_options : typing.Optional[RequestOptions]
|
|
45
|
+
Request-specific configuration.
|
|
46
|
+
|
|
47
|
+
Returns
|
|
48
|
+
-------
|
|
49
|
+
WebviewTokenResponse
|
|
50
|
+
|
|
51
|
+
Examples
|
|
52
|
+
--------
|
|
53
|
+
from kard import KardApi
|
|
54
|
+
|
|
55
|
+
client = KardApi(
|
|
56
|
+
client_id="YOUR_CLIENT_ID",
|
|
57
|
+
client_secret="YOUR_CLIENT_SECRET",
|
|
58
|
+
)
|
|
59
|
+
client.users.auth.get_webview_token(
|
|
60
|
+
organization_id="organization-123",
|
|
61
|
+
user_id="user-123",
|
|
62
|
+
)
|
|
63
|
+
"""
|
|
64
|
+
_response = self._raw_client.get_webview_token(organization_id, user_id, request_options=request_options)
|
|
65
|
+
return _response.data
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class AsyncAuthClient:
|
|
69
|
+
def __init__(self, *, client_wrapper: AsyncClientWrapper):
|
|
70
|
+
self._raw_client = AsyncRawAuthClient(client_wrapper=client_wrapper)
|
|
71
|
+
|
|
72
|
+
@property
|
|
73
|
+
def with_raw_response(self) -> AsyncRawAuthClient:
|
|
74
|
+
"""
|
|
75
|
+
Retrieves a raw implementation of this client that returns raw responses.
|
|
76
|
+
|
|
77
|
+
Returns
|
|
78
|
+
-------
|
|
79
|
+
AsyncRawAuthClient
|
|
80
|
+
"""
|
|
81
|
+
return self._raw_client
|
|
82
|
+
|
|
83
|
+
async def get_webview_token(
|
|
84
|
+
self,
|
|
85
|
+
organization_id: OrganizationId,
|
|
86
|
+
user_id: UserId,
|
|
87
|
+
*,
|
|
88
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
89
|
+
) -> WebviewTokenResponse:
|
|
90
|
+
"""
|
|
91
|
+
Retrieves an OAuth token for webview authentication.
|
|
92
|
+
|
|
93
|
+
Parameters
|
|
94
|
+
----------
|
|
95
|
+
organization_id : OrganizationId
|
|
96
|
+
|
|
97
|
+
user_id : UserId
|
|
98
|
+
|
|
99
|
+
request_options : typing.Optional[RequestOptions]
|
|
100
|
+
Request-specific configuration.
|
|
101
|
+
|
|
102
|
+
Returns
|
|
103
|
+
-------
|
|
104
|
+
WebviewTokenResponse
|
|
105
|
+
|
|
106
|
+
Examples
|
|
107
|
+
--------
|
|
108
|
+
import asyncio
|
|
109
|
+
|
|
110
|
+
from kard import AsyncKardApi
|
|
111
|
+
|
|
112
|
+
client = AsyncKardApi(
|
|
113
|
+
client_id="YOUR_CLIENT_ID",
|
|
114
|
+
client_secret="YOUR_CLIENT_SECRET",
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
async def main() -> None:
|
|
119
|
+
await client.users.auth.get_webview_token(
|
|
120
|
+
organization_id="organization-123",
|
|
121
|
+
user_id="user-123",
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
asyncio.run(main())
|
|
126
|
+
"""
|
|
127
|
+
_response = await self._raw_client.get_webview_token(organization_id, user_id, request_options=request_options)
|
|
128
|
+
return _response.data
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
from json.decoder import JSONDecodeError
|
|
5
|
+
|
|
6
|
+
from ...commons.errors.internal_server_error import InternalServerError
|
|
7
|
+
from ...commons.errors.unauthorized_error import UnauthorizedError
|
|
8
|
+
from ...commons.types.error_response import ErrorResponse
|
|
9
|
+
from ...commons.types.organization_id import OrganizationId
|
|
10
|
+
from ...commons.types.user_id import UserId
|
|
11
|
+
from ...core.api_error import ApiError
|
|
12
|
+
from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
|
|
13
|
+
from ...core.http_response import AsyncHttpResponse, HttpResponse
|
|
14
|
+
from ...core.jsonable_encoder import jsonable_encoder
|
|
15
|
+
from ...core.pydantic_utilities import parse_obj_as
|
|
16
|
+
from ...core.request_options import RequestOptions
|
|
17
|
+
from .types.webview_token_response import WebviewTokenResponse
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class RawAuthClient:
|
|
21
|
+
def __init__(self, *, client_wrapper: SyncClientWrapper):
|
|
22
|
+
self._client_wrapper = client_wrapper
|
|
23
|
+
|
|
24
|
+
def get_webview_token(
|
|
25
|
+
self,
|
|
26
|
+
organization_id: OrganizationId,
|
|
27
|
+
user_id: UserId,
|
|
28
|
+
*,
|
|
29
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
30
|
+
) -> HttpResponse[WebviewTokenResponse]:
|
|
31
|
+
"""
|
|
32
|
+
Retrieves an OAuth token for webview authentication.
|
|
33
|
+
|
|
34
|
+
Parameters
|
|
35
|
+
----------
|
|
36
|
+
organization_id : OrganizationId
|
|
37
|
+
|
|
38
|
+
user_id : UserId
|
|
39
|
+
|
|
40
|
+
request_options : typing.Optional[RequestOptions]
|
|
41
|
+
Request-specific configuration.
|
|
42
|
+
|
|
43
|
+
Returns
|
|
44
|
+
-------
|
|
45
|
+
HttpResponse[WebviewTokenResponse]
|
|
46
|
+
"""
|
|
47
|
+
_response = self._client_wrapper.httpx_client.request(
|
|
48
|
+
f"v2/auth/issuers/{jsonable_encoder(organization_id)}/users/{jsonable_encoder(user_id)}/token",
|
|
49
|
+
method="POST",
|
|
50
|
+
request_options=request_options,
|
|
51
|
+
)
|
|
52
|
+
try:
|
|
53
|
+
if 200 <= _response.status_code < 300:
|
|
54
|
+
_data = typing.cast(
|
|
55
|
+
WebviewTokenResponse,
|
|
56
|
+
parse_obj_as(
|
|
57
|
+
type_=WebviewTokenResponse, # type: ignore
|
|
58
|
+
object_=_response.json(),
|
|
59
|
+
),
|
|
60
|
+
)
|
|
61
|
+
return HttpResponse(response=_response, data=_data)
|
|
62
|
+
if _response.status_code == 500:
|
|
63
|
+
raise InternalServerError(
|
|
64
|
+
headers=dict(_response.headers),
|
|
65
|
+
body=typing.cast(
|
|
66
|
+
ErrorResponse,
|
|
67
|
+
parse_obj_as(
|
|
68
|
+
type_=ErrorResponse, # type: ignore
|
|
69
|
+
object_=_response.json(),
|
|
70
|
+
),
|
|
71
|
+
),
|
|
72
|
+
)
|
|
73
|
+
if _response.status_code == 401:
|
|
74
|
+
raise UnauthorizedError(
|
|
75
|
+
headers=dict(_response.headers),
|
|
76
|
+
body=typing.cast(
|
|
77
|
+
ErrorResponse,
|
|
78
|
+
parse_obj_as(
|
|
79
|
+
type_=ErrorResponse, # type: ignore
|
|
80
|
+
object_=_response.json(),
|
|
81
|
+
),
|
|
82
|
+
),
|
|
83
|
+
)
|
|
84
|
+
_response_json = _response.json()
|
|
85
|
+
except JSONDecodeError:
|
|
86
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
87
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class AsyncRawAuthClient:
|
|
91
|
+
def __init__(self, *, client_wrapper: AsyncClientWrapper):
|
|
92
|
+
self._client_wrapper = client_wrapper
|
|
93
|
+
|
|
94
|
+
async def get_webview_token(
|
|
95
|
+
self,
|
|
96
|
+
organization_id: OrganizationId,
|
|
97
|
+
user_id: UserId,
|
|
98
|
+
*,
|
|
99
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
100
|
+
) -> AsyncHttpResponse[WebviewTokenResponse]:
|
|
101
|
+
"""
|
|
102
|
+
Retrieves an OAuth token for webview authentication.
|
|
103
|
+
|
|
104
|
+
Parameters
|
|
105
|
+
----------
|
|
106
|
+
organization_id : OrganizationId
|
|
107
|
+
|
|
108
|
+
user_id : UserId
|
|
109
|
+
|
|
110
|
+
request_options : typing.Optional[RequestOptions]
|
|
111
|
+
Request-specific configuration.
|
|
112
|
+
|
|
113
|
+
Returns
|
|
114
|
+
-------
|
|
115
|
+
AsyncHttpResponse[WebviewTokenResponse]
|
|
116
|
+
"""
|
|
117
|
+
_response = await self._client_wrapper.httpx_client.request(
|
|
118
|
+
f"v2/auth/issuers/{jsonable_encoder(organization_id)}/users/{jsonable_encoder(user_id)}/token",
|
|
119
|
+
method="POST",
|
|
120
|
+
request_options=request_options,
|
|
121
|
+
)
|
|
122
|
+
try:
|
|
123
|
+
if 200 <= _response.status_code < 300:
|
|
124
|
+
_data = typing.cast(
|
|
125
|
+
WebviewTokenResponse,
|
|
126
|
+
parse_obj_as(
|
|
127
|
+
type_=WebviewTokenResponse, # type: ignore
|
|
128
|
+
object_=_response.json(),
|
|
129
|
+
),
|
|
130
|
+
)
|
|
131
|
+
return AsyncHttpResponse(response=_response, data=_data)
|
|
132
|
+
if _response.status_code == 500:
|
|
133
|
+
raise InternalServerError(
|
|
134
|
+
headers=dict(_response.headers),
|
|
135
|
+
body=typing.cast(
|
|
136
|
+
ErrorResponse,
|
|
137
|
+
parse_obj_as(
|
|
138
|
+
type_=ErrorResponse, # type: ignore
|
|
139
|
+
object_=_response.json(),
|
|
140
|
+
),
|
|
141
|
+
),
|
|
142
|
+
)
|
|
143
|
+
if _response.status_code == 401:
|
|
144
|
+
raise UnauthorizedError(
|
|
145
|
+
headers=dict(_response.headers),
|
|
146
|
+
body=typing.cast(
|
|
147
|
+
ErrorResponse,
|
|
148
|
+
parse_obj_as(
|
|
149
|
+
type_=ErrorResponse, # type: ignore
|
|
150
|
+
object_=_response.json(),
|
|
151
|
+
),
|
|
152
|
+
),
|
|
153
|
+
)
|
|
154
|
+
_response_json = _response.json()
|
|
155
|
+
except JSONDecodeError:
|
|
156
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
157
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
# isort: skip_file
|
|
4
|
+
|
|
5
|
+
import typing
|
|
6
|
+
from importlib import import_module
|
|
7
|
+
|
|
8
|
+
if typing.TYPE_CHECKING:
|
|
9
|
+
from .webview_token_response import WebviewTokenResponse
|
|
10
|
+
_dynamic_imports: typing.Dict[str, str] = {"WebviewTokenResponse": ".webview_token_response"}
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def __getattr__(attr_name: str) -> typing.Any:
|
|
14
|
+
module_name = _dynamic_imports.get(attr_name)
|
|
15
|
+
if module_name is None:
|
|
16
|
+
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
|
|
17
|
+
try:
|
|
18
|
+
module = import_module(module_name, __package__)
|
|
19
|
+
if module_name == f".{attr_name}":
|
|
20
|
+
return module
|
|
21
|
+
else:
|
|
22
|
+
return getattr(module, attr_name)
|
|
23
|
+
except ImportError as e:
|
|
24
|
+
raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
|
|
25
|
+
except AttributeError as e:
|
|
26
|
+
raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def __dir__():
|
|
30
|
+
lazy_attrs = list(_dynamic_imports.keys())
|
|
31
|
+
return sorted(lazy_attrs)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
__all__ = ["WebviewTokenResponse"]
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import pydantic
|
|
6
|
+
from ....core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class WebviewTokenResponse(UniversalBaseModel):
|
|
10
|
+
"""
|
|
11
|
+
An OAuth token response.
|
|
12
|
+
|
|
13
|
+
Examples
|
|
14
|
+
--------
|
|
15
|
+
from kard.users.auth import WebviewTokenResponse
|
|
16
|
+
|
|
17
|
+
WebviewTokenResponse(
|
|
18
|
+
access_token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
|
19
|
+
expires_in=3600,
|
|
20
|
+
token_type="Bearer",
|
|
21
|
+
)
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
access_token: str
|
|
25
|
+
expires_in: int
|
|
26
|
+
token_type: str
|
|
27
|
+
|
|
28
|
+
if IS_PYDANTIC_V2:
|
|
29
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
30
|
+
else:
|
|
31
|
+
|
|
32
|
+
class Config:
|
|
33
|
+
frozen = True
|
|
34
|
+
smart_union = True
|
|
35
|
+
extra = pydantic.Extra.allow
|
kard/users/client.py
CHANGED
|
@@ -16,6 +16,7 @@ from .types.user_request_data_union import UserRequestDataUnion
|
|
|
16
16
|
|
|
17
17
|
if typing.TYPE_CHECKING:
|
|
18
18
|
from .attributions.client import AsyncAttributionsClient, AttributionsClient
|
|
19
|
+
from .auth.client import AsyncAuthClient, AuthClient
|
|
19
20
|
from .rewards.client import AsyncRewardsClient, RewardsClient
|
|
20
21
|
from .uploads.client import AsyncUploadsClient, UploadsClient
|
|
21
22
|
# this is used as the default value for optional parameters
|
|
@@ -27,6 +28,7 @@ class UsersClient:
|
|
|
27
28
|
self._raw_client = RawUsersClient(client_wrapper=client_wrapper)
|
|
28
29
|
self._client_wrapper = client_wrapper
|
|
29
30
|
self._attributions: typing.Optional[AttributionsClient] = None
|
|
31
|
+
self._auth: typing.Optional[AuthClient] = None
|
|
30
32
|
self._rewards: typing.Optional[RewardsClient] = None
|
|
31
33
|
self._uploads: typing.Optional[UploadsClient] = None
|
|
32
34
|
|
|
@@ -234,6 +236,14 @@ class UsersClient:
|
|
|
234
236
|
self._attributions = AttributionsClient(client_wrapper=self._client_wrapper)
|
|
235
237
|
return self._attributions
|
|
236
238
|
|
|
239
|
+
@property
|
|
240
|
+
def auth(self):
|
|
241
|
+
if self._auth is None:
|
|
242
|
+
from .auth.client import AuthClient # noqa: E402
|
|
243
|
+
|
|
244
|
+
self._auth = AuthClient(client_wrapper=self._client_wrapper)
|
|
245
|
+
return self._auth
|
|
246
|
+
|
|
237
247
|
@property
|
|
238
248
|
def rewards(self):
|
|
239
249
|
if self._rewards is None:
|
|
@@ -256,6 +266,7 @@ class AsyncUsersClient:
|
|
|
256
266
|
self._raw_client = AsyncRawUsersClient(client_wrapper=client_wrapper)
|
|
257
267
|
self._client_wrapper = client_wrapper
|
|
258
268
|
self._attributions: typing.Optional[AsyncAttributionsClient] = None
|
|
269
|
+
self._auth: typing.Optional[AsyncAuthClient] = None
|
|
259
270
|
self._rewards: typing.Optional[AsyncRewardsClient] = None
|
|
260
271
|
self._uploads: typing.Optional[AsyncUploadsClient] = None
|
|
261
272
|
|
|
@@ -495,6 +506,14 @@ class AsyncUsersClient:
|
|
|
495
506
|
self._attributions = AsyncAttributionsClient(client_wrapper=self._client_wrapper)
|
|
496
507
|
return self._attributions
|
|
497
508
|
|
|
509
|
+
@property
|
|
510
|
+
def auth(self):
|
|
511
|
+
if self._auth is None:
|
|
512
|
+
from .auth.client import AsyncAuthClient # noqa: E402
|
|
513
|
+
|
|
514
|
+
self._auth = AsyncAuthClient(client_wrapper=self._client_wrapper)
|
|
515
|
+
return self._auth
|
|
516
|
+
|
|
498
517
|
@property
|
|
499
518
|
def rewards(self):
|
|
500
519
|
if self._rewards is None:
|
|
@@ -39,7 +39,7 @@ kard/commons/types/subscription_id.py,sha256=ftC0pKiUnQhd0vuGIjrK9NDTQeAjPALtrYb
|
|
|
39
39
|
kard/commons/types/user_id.py,sha256=S2yE4rCRcapLUQ4_49O2n-Ph5Bm8uywFdnSXSz-otCU,78
|
|
40
40
|
kard/core/__init__.py,sha256=GkNNgA0CeqvpCzo2vVtAafE8YcnGV-VGtbU5op93lbc,3624
|
|
41
41
|
kard/core/api_error.py,sha256=44vPoTyWN59gonCIZMdzw7M1uspygiLnr3GNFOoVL2Q,614
|
|
42
|
-
kard/core/client_wrapper.py,sha256=
|
|
42
|
+
kard/core/client_wrapper.py,sha256=U7RKqT3eIjwM5tGvjAnk4NOMAcXtp1iGDRaheQCAz0k,3285
|
|
43
43
|
kard/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
|
|
44
44
|
kard/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
|
|
45
45
|
kard/core/force_multipart.py,sha256=cH981xLy0kZVKiZZkFoeUjgJ2Zuq7KXB2aRAnmHzRDc,477
|
|
@@ -208,7 +208,7 @@ kard/transactions/types/transactions_response.py,sha256=J_GYrJ3Rs8fXakrdrlzemMaF
|
|
|
208
208
|
kard/transactions/types/transactions_response_data.py,sha256=nHFzk-sgUHea2c-LZ5cH5sNTUXMB2RNF5pUcNsFdwzA,740
|
|
209
209
|
kard/transactions/types/visa_mid.py,sha256=inLd8mrhQ1hmdHo7g03NYMbGtq-UGo6OuhR9IFtKVjY,658
|
|
210
210
|
kard/transactions/types/visa_mid_details.py,sha256=TKck88YVWuhUvvydkfB-xUfNa1sx3h2Q8GSsiCBLqiM,724
|
|
211
|
-
kard/users/__init__.py,sha256=
|
|
211
|
+
kard/users/__init__.py,sha256=pV4d3eJhMlb9c2P6hEd1CTujgmRZspD1TznlA23FLuk,10547
|
|
212
212
|
kard/users/attributions/__init__.py,sha256=kKMcKJ2Sjlc-1Mi2BERYYA8VPUXSTQjDqi7VTJ82y94,2446
|
|
213
213
|
kard/users/attributions/client.py,sha256=VTEw6XP9Ey9O6gRZhgdXeY7ox21F02lLvhwsZ9HqjT4,8614
|
|
214
214
|
kard/users/attributions/raw_client.py,sha256=fqZre0qsFvgk-gWWfvvbjmH1gk21RgTakGUldNnIeBI,8999
|
|
@@ -223,7 +223,12 @@ kard/users/attributions/types/notification_medium.py,sha256=2ay0h6nIqf0DeolWfk9d
|
|
|
223
223
|
kard/users/attributions/types/offer_attribution_attributes.py,sha256=B2FZiEgSeQbF3yHZ5rSnBLYuOTBx1zNIgO5MPYdY_9g,1169
|
|
224
224
|
kard/users/attributions/types/offer_attribution_request.py,sha256=aU4vKiuKv-YRlyKdvY-90jNUXEmvHtMll1FvPii8MFU,630
|
|
225
225
|
kard/users/attributions/types/offer_medium.py,sha256=5K3bGlrPdxFu4FSPvYRqdjSY5VD7DYnX43nUJ1IqnDQ,171
|
|
226
|
-
kard/users/
|
|
226
|
+
kard/users/auth/__init__.py,sha256=v2IcrKuUr-jatX1SYrXq5BBWHaJElel8vC_8TXlZ1xQ,1080
|
|
227
|
+
kard/users/auth/client.py,sha256=mVe77Mq0JG3qFgw8mZ7f47DHEAQgxNk3CntQMmrgTaE,3494
|
|
228
|
+
kard/users/auth/raw_client.py,sha256=53IWsFINVLRVX0l7BDScmAH5fejU0yx9L_-M1VvK13k,6007
|
|
229
|
+
kard/users/auth/types/__init__.py,sha256=ySRGQnVJk_77Dr7dSHg3bLpyHeDNL5REl3PhrSrl1To,1114
|
|
230
|
+
kard/users/auth/types/webview_token_response.py,sha256=YMYgo72zFTluKp5MfVsmKu12cNmT-fFQgTiVGCyqVbI,854
|
|
231
|
+
kard/users/client.py,sha256=PV2xvrB2fbcxgx75WD-eRjlyEDSMbh0XBeRTkosuQzc,15889
|
|
227
232
|
kard/users/errors/__init__.py,sha256=BYAoqh-RDSspC-n4ilOC_7zA1XRP7cHdikIiLsD2BkU,1067
|
|
228
233
|
kard/users/errors/multi_status.py,sha256=6SScVu3LIZ_AghltI8DKd1g8l-1KJdEo9GwjP0TwmsE,424
|
|
229
234
|
kard/users/raw_client.py,sha256=vGX7EYcyivMXrf6egmpePuD6gHy6WkcQ2B9UeT9ksGg,30492
|
|
@@ -297,6 +302,6 @@ kard/users/uploads/types/update_upload_response_data.py,sha256=au2tb-iSvkMBDhU6s
|
|
|
297
302
|
kard/users/uploads/types/update_upload_response_data_union.py,sha256=717YqC18LeMNyAkDgYZM2Us40enHiatm3s6UXiMCMPA,871
|
|
298
303
|
kard/users/uploads/types/update_upload_response_object.py,sha256=0iwmSNlgVGPGh9BwzteN1FrhArQStYfjeBkwhOUNAMY,1087
|
|
299
304
|
kard/version.py,sha256=V9m3K1LBEp-MG1T3GWvmb-JWKp8CK-cti5N4GIfQe2I,85
|
|
300
|
-
kard_financial_sdk-0.0.
|
|
301
|
-
kard_financial_sdk-0.0.
|
|
302
|
-
kard_financial_sdk-0.0.
|
|
305
|
+
kard_financial_sdk-0.1.0.dist-info/METADATA,sha256=aaFZNEJxvsRzBknUFCTqKCUnlW5gF5jSOkDiPKZTx-M,7050
|
|
306
|
+
kard_financial_sdk-0.1.0.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
|
|
307
|
+
kard_financial_sdk-0.1.0.dist-info/RECORD,,
|
|
File without changes
|