dub 0.22.1__py3-none-any.whl → 0.23.1__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/_version.py CHANGED
@@ -3,10 +3,10 @@
3
3
  import importlib.metadata
4
4
 
5
5
  __title__: str = "dub"
6
- __version__: str = "0.22.1"
6
+ __version__: str = "0.23.1"
7
7
  __openapi_doc_version__: str = "0.0.1"
8
- __gen_version__: str = "2.593.4"
9
- __user_agent__: str = "speakeasy-sdk/python 0.22.1 2.593.4 0.0.1 dub"
8
+ __gen_version__: str = "2.598.22"
9
+ __user_agent__: str = "speakeasy-sdk/python 0.23.1 2.598.22 0.0.1 dub"
10
10
 
11
11
  try:
12
12
  if __package__ is not None:
dub/embed_tokens.py CHANGED
@@ -23,9 +23,9 @@ class EmbedTokens(BaseSDK):
23
23
  timeout_ms: Optional[int] = None,
24
24
  http_headers: Optional[Mapping[str, str]] = None,
25
25
  ) -> Optional[operations.CreateReferralsEmbedTokenResponseBody]:
26
- r"""Create a new referrals embed token
26
+ r"""Create a referrals embed token
27
27
 
28
- Create a new referrals embed token for the given partner/tenant.
28
+ Create a referrals embed token for the given partner/tenant.
29
29
 
30
30
  :param request: The request object to send.
31
31
  :param retries: Override the default retry configuration for this method
@@ -181,9 +181,9 @@ class EmbedTokens(BaseSDK):
181
181
  timeout_ms: Optional[int] = None,
182
182
  http_headers: Optional[Mapping[str, str]] = None,
183
183
  ) -> Optional[operations.CreateReferralsEmbedTokenResponseBody]:
184
- r"""Create a new referrals embed token
184
+ r"""Create a referrals embed token
185
185
 
186
- Create a new referrals embed token for the given partner/tenant.
186
+ Create a referrals embed token for the given partner/tenant.
187
187
 
188
188
  :param request: The request object to send.
189
189
  :param retries: Override the default retry configuration for this method
dub/events.py CHANGED
@@ -5,7 +5,7 @@ from dub import utils
5
5
  from dub._hooks import HookContext
6
6
  from dub.models import errors, operations
7
7
  from dub.types import BaseModel, OptionalNullable, UNSET
8
- from typing import Any, Mapping, Optional, Union, cast
8
+ from typing import Any, List, Mapping, Optional, Union, cast
9
9
 
10
10
 
11
11
  class Events(BaseSDK):
@@ -19,7 +19,7 @@ class Events(BaseSDK):
19
19
  server_url: Optional[str] = None,
20
20
  timeout_ms: Optional[int] = None,
21
21
  http_headers: Optional[Mapping[str, str]] = None,
22
- ) -> Optional[operations.ListEventsResponseBody]:
22
+ ) -> Optional[List[operations.ListEventsResponseBody]]:
23
23
  r"""Retrieve a list of events
24
24
 
25
25
  Retrieve a paginated list of events for the authenticated workspace.
@@ -95,7 +95,7 @@ class Events(BaseSDK):
95
95
  response_data: Any = None
96
96
  if utils.match_response(http_res, "200", "application/json"):
97
97
  return utils.unmarshal_json(
98
- http_res.text, Optional[operations.ListEventsResponseBody]
98
+ http_res.text, Optional[List[operations.ListEventsResponseBody]]
99
99
  )
100
100
  if utils.match_response(http_res, "400", "application/json"):
101
101
  response_data = utils.unmarshal_json(http_res.text, errors.BadRequestData)
@@ -162,7 +162,7 @@ class Events(BaseSDK):
162
162
  server_url: Optional[str] = None,
163
163
  timeout_ms: Optional[int] = None,
164
164
  http_headers: Optional[Mapping[str, str]] = None,
165
- ) -> Optional[operations.ListEventsResponseBody]:
165
+ ) -> Optional[List[operations.ListEventsResponseBody]]:
166
166
  r"""Retrieve a list of events
167
167
 
168
168
  Retrieve a paginated list of events for the authenticated workspace.
@@ -238,7 +238,7 @@ class Events(BaseSDK):
238
238
  response_data: Any = None
239
239
  if utils.match_response(http_res, "200", "application/json"):
240
240
  return utils.unmarshal_json(
241
- http_res.text, Optional[operations.ListEventsResponseBody]
241
+ http_res.text, Optional[List[operations.ListEventsResponseBody]]
242
242
  )
243
243
  if utils.match_response(http_res, "400", "application/json"):
244
244
  response_data = utils.unmarshal_json(http_res.text, errors.BadRequestData)
dub/folders.py CHANGED
@@ -23,9 +23,9 @@ class Folders(BaseSDK):
23
23
  timeout_ms: Optional[int] = None,
24
24
  http_headers: Optional[Mapping[str, str]] = None,
25
25
  ) -> Optional[components.FolderSchema]:
26
- r"""Create a new folder
26
+ r"""Create a folder
27
27
 
28
- Create a new folder for the authenticated workspace.
28
+ Create a folder for the authenticated workspace.
29
29
 
30
30
  :param request: The request object to send.
31
31
  :param retries: Override the default retry configuration for this method
@@ -178,9 +178,9 @@ class Folders(BaseSDK):
178
178
  timeout_ms: Optional[int] = None,
179
179
  http_headers: Optional[Mapping[str, str]] = None,
180
180
  ) -> Optional[components.FolderSchema]:
181
- r"""Create a new folder
181
+ r"""Create a folder
182
182
 
183
- Create a new folder for the authenticated workspace.
183
+ Create a folder for the authenticated workspace.
184
184
 
185
185
  :param request: The request object to send.
186
186
  :param retries: Override the default retry configuration for this method
dub/httpclient.py CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  # pyright: reportReturnType = false
4
4
  import asyncio
5
- from concurrent.futures import ThreadPoolExecutor
6
5
  from typing_extensions import Protocol, runtime_checkable
7
6
  import httpx
8
7
  from typing import Any, Optional, Union
@@ -116,21 +115,42 @@ def close_clients(
116
115
  pass
117
116
 
118
117
  if async_client is not None and not async_client_supplied:
119
- is_async = False
118
+ # First, try the simplest approach - use asyncio.run()
119
+ # This works when we're not in an async context
120
120
  try:
121
- asyncio.get_running_loop()
122
- is_async = True
123
- except RuntimeError:
124
- pass
125
-
126
- try:
127
- # If this function is called in an async loop then start another
128
- # loop in a separate thread to close the async http client.
129
- if is_async:
130
- with ThreadPoolExecutor(max_workers=1) as executor:
131
- future = executor.submit(asyncio.run, async_client.aclose())
132
- future.result()
121
+ asyncio.run(async_client.aclose())
122
+ except RuntimeError as e:
123
+ # If we get "RuntimeError: This event loop is already running",
124
+ # it means we're in an async context
125
+ if "already running" in str(e):
126
+ try:
127
+ # We're in an async context, so get the running loop
128
+ loop = asyncio.get_running_loop()
129
+ # Create a task but don't wait for it
130
+ loop.create_task(async_client.aclose())
131
+ except Exception:
132
+ # If we can't get the loop or create a task, just ignore
133
+ # The GC will eventually clean up the resources
134
+ pass
135
+ # If we get "RuntimeError: There is no current event loop in thread",
136
+ # we're not in an async context, but asyncio.run() failed for some reason
137
+ # In this case, we can try to create a new event loop explicitly
138
+ elif "no current event loop" in str(e):
139
+ try:
140
+ # Create a new event loop and run the coroutine
141
+ loop = asyncio.new_event_loop()
142
+ asyncio.set_event_loop(loop)
143
+ try:
144
+ loop.run_until_complete(async_client.aclose())
145
+ finally:
146
+ loop.close()
147
+ asyncio.set_event_loop(None)
148
+ except Exception:
149
+ # If this also fails, just ignore
150
+ pass
151
+ # For any other RuntimeError, just ignore
133
152
  else:
134
- asyncio.run(async_client.aclose())
153
+ pass
135
154
  except Exception:
155
+ # For any other exception, just ignore
136
156
  pass
dub/links.py CHANGED
@@ -24,9 +24,9 @@ class Links(BaseSDK):
24
24
  timeout_ms: Optional[int] = None,
25
25
  http_headers: Optional[Mapping[str, str]] = None,
26
26
  ) -> Optional[components.LinkSchema]:
27
- r"""Create a new link
27
+ r"""Create a link
28
28
 
29
- Create a new link for the authenticated workspace.
29
+ Create a link for the authenticated workspace.
30
30
 
31
31
  :param request: The request object to send.
32
32
  :param retries: Override the default retry configuration for this method
@@ -173,9 +173,9 @@ class Links(BaseSDK):
173
173
  timeout_ms: Optional[int] = None,
174
174
  http_headers: Optional[Mapping[str, str]] = None,
175
175
  ) -> Optional[components.LinkSchema]:
176
- r"""Create a new link
176
+ r"""Create a link
177
177
 
178
- Create a new link for the authenticated workspace.
178
+ Create a link for the authenticated workspace.
179
179
 
180
180
  :param request: The request object to send.
181
181
  :param retries: Override the default retry configuration for this method
@@ -29,6 +29,10 @@ class LeadCreatedEventCustomerTypedDict(TypedDict):
29
29
  r"""Avatar URL of the customer."""
30
30
  country: NotRequired[Nullable[str]]
31
31
  r"""Country of the customer."""
32
+ sales: NotRequired[Nullable[float]]
33
+ r"""Total number of sales for the customer."""
34
+ sale_amount: NotRequired[Nullable[float]]
35
+ r"""Total amount of sales for the customer."""
32
36
 
33
37
 
34
38
  class LeadCreatedEventCustomer(BaseModel):
@@ -53,10 +57,18 @@ class LeadCreatedEventCustomer(BaseModel):
53
57
  country: OptionalNullable[str] = UNSET
54
58
  r"""Country of the customer."""
55
59
 
60
+ sales: OptionalNullable[float] = UNSET
61
+ r"""Total number of sales for the customer."""
62
+
63
+ sale_amount: Annotated[
64
+ OptionalNullable[float], pydantic.Field(alias="saleAmount")
65
+ ] = UNSET
66
+ r"""Total amount of sales for the customer."""
67
+
56
68
  @model_serializer(mode="wrap")
57
69
  def serialize_model(self, handler):
58
- optional_fields = ["email", "avatar", "country"]
59
- nullable_fields = ["email", "avatar", "country"]
70
+ optional_fields = ["email", "avatar", "country", "sales", "saleAmount"]
71
+ nullable_fields = ["email", "avatar", "country", "sales", "saleAmount"]
60
72
  null_default_fields = []
61
73
 
62
74
  serialized = handler(self)
@@ -1138,6 +1138,10 @@ class CustomerTypedDict(TypedDict):
1138
1138
  r"""Avatar URL of the customer."""
1139
1139
  country: NotRequired[Nullable[str]]
1140
1140
  r"""Country of the customer."""
1141
+ sales: NotRequired[Nullable[float]]
1142
+ r"""Total number of sales for the customer."""
1143
+ sale_amount: NotRequired[Nullable[float]]
1144
+ r"""Total amount of sales for the customer."""
1141
1145
 
1142
1146
 
1143
1147
  class Customer(BaseModel):
@@ -1162,10 +1166,18 @@ class Customer(BaseModel):
1162
1166
  country: OptionalNullable[str] = UNSET
1163
1167
  r"""Country of the customer."""
1164
1168
 
1169
+ sales: OptionalNullable[float] = UNSET
1170
+ r"""Total number of sales for the customer."""
1171
+
1172
+ sale_amount: Annotated[
1173
+ OptionalNullable[float], pydantic.Field(alias="saleAmount")
1174
+ ] = UNSET
1175
+ r"""Total amount of sales for the customer."""
1176
+
1165
1177
  @model_serializer(mode="wrap")
1166
1178
  def serialize_model(self, handler):
1167
- optional_fields = ["email", "avatar", "country"]
1168
- nullable_fields = ["email", "avatar", "country"]
1179
+ optional_fields = ["email", "avatar", "country", "sales", "saleAmount"]
1180
+ nullable_fields = ["email", "avatar", "country", "sales", "saleAmount"]
1169
1181
  null_default_fields = []
1170
1182
 
1171
1183
  serialized = handler(self)
@@ -1198,7 +1210,6 @@ class LeadEventTypedDict(TypedDict):
1198
1210
  timestamp: str
1199
1211
  event_id: str
1200
1212
  event_name: str
1201
- metadata: str
1202
1213
  click: LeadEventClickTypedDict
1203
1214
  link: LeadEventLinkTypedDict
1204
1215
  customer: CustomerTypedDict
@@ -1239,8 +1250,6 @@ class LeadEvent(BaseModel):
1239
1250
 
1240
1251
  event_name: Annotated[str, pydantic.Field(alias="eventName")]
1241
1252
 
1242
- metadata: str
1243
-
1244
1253
  click: LeadEventClick
1245
1254
 
1246
1255
  link: LeadEventLink
@@ -78,6 +78,8 @@ class PartnerEnrolledEventDataTypedDict(TypedDict):
78
78
  email: Nullable[str]
79
79
  image: Nullable[str]
80
80
  country: Nullable[str]
81
+ paypal_email: Nullable[str]
82
+ stripe_connect_id: Nullable[str]
81
83
  payouts_enabled_at: Nullable[str]
82
84
  created_at: str
83
85
  status: Status
@@ -104,6 +106,10 @@ class PartnerEnrolledEventData(BaseModel):
104
106
 
105
107
  country: Nullable[str]
106
108
 
109
+ paypal_email: Annotated[Nullable[str], pydantic.Field(alias="paypalEmail")]
110
+
111
+ stripe_connect_id: Annotated[Nullable[str], pydantic.Field(alias="stripeConnectId")]
112
+
107
113
  payouts_enabled_at: Annotated[
108
114
  Nullable[str], pydantic.Field(alias="payoutsEnabledAt")
109
115
  ]
@@ -150,6 +156,8 @@ class PartnerEnrolledEventData(BaseModel):
150
156
  "image",
151
157
  "description",
152
158
  "country",
159
+ "paypalEmail",
160
+ "stripeConnectId",
153
161
  "payoutsEnabledAt",
154
162
  "tenantId",
155
163
  "links",
@@ -29,6 +29,10 @@ class SaleCreatedEventCustomerTypedDict(TypedDict):
29
29
  r"""Avatar URL of the customer."""
30
30
  country: NotRequired[Nullable[str]]
31
31
  r"""Country of the customer."""
32
+ sales: NotRequired[Nullable[float]]
33
+ r"""Total number of sales for the customer."""
34
+ sale_amount: NotRequired[Nullable[float]]
35
+ r"""Total amount of sales for the customer."""
32
36
 
33
37
 
34
38
  class SaleCreatedEventCustomer(BaseModel):
@@ -53,10 +57,18 @@ class SaleCreatedEventCustomer(BaseModel):
53
57
  country: OptionalNullable[str] = UNSET
54
58
  r"""Country of the customer."""
55
59
 
60
+ sales: OptionalNullable[float] = UNSET
61
+ r"""Total number of sales for the customer."""
62
+
63
+ sale_amount: Annotated[
64
+ OptionalNullable[float], pydantic.Field(alias="saleAmount")
65
+ ] = UNSET
66
+ r"""Total amount of sales for the customer."""
67
+
56
68
  @model_serializer(mode="wrap")
57
69
  def serialize_model(self, handler):
58
- optional_fields = ["email", "avatar", "country"]
59
- nullable_fields = ["email", "avatar", "country"]
70
+ optional_fields = ["email", "avatar", "country", "sales", "saleAmount"]
71
+ nullable_fields = ["email", "avatar", "country", "sales", "saleAmount"]
60
72
  null_default_fields = []
61
73
 
62
74
  serialized = handler(self)
@@ -1138,6 +1138,10 @@ class SaleEventCustomerTypedDict(TypedDict):
1138
1138
  r"""Avatar URL of the customer."""
1139
1139
  country: NotRequired[Nullable[str]]
1140
1140
  r"""Country of the customer."""
1141
+ sales: NotRequired[Nullable[float]]
1142
+ r"""Total number of sales for the customer."""
1143
+ sale_amount: NotRequired[Nullable[float]]
1144
+ r"""Total amount of sales for the customer."""
1141
1145
 
1142
1146
 
1143
1147
  class SaleEventCustomer(BaseModel):
@@ -1162,10 +1166,18 @@ class SaleEventCustomer(BaseModel):
1162
1166
  country: OptionalNullable[str] = UNSET
1163
1167
  r"""Country of the customer."""
1164
1168
 
1169
+ sales: OptionalNullable[float] = UNSET
1170
+ r"""Total number of sales for the customer."""
1171
+
1172
+ sale_amount: Annotated[
1173
+ OptionalNullable[float], pydantic.Field(alias="saleAmount")
1174
+ ] = UNSET
1175
+ r"""Total amount of sales for the customer."""
1176
+
1165
1177
  @model_serializer(mode="wrap")
1166
1178
  def serialize_model(self, handler):
1167
- optional_fields = ["email", "avatar", "country"]
1168
- nullable_fields = ["email", "avatar", "country"]
1179
+ optional_fields = ["email", "avatar", "country", "sales", "saleAmount"]
1180
+ nullable_fields = ["email", "avatar", "country", "sales", "saleAmount"]
1169
1181
  null_default_fields = []
1170
1182
 
1171
1183
  serialized = handler(self)
@@ -1272,7 +1284,6 @@ class SaleEventTypedDict(TypedDict):
1272
1284
  r"""Deprecated. Use `sale.invoiceId` instead."""
1273
1285
  payment_processor: str
1274
1286
  r"""Deprecated. Use `sale.paymentProcessor` instead."""
1275
- metadata: str
1276
1287
  click_id: str
1277
1288
  r"""Deprecated. Use `click.id` instead."""
1278
1289
  link_id: str
@@ -1338,8 +1349,6 @@ class SaleEvent(BaseModel):
1338
1349
  payment_processor: str
1339
1350
  r"""Deprecated. Use `sale.paymentProcessor` instead."""
1340
1351
 
1341
- metadata: str
1342
-
1343
1352
  click_id: Annotated[
1344
1353
  str,
1345
1354
  pydantic.Field(
@@ -157,6 +157,8 @@ from .getcustomers import (
157
157
  GetCustomersLinkTypedDict,
158
158
  GetCustomersPartner,
159
159
  GetCustomersPartnerTypedDict,
160
+ GetCustomersQueryParamSortBy,
161
+ GetCustomersQueryParamSortOrder,
160
162
  GetCustomersRequest,
161
163
  GetCustomersRequestTypedDict,
162
164
  GetCustomersResponseBody,
@@ -476,6 +478,8 @@ __all__ = [
476
478
  "GetCustomersLinkTypedDict",
477
479
  "GetCustomersPartner",
478
480
  "GetCustomersPartnerTypedDict",
481
+ "GetCustomersQueryParamSortBy",
482
+ "GetCustomersQueryParamSortOrder",
479
483
  "GetCustomersRequest",
480
484
  "GetCustomersRequestTypedDict",
481
485
  "GetCustomersResponseBody",
@@ -72,6 +72,8 @@ class CreateCustomerLinkTypedDict(TypedDict):
72
72
  r"""The short link slug. If not provided, a random 7-character slug will be generated."""
73
73
  short_link: str
74
74
  r"""The full URL of the short link, including the https protocol (e.g. `https://dub.sh/try`)."""
75
+ url: str
76
+ r"""The destination URL of the short link."""
75
77
  program_id: Nullable[str]
76
78
  r"""The ID of the program the short link is associated with."""
77
79
 
@@ -89,6 +91,9 @@ class CreateCustomerLink(BaseModel):
89
91
  short_link: Annotated[str, pydantic.Field(alias="shortLink")]
90
92
  r"""The full URL of the short link, including the https protocol (e.g. `https://dub.sh/try`)."""
91
93
 
94
+ url: str
95
+ r"""The destination URL of the short link."""
96
+
92
97
  program_id: Annotated[Nullable[str], pydantic.Field(alias="programId")]
93
98
  r"""The ID of the program the short link is associated with."""
94
99
 
@@ -259,6 +264,10 @@ class CreateCustomerResponseBodyTypedDict(TypedDict):
259
264
  r"""Avatar URL of the customer."""
260
265
  country: NotRequired[Nullable[str]]
261
266
  r"""Country of the customer."""
267
+ sales: NotRequired[Nullable[float]]
268
+ r"""Total number of sales for the customer."""
269
+ sale_amount: NotRequired[Nullable[float]]
270
+ r"""Total amount of sales for the customer."""
262
271
  link: NotRequired[Nullable[CreateCustomerLinkTypedDict]]
263
272
  program_id: NotRequired[Nullable[str]]
264
273
  partner: NotRequired[Nullable[CreateCustomerPartnerTypedDict]]
@@ -289,6 +298,14 @@ class CreateCustomerResponseBody(BaseModel):
289
298
  country: OptionalNullable[str] = UNSET
290
299
  r"""Country of the customer."""
291
300
 
301
+ sales: OptionalNullable[float] = UNSET
302
+ r"""Total number of sales for the customer."""
303
+
304
+ sale_amount: Annotated[
305
+ OptionalNullable[float], pydantic.Field(alias="saleAmount")
306
+ ] = UNSET
307
+ r"""Total amount of sales for the customer."""
308
+
292
309
  link: OptionalNullable[CreateCustomerLink] = UNSET
293
310
 
294
311
  program_id: Annotated[OptionalNullable[str], pydantic.Field(alias="programId")] = (
@@ -305,6 +322,8 @@ class CreateCustomerResponseBody(BaseModel):
305
322
  "email",
306
323
  "avatar",
307
324
  "country",
325
+ "sales",
326
+ "saleAmount",
308
327
  "link",
309
328
  "programId",
310
329
  "partner",
@@ -314,6 +333,8 @@ class CreateCustomerResponseBody(BaseModel):
314
333
  "email",
315
334
  "avatar",
316
335
  "country",
336
+ "sales",
337
+ "saleAmount",
317
338
  "link",
318
339
  "programId",
319
340
  "partner",
@@ -707,6 +707,8 @@ class CreatePartnerResponseBodyTypedDict(TypedDict):
707
707
  email: Nullable[str]
708
708
  image: Nullable[str]
709
709
  country: Nullable[str]
710
+ paypal_email: Nullable[str]
711
+ stripe_connect_id: Nullable[str]
710
712
  payouts_enabled_at: Nullable[str]
711
713
  created_at: str
712
714
  status: Status
@@ -735,6 +737,10 @@ class CreatePartnerResponseBody(BaseModel):
735
737
 
736
738
  country: Nullable[str]
737
739
 
740
+ paypal_email: Annotated[Nullable[str], pydantic.Field(alias="paypalEmail")]
741
+
742
+ stripe_connect_id: Annotated[Nullable[str], pydantic.Field(alias="stripeConnectId")]
743
+
738
744
  payouts_enabled_at: Annotated[
739
745
  Nullable[str], pydantic.Field(alias="payoutsEnabledAt")
740
746
  ]
@@ -781,6 +787,8 @@ class CreatePartnerResponseBody(BaseModel):
781
787
  "image",
782
788
  "description",
783
789
  "country",
790
+ "paypalEmail",
791
+ "stripeConnectId",
784
792
  "payoutsEnabledAt",
785
793
  "tenantId",
786
794
  "links",
@@ -40,6 +40,8 @@ class GetCustomerLinkTypedDict(TypedDict):
40
40
  r"""The short link slug. If not provided, a random 7-character slug will be generated."""
41
41
  short_link: str
42
42
  r"""The full URL of the short link, including the https protocol (e.g. `https://dub.sh/try`)."""
43
+ url: str
44
+ r"""The destination URL of the short link."""
43
45
  program_id: Nullable[str]
44
46
  r"""The ID of the program the short link is associated with."""
45
47
 
@@ -57,6 +59,9 @@ class GetCustomerLink(BaseModel):
57
59
  short_link: Annotated[str, pydantic.Field(alias="shortLink")]
58
60
  r"""The full URL of the short link, including the https protocol (e.g. `https://dub.sh/try`)."""
59
61
 
62
+ url: str
63
+ r"""The destination URL of the short link."""
64
+
60
65
  program_id: Annotated[Nullable[str], pydantic.Field(alias="programId")]
61
66
  r"""The ID of the program the short link is associated with."""
62
67
 
@@ -227,6 +232,10 @@ class GetCustomerResponseBodyTypedDict(TypedDict):
227
232
  r"""Avatar URL of the customer."""
228
233
  country: NotRequired[Nullable[str]]
229
234
  r"""Country of the customer."""
235
+ sales: NotRequired[Nullable[float]]
236
+ r"""Total number of sales for the customer."""
237
+ sale_amount: NotRequired[Nullable[float]]
238
+ r"""Total amount of sales for the customer."""
230
239
  link: NotRequired[Nullable[GetCustomerLinkTypedDict]]
231
240
  program_id: NotRequired[Nullable[str]]
232
241
  partner: NotRequired[Nullable[GetCustomerPartnerTypedDict]]
@@ -257,6 +266,14 @@ class GetCustomerResponseBody(BaseModel):
257
266
  country: OptionalNullable[str] = UNSET
258
267
  r"""Country of the customer."""
259
268
 
269
+ sales: OptionalNullable[float] = UNSET
270
+ r"""Total number of sales for the customer."""
271
+
272
+ sale_amount: Annotated[
273
+ OptionalNullable[float], pydantic.Field(alias="saleAmount")
274
+ ] = UNSET
275
+ r"""Total amount of sales for the customer."""
276
+
260
277
  link: OptionalNullable[GetCustomerLink] = UNSET
261
278
 
262
279
  program_id: Annotated[OptionalNullable[str], pydantic.Field(alias="programId")] = (
@@ -273,6 +290,8 @@ class GetCustomerResponseBody(BaseModel):
273
290
  "email",
274
291
  "avatar",
275
292
  "country",
293
+ "sales",
294
+ "saleAmount",
276
295
  "link",
277
296
  "programId",
278
297
  "partner",
@@ -282,6 +301,8 @@ class GetCustomerResponseBody(BaseModel):
282
301
  "email",
283
302
  "avatar",
284
303
  "country",
304
+ "sales",
305
+ "saleAmount",
285
306
  "link",
286
307
  "programId",
287
308
  "partner",
@@ -10,6 +10,20 @@ from typing import Optional
10
10
  from typing_extensions import Annotated, NotRequired, TypedDict
11
11
 
12
12
 
13
+ class GetCustomersQueryParamSortBy(str, Enum):
14
+ r"""The field to sort the customers by. The default is `createdAt`."""
15
+
16
+ CREATED_AT = "createdAt"
17
+ SALE_AMOUNT = "saleAmount"
18
+
19
+
20
+ class GetCustomersQueryParamSortOrder(str, Enum):
21
+ r"""The sort order. The default is `desc`."""
22
+
23
+ ASC = "asc"
24
+ DESC = "desc"
25
+
26
+
13
27
  class GetCustomersRequestTypedDict(TypedDict):
14
28
  email: NotRequired[str]
15
29
  r"""A case-sensitive filter on the list based on the customer's `email` field. The value must be a string. Takes precedence over `externalId`."""
@@ -17,8 +31,16 @@ class GetCustomersRequestTypedDict(TypedDict):
17
31
  r"""A case-sensitive filter on the list based on the customer's `externalId` field. The value must be a string. Takes precedence over `search`."""
18
32
  search: NotRequired[str]
19
33
  r"""A search query to filter customers by email, externalId, or name. If `email` or `externalId` is provided, this will be ignored."""
34
+ country: NotRequired[str]
35
+ r"""A filter on the list based on the customer's `country` field."""
36
+ link_id: NotRequired[str]
37
+ r"""A filter on the list based on the customer's `linkId` field (the referral link ID)."""
20
38
  include_expanded_fields: NotRequired[bool]
21
39
  r"""Whether to include expanded fields on the customer (`link`, `partner`, `discount`)."""
40
+ sort_by: NotRequired[GetCustomersQueryParamSortBy]
41
+ r"""The field to sort the customers by. The default is `createdAt`."""
42
+ sort_order: NotRequired[GetCustomersQueryParamSortOrder]
43
+ r"""The sort order. The default is `desc`."""
22
44
  page: NotRequired[float]
23
45
  r"""The page number for pagination."""
24
46
  page_size: NotRequired[float]
@@ -45,6 +67,19 @@ class GetCustomersRequest(BaseModel):
45
67
  ] = None
46
68
  r"""A search query to filter customers by email, externalId, or name. If `email` or `externalId` is provided, this will be ignored."""
47
69
 
70
+ country: Annotated[
71
+ Optional[str],
72
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
73
+ ] = None
74
+ r"""A filter on the list based on the customer's `country` field."""
75
+
76
+ link_id: Annotated[
77
+ Optional[str],
78
+ pydantic.Field(alias="linkId"),
79
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
80
+ ] = None
81
+ r"""A filter on the list based on the customer's `linkId` field (the referral link ID)."""
82
+
48
83
  include_expanded_fields: Annotated[
49
84
  Optional[bool],
50
85
  pydantic.Field(alias="includeExpandedFields"),
@@ -52,6 +87,20 @@ class GetCustomersRequest(BaseModel):
52
87
  ] = None
53
88
  r"""Whether to include expanded fields on the customer (`link`, `partner`, `discount`)."""
54
89
 
90
+ sort_by: Annotated[
91
+ Optional[GetCustomersQueryParamSortBy],
92
+ pydantic.Field(alias="sortBy"),
93
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
94
+ ] = GetCustomersQueryParamSortBy.CREATED_AT
95
+ r"""The field to sort the customers by. The default is `createdAt`."""
96
+
97
+ sort_order: Annotated[
98
+ Optional[GetCustomersQueryParamSortOrder],
99
+ pydantic.Field(alias="sortOrder"),
100
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
101
+ ] = GetCustomersQueryParamSortOrder.DESC
102
+ r"""The sort order. The default is `desc`."""
103
+
55
104
  page: Annotated[
56
105
  Optional[float],
57
106
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
@@ -75,6 +124,8 @@ class GetCustomersLinkTypedDict(TypedDict):
75
124
  r"""The short link slug. If not provided, a random 7-character slug will be generated."""
76
125
  short_link: str
77
126
  r"""The full URL of the short link, including the https protocol (e.g. `https://dub.sh/try`)."""
127
+ url: str
128
+ r"""The destination URL of the short link."""
78
129
  program_id: Nullable[str]
79
130
  r"""The ID of the program the short link is associated with."""
80
131
 
@@ -92,6 +143,9 @@ class GetCustomersLink(BaseModel):
92
143
  short_link: Annotated[str, pydantic.Field(alias="shortLink")]
93
144
  r"""The full URL of the short link, including the https protocol (e.g. `https://dub.sh/try`)."""
94
145
 
146
+ url: str
147
+ r"""The destination URL of the short link."""
148
+
95
149
  program_id: Annotated[Nullable[str], pydantic.Field(alias="programId")]
96
150
  r"""The ID of the program the short link is associated with."""
97
151
 
@@ -260,6 +314,10 @@ class GetCustomersResponseBodyTypedDict(TypedDict):
260
314
  r"""Avatar URL of the customer."""
261
315
  country: NotRequired[Nullable[str]]
262
316
  r"""Country of the customer."""
317
+ sales: NotRequired[Nullable[float]]
318
+ r"""Total number of sales for the customer."""
319
+ sale_amount: NotRequired[Nullable[float]]
320
+ r"""Total amount of sales for the customer."""
263
321
  link: NotRequired[Nullable[GetCustomersLinkTypedDict]]
264
322
  program_id: NotRequired[Nullable[str]]
265
323
  partner: NotRequired[Nullable[GetCustomersPartnerTypedDict]]
@@ -288,6 +346,14 @@ class GetCustomersResponseBody(BaseModel):
288
346
  country: OptionalNullable[str] = UNSET
289
347
  r"""Country of the customer."""
290
348
 
349
+ sales: OptionalNullable[float] = UNSET
350
+ r"""Total number of sales for the customer."""
351
+
352
+ sale_amount: Annotated[
353
+ OptionalNullable[float], pydantic.Field(alias="saleAmount")
354
+ ] = UNSET
355
+ r"""Total amount of sales for the customer."""
356
+
291
357
  link: OptionalNullable[GetCustomersLink] = UNSET
292
358
 
293
359
  program_id: Annotated[OptionalNullable[str], pydantic.Field(alias="programId")] = (
@@ -304,6 +370,8 @@ class GetCustomersResponseBody(BaseModel):
304
370
  "email",
305
371
  "avatar",
306
372
  "country",
373
+ "sales",
374
+ "saleAmount",
307
375
  "link",
308
376
  "programId",
309
377
  "partner",
@@ -313,6 +381,8 @@ class GetCustomersResponseBody(BaseModel):
313
381
  "email",
314
382
  "avatar",
315
383
  "country",
384
+ "sales",
385
+ "saleAmount",
316
386
  "link",
317
387
  "programId",
318
388
  "partner",
@@ -114,14 +114,14 @@ class GetLinksRequest(BaseModel):
114
114
  tag_ids: Annotated[
115
115
  Optional[QueryParamTagIds],
116
116
  pydantic.Field(alias="tagIds"),
117
- FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
117
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=False)),
118
118
  ] = None
119
119
  r"""The tag IDs to filter the links by."""
120
120
 
121
121
  tag_names: Annotated[
122
122
  Optional[QueryParamTagNames],
123
123
  pydantic.Field(alias="tagNames"),
124
- FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
124
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=False)),
125
125
  ] = None
126
126
  r"""The unique name of the tags assigned to the short link (case insensitive)."""
127
127
 
@@ -99,14 +99,14 @@ class GetLinksCountRequest(BaseModel):
99
99
  tag_ids: Annotated[
100
100
  Optional[GetLinksCountQueryParamTagIds],
101
101
  pydantic.Field(alias="tagIds"),
102
- FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
102
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=False)),
103
103
  ] = None
104
104
  r"""The tag IDs to filter the links by."""
105
105
 
106
106
  tag_names: Annotated[
107
107
  Optional[GetLinksCountQueryParamTagNames],
108
108
  pydantic.Field(alias="tagNames"),
109
- FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
109
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=False)),
110
110
  ] = None
111
111
  r"""The unique name of the tags assigned to the short link (case insensitive)."""
112
112
 
@@ -9,10 +9,10 @@ from dub.models.components import (
9
9
  saleevent as components_saleevent,
10
10
  )
11
11
  from dub.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
12
- from dub.utils import FieldMetadata, QueryParamMetadata
12
+ from dub.utils import FieldMetadata, QueryParamMetadata, get_discriminator
13
13
  from enum import Enum
14
14
  import pydantic
15
- from pydantic import model_serializer
15
+ from pydantic import Discriminator, Tag, model_serializer
16
16
  from typing import List, Optional, Union
17
17
  from typing_extensions import (
18
18
  Annotated,
@@ -491,20 +491,18 @@ class ListEventsRequest(BaseModel):
491
491
  ListEventsResponseBodyTypedDict = TypeAliasType(
492
492
  "ListEventsResponseBodyTypedDict",
493
493
  Union[
494
- List[components_clickevent.ClickEventTypedDict],
495
- List[components_leadevent.LeadEventTypedDict],
496
- List[components_saleevent.SaleEventTypedDict],
494
+ components_clickevent.ClickEventTypedDict,
495
+ components_leadevent.LeadEventTypedDict,
496
+ components_saleevent.SaleEventTypedDict,
497
497
  ],
498
498
  )
499
- r"""A list of events"""
500
499
 
501
500
 
502
- ListEventsResponseBody = TypeAliasType(
503
- "ListEventsResponseBody",
501
+ ListEventsResponseBody = Annotated[
504
502
  Union[
505
- List[components_clickevent.ClickEvent],
506
- List[components_leadevent.LeadEvent],
507
- List[components_saleevent.SaleEvent],
503
+ Annotated[components_clickevent.ClickEvent, Tag("click")],
504
+ Annotated[components_leadevent.LeadEvent, Tag("lead")],
505
+ Annotated[components_saleevent.SaleEvent, Tag("sale")],
508
506
  ],
509
- )
510
- r"""A list of events"""
507
+ Discriminator(lambda m: get_discriminator(m, "event", "event")),
508
+ ]
@@ -106,6 +106,8 @@ class UpdateCustomerLinkTypedDict(TypedDict):
106
106
  r"""The short link slug. If not provided, a random 7-character slug will be generated."""
107
107
  short_link: str
108
108
  r"""The full URL of the short link, including the https protocol (e.g. `https://dub.sh/try`)."""
109
+ url: str
110
+ r"""The destination URL of the short link."""
109
111
  program_id: Nullable[str]
110
112
  r"""The ID of the program the short link is associated with."""
111
113
 
@@ -123,6 +125,9 @@ class UpdateCustomerLink(BaseModel):
123
125
  short_link: Annotated[str, pydantic.Field(alias="shortLink")]
124
126
  r"""The full URL of the short link, including the https protocol (e.g. `https://dub.sh/try`)."""
125
127
 
128
+ url: str
129
+ r"""The destination URL of the short link."""
130
+
126
131
  program_id: Annotated[Nullable[str], pydantic.Field(alias="programId")]
127
132
  r"""The ID of the program the short link is associated with."""
128
133
 
@@ -293,6 +298,10 @@ class UpdateCustomerResponseBodyTypedDict(TypedDict):
293
298
  r"""Avatar URL of the customer."""
294
299
  country: NotRequired[Nullable[str]]
295
300
  r"""Country of the customer."""
301
+ sales: NotRequired[Nullable[float]]
302
+ r"""Total number of sales for the customer."""
303
+ sale_amount: NotRequired[Nullable[float]]
304
+ r"""Total amount of sales for the customer."""
296
305
  link: NotRequired[Nullable[UpdateCustomerLinkTypedDict]]
297
306
  program_id: NotRequired[Nullable[str]]
298
307
  partner: NotRequired[Nullable[UpdateCustomerPartnerTypedDict]]
@@ -323,6 +332,14 @@ class UpdateCustomerResponseBody(BaseModel):
323
332
  country: OptionalNullable[str] = UNSET
324
333
  r"""Country of the customer."""
325
334
 
335
+ sales: OptionalNullable[float] = UNSET
336
+ r"""Total number of sales for the customer."""
337
+
338
+ sale_amount: Annotated[
339
+ OptionalNullable[float], pydantic.Field(alias="saleAmount")
340
+ ] = UNSET
341
+ r"""Total amount of sales for the customer."""
342
+
326
343
  link: OptionalNullable[UpdateCustomerLink] = UNSET
327
344
 
328
345
  program_id: Annotated[OptionalNullable[str], pydantic.Field(alias="programId")] = (
@@ -339,6 +356,8 @@ class UpdateCustomerResponseBody(BaseModel):
339
356
  "email",
340
357
  "avatar",
341
358
  "country",
359
+ "sales",
360
+ "saleAmount",
342
361
  "link",
343
362
  "programId",
344
363
  "partner",
@@ -348,6 +367,8 @@ class UpdateCustomerResponseBody(BaseModel):
348
367
  "email",
349
368
  "avatar",
350
369
  "country",
370
+ "sales",
371
+ "saleAmount",
351
372
  "link",
352
373
  "programId",
353
374
  "partner",
@@ -87,7 +87,6 @@ class UpdateLinkRequestBodyTypedDict(TypedDict):
87
87
  description: NotRequired[Nullable[str]]
88
88
  r"""The custom link preview description (og:description). Will be used for Custom Social Media Cards if `proxy` is true. Learn more: https://d.to/og"""
89
89
  image: NotRequired[Nullable[str]]
90
- r"""The custom link preview image (og:image). Will be used for Custom Social Media Cards if `proxy` is true. Learn more: https://d.to/og"""
91
90
  video: NotRequired[Nullable[str]]
92
91
  r"""The custom link preview video (og:video). Will be used for Custom Social Media Cards if `proxy` is true. Learn more: https://d.to/og"""
93
92
  rewrite: NotRequired[bool]
@@ -222,7 +221,6 @@ class UpdateLinkRequestBody(BaseModel):
222
221
  r"""The custom link preview description (og:description). Will be used for Custom Social Media Cards if `proxy` is true. Learn more: https://d.to/og"""
223
222
 
224
223
  image: OptionalNullable[str] = UNSET
225
- r"""The custom link preview image (og:image). Will be used for Custom Social Media Cards if `proxy` is true. Learn more: https://d.to/og"""
226
224
 
227
225
  video: OptionalNullable[str] = UNSET
228
226
  r"""The custom link preview video (og:video). Will be used for Custom Social Media Cards if `proxy` is true. Learn more: https://d.to/og"""
dub/partners.py CHANGED
@@ -23,9 +23,9 @@ class Partners(BaseSDK):
23
23
  timeout_ms: Optional[int] = None,
24
24
  http_headers: Optional[Mapping[str, str]] = None,
25
25
  ) -> Optional[operations.CreatePartnerResponseBody]:
26
- r"""Create a new partner
26
+ r"""Create a partner
27
27
 
28
- Create a new partner for a program. If partner exists, automatically enrolls them.
28
+ Create a partner for a program. If partner exists, automatically enrolls them.
29
29
 
30
30
  :param request: The request object to send.
31
31
  :param retries: Override the default retry configuration for this method
@@ -178,9 +178,9 @@ class Partners(BaseSDK):
178
178
  timeout_ms: Optional[int] = None,
179
179
  http_headers: Optional[Mapping[str, str]] = None,
180
180
  ) -> Optional[operations.CreatePartnerResponseBody]:
181
- r"""Create a new partner
181
+ r"""Create a partner
182
182
 
183
- Create a new partner for a program. If partner exists, automatically enrolls them.
183
+ Create a partner for a program. If partner exists, automatically enrolls them.
184
184
 
185
185
  :param request: The request object to send.
186
186
  :param retries: Override the default retry configuration for this method
@@ -335,7 +335,7 @@ class Partners(BaseSDK):
335
335
  ) -> Optional[components.LinkSchema]:
336
336
  r"""Create a link for a partner
337
337
 
338
- Create a new link for a partner that is enrolled in your program.
338
+ Create a link for a partner that is enrolled in your program.
339
339
 
340
340
  :param request: The request object to send.
341
341
  :param retries: Override the default retry configuration for this method
@@ -488,7 +488,7 @@ class Partners(BaseSDK):
488
488
  ) -> Optional[components.LinkSchema]:
489
489
  r"""Create a link for a partner
490
490
 
491
- Create a new link for a partner that is enrolled in your program.
491
+ Create a link for a partner that is enrolled in your program.
492
492
 
493
493
  :param request: The request object to send.
494
494
  :param retries: Override the default retry configuration for this method
dub/tags.py CHANGED
@@ -23,9 +23,9 @@ class Tags(BaseSDK):
23
23
  timeout_ms: Optional[int] = None,
24
24
  http_headers: Optional[Mapping[str, str]] = None,
25
25
  ) -> Optional[components.TagSchema]:
26
- r"""Create a new tag
26
+ r"""Create a tag
27
27
 
28
- Create a new tag for the authenticated workspace.
28
+ Create a tag for the authenticated workspace.
29
29
 
30
30
  :param request: The request object to send.
31
31
  :param retries: Override the default retry configuration for this method
@@ -172,9 +172,9 @@ class Tags(BaseSDK):
172
172
  timeout_ms: Optional[int] = None,
173
173
  http_headers: Optional[Mapping[str, str]] = None,
174
174
  ) -> Optional[components.TagSchema]:
175
- r"""Create a new tag
175
+ r"""Create a tag
176
176
 
177
- Create a new tag for the authenticated workspace.
177
+ Create a tag for the authenticated workspace.
178
178
 
179
179
  :param request: The request object to send.
180
180
  :param retries: Override the default retry configuration for this method
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dub
3
- Version: 0.22.1
3
+ Version: 0.23.1
4
4
  Summary: Python Client SDK Generated by Speakeasy
5
5
  Author: Speakeasy
6
6
  Requires-Python: >=3.9
@@ -295,7 +295,7 @@ asyncio.run(main())
295
295
 
296
296
  ### [embed_tokens](https://github.com/dubinc/dub-python/blob/master/docs/sdks/embedtokens/README.md)
297
297
 
298
- * [referrals](https://github.com/dubinc/dub-python/blob/master/docs/sdks/embedtokens/README.md#referrals) - Create a new referrals embed token
298
+ * [referrals](https://github.com/dubinc/dub-python/blob/master/docs/sdks/embedtokens/README.md#referrals) - Create a referrals embed token
299
299
 
300
300
  ### [events](https://github.com/dubinc/dub-python/blob/master/docs/sdks/events/README.md)
301
301
 
@@ -303,14 +303,14 @@ asyncio.run(main())
303
303
 
304
304
  ### [folders](https://github.com/dubinc/dub-python/blob/master/docs/sdks/folders/README.md)
305
305
 
306
- * [create](https://github.com/dubinc/dub-python/blob/master/docs/sdks/folders/README.md#create) - Create a new folder
306
+ * [create](https://github.com/dubinc/dub-python/blob/master/docs/sdks/folders/README.md#create) - Create a folder
307
307
  * [list](https://github.com/dubinc/dub-python/blob/master/docs/sdks/folders/README.md#list) - Retrieve a list of folders
308
308
  * [update](https://github.com/dubinc/dub-python/blob/master/docs/sdks/folders/README.md#update) - Update a folder
309
309
  * [delete](https://github.com/dubinc/dub-python/blob/master/docs/sdks/folders/README.md#delete) - Delete a folder
310
310
 
311
311
  ### [links](https://github.com/dubinc/dub-python/blob/master/docs/sdks/links/README.md)
312
312
 
313
- * [create](https://github.com/dubinc/dub-python/blob/master/docs/sdks/links/README.md#create) - Create a new link
313
+ * [create](https://github.com/dubinc/dub-python/blob/master/docs/sdks/links/README.md#create) - Create a link
314
314
  * [list](https://github.com/dubinc/dub-python/blob/master/docs/sdks/links/README.md#list) - Retrieve a list of links
315
315
  * [count](https://github.com/dubinc/dub-python/blob/master/docs/sdks/links/README.md#count) - Retrieve links count
316
316
  * [get](https://github.com/dubinc/dub-python/blob/master/docs/sdks/links/README.md#get) - Retrieve a link
@@ -323,7 +323,7 @@ asyncio.run(main())
323
323
 
324
324
  ### [partners](https://github.com/dubinc/dub-python/blob/master/docs/sdks/partners/README.md)
325
325
 
326
- * [create](https://github.com/dubinc/dub-python/blob/master/docs/sdks/partners/README.md#create) - Create a new partner
326
+ * [create](https://github.com/dubinc/dub-python/blob/master/docs/sdks/partners/README.md#create) - Create a partner
327
327
  * [create_link](https://github.com/dubinc/dub-python/blob/master/docs/sdks/partners/README.md#create_link) - Create a link for a partner
328
328
  * [retrieve_links](https://github.com/dubinc/dub-python/blob/master/docs/sdks/partners/README.md#retrieve_links) - Retrieve a partner's links.
329
329
  * [upsert_link](https://github.com/dubinc/dub-python/blob/master/docs/sdks/partners/README.md#upsert_link) - Upsert a link for a partner
@@ -336,7 +336,7 @@ asyncio.run(main())
336
336
 
337
337
  ### [tags](https://github.com/dubinc/dub-python/blob/master/docs/sdks/tags/README.md)
338
338
 
339
- * [create](https://github.com/dubinc/dub-python/blob/master/docs/sdks/tags/README.md#create) - Create a new tag
339
+ * [create](https://github.com/dubinc/dub-python/blob/master/docs/sdks/tags/README.md#create) - Create a tag
340
340
  * [list](https://github.com/dubinc/dub-python/blob/master/docs/sdks/tags/README.md#list) - Retrieve a list of tags
341
341
  * [update](https://github.com/dubinc/dub-python/blob/master/docs/sdks/tags/README.md#update) - Update a tag
342
342
  * [delete](https://github.com/dubinc/dub-python/blob/master/docs/sdks/tags/README.md#delete) - Delete a tag
@@ -3,16 +3,16 @@ dub/_hooks/__init__.py,sha256=9_7W5jAYw8rcO8Kfc-Ty-lB82BHfksAJJpVFb_UeU1c,146
3
3
  dub/_hooks/registration.py,sha256=tT-1Cjp5ax1DL-84HBNWPy4wAwgP-0aI4-asLfnkIlw,625
4
4
  dub/_hooks/sdkhooks.py,sha256=2rLEjSz1xFGWabNs1voFn0lXSCqkS38bdKVFdnBJufE,2553
5
5
  dub/_hooks/types.py,sha256=_f63z3zj-1mQYfbDbEgt_0Yzys8yQtKEivmhKxOPeU8,2806
6
- dub/_version.py,sha256=qh-P0HBky42lpYh9YTUMfsKB1gxXdeh7qZL7Y0P4YXE,450
6
+ dub/_version.py,sha256=itxF-4-_-hTrDXKcPmhi5P222jDGX-YMM3uhk2ooAKc,452
7
7
  dub/analytics.py,sha256=vlYINh0VlD1myVlTz5GbsJxoTEk45avOATjpJ_P_b9I,12938
8
8
  dub/basesdk.py,sha256=rDM8sEHVtFjFSi7RgfDnl3T0gLUJzqguXrSxFOWFRqE,12105
9
9
  dub/customers.py,sha256=8iLNQxjcU2gpWJsZp43XwKGNl2S9ONJQeo9IYtgdc-0,63157
10
10
  dub/domains.py,sha256=Te3xPLGz0rusk0zMC0Q_lGryvIwN17HxKSuyChaxLNM,52450
11
- dub/embed_tokens.py,sha256=WVyx4c26HW3mZiWHNFHuVujNick2YDkbOScFOlM7dsE,13670
12
- dub/events.py,sha256=MZmZccMSDSnTtHD20VSq5S9aAS2UyWazetoQbYV_djM,12555
13
- dub/folders.py,sha256=e39wo7b8GauhN5Qdd4CpCnBfVsma3Pfj-eklyM07DuQ,50332
14
- dub/httpclient.py,sha256=lC-YQ7q4yiJGKElxBeb3aZnr-4aYxjgEpZ6roeXYlyg,4318
15
- dub/links.py,sha256=-Di3mUKKLmbXNSl4xSr3fos8-sRApWz2ZCL9UObEt5Y,128486
11
+ dub/embed_tokens.py,sha256=brox--k6QHwvcAQlpxtMt7GrOoGdgYmbWP1qoSuQCbE,13654
12
+ dub/events.py,sha256=HyGsrKz18bEfjrKBOAwXKyo4MFKJ1EXK6uZoHmwUZ0U,12585
13
+ dub/folders.py,sha256=X6DIToZTRqmzjGulZE_4CrBYUyi2a8HrpEIjm3W-DnQ,50316
14
+ dub/httpclient.py,sha256=xAUX3nxG-fwYAE9lfv9uaspYKMFRJf5NM79mV2HKb1I,5486
15
+ dub/links.py,sha256=Nq6Xo-jaw-hL0rcB8a-tAnDu6qUe9kTAcArhPugwRyY,128470
16
16
  dub/models/__init__.py,sha256=HRiFG5CV9y2HvWWQl_JQNbYTPme0UYR1Mhh13Qc-5jE,84
17
17
  dub/models/components/__init__.py,sha256=l2w2vvyhJTRJaSRPIxgqig8KphSuEuhiyvO4G1Lynf4,10710
18
18
  dub/models/components/analyticsbrowsers.py,sha256=f6qMrkPFf38u3_PIovvdIc0hsX1YpYEaPxNwbXzkoeY,1172
@@ -34,8 +34,8 @@ dub/models/components/continentcode.py,sha256=YFw3_x0w7CxCQijsbfiiOoS9FbNATeHyGL
34
34
  dub/models/components/countrycode.py,sha256=ZDcCf4vay2mX6w6qzRliHkcXkV60zGJOgNvr3nfqHyQ,3713
35
35
  dub/models/components/domainschema.py,sha256=MBaPJhQDSQtMTQYVsV8khaQGpY5BXa6IpwYP7qaWnzQ,5328
36
36
  dub/models/components/folderschema.py,sha256=6bniUPyjg8U_DQO3ETJKYdypLSvjy4Bire9GdXovGxw,2666
37
- dub/models/components/leadcreatedevent.py,sha256=zJ5Tl44gAcOtFJAKDilwTSXspEPxf0DwyLk8e5xV448,40165
38
- dub/models/components/leadevent.py,sha256=MwfE4IPku1eb_6GofxE4EdzRZ-J-OibJpzI9mFbf_yA,44077
37
+ dub/models/components/leadcreatedevent.py,sha256=VJiD78KspBq0Y9scs_s5e-tk0QtMLoL8B5Te7cYD0Xo,40656
38
+ dub/models/components/leadevent.py,sha256=knRNJj561GgQM0jU7qwSCKoQhNoKkkpCNPpXLEfI9Ek,44531
39
39
  dub/models/components/linkclickedevent.py,sha256=jMdhw1NNlK8wQK28JchgdOZ54IKpLO24AqBwxfZtAF8,37459
40
40
  dub/models/components/linkerrorschema.py,sha256=BHHLHZv1ojPYUO78d8kCKIjgq68uuMMhW7LbyLMbzqo,1114
41
41
  dub/models/components/linkgeotargeting.py,sha256=F0jUhoTXU2goK_4F0dLonIKu3y93fRQiwbdrgWP4itA,24054
@@ -44,9 +44,9 @@ dub/models/components/linkwebhookevent.py,sha256=r4Y8ba4iIDiA920YFzlmdf-8-z1Rdn4
44
44
  dub/models/components/partneranalyticscount.py,sha256=hJOuFVUTFOuXWviLxExwXDZVgPLBcgmqt8VxeHv7JAw,1035
45
45
  dub/models/components/partneranalyticstimeseries.py,sha256=Bh431YfEd8v6TD9o9DPCAwGCDo5Rrf1xR1pccm7q5aw,1268
46
46
  dub/models/components/partneranalyticstoplinks.py,sha256=xy1F1vueaBX93Gj2AYqqa7jbEueJy-FAVD5GdnjPva8,3755
47
- dub/models/components/partnerenrolledevent.py,sha256=0dfWzzIB0bE1PlykQb1HiooCbPyfp0Oh89Rghj-AVFA,5894
48
- dub/models/components/salecreatedevent.py,sha256=6kgcd7LHebgp9NPirMEhQzu6A1h9NFcywMsRIPX-6sk,41519
49
- dub/models/components/saleevent.py,sha256=_FG-qQ-0kBDt1Jpp4NxYTpoTqimXJOo38rIWy5hwRzg,47074
47
+ dub/models/components/partnerenrolledevent.py,sha256=nicL9KiA-e4DkRT0UCEgoqt5BeG6k5-6yS6z8BBgJts,6192
48
+ dub/models/components/salecreatedevent.py,sha256=0iC7LapQdrWFUPCuyr3vlsoqzYGnjVeUX1wwyXeToCs,42010
49
+ dub/models/components/saleevent.py,sha256=YT3fOa4J-glEqlepgo-22Dhu9rfD7VrbGLpGG8ntuFY,47528
50
50
  dub/models/components/security.py,sha256=be_cng1n5ULto_xGGPBKH1ZE5LrtmBTg6kX2uPJqJOw,599
51
51
  dub/models/components/tagschema.py,sha256=9aymPZgSYT_OUsr4AtHAt4GLej9v89yuS5X1YSZ72sE,759
52
52
  dub/models/components/webhookevent.py,sha256=oDE16DmD_gDcnzqXSDKsSSXzItXdl_O4qY_rjxPo3EE,1090
@@ -62,15 +62,15 @@ dub/models/errors/ratelimitexceeded.py,sha256=0S2eQlQMdVQ8BZYXX59AQZkf5HtexijmQn
62
62
  dub/models/errors/sdkerror.py,sha256=kd75e3JYF2TXNgRZopcV-oGdBWoBZqRcvrwqn2fsFYs,528
63
63
  dub/models/errors/unauthorized.py,sha256=ranMcawvM0oJxxVkShfZsc7V5YYjbz9luhHywE_ObIg,1525
64
64
  dub/models/errors/unprocessableentity.py,sha256=TxgP43hrqcBW-UDMo8yJ7B0_o_skIH_dXw3DfEWG_cY,1515
65
- dub/models/operations/__init__.py,sha256=C1sOaOA_q5wI_7tOojC_IsNJBBQwLlJ3upcpYu8YODc,19190
65
+ dub/models/operations/__init__.py,sha256=7DnUmcFdZqCHYpkVeZLTwsWBPhvSZCL42BYlUrefULc,19336
66
66
  dub/models/operations/bulkcreatelinks.py,sha256=tT5lA_5LxR_k-WgIFNpYHZu4uvLANSssZbmZ7IamFFA,17466
67
67
  dub/models/operations/bulkdeletelinks.py,sha256=u_hEFC9TZ1UnGGgLhQ-Mf3HNDO98Ur49MtdBnNVIRsE,1151
68
68
  dub/models/operations/bulkupdatelinks.py,sha256=DDEW9Zp2BKPSwdzYGSnATxuFUsv175z3fq4UQ15IvME,16022
69
- dub/models/operations/createcustomer.py,sha256=37LB9l3rOie7nDLB1FMQTqkRjuAemUiL9V0DpCiB-QI,10938
69
+ dub/models/operations/createcustomer.py,sha256=xWg93_tjIkLo2E0zWxF93eoR15-fKaIaVVLxbEDzAL8,11604
70
70
  dub/models/operations/createdomain.py,sha256=dHRvCzE6knsndN4FTFjfijHVmTi8NXKpURz8cM_C-bk,3900
71
71
  dub/models/operations/createfolder.py,sha256=j9z0CIsc22VsWAwlCGNwxo6a3VsetD6t4T2LdCELYGE,1884
72
72
  dub/models/operations/createlink.py,sha256=ThSHn-TNxF70sRWHXt723nBofdMjQ1_hkSZExnwIvVw,16833
73
- dub/models/operations/createpartner.py,sha256=nwxLr8C80SxDo1DB9wgm_VDtZRPym4bsl1HB6ZPuEhs,25657
73
+ dub/models/operations/createpartner.py,sha256=yO5ykGwO-mJOKMC0EXo5vlB8DRdm4o-ctBvMFkzqE0E,25955
74
74
  dub/models/operations/createpartnerlink.py,sha256=RfQ2uiU6ZDOw8pR3eksEY6rKviSsf0oUKGMDkp5s2NQ,16880
75
75
  dub/models/operations/createreferralsembedtoken.py,sha256=q7Q1aAdhEbMDlRqh2M7VFAeAqpYEhFO1P9Cz3TGJhsU,21667
76
76
  dub/models/operations/createtag.py,sha256=XUKuFcLoenYk1oxdeou-gI_s3A4YxtIJKgRiXtLfOpQ,1497
@@ -79,37 +79,37 @@ dub/models/operations/deletedomain.py,sha256=VtuDxUCmAcEmNn1vmrdlSKmASHSFwoho-Co
79
79
  dub/models/operations/deletefolder.py,sha256=lpetbObqu9jd-XLl-unlvmSTuztW8Ecn-dhGNxN60Yc,815
80
80
  dub/models/operations/deletelink.py,sha256=o3Uia06QBrKb--6OkShjKkcqaK0dpt_Jw3AClUqTQq4,1062
81
81
  dub/models/operations/deletetag.py,sha256=UJz-O6oTuvOdzuUXUQktw699hEv0cs1eJW9C3wQBQBc,785
82
- dub/models/operations/getcustomer.py,sha256=fkv5GKhy_cTAG7--v0QRyQD7XXhxtpFAxn71zOPSLok,10129
83
- dub/models/operations/getcustomers.py,sha256=HO_bTlVFc7N1x_WC8lZFr3m8H1u3OKi2TuPixlR17YA,11439
82
+ dub/models/operations/getcustomer.py,sha256=048vTawzBPpsdhpBa22SD_rGqqtcWdIjnfInycaMqG0,10795
83
+ dub/models/operations/getcustomers.py,sha256=hlbwYOORKlSnPCqJ56nXHpzjqQwzeb7ntaJteqymmgE,13987
84
84
  dub/models/operations/getlinkinfo.py,sha256=I4bhM6HeW7IFg1J-68Uou5-OHA7XdQcM8I_lRBtXAJI,1530
85
- dub/models/operations/getlinks.py,sha256=sKKTfFVnWOGB6am_TQv4suRYj3QTvlhGtsSEe4Dwnr0,7470
86
- dub/models/operations/getlinkscount.py,sha256=mPzscUbOWoxVqW6TYp3iW8lnrv0H1Mmy1nEbT9nlESo,5849
85
+ dub/models/operations/getlinks.py,sha256=9BPKj--6Zt9HvFPEIPU-a2aheaOvtIvHGc8PHTMkkbg,7472
86
+ dub/models/operations/getlinkscount.py,sha256=KvD0gh-Imn1WmiiRAIYUXHBoNNGEnmfBQXqdbLXU7EQ,5851
87
87
  dub/models/operations/getqrcode.py,sha256=ynCPJc8vy_QEt5FP8OU2s-u6UIt1BhmFSNZC-XPmO4I,3848
88
88
  dub/models/operations/gettags.py,sha256=c9p_JrHFnTDJURyR5iiKFKpXFHlzJDt3R5X1U-anyYg,2664
89
89
  dub/models/operations/getworkspace.py,sha256=V4-NfsEg3M1BTeoE13sDyazefb2_kI4yFxnzgvHPv4s,625
90
90
  dub/models/operations/listdomains.py,sha256=gbQrJyBIvTGKSeqJo0Jb08iE44Xu39NS9zbfetx4p-s,1936
91
- dub/models/operations/listevents.py,sha256=ps5Qs-nWxBtuDhTIpYDUhWdXQrGqilzDFBHHLLzerMw,17548
91
+ dub/models/operations/listevents.py,sha256=V-RYIPZwLN3djEK4oFBWafVd-BzzPrTYcShwkvGbmfA,17611
92
92
  dub/models/operations/listfolders.py,sha256=3XQRy8yCZ6r1ftzOWw7CFTdFUXdz2qD3IlOP5rKixxw,1575
93
93
  dub/models/operations/retrieveanalytics.py,sha256=Y8bP9pXuaTOqpfgqOjWTXVgXyj8Rl4-HfdfbS3OoxsU,18845
94
94
  dub/models/operations/retrievelinks.py,sha256=1bLrT_Q2y60eU_gdOHTu99VW8c09gX3nkidb0R5qLuk,2988
95
95
  dub/models/operations/retrievepartneranalytics.py,sha256=MmBDRCB5lQ1lKkfHpeMnZcQXkKIjSCVGEUVcvJgZ_Io,5275
96
96
  dub/models/operations/tracklead.py,sha256=FxdbxL9r3PF0eqo4aOcGXCS7EERq11x07NEdPDkqeps,6855
97
97
  dub/models/operations/tracksale.py,sha256=q_IL4dHay_dDTmRYH80zI6JphCyk46yHoLHBFEJEILg,8189
98
- dub/models/operations/updatecustomer.py,sha256=4ah3k4e1nX5X4LfBW5JR80FhN4DrYCu8tKdkA8w8UQM,12449
98
+ dub/models/operations/updatecustomer.py,sha256=dAD833OtFmvAYTWTq93jj5X0RWody5kX-UqjChtvVOc,13115
99
99
  dub/models/operations/updatedomain.py,sha256=rexCga7uNxgBZLPiCMcaudc2cQGB0E_qX2HI0DgG_3M,4519
100
100
  dub/models/operations/updatefolder.py,sha256=dNvSPY67g58SWynB8ic5rcgT-h7THRmyxuzuFdO42GQ,2581
101
- dub/models/operations/updatelink.py,sha256=pwDVaSicVIB2Nb5e4sSrhn2NuHNa_1_MXNoDOaN-cXI,17855
101
+ dub/models/operations/updatelink.py,sha256=b6BbDMh7BOtNQc_vcsqRGKBtrlRnW9VG8BDIv1RUogw,17567
102
102
  dub/models/operations/updatepartnersale.py,sha256=GkykJPynsw2nWexos36ygnxvJX-EJY_sFNfwYFeeuCk,3415
103
103
  dub/models/operations/updatetag.py,sha256=0nGAU6if5BsetDArXCIn8YvlDgG17N1Cp8q1o9F6ff4,2101
104
104
  dub/models/operations/updateworkspace.py,sha256=qdlmA-Rz8_fC3iQs7bzmcn0qL9Lu3a04ziEIYfX3Ugo,2690
105
105
  dub/models/operations/upsertlink.py,sha256=RdVy-L4I_mCqwaIhmU1DosYfndpW6yh_8OslaFs2v5s,16956
106
106
  dub/models/operations/upsertpartnerlink.py,sha256=h08QRwsQyiIvDTUKu1ANE9mrwikDCqIzP8hWAKnc38Y,16880
107
- dub/partners.py,sha256=a1V9Wy_BBOxg7_sVpElTPQ6DX-wNMXQNoTWu87_0-OU,77571
107
+ dub/partners.py,sha256=QcVBNdY4Vk0rTPYwi6dApSs19Ql38sgQda-0B4SAdhE,77547
108
108
  dub/py.typed,sha256=zrp19r0G21lr2yRiMC0f8MFkQFGj9wMpSbboePMg8KM,59
109
109
  dub/qr_codes.py,sha256=E0qlx0gs5CWbcz4M-GMLjvoMlGmUmAtHb3dtEWUO8cY,12164
110
110
  dub/sdk.py,sha256=29q0R5TMeRAf-Qd2qI0RIzTGtFDJsQ4v1AwBF8ie6eQ,6357
111
111
  dub/sdkconfiguration.py,sha256=iGOSRTCoNX5k8H98ONo6B8rS6v5CtjAUN69Z6t5ftPg,1762
112
- dub/tags.py,sha256=fp_qLI_0VYSXs2dB77TgMJT0uwpbaKLst_tIpPZctLo,49773
112
+ dub/tags.py,sha256=d9Sb4yZVKMQfdSqFNHFCfkTIVy0cgFLE3jA_TtPQp_Q,49757
113
113
  dub/track.py,sha256=znqpHDO_LBQmIiN4BO3PXCklIUz4xR0S8SKd5oElTJg,25772
114
114
  dub/types/__init__.py,sha256=RArOwSgeeTIva6h-4ttjXwMUeCkz10nAFBL9D-QljI4,377
115
115
  dub/types/basemodel.py,sha256=L79WXvTECbSqaJzs8D3ud_KdIWkU7Cx2wbohDAktE9E,1127
@@ -130,7 +130,7 @@ dub/utils/serializers.py,sha256=hiHBXM1AY8_N2Z_rvFfNSYwvLBkSQlPGFp8poasdU4s,5986
130
130
  dub/utils/url.py,sha256=BgGPgcTA6MRK4bF8fjP2dUopN3NzEzxWMXPBVg8NQUA,5254
131
131
  dub/utils/values.py,sha256=CcaCXEa3xHhkUDROyXZocN8f0bdITftv9Y0P9lTf0YM,3517
132
132
  dub/workspaces.py,sha256=d4eBlOvwuYlENsGcYI0fHQKN-cpC8U9kekTbfNJ2C_4,25635
133
- dub-0.22.1.dist-info/LICENSE,sha256=kc_aZ6YHHcdSsRy-mGsT0Ehji0ZgR_zevXiUt05V2KY,1079
134
- dub-0.22.1.dist-info/METADATA,sha256=ZULbBQQ-aSq_BTJC5y6O1ScWiB4LMopNM2_wSu1VPXw,27587
135
- dub-0.22.1.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
136
- dub-0.22.1.dist-info/RECORD,,
133
+ dub-0.23.1.dist-info/LICENSE,sha256=kc_aZ6YHHcdSsRy-mGsT0Ehji0ZgR_zevXiUt05V2KY,1079
134
+ dub-0.23.1.dist-info/METADATA,sha256=dGf5ogpJ9f-IH_6aVobG3o81MFyqVHxT8bO5V1CeR1I,27567
135
+ dub-0.23.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
136
+ dub-0.23.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.2
2
+ Generator: poetry-core 2.1.3
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
File without changes