dub 0.24.1__py3-none-any.whl → 0.26.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.
- dub/_hooks/types.py +7 -0
- dub/_version.py +3 -3
- dub/analytics.py +2 -0
- dub/basesdk.py +12 -20
- dub/commissions.py +4 -0
- dub/customers.py +10 -0
- dub/domains.py +8 -0
- dub/embed_tokens.py +2 -0
- dub/events.py +2 -0
- dub/folders.py +8 -0
- dub/links.py +20 -0
- dub/models/__init__.py +0 -1
- dub/models/components/__init__.py +422 -196
- dub/models/components/folderschema.py +1 -7
- dub/models/errors/__init__.py +136 -58
- dub/models/operations/__init__.py +710 -371
- dub/models/operations/listfolders.py +0 -9
- dub/partners.py +10 -0
- dub/qr_codes.py +2 -0
- dub/sdk.py +74 -46
- dub/sdkconfiguration.py +0 -7
- dub/tags.py +8 -0
- dub/track.py +4 -0
- dub/utils/__init__.py +130 -46
- dub/workspaces.py +4 -0
- {dub-0.24.1.dist-info → dub-0.26.0.dist-info}/METADATA +2 -1
- {dub-0.24.1.dist-info → dub-0.26.0.dist-info}/RECORD +29 -29
- {dub-0.24.1.dist-info → dub-0.26.0.dist-info}/LICENSE +0 -0
- {dub-0.24.1.dist-info → dub-0.26.0.dist-info}/WHEEL +0 -0
|
@@ -11,8 +11,6 @@ from typing_extensions import Annotated, NotRequired, TypedDict
|
|
|
11
11
|
class ListFoldersRequestTypedDict(TypedDict):
|
|
12
12
|
search: NotRequired[str]
|
|
13
13
|
r"""The search term to filter the folders by."""
|
|
14
|
-
include_link_count: NotRequired[bool]
|
|
15
|
-
r"""Whether to include the link count in the response."""
|
|
16
14
|
page: NotRequired[float]
|
|
17
15
|
r"""The page number for pagination."""
|
|
18
16
|
page_size: NotRequired[float]
|
|
@@ -26,13 +24,6 @@ class ListFoldersRequest(BaseModel):
|
|
|
26
24
|
] = None
|
|
27
25
|
r"""The search term to filter the folders by."""
|
|
28
26
|
|
|
29
|
-
include_link_count: Annotated[
|
|
30
|
-
Optional[bool],
|
|
31
|
-
pydantic.Field(alias="includeLinkCount"),
|
|
32
|
-
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
|
33
|
-
] = None
|
|
34
|
-
r"""Whether to include the link count in the response."""
|
|
35
|
-
|
|
36
27
|
page: Annotated[
|
|
37
28
|
Optional[float],
|
|
38
29
|
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
dub/partners.py
CHANGED
|
@@ -82,6 +82,7 @@ class Partners(BaseSDK):
|
|
|
82
82
|
|
|
83
83
|
http_res = self.do_request(
|
|
84
84
|
hook_ctx=HookContext(
|
|
85
|
+
config=self.sdk_configuration,
|
|
85
86
|
base_url=base_url or "",
|
|
86
87
|
operation_id="createPartner",
|
|
87
88
|
oauth2_scopes=[],
|
|
@@ -237,6 +238,7 @@ class Partners(BaseSDK):
|
|
|
237
238
|
|
|
238
239
|
http_res = await self.do_request_async(
|
|
239
240
|
hook_ctx=HookContext(
|
|
241
|
+
config=self.sdk_configuration,
|
|
240
242
|
base_url=base_url or "",
|
|
241
243
|
operation_id="createPartner",
|
|
242
244
|
oauth2_scopes=[],
|
|
@@ -392,6 +394,7 @@ class Partners(BaseSDK):
|
|
|
392
394
|
|
|
393
395
|
http_res = self.do_request(
|
|
394
396
|
hook_ctx=HookContext(
|
|
397
|
+
config=self.sdk_configuration,
|
|
395
398
|
base_url=base_url or "",
|
|
396
399
|
operation_id="createPartnerLink",
|
|
397
400
|
oauth2_scopes=[],
|
|
@@ -545,6 +548,7 @@ class Partners(BaseSDK):
|
|
|
545
548
|
|
|
546
549
|
http_res = await self.do_request_async(
|
|
547
550
|
hook_ctx=HookContext(
|
|
551
|
+
config=self.sdk_configuration,
|
|
548
552
|
base_url=base_url or "",
|
|
549
553
|
operation_id="createPartnerLink",
|
|
550
554
|
oauth2_scopes=[],
|
|
@@ -686,6 +690,7 @@ class Partners(BaseSDK):
|
|
|
686
690
|
|
|
687
691
|
http_res = self.do_request(
|
|
688
692
|
hook_ctx=HookContext(
|
|
693
|
+
config=self.sdk_configuration,
|
|
689
694
|
base_url=base_url or "",
|
|
690
695
|
operation_id="retrieveLinks",
|
|
691
696
|
oauth2_scopes=[],
|
|
@@ -827,6 +832,7 @@ class Partners(BaseSDK):
|
|
|
827
832
|
|
|
828
833
|
http_res = await self.do_request_async(
|
|
829
834
|
hook_ctx=HookContext(
|
|
835
|
+
config=self.sdk_configuration,
|
|
830
836
|
base_url=base_url or "",
|
|
831
837
|
operation_id="retrieveLinks",
|
|
832
838
|
oauth2_scopes=[],
|
|
@@ -980,6 +986,7 @@ class Partners(BaseSDK):
|
|
|
980
986
|
|
|
981
987
|
http_res = self.do_request(
|
|
982
988
|
hook_ctx=HookContext(
|
|
989
|
+
config=self.sdk_configuration,
|
|
983
990
|
base_url=base_url or "",
|
|
984
991
|
operation_id="upsertPartnerLink",
|
|
985
992
|
oauth2_scopes=[],
|
|
@@ -1133,6 +1140,7 @@ class Partners(BaseSDK):
|
|
|
1133
1140
|
|
|
1134
1141
|
http_res = await self.do_request_async(
|
|
1135
1142
|
hook_ctx=HookContext(
|
|
1143
|
+
config=self.sdk_configuration,
|
|
1136
1144
|
base_url=base_url or "",
|
|
1137
1145
|
operation_id="upsertPartnerLink",
|
|
1138
1146
|
oauth2_scopes=[],
|
|
@@ -1277,6 +1285,7 @@ class Partners(BaseSDK):
|
|
|
1277
1285
|
|
|
1278
1286
|
http_res = self.do_request(
|
|
1279
1287
|
hook_ctx=HookContext(
|
|
1288
|
+
config=self.sdk_configuration,
|
|
1280
1289
|
base_url=base_url or "",
|
|
1281
1290
|
operation_id="retrievePartnerAnalytics",
|
|
1282
1291
|
oauth2_scopes=[],
|
|
@@ -1423,6 +1432,7 @@ class Partners(BaseSDK):
|
|
|
1423
1432
|
|
|
1424
1433
|
http_res = await self.do_request_async(
|
|
1425
1434
|
hook_ctx=HookContext(
|
|
1435
|
+
config=self.sdk_configuration,
|
|
1426
1436
|
base_url=base_url or "",
|
|
1427
1437
|
operation_id="retrievePartnerAnalytics",
|
|
1428
1438
|
oauth2_scopes=[],
|
dub/qr_codes.py
CHANGED
|
@@ -70,6 +70,7 @@ class QRCodes(BaseSDK):
|
|
|
70
70
|
|
|
71
71
|
http_res = self.do_request(
|
|
72
72
|
hook_ctx=HookContext(
|
|
73
|
+
config=self.sdk_configuration,
|
|
73
74
|
base_url=base_url or "",
|
|
74
75
|
operation_id="getQRCode",
|
|
75
76
|
oauth2_scopes=[],
|
|
@@ -211,6 +212,7 @@ class QRCodes(BaseSDK):
|
|
|
211
212
|
|
|
212
213
|
http_res = await self.do_request_async(
|
|
213
214
|
hook_ctx=HookContext(
|
|
215
|
+
config=self.sdk_configuration,
|
|
214
216
|
base_url=base_url or "",
|
|
215
217
|
operation_id="getQRCode",
|
|
216
218
|
oauth2_scopes=[],
|
dub/sdk.py
CHANGED
|
@@ -7,42 +7,60 @@ from .utils.logger import Logger, get_default_logger
|
|
|
7
7
|
from .utils.retries import RetryConfig
|
|
8
8
|
from dub import utils
|
|
9
9
|
from dub._hooks import SDKHooks
|
|
10
|
-
from dub.analytics import Analytics
|
|
11
|
-
from dub.commissions import Commissions
|
|
12
|
-
from dub.customers import Customers
|
|
13
|
-
from dub.domains import Domains
|
|
14
|
-
from dub.embed_tokens import EmbedTokens
|
|
15
|
-
from dub.events import Events
|
|
16
|
-
from dub.folders import Folders
|
|
17
|
-
from dub.links import Links
|
|
18
10
|
from dub.models import components
|
|
19
|
-
from dub.partners import Partners
|
|
20
|
-
from dub.qr_codes import QRCodes
|
|
21
|
-
from dub.tags import Tags
|
|
22
|
-
from dub.track import Track
|
|
23
11
|
from dub.types import OptionalNullable, UNSET
|
|
24
|
-
from dub.workspaces import Workspaces
|
|
25
12
|
import httpx
|
|
26
|
-
|
|
13
|
+
import importlib
|
|
14
|
+
from typing import Any, Callable, Dict, Optional, TYPE_CHECKING, Union, cast
|
|
27
15
|
import weakref
|
|
28
16
|
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
from dub.analytics import Analytics
|
|
19
|
+
from dub.commissions import Commissions
|
|
20
|
+
from dub.customers import Customers
|
|
21
|
+
from dub.domains import Domains
|
|
22
|
+
from dub.embed_tokens import EmbedTokens
|
|
23
|
+
from dub.events import Events
|
|
24
|
+
from dub.folders import Folders
|
|
25
|
+
from dub.links import Links
|
|
26
|
+
from dub.partners import Partners
|
|
27
|
+
from dub.qr_codes import QRCodes
|
|
28
|
+
from dub.tags import Tags
|
|
29
|
+
from dub.track import Track
|
|
30
|
+
from dub.workspaces import Workspaces
|
|
31
|
+
|
|
29
32
|
|
|
30
33
|
class Dub(BaseSDK):
|
|
31
34
|
r"""Dub API: Dub is link management infrastructure for companies to create marketing campaigns, link sharing features, and referral programs."""
|
|
32
35
|
|
|
33
|
-
links: Links
|
|
34
|
-
analytics: Analytics
|
|
35
|
-
events: Events
|
|
36
|
-
tags: Tags
|
|
37
|
-
folders: Folders
|
|
38
|
-
domains: Domains
|
|
39
|
-
track: Track
|
|
40
|
-
customers: Customers
|
|
41
|
-
partners: Partners
|
|
42
|
-
commissions: Commissions
|
|
43
|
-
workspaces: Workspaces
|
|
44
|
-
embed_tokens: EmbedTokens
|
|
45
|
-
qr_codes: QRCodes
|
|
36
|
+
links: "Links"
|
|
37
|
+
analytics: "Analytics"
|
|
38
|
+
events: "Events"
|
|
39
|
+
tags: "Tags"
|
|
40
|
+
folders: "Folders"
|
|
41
|
+
domains: "Domains"
|
|
42
|
+
track: "Track"
|
|
43
|
+
customers: "Customers"
|
|
44
|
+
partners: "Partners"
|
|
45
|
+
commissions: "Commissions"
|
|
46
|
+
workspaces: "Workspaces"
|
|
47
|
+
embed_tokens: "EmbedTokens"
|
|
48
|
+
qr_codes: "QRCodes"
|
|
49
|
+
_sub_sdk_map = {
|
|
50
|
+
"links": ("dub.links", "Links"),
|
|
51
|
+
"analytics": ("dub.analytics", "Analytics"),
|
|
52
|
+
"events": ("dub.events", "Events"),
|
|
53
|
+
"tags": ("dub.tags", "Tags"),
|
|
54
|
+
"folders": ("dub.folders", "Folders"),
|
|
55
|
+
"domains": ("dub.domains", "Domains"),
|
|
56
|
+
"track": ("dub.track", "Track"),
|
|
57
|
+
"customers": ("dub.customers", "Customers"),
|
|
58
|
+
"partners": ("dub.partners", "Partners"),
|
|
59
|
+
"commissions": ("dub.commissions", "Commissions"),
|
|
60
|
+
"workspaces": ("dub.workspaces", "Workspaces"),
|
|
61
|
+
"embed_tokens": ("dub.embed_tokens", "EmbedTokens"),
|
|
62
|
+
"qr_codes": ("dub.qr_codes", "QRCodes"),
|
|
63
|
+
}
|
|
46
64
|
|
|
47
65
|
def __init__(
|
|
48
66
|
self,
|
|
@@ -117,6 +135,9 @@ class Dub(BaseSDK):
|
|
|
117
135
|
|
|
118
136
|
hooks = SDKHooks()
|
|
119
137
|
|
|
138
|
+
# pylint: disable=protected-access
|
|
139
|
+
self.sdk_configuration.__dict__["_hooks"] = hooks
|
|
140
|
+
|
|
120
141
|
current_server_url, *_ = self.sdk_configuration.get_server_details()
|
|
121
142
|
server_url, self.sdk_configuration.client = hooks.sdk_init(
|
|
122
143
|
current_server_url, client
|
|
@@ -124,9 +145,6 @@ class Dub(BaseSDK):
|
|
|
124
145
|
if current_server_url != server_url:
|
|
125
146
|
self.sdk_configuration.server_url = server_url
|
|
126
147
|
|
|
127
|
-
# pylint: disable=protected-access
|
|
128
|
-
self.sdk_configuration.__dict__["_hooks"] = hooks
|
|
129
|
-
|
|
130
148
|
weakref.finalize(
|
|
131
149
|
self,
|
|
132
150
|
close_clients,
|
|
@@ -137,22 +155,32 @@ class Dub(BaseSDK):
|
|
|
137
155
|
self.sdk_configuration.async_client_supplied,
|
|
138
156
|
)
|
|
139
157
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
158
|
+
def __getattr__(self, name: str):
|
|
159
|
+
if name in self._sub_sdk_map:
|
|
160
|
+
module_path, class_name = self._sub_sdk_map[name]
|
|
161
|
+
try:
|
|
162
|
+
module = importlib.import_module(module_path)
|
|
163
|
+
klass = getattr(module, class_name)
|
|
164
|
+
instance = klass(self.sdk_configuration)
|
|
165
|
+
setattr(self, name, instance)
|
|
166
|
+
return instance
|
|
167
|
+
except ImportError as e:
|
|
168
|
+
raise AttributeError(
|
|
169
|
+
f"Failed to import module {module_path} for attribute {name}: {e}"
|
|
170
|
+
) from e
|
|
171
|
+
except AttributeError as e:
|
|
172
|
+
raise AttributeError(
|
|
173
|
+
f"Failed to find class {class_name} in module {module_path} for attribute {name}: {e}"
|
|
174
|
+
) from e
|
|
175
|
+
|
|
176
|
+
raise AttributeError(
|
|
177
|
+
f"'{type(self).__name__}' object has no attribute '{name}'"
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
def __dir__(self):
|
|
181
|
+
default_attrs = list(super().__dir__())
|
|
182
|
+
lazy_attrs = list(self._sub_sdk_map.keys())
|
|
183
|
+
return sorted(list(set(default_attrs + lazy_attrs)))
|
|
156
184
|
|
|
157
185
|
def __enter__(self):
|
|
158
186
|
return self
|
dub/sdkconfiguration.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
2
|
|
|
3
|
-
from ._hooks import SDKHooks
|
|
4
3
|
from ._version import (
|
|
5
4
|
__gen_version__,
|
|
6
5
|
__openapi_doc_version__,
|
|
@@ -43,9 +42,6 @@ class SDKConfiguration:
|
|
|
43
42
|
retry_config: OptionalNullable[RetryConfig] = Field(default_factory=lambda: UNSET)
|
|
44
43
|
timeout_ms: Optional[int] = None
|
|
45
44
|
|
|
46
|
-
def __post_init__(self):
|
|
47
|
-
self._hooks = SDKHooks()
|
|
48
|
-
|
|
49
45
|
def get_server_details(self) -> Tuple[str, Dict[str, str]]:
|
|
50
46
|
if self.server_url is not None and self.server_url:
|
|
51
47
|
return remove_suffix(self.server_url, "/"), {}
|
|
@@ -53,6 +49,3 @@ class SDKConfiguration:
|
|
|
53
49
|
self.server_idx = 0
|
|
54
50
|
|
|
55
51
|
return SERVERS[self.server_idx], {}
|
|
56
|
-
|
|
57
|
-
def get_hooks(self) -> SDKHooks:
|
|
58
|
-
return self._hooks
|
dub/tags.py
CHANGED
|
@@ -78,6 +78,7 @@ class Tags(BaseSDK):
|
|
|
78
78
|
|
|
79
79
|
http_res = self.do_request(
|
|
80
80
|
hook_ctx=HookContext(
|
|
81
|
+
config=self.sdk_configuration,
|
|
81
82
|
base_url=base_url or "",
|
|
82
83
|
operation_id="createTag",
|
|
83
84
|
oauth2_scopes=[],
|
|
@@ -227,6 +228,7 @@ class Tags(BaseSDK):
|
|
|
227
228
|
|
|
228
229
|
http_res = await self.do_request_async(
|
|
229
230
|
hook_ctx=HookContext(
|
|
231
|
+
config=self.sdk_configuration,
|
|
230
232
|
base_url=base_url or "",
|
|
231
233
|
operation_id="createTag",
|
|
232
234
|
oauth2_scopes=[],
|
|
@@ -366,6 +368,7 @@ class Tags(BaseSDK):
|
|
|
366
368
|
|
|
367
369
|
http_res = self.do_request(
|
|
368
370
|
hook_ctx=HookContext(
|
|
371
|
+
config=self.sdk_configuration,
|
|
369
372
|
base_url=base_url or "",
|
|
370
373
|
operation_id="getTags",
|
|
371
374
|
oauth2_scopes=[],
|
|
@@ -507,6 +510,7 @@ class Tags(BaseSDK):
|
|
|
507
510
|
|
|
508
511
|
http_res = await self.do_request_async(
|
|
509
512
|
hook_ctx=HookContext(
|
|
513
|
+
config=self.sdk_configuration,
|
|
510
514
|
base_url=base_url or "",
|
|
511
515
|
operation_id="getTags",
|
|
512
516
|
oauth2_scopes=[],
|
|
@@ -665,6 +669,7 @@ class Tags(BaseSDK):
|
|
|
665
669
|
|
|
666
670
|
http_res = self.do_request(
|
|
667
671
|
hook_ctx=HookContext(
|
|
672
|
+
config=self.sdk_configuration,
|
|
668
673
|
base_url=base_url or "",
|
|
669
674
|
operation_id="updateTag",
|
|
670
675
|
oauth2_scopes=[],
|
|
@@ -821,6 +826,7 @@ class Tags(BaseSDK):
|
|
|
821
826
|
|
|
822
827
|
http_res = await self.do_request_async(
|
|
823
828
|
hook_ctx=HookContext(
|
|
829
|
+
config=self.sdk_configuration,
|
|
824
830
|
base_url=base_url or "",
|
|
825
831
|
operation_id="updateTag",
|
|
826
832
|
oauth2_scopes=[],
|
|
@@ -960,6 +966,7 @@ class Tags(BaseSDK):
|
|
|
960
966
|
|
|
961
967
|
http_res = self.do_request(
|
|
962
968
|
hook_ctx=HookContext(
|
|
969
|
+
config=self.sdk_configuration,
|
|
963
970
|
base_url=base_url or "",
|
|
964
971
|
operation_id="deleteTag",
|
|
965
972
|
oauth2_scopes=[],
|
|
@@ -1101,6 +1108,7 @@ class Tags(BaseSDK):
|
|
|
1101
1108
|
|
|
1102
1109
|
http_res = await self.do_request_async(
|
|
1103
1110
|
hook_ctx=HookContext(
|
|
1111
|
+
config=self.sdk_configuration,
|
|
1104
1112
|
base_url=base_url or "",
|
|
1105
1113
|
operation_id="deleteTag",
|
|
1106
1114
|
oauth2_scopes=[],
|
dub/track.py
CHANGED
|
@@ -78,6 +78,7 @@ class Track(BaseSDK):
|
|
|
78
78
|
|
|
79
79
|
http_res = self.do_request(
|
|
80
80
|
hook_ctx=HookContext(
|
|
81
|
+
config=self.sdk_configuration,
|
|
81
82
|
base_url=base_url or "",
|
|
82
83
|
operation_id="trackLead",
|
|
83
84
|
oauth2_scopes=[],
|
|
@@ -229,6 +230,7 @@ class Track(BaseSDK):
|
|
|
229
230
|
|
|
230
231
|
http_res = await self.do_request_async(
|
|
231
232
|
hook_ctx=HookContext(
|
|
233
|
+
config=self.sdk_configuration,
|
|
232
234
|
base_url=base_url or "",
|
|
233
235
|
operation_id="trackLead",
|
|
234
236
|
oauth2_scopes=[],
|
|
@@ -380,6 +382,7 @@ class Track(BaseSDK):
|
|
|
380
382
|
|
|
381
383
|
http_res = self.do_request(
|
|
382
384
|
hook_ctx=HookContext(
|
|
385
|
+
config=self.sdk_configuration,
|
|
383
386
|
base_url=base_url or "",
|
|
384
387
|
operation_id="trackSale",
|
|
385
388
|
oauth2_scopes=[],
|
|
@@ -531,6 +534,7 @@ class Track(BaseSDK):
|
|
|
531
534
|
|
|
532
535
|
http_res = await self.do_request_async(
|
|
533
536
|
hook_ctx=HookContext(
|
|
537
|
+
config=self.sdk_configuration,
|
|
534
538
|
base_url=base_url or "",
|
|
535
539
|
operation_id="trackSale",
|
|
536
540
|
oauth2_scopes=[],
|
dub/utils/__init__.py
CHANGED
|
@@ -1,51 +1,55 @@
|
|
|
1
1
|
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
2
|
|
|
3
|
-
from
|
|
4
|
-
from
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
from .
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
from .
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
from importlib import import_module
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from .annotations import get_discriminator
|
|
8
|
+
from .datetimes import parse_datetime
|
|
9
|
+
from .enums import OpenEnumMeta
|
|
10
|
+
from .headers import get_headers, get_response_headers
|
|
11
|
+
from .metadata import (
|
|
12
|
+
FieldMetadata,
|
|
13
|
+
find_metadata,
|
|
14
|
+
FormMetadata,
|
|
15
|
+
HeaderMetadata,
|
|
16
|
+
MultipartFormMetadata,
|
|
17
|
+
PathParamMetadata,
|
|
18
|
+
QueryParamMetadata,
|
|
19
|
+
RequestMetadata,
|
|
20
|
+
SecurityMetadata,
|
|
21
|
+
)
|
|
22
|
+
from .queryparams import get_query_params
|
|
23
|
+
from .retries import BackoffStrategy, Retries, retry, retry_async, RetryConfig
|
|
24
|
+
from .requestbodies import serialize_request_body, SerializedRequestBody
|
|
25
|
+
from .security import get_security
|
|
26
|
+
from .serializers import (
|
|
27
|
+
get_pydantic_model,
|
|
28
|
+
marshal_json,
|
|
29
|
+
unmarshal,
|
|
30
|
+
unmarshal_json,
|
|
31
|
+
serialize_decimal,
|
|
32
|
+
serialize_float,
|
|
33
|
+
serialize_int,
|
|
34
|
+
stream_to_text,
|
|
35
|
+
stream_to_text_async,
|
|
36
|
+
stream_to_bytes,
|
|
37
|
+
stream_to_bytes_async,
|
|
38
|
+
validate_const,
|
|
39
|
+
validate_decimal,
|
|
40
|
+
validate_float,
|
|
41
|
+
validate_int,
|
|
42
|
+
validate_open_enum,
|
|
43
|
+
)
|
|
44
|
+
from .url import generate_url, template_url, remove_suffix
|
|
45
|
+
from .values import (
|
|
46
|
+
get_global_from_env,
|
|
47
|
+
match_content_type,
|
|
48
|
+
match_status_codes,
|
|
49
|
+
match_response,
|
|
50
|
+
cast_partial,
|
|
51
|
+
)
|
|
52
|
+
from .logger import Logger, get_body_content, get_default_logger
|
|
49
53
|
|
|
50
54
|
__all__ = [
|
|
51
55
|
"BackoffStrategy",
|
|
@@ -56,6 +60,7 @@ __all__ = [
|
|
|
56
60
|
"get_body_content",
|
|
57
61
|
"get_default_logger",
|
|
58
62
|
"get_discriminator",
|
|
63
|
+
"parse_datetime",
|
|
59
64
|
"get_global_from_env",
|
|
60
65
|
"get_headers",
|
|
61
66
|
"get_pydantic_model",
|
|
@@ -98,3 +103,82 @@ __all__ = [
|
|
|
98
103
|
"validate_open_enum",
|
|
99
104
|
"cast_partial",
|
|
100
105
|
]
|
|
106
|
+
|
|
107
|
+
_dynamic_imports: dict[str, str] = {
|
|
108
|
+
"BackoffStrategy": ".retries",
|
|
109
|
+
"FieldMetadata": ".metadata",
|
|
110
|
+
"find_metadata": ".metadata",
|
|
111
|
+
"FormMetadata": ".metadata",
|
|
112
|
+
"generate_url": ".url",
|
|
113
|
+
"get_body_content": ".logger",
|
|
114
|
+
"get_default_logger": ".logger",
|
|
115
|
+
"get_discriminator": ".annotations",
|
|
116
|
+
"parse_datetime": ".datetimes",
|
|
117
|
+
"get_global_from_env": ".values",
|
|
118
|
+
"get_headers": ".headers",
|
|
119
|
+
"get_pydantic_model": ".serializers",
|
|
120
|
+
"get_query_params": ".queryparams",
|
|
121
|
+
"get_response_headers": ".headers",
|
|
122
|
+
"get_security": ".security",
|
|
123
|
+
"HeaderMetadata": ".metadata",
|
|
124
|
+
"Logger": ".logger",
|
|
125
|
+
"marshal_json": ".serializers",
|
|
126
|
+
"match_content_type": ".values",
|
|
127
|
+
"match_status_codes": ".values",
|
|
128
|
+
"match_response": ".values",
|
|
129
|
+
"MultipartFormMetadata": ".metadata",
|
|
130
|
+
"OpenEnumMeta": ".enums",
|
|
131
|
+
"PathParamMetadata": ".metadata",
|
|
132
|
+
"QueryParamMetadata": ".metadata",
|
|
133
|
+
"remove_suffix": ".url",
|
|
134
|
+
"Retries": ".retries",
|
|
135
|
+
"retry": ".retries",
|
|
136
|
+
"retry_async": ".retries",
|
|
137
|
+
"RetryConfig": ".retries",
|
|
138
|
+
"RequestMetadata": ".metadata",
|
|
139
|
+
"SecurityMetadata": ".metadata",
|
|
140
|
+
"serialize_decimal": ".serializers",
|
|
141
|
+
"serialize_float": ".serializers",
|
|
142
|
+
"serialize_int": ".serializers",
|
|
143
|
+
"serialize_request_body": ".requestbodies",
|
|
144
|
+
"SerializedRequestBody": ".requestbodies",
|
|
145
|
+
"stream_to_text": ".serializers",
|
|
146
|
+
"stream_to_text_async": ".serializers",
|
|
147
|
+
"stream_to_bytes": ".serializers",
|
|
148
|
+
"stream_to_bytes_async": ".serializers",
|
|
149
|
+
"template_url": ".url",
|
|
150
|
+
"unmarshal": ".serializers",
|
|
151
|
+
"unmarshal_json": ".serializers",
|
|
152
|
+
"validate_decimal": ".serializers",
|
|
153
|
+
"validate_const": ".serializers",
|
|
154
|
+
"validate_float": ".serializers",
|
|
155
|
+
"validate_int": ".serializers",
|
|
156
|
+
"validate_open_enum": ".serializers",
|
|
157
|
+
"cast_partial": ".values",
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def __getattr__(attr_name: str) -> object:
|
|
162
|
+
module_name = _dynamic_imports.get(attr_name)
|
|
163
|
+
if module_name is None:
|
|
164
|
+
raise AttributeError(
|
|
165
|
+
f"no {attr_name} found in _dynamic_imports, module name -> {__name__} "
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
try:
|
|
169
|
+
module = import_module(module_name, __package__)
|
|
170
|
+
result = getattr(module, attr_name)
|
|
171
|
+
return result
|
|
172
|
+
except ImportError as e:
|
|
173
|
+
raise ImportError(
|
|
174
|
+
f"Failed to import {attr_name} from {module_name}: {e}"
|
|
175
|
+
) from e
|
|
176
|
+
except AttributeError as e:
|
|
177
|
+
raise AttributeError(
|
|
178
|
+
f"Failed to get {attr_name} from {module_name}: {e}"
|
|
179
|
+
) from e
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def __dir__():
|
|
183
|
+
lazy_attrs = list(_dynamic_imports.keys())
|
|
184
|
+
return sorted(lazy_attrs)
|
dub/workspaces.py
CHANGED
|
@@ -70,6 +70,7 @@ class Workspaces(BaseSDK):
|
|
|
70
70
|
|
|
71
71
|
http_res = self.do_request(
|
|
72
72
|
hook_ctx=HookContext(
|
|
73
|
+
config=self.sdk_configuration,
|
|
73
74
|
base_url=base_url or "",
|
|
74
75
|
operation_id="getWorkspace",
|
|
75
76
|
oauth2_scopes=[],
|
|
@@ -213,6 +214,7 @@ class Workspaces(BaseSDK):
|
|
|
213
214
|
|
|
214
215
|
http_res = await self.do_request_async(
|
|
215
216
|
hook_ctx=HookContext(
|
|
217
|
+
config=self.sdk_configuration,
|
|
216
218
|
base_url=base_url or "",
|
|
217
219
|
operation_id="getWorkspace",
|
|
218
220
|
oauth2_scopes=[],
|
|
@@ -371,6 +373,7 @@ class Workspaces(BaseSDK):
|
|
|
371
373
|
|
|
372
374
|
http_res = self.do_request(
|
|
373
375
|
hook_ctx=HookContext(
|
|
376
|
+
config=self.sdk_configuration,
|
|
374
377
|
base_url=base_url or "",
|
|
375
378
|
operation_id="updateWorkspace",
|
|
376
379
|
oauth2_scopes=[],
|
|
@@ -529,6 +532,7 @@ class Workspaces(BaseSDK):
|
|
|
529
532
|
|
|
530
533
|
http_res = await self.do_request_async(
|
|
531
534
|
hook_ctx=HookContext(
|
|
535
|
+
config=self.sdk_configuration,
|
|
532
536
|
base_url=base_url or "",
|
|
533
537
|
operation_id="updateWorkspace",
|
|
534
538
|
oauth2_scopes=[],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: dub
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.26.0
|
|
4
4
|
Summary: Python Client SDK Generated by Speakeasy
|
|
5
5
|
Author: Speakeasy
|
|
6
6
|
Requires-Python: >=3.9.2
|
|
@@ -9,6 +9,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
9
9
|
Classifier: Programming Language :: Python :: 3.11
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.12
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.13
|
|
12
|
+
Requires-Dist: httpcore (>=1.0.9)
|
|
12
13
|
Requires-Dist: httpx (>=0.28.1)
|
|
13
14
|
Requires-Dist: jsonpath-python (>=1.0.6)
|
|
14
15
|
Requires-Dist: pydantic (>=2.11.2)
|