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.
@@ -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
- from typing import Any, Callable, Dict, Optional, Union, cast
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
- self._init_sdks()
141
-
142
- def _init_sdks(self):
143
- self.links = Links(self.sdk_configuration)
144
- self.analytics = Analytics(self.sdk_configuration)
145
- self.events = Events(self.sdk_configuration)
146
- self.tags = Tags(self.sdk_configuration)
147
- self.folders = Folders(self.sdk_configuration)
148
- self.domains = Domains(self.sdk_configuration)
149
- self.track = Track(self.sdk_configuration)
150
- self.customers = Customers(self.sdk_configuration)
151
- self.partners = Partners(self.sdk_configuration)
152
- self.commissions = Commissions(self.sdk_configuration)
153
- self.workspaces = Workspaces(self.sdk_configuration)
154
- self.embed_tokens = EmbedTokens(self.sdk_configuration)
155
- self.qr_codes = QRCodes(self.sdk_configuration)
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 .annotations import get_discriminator
4
- from .datetimes import parse_datetime
5
- from .enums import OpenEnumMeta
6
- from .headers import get_headers, get_response_headers
7
- from .metadata import (
8
- FieldMetadata,
9
- find_metadata,
10
- FormMetadata,
11
- HeaderMetadata,
12
- MultipartFormMetadata,
13
- PathParamMetadata,
14
- QueryParamMetadata,
15
- RequestMetadata,
16
- SecurityMetadata,
17
- )
18
- from .queryparams import get_query_params
19
- from .retries import BackoffStrategy, Retries, retry, retry_async, RetryConfig
20
- from .requestbodies import serialize_request_body, SerializedRequestBody
21
- from .security import get_security
22
- from .serializers import (
23
- get_pydantic_model,
24
- marshal_json,
25
- unmarshal,
26
- unmarshal_json,
27
- serialize_decimal,
28
- serialize_float,
29
- serialize_int,
30
- stream_to_text,
31
- stream_to_text_async,
32
- stream_to_bytes,
33
- stream_to_bytes_async,
34
- validate_const,
35
- validate_decimal,
36
- validate_float,
37
- validate_int,
38
- validate_open_enum,
39
- )
40
- from .url import generate_url, template_url, remove_suffix
41
- from .values import (
42
- get_global_from_env,
43
- match_content_type,
44
- match_status_codes,
45
- match_response,
46
- cast_partial,
47
- )
48
- from .logger import Logger, get_body_content, get_default_logger
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.24.1
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)