dub 0.34.0__py3-none-any.whl → 0.35.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.
Files changed (93) hide show
  1. dub/_version.py +3 -3
  2. dub/basesdk.py +20 -6
  3. dub/{workspaces.py → bounties.py} +349 -69
  4. dub/models/components/__init__.py +114 -26
  5. dub/models/components/analyticsbrowsers.py +18 -1
  6. dub/models/components/analyticscities.py +18 -1
  7. dub/models/components/analyticscontinents.py +18 -1
  8. dub/models/components/analyticscount.py +18 -1
  9. dub/models/components/analyticscountries.py +20 -1
  10. dub/models/components/analyticsdevices.py +18 -1
  11. dub/models/components/analyticsos.py +18 -1
  12. dub/models/components/analyticsreferers.py +18 -1
  13. dub/models/components/analyticsrefererurls.py +18 -1
  14. dub/models/components/analyticsregions.py +18 -1
  15. dub/models/components/analyticstimeseries.py +18 -1
  16. dub/models/components/analyticstoplinks.py +16 -26
  17. dub/models/components/analyticstopurls.py +18 -1
  18. dub/models/components/analyticstriggers.py +18 -1
  19. dub/models/components/commissioncreatedevent.py +123 -63
  20. dub/models/components/domainschema.py +31 -50
  21. dub/models/components/folderschema.py +18 -19
  22. dub/models/components/leadcreatedevent.py +151 -134
  23. dub/models/components/linkclickedevent.py +57 -70
  24. dub/models/components/linkschema.py +63 -64
  25. dub/models/components/linkwebhookevent.py +43 -51
  26. dub/models/components/partneranalyticscount.py +18 -1
  27. dub/models/components/partneranalyticstimeseries.py +18 -1
  28. dub/models/components/partneranalyticstoplinks.py +16 -27
  29. dub/models/components/partnerapplicationsubmittedevent.py +42 -75
  30. dub/models/components/partnerenrolledevent.py +477 -83
  31. dub/models/components/salecreatedevent.py +152 -151
  32. dub/models/errors/badrequest.py +18 -1
  33. dub/models/errors/conflict.py +18 -1
  34. dub/models/errors/forbidden.py +18 -1
  35. dub/models/errors/internalservererror.py +18 -1
  36. dub/models/errors/inviteexpired.py +18 -1
  37. dub/models/errors/notfound.py +18 -1
  38. dub/models/errors/ratelimitexceeded.py +18 -1
  39. dub/models/errors/unauthorized.py +18 -1
  40. dub/models/errors/unprocessableentity.py +18 -1
  41. dub/models/operations/__init__.py +323 -19
  42. dub/models/operations/approvebountysubmission.py +211 -0
  43. dub/models/operations/banpartner.py +14 -19
  44. dub/models/operations/bulkcreatelinks.py +86 -87
  45. dub/models/operations/bulkupdatelinks.py +97 -82
  46. dub/models/operations/checkdomainstatus.py +1 -17
  47. dub/models/operations/createdomain.py +33 -34
  48. dub/models/operations/createfolder.py +18 -19
  49. dub/models/operations/createlink.py +86 -87
  50. dub/models/operations/createpartner.py +560 -168
  51. dub/models/operations/createpartnerlink.py +74 -85
  52. dub/models/operations/createreferralsembedtoken.py +99 -87
  53. dub/models/operations/createtag.py +18 -1
  54. dub/models/operations/deactivatepartner.py +65 -0
  55. dub/models/operations/getcustomer.py +106 -105
  56. dub/models/operations/getcustomers.py +123 -105
  57. dub/models/operations/getlinkinfo.py +18 -1
  58. dub/models/operations/getlinks.py +36 -1
  59. dub/models/operations/getlinkscount.py +32 -1
  60. dub/models/operations/getqrcode.py +29 -1
  61. dub/models/operations/gettags.py +20 -1
  62. dub/models/operations/listbountysubmissions.py +249 -0
  63. dub/models/operations/listcommissions.py +129 -64
  64. dub/models/operations/listdomains.py +18 -1
  65. dub/models/operations/listevents.py +414 -389
  66. dub/models/operations/listfolders.py +18 -1
  67. dub/models/operations/listpartners.py +510 -84
  68. dub/models/operations/registerdomain.py +1 -17
  69. dub/models/operations/rejectbountysubmission.py +219 -0
  70. dub/models/operations/retrieveanalytics.py +65 -66
  71. dub/models/operations/retrievelinks.py +30 -19
  72. dub/models/operations/retrievepartneranalytics.py +25 -28
  73. dub/models/operations/tracklead.py +38 -83
  74. dub/models/operations/tracksale.py +52 -95
  75. dub/models/operations/updatecommission.py +126 -64
  76. dub/models/operations/updatecustomer.py +122 -131
  77. dub/models/operations/updatedomain.py +50 -35
  78. dub/models/operations/updatefolder.py +34 -19
  79. dub/models/operations/updatelink.py +101 -86
  80. dub/models/operations/updatetag.py +34 -1
  81. dub/models/operations/upsertlink.py +86 -87
  82. dub/models/operations/upsertpartnerlink.py +77 -90
  83. dub/partners.py +288 -0
  84. dub/sdk.py +3 -3
  85. dub/utils/__init__.py +10 -1
  86. {dub-0.34.0.dist-info → dub-0.35.0.dist-info}/METADATA +10 -8
  87. dub-0.35.0.dist-info/RECORD +143 -0
  88. dub/models/components/workspaceschema.py +0 -328
  89. dub/models/operations/getworkspace.py +0 -21
  90. dub/models/operations/updateworkspace.py +0 -78
  91. dub-0.34.0.dist-info/RECORD +0 -142
  92. {dub-0.34.0.dist-info → dub-0.35.0.dist-info}/WHEEL +0 -0
  93. {dub-0.34.0.dist-info → dub-0.35.0.dist-info}/licenses/LICENSE +0 -0
@@ -187,71 +187,70 @@ class CreatePartnerLinkLinkProps(BaseModel):
187
187
 
188
188
  @model_serializer(mode="wrap")
189
189
  def serialize_model(self, handler):
190
- optional_fields = [
191
- "keyLength",
192
- "externalId",
193
- "tenantId",
194
- "prefix",
195
- "archived",
196
- "tagIds",
197
- "tagNames",
198
- "comments",
199
- "expiresAt",
200
- "expiredUrl",
201
- "password",
202
- "proxy",
203
- "title",
204
- "description",
205
- "image",
206
- "video",
207
- "rewrite",
208
- "ios",
209
- "android",
210
- "doIndex",
211
- "testVariants",
212
- "testStartedAt",
213
- "testCompletedAt",
214
- ]
215
- nullable_fields = [
216
- "externalId",
217
- "tenantId",
218
- "comments",
219
- "expiresAt",
220
- "expiredUrl",
221
- "password",
222
- "title",
223
- "description",
224
- "image",
225
- "video",
226
- "ios",
227
- "android",
228
- "testVariants",
229
- "testStartedAt",
230
- "testCompletedAt",
231
- ]
232
- null_default_fields = []
233
-
190
+ optional_fields = set(
191
+ [
192
+ "keyLength",
193
+ "externalId",
194
+ "tenantId",
195
+ "prefix",
196
+ "archived",
197
+ "tagIds",
198
+ "tagNames",
199
+ "comments",
200
+ "expiresAt",
201
+ "expiredUrl",
202
+ "password",
203
+ "proxy",
204
+ "title",
205
+ "description",
206
+ "image",
207
+ "video",
208
+ "rewrite",
209
+ "ios",
210
+ "android",
211
+ "doIndex",
212
+ "testVariants",
213
+ "testStartedAt",
214
+ "testCompletedAt",
215
+ ]
216
+ )
217
+ nullable_fields = set(
218
+ [
219
+ "externalId",
220
+ "tenantId",
221
+ "comments",
222
+ "expiresAt",
223
+ "expiredUrl",
224
+ "password",
225
+ "title",
226
+ "description",
227
+ "image",
228
+ "video",
229
+ "ios",
230
+ "android",
231
+ "testVariants",
232
+ "testStartedAt",
233
+ "testCompletedAt",
234
+ ]
235
+ )
234
236
  serialized = handler(self)
235
-
236
237
  m = {}
237
238
 
238
239
  for n, f in type(self).model_fields.items():
239
240
  k = f.alias or n
240
241
  val = serialized.get(k)
241
- serialized.pop(k, None)
242
-
243
- optional_nullable = k in optional_fields and k in nullable_fields
244
- is_set = (
245
- self.__pydantic_fields_set__.intersection({n})
246
- or k in null_default_fields
247
- ) # pylint: disable=no-member
248
-
249
- if val is not None and val != UNSET_SENTINEL:
250
- m[k] = val
251
- elif val != UNSET_SENTINEL and (
252
- not k in optional_fields or (optional_nullable and is_set)
253
- ):
254
- m[k] = val
242
+ is_nullable_and_explicitly_set = (
243
+ k in nullable_fields
244
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
245
+ )
246
+
247
+ if val != UNSET_SENTINEL:
248
+ if (
249
+ val is not None
250
+ or k not in optional_fields
251
+ or is_nullable_and_explicitly_set
252
+ ):
253
+ m[k] = val
255
254
 
256
255
  return m
257
256
 
@@ -298,37 +297,27 @@ class CreatePartnerLinkRequestBody(BaseModel):
298
297
 
299
298
  @model_serializer(mode="wrap")
300
299
  def serialize_model(self, handler):
301
- optional_fields = [
302
- "partnerId",
303
- "tenantId",
304
- "url",
305
- "key",
306
- "comments",
307
- "linkProps",
308
- ]
309
- nullable_fields = ["partnerId", "tenantId", "url", "comments"]
310
- null_default_fields = []
311
-
300
+ optional_fields = set(
301
+ ["partnerId", "tenantId", "url", "key", "comments", "linkProps"]
302
+ )
303
+ nullable_fields = set(["partnerId", "tenantId", "url", "comments"])
312
304
  serialized = handler(self)
313
-
314
305
  m = {}
315
306
 
316
307
  for n, f in type(self).model_fields.items():
317
308
  k = f.alias or n
318
309
  val = serialized.get(k)
319
- serialized.pop(k, None)
320
-
321
- optional_nullable = k in optional_fields and k in nullable_fields
322
- is_set = (
323
- self.__pydantic_fields_set__.intersection({n})
324
- or k in null_default_fields
325
- ) # pylint: disable=no-member
326
-
327
- if val is not None and val != UNSET_SENTINEL:
328
- m[k] = val
329
- elif val != UNSET_SENTINEL and (
330
- not k in optional_fields or (optional_nullable and is_set)
331
- ):
332
- m[k] = val
310
+ is_nullable_and_explicitly_set = (
311
+ k in nullable_fields
312
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
313
+ )
314
+
315
+ if val != UNSET_SENTINEL:
316
+ if (
317
+ val is not None
318
+ or k not in optional_fields
319
+ or is_nullable_and_explicitly_set
320
+ ):
321
+ m[k] = val
333
322
 
334
323
  return m
@@ -189,71 +189,70 @@ class CreateReferralsEmbedTokenLinkProps(BaseModel):
189
189
 
190
190
  @model_serializer(mode="wrap")
191
191
  def serialize_model(self, handler):
192
- optional_fields = [
193
- "keyLength",
194
- "externalId",
195
- "tenantId",
196
- "prefix",
197
- "archived",
198
- "tagIds",
199
- "tagNames",
200
- "comments",
201
- "expiresAt",
202
- "expiredUrl",
203
- "password",
204
- "proxy",
205
- "title",
206
- "description",
207
- "image",
208
- "video",
209
- "rewrite",
210
- "ios",
211
- "android",
212
- "doIndex",
213
- "testVariants",
214
- "testStartedAt",
215
- "testCompletedAt",
216
- ]
217
- nullable_fields = [
218
- "externalId",
219
- "tenantId",
220
- "comments",
221
- "expiresAt",
222
- "expiredUrl",
223
- "password",
224
- "title",
225
- "description",
226
- "image",
227
- "video",
228
- "ios",
229
- "android",
230
- "testVariants",
231
- "testStartedAt",
232
- "testCompletedAt",
233
- ]
234
- null_default_fields = []
235
-
192
+ optional_fields = set(
193
+ [
194
+ "keyLength",
195
+ "externalId",
196
+ "tenantId",
197
+ "prefix",
198
+ "archived",
199
+ "tagIds",
200
+ "tagNames",
201
+ "comments",
202
+ "expiresAt",
203
+ "expiredUrl",
204
+ "password",
205
+ "proxy",
206
+ "title",
207
+ "description",
208
+ "image",
209
+ "video",
210
+ "rewrite",
211
+ "ios",
212
+ "android",
213
+ "doIndex",
214
+ "testVariants",
215
+ "testStartedAt",
216
+ "testCompletedAt",
217
+ ]
218
+ )
219
+ nullable_fields = set(
220
+ [
221
+ "externalId",
222
+ "tenantId",
223
+ "comments",
224
+ "expiresAt",
225
+ "expiredUrl",
226
+ "password",
227
+ "title",
228
+ "description",
229
+ "image",
230
+ "video",
231
+ "ios",
232
+ "android",
233
+ "testVariants",
234
+ "testStartedAt",
235
+ "testCompletedAt",
236
+ ]
237
+ )
236
238
  serialized = handler(self)
237
-
238
239
  m = {}
239
240
 
240
241
  for n, f in type(self).model_fields.items():
241
242
  k = f.alias or n
242
243
  val = serialized.get(k)
243
- serialized.pop(k, None)
244
-
245
- optional_nullable = k in optional_fields and k in nullable_fields
246
- is_set = (
247
- self.__pydantic_fields_set__.intersection({n})
248
- or k in null_default_fields
249
- ) # pylint: disable=no-member
250
-
251
- if val is not None and val != UNSET_SENTINEL:
252
- m[k] = val
253
- elif val != UNSET_SENTINEL and (
254
- not k in optional_fields or (optional_nullable and is_set)
255
- ):
256
- m[k] = val
244
+ is_nullable_and_explicitly_set = (
245
+ k in nullable_fields
246
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
247
+ )
248
+
249
+ if val != UNSET_SENTINEL:
250
+ if (
251
+ val is not None
252
+ or k not in optional_fields
253
+ or is_nullable_and_explicitly_set
254
+ ):
255
+ m[k] = val
257
256
 
258
257
  return m
259
258
 
@@ -311,40 +310,37 @@ class Partner(BaseModel):
311
310
 
312
311
  @model_serializer(mode="wrap")
313
312
  def serialize_model(self, handler):
314
- optional_fields = [
315
- "name",
316
- "username",
317
- "image",
318
- "tenantId",
319
- "groupId",
320
- "country",
321
- "description",
322
- "linkProps",
323
- ]
324
- nullable_fields = ["name", "username", "image", "country", "description"]
325
- null_default_fields = []
326
-
313
+ optional_fields = set(
314
+ [
315
+ "name",
316
+ "username",
317
+ "image",
318
+ "tenantId",
319
+ "groupId",
320
+ "country",
321
+ "description",
322
+ "linkProps",
323
+ ]
324
+ )
325
+ nullable_fields = set(["name", "username", "image", "country", "description"])
327
326
  serialized = handler(self)
328
-
329
327
  m = {}
330
328
 
331
329
  for n, f in type(self).model_fields.items():
332
330
  k = f.alias or n
333
331
  val = serialized.get(k)
334
- serialized.pop(k, None)
335
-
336
- optional_nullable = k in optional_fields and k in nullable_fields
337
- is_set = (
338
- self.__pydantic_fields_set__.intersection({n})
339
- or k in null_default_fields
340
- ) # pylint: disable=no-member
341
-
342
- if val is not None and val != UNSET_SENTINEL:
343
- m[k] = val
344
- elif val != UNSET_SENTINEL and (
345
- not k in optional_fields or (optional_nullable and is_set)
346
- ):
347
- m[k] = val
332
+ is_nullable_and_explicitly_set = (
333
+ k in nullable_fields
334
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
335
+ )
336
+
337
+ if val != UNSET_SENTINEL:
338
+ if (
339
+ val is not None
340
+ or k not in optional_fields
341
+ or is_nullable_and_explicitly_set
342
+ ):
343
+ m[k] = val
348
344
 
349
345
  return m
350
346
 
@@ -362,6 +358,22 @@ class CreateReferralsEmbedTokenRequestBody(BaseModel):
362
358
 
363
359
  partner: Optional[Partner] = None
364
360
 
361
+ @model_serializer(mode="wrap")
362
+ def serialize_model(self, handler):
363
+ optional_fields = set(["partnerId", "tenantId", "partner"])
364
+ serialized = handler(self)
365
+ m = {}
366
+
367
+ for n, f in type(self).model_fields.items():
368
+ k = f.alias or n
369
+ val = serialized.get(k)
370
+
371
+ if val != UNSET_SENTINEL:
372
+ if val is not None or k not in optional_fields:
373
+ m[k] = val
374
+
375
+ return m
376
+
365
377
 
366
378
  class CreateReferralsEmbedTokenResponseBodyTypedDict(TypedDict):
367
379
  r"""The created public embed token."""
@@ -1,9 +1,10 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from dub.types import BaseModel
4
+ from dub.types import BaseModel, UNSET_SENTINEL
5
5
  from enum import Enum
6
6
  import pydantic
7
+ from pydantic import model_serializer
7
8
  from typing import Optional
8
9
  from typing_extensions import Annotated, NotRequired, TypedDict
9
10
 
@@ -43,3 +44,19 @@ class CreateTagRequestBody(BaseModel):
43
44
  ),
44
45
  ] = None
45
46
  r"""The name of the tag to create."""
47
+
48
+ @model_serializer(mode="wrap")
49
+ def serialize_model(self, handler):
50
+ optional_fields = set(["name", "color", "tag"])
51
+ serialized = handler(self)
52
+ m = {}
53
+
54
+ for n, f in type(self).model_fields.items():
55
+ k = f.alias or n
56
+ val = serialized.get(k)
57
+
58
+ if val != UNSET_SENTINEL:
59
+ if val is not None or k not in optional_fields:
60
+ m[k] = val
61
+
62
+ return m
@@ -0,0 +1,65 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from dub.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
5
+ import pydantic
6
+ from pydantic import model_serializer
7
+ from typing_extensions import Annotated, NotRequired, TypedDict
8
+
9
+
10
+ class DeactivatePartnerRequestBodyTypedDict(TypedDict):
11
+ partner_id: NotRequired[Nullable[str]]
12
+ r"""The ID of the partner to create a link for. Will take precedence over `tenantId` if provided."""
13
+ tenant_id: NotRequired[Nullable[str]]
14
+ r"""The ID of the partner in your system. If both `partnerId` and `tenantId` are not provided, an error will be thrown."""
15
+
16
+
17
+ class DeactivatePartnerRequestBody(BaseModel):
18
+ partner_id: Annotated[OptionalNullable[str], pydantic.Field(alias="partnerId")] = (
19
+ UNSET
20
+ )
21
+ r"""The ID of the partner to create a link for. Will take precedence over `tenantId` if provided."""
22
+
23
+ tenant_id: Annotated[OptionalNullable[str], pydantic.Field(alias="tenantId")] = (
24
+ UNSET
25
+ )
26
+ r"""The ID of the partner in your system. If both `partnerId` and `tenantId` are not provided, an error will be thrown."""
27
+
28
+ @model_serializer(mode="wrap")
29
+ def serialize_model(self, handler):
30
+ optional_fields = set(["partnerId", "tenantId"])
31
+ nullable_fields = set(["partnerId", "tenantId"])
32
+ serialized = handler(self)
33
+ m = {}
34
+
35
+ for n, f in type(self).model_fields.items():
36
+ k = f.alias or n
37
+ val = serialized.get(k)
38
+ is_nullable_and_explicitly_set = (
39
+ k in nullable_fields
40
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
41
+ )
42
+
43
+ if val != UNSET_SENTINEL:
44
+ if (
45
+ val is not None
46
+ or k not in optional_fields
47
+ or is_nullable_and_explicitly_set
48
+ ):
49
+ m[k] = val
50
+
51
+ return m
52
+
53
+
54
+ class DeactivatePartnerResponseBodyTypedDict(TypedDict):
55
+ r"""The deactivated partner"""
56
+
57
+ partner_id: str
58
+ r"""The ID of the deactivated partner."""
59
+
60
+
61
+ class DeactivatePartnerResponseBody(BaseModel):
62
+ r"""The deactivated partner"""
63
+
64
+ partner_id: Annotated[str, pydantic.Field(alias="partnerId")]
65
+ r"""The ID of the deactivated partner."""