dub 0.34.0__py3-none-any.whl → 0.34.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.
@@ -0,0 +1,174 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from dub.types import BaseModel, Nullable, UNSET_SENTINEL
5
+ from dub.utils import FieldMetadata, PathParamMetadata, RequestMetadata
6
+ from enum import Enum
7
+ import pydantic
8
+ from pydantic import model_serializer
9
+ from typing import List, Optional
10
+ from typing_extensions import Annotated, NotRequired, TypedDict
11
+
12
+
13
+ class RejectionReason(str, Enum):
14
+ r"""The reason for rejecting the submission."""
15
+
16
+ INVALID_PROOF = "invalidProof"
17
+ DUPLICATE_SUBMISSION = "duplicateSubmission"
18
+ OUT_OF_TIME_WINDOW = "outOfTimeWindow"
19
+ DID_NOT_MEET_CRITERIA = "didNotMeetCriteria"
20
+ OTHER = "other"
21
+
22
+
23
+ class RejectBountySubmissionRequestBodyTypedDict(TypedDict):
24
+ rejection_reason: NotRequired[RejectionReason]
25
+ r"""The reason for rejecting the submission."""
26
+ rejection_note: NotRequired[str]
27
+ r"""The note for rejecting the submission."""
28
+
29
+
30
+ class RejectBountySubmissionRequestBody(BaseModel):
31
+ rejection_reason: Annotated[
32
+ Optional[RejectionReason], pydantic.Field(alias="rejectionReason")
33
+ ] = None
34
+ r"""The reason for rejecting the submission."""
35
+
36
+ rejection_note: Annotated[Optional[str], pydantic.Field(alias="rejectionNote")] = (
37
+ None
38
+ )
39
+ r"""The note for rejecting the submission."""
40
+
41
+
42
+ class RejectBountySubmissionRequestTypedDict(TypedDict):
43
+ bounty_id: str
44
+ submission_id: str
45
+ request_body: NotRequired[RejectBountySubmissionRequestBodyTypedDict]
46
+
47
+
48
+ class RejectBountySubmissionRequest(BaseModel):
49
+ bounty_id: Annotated[
50
+ str,
51
+ pydantic.Field(alias="bountyId"),
52
+ FieldMetadata(path=PathParamMetadata(style="simple", explode=False)),
53
+ ]
54
+
55
+ submission_id: Annotated[
56
+ str,
57
+ pydantic.Field(alias="submissionId"),
58
+ FieldMetadata(path=PathParamMetadata(style="simple", explode=False)),
59
+ ]
60
+
61
+ request_body: Annotated[
62
+ Optional[RejectBountySubmissionRequestBody],
63
+ FieldMetadata(request=RequestMetadata(media_type="application/json")),
64
+ ] = None
65
+
66
+
67
+ class RejectBountySubmissionFilesTypedDict(TypedDict):
68
+ url: str
69
+ file_name: str
70
+ size: float
71
+
72
+
73
+ class RejectBountySubmissionFiles(BaseModel):
74
+ url: str
75
+
76
+ file_name: Annotated[str, pydantic.Field(alias="fileName")]
77
+
78
+ size: float
79
+
80
+
81
+ class RejectBountySubmissionStatus(str, Enum):
82
+ DRAFT = "draft"
83
+ SUBMITTED = "submitted"
84
+ APPROVED = "approved"
85
+ REJECTED = "rejected"
86
+
87
+
88
+ class RejectBountySubmissionResponseBodyTypedDict(TypedDict):
89
+ r"""The rejected bounty submission."""
90
+
91
+ id: str
92
+ bounty_id: str
93
+ partner_id: str
94
+ description: Nullable[str]
95
+ urls: Nullable[List[str]]
96
+ files: Nullable[List[RejectBountySubmissionFilesTypedDict]]
97
+ status: RejectBountySubmissionStatus
98
+ performance_count: Nullable[float]
99
+ created_at: str
100
+ completed_at: Nullable[str]
101
+ reviewed_at: Nullable[str]
102
+ rejection_reason: Nullable[str]
103
+ rejection_note: Nullable[str]
104
+
105
+
106
+ class RejectBountySubmissionResponseBody(BaseModel):
107
+ r"""The rejected bounty submission."""
108
+
109
+ id: str
110
+
111
+ bounty_id: Annotated[str, pydantic.Field(alias="bountyId")]
112
+
113
+ partner_id: Annotated[str, pydantic.Field(alias="partnerId")]
114
+
115
+ description: Nullable[str]
116
+
117
+ urls: Nullable[List[str]]
118
+
119
+ files: Nullable[List[RejectBountySubmissionFiles]]
120
+
121
+ status: RejectBountySubmissionStatus
122
+
123
+ performance_count: Annotated[
124
+ Nullable[float], pydantic.Field(alias="performanceCount")
125
+ ]
126
+
127
+ created_at: Annotated[str, pydantic.Field(alias="createdAt")]
128
+
129
+ completed_at: Annotated[Nullable[str], pydantic.Field(alias="completedAt")]
130
+
131
+ reviewed_at: Annotated[Nullable[str], pydantic.Field(alias="reviewedAt")]
132
+
133
+ rejection_reason: Annotated[Nullable[str], pydantic.Field(alias="rejectionReason")]
134
+
135
+ rejection_note: Annotated[Nullable[str], pydantic.Field(alias="rejectionNote")]
136
+
137
+ @model_serializer(mode="wrap")
138
+ def serialize_model(self, handler):
139
+ optional_fields = []
140
+ nullable_fields = [
141
+ "description",
142
+ "urls",
143
+ "files",
144
+ "performanceCount",
145
+ "completedAt",
146
+ "reviewedAt",
147
+ "rejectionReason",
148
+ "rejectionNote",
149
+ ]
150
+ null_default_fields = []
151
+
152
+ serialized = handler(self)
153
+
154
+ m = {}
155
+
156
+ for n, f in type(self).model_fields.items():
157
+ k = f.alias or n
158
+ val = serialized.get(k)
159
+ serialized.pop(k, None)
160
+
161
+ optional_nullable = k in optional_fields and k in nullable_fields
162
+ is_set = (
163
+ self.__pydantic_fields_set__.intersection({n})
164
+ or k in null_default_fields
165
+ ) # pylint: disable=no-member
166
+
167
+ if val is not None and val != UNSET_SENTINEL:
168
+ m[k] = val
169
+ elif val != UNSET_SENTINEL and (
170
+ not k in optional_fields or (optional_nullable and is_set)
171
+ ):
172
+ m[k] = val
173
+
174
+ return m
@@ -257,12 +257,12 @@ class UpsertPartnerLinkLinkProps(BaseModel):
257
257
 
258
258
 
259
259
  class UpsertPartnerLinkRequestBodyTypedDict(TypedDict):
260
+ url: str
261
+ r"""The URL to upsert for. Will throw an error if the domain doesn't match the program's default URL domain."""
260
262
  partner_id: NotRequired[Nullable[str]]
261
263
  r"""The ID of the partner to create a link for. Will take precedence over `tenantId` if provided."""
262
264
  tenant_id: NotRequired[Nullable[str]]
263
265
  r"""The ID of the partner in your system. If both `partnerId` and `tenantId` are not provided, an error will be thrown."""
264
- url: NotRequired[Nullable[str]]
265
- r"""The URL to shorten (if not provided, the program's default URL will be used). Will throw an error if the domain doesn't match the program's default URL domain."""
266
266
  key: NotRequired[str]
267
267
  r"""The short link slug. If not provided, a random 7-character slug will be generated."""
268
268
  comments: NotRequired[Nullable[str]]
@@ -272,6 +272,9 @@ class UpsertPartnerLinkRequestBodyTypedDict(TypedDict):
272
272
 
273
273
 
274
274
  class UpsertPartnerLinkRequestBody(BaseModel):
275
+ url: str
276
+ r"""The URL to upsert for. Will throw an error if the domain doesn't match the program's default URL domain."""
277
+
275
278
  partner_id: Annotated[OptionalNullable[str], pydantic.Field(alias="partnerId")] = (
276
279
  UNSET
277
280
  )
@@ -282,9 +285,6 @@ class UpsertPartnerLinkRequestBody(BaseModel):
282
285
  )
283
286
  r"""The ID of the partner in your system. If both `partnerId` and `tenantId` are not provided, an error will be thrown."""
284
287
 
285
- url: OptionalNullable[str] = UNSET
286
- r"""The URL to shorten (if not provided, the program's default URL will be used). Will throw an error if the domain doesn't match the program's default URL domain."""
287
-
288
288
  key: Optional[str] = None
289
289
  r"""The short link slug. If not provided, a random 7-character slug will be generated."""
290
290
 
@@ -298,15 +298,8 @@ class UpsertPartnerLinkRequestBody(BaseModel):
298
298
 
299
299
  @model_serializer(mode="wrap")
300
300
  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"]
301
+ optional_fields = ["partnerId", "tenantId", "key", "comments", "linkProps"]
302
+ nullable_fields = ["partnerId", "tenantId", "comments"]
310
303
  null_default_fields = []
311
304
 
312
305
  serialized = handler(self)
dub/sdk.py CHANGED
@@ -17,6 +17,7 @@ import weakref
17
17
 
18
18
  if TYPE_CHECKING:
19
19
  from dub.analytics import Analytics
20
+ from dub.bounties import Bounties
20
21
  from dub.commissions import Commissions
21
22
  from dub.customers import Customers
22
23
  from dub.domains import Domains
@@ -47,6 +48,7 @@ class Dub(BaseSDK):
47
48
  workspaces: "Workspaces"
48
49
  embed_tokens: "EmbedTokens"
49
50
  qr_codes: "QRCodes"
51
+ bounties: "Bounties"
50
52
  _sub_sdk_map = {
51
53
  "links": ("dub.links", "Links"),
52
54
  "analytics": ("dub.analytics", "Analytics"),
@@ -61,6 +63,7 @@ class Dub(BaseSDK):
61
63
  "workspaces": ("dub.workspaces", "Workspaces"),
62
64
  "embed_tokens": ("dub.embed_tokens", "EmbedTokens"),
63
65
  "qr_codes": ("dub.qr_codes", "QRCodes"),
66
+ "bounties": ("dub.bounties", "Bounties"),
64
67
  }
65
68
 
66
69
  def __init__(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dub
3
- Version: 0.34.0
3
+ Version: 0.34.1
4
4
  Summary: Python Client SDK Generated by Speakeasy
5
5
  License-File: LICENSE
6
6
  Author: Speakeasy
@@ -281,6 +281,12 @@ asyncio.run(main())
281
281
 
282
282
  * [retrieve](https://github.com/dubinc/dub-python/blob/master/docs/sdks/analytics/README.md#retrieve) - Retrieve analytics for a link, a domain, or the authenticated workspace.
283
283
 
284
+ ### [Bounties](https://github.com/dubinc/dub-python/blob/master/docs/sdks/bounties/README.md)
285
+
286
+ * [list_submissions](https://github.com/dubinc/dub-python/blob/master/docs/sdks/bounties/README.md#list_submissions) - List bounty submissions
287
+ * [approve_submission](https://github.com/dubinc/dub-python/blob/master/docs/sdks/bounties/README.md#approve_submission) - Approve a bounty submission
288
+ * [reject_submission](https://github.com/dubinc/dub-python/blob/master/docs/sdks/bounties/README.md#reject_submission) - Reject a bounty submission
289
+
284
290
  ### [Commissions](https://github.com/dubinc/dub-python/blob/master/docs/sdks/commissions/README.md)
285
291
 
286
292
  * [list](https://github.com/dubinc/dub-python/blob/master/docs/sdks/commissions/README.md#list) - Get commissions for a program.
@@ -3,9 +3,10 @@ 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=5vcNbFBNpCxqI7ZebiBtut7T_Gz2i36L5MjTqGvxV7Y,3035
6
- dub/_version.py,sha256=0VwrZ92MUIkkRSazo2gVFXhIW1OyE8w29AWu79xn_WI,450
6
+ dub/_version.py,sha256=clBVlOTwCWSGoEv9gzVysl2e685tSJo4wf7wyk1pf2U,450
7
7
  dub/analytics.py,sha256=kGVnAwy8_umekoDNb-1j9b0YH9VLW2SI-6fD7j2oEXc,12378
8
8
  dub/basesdk.py,sha256=ulykJOn2YiiF1-PIOfVuWL5gC_MS9yeFo2nzJJXwFMk,12370
9
+ dub/bounties.py,sha256=VKS2qsRZelAmC8qdgQVS1t6dDeTPvrNGmfKk38pAV4Q,37179
9
10
  dub/commissions.py,sha256=RbPTHbLCGdXPk9_HgLohtIgsNSIgF8O6IG2Pg7d1xVI,24418
10
11
  dub/customers.py,sha256=TOe2QSn7FsQJwh749EsarMO0__aEPwXrHxSkfaDLKSM,47196
11
12
  dub/domains.py,sha256=kPjJtov4Hwuz63eX8IdLb0K87S8QoepsdapbUq8FpBA,74116
@@ -15,7 +16,7 @@ dub/folders.py,sha256=Z2F98lTYldER9HDJkrEKbgHQv8M3t26XFWdF-A_SxLc,47686
15
16
  dub/httpclient.py,sha256=dqTPONDBpRn4ktXfcetQiRXnG93f0pJkFhqsYFhLUac,3945
16
17
  dub/links.py,sha256=XaP0xU4_4wFzqWsKjdhro8JGcMrzfDVjJ45682pc3Gw,122004
17
18
  dub/models/__init__.py,sha256=wIW9sbvSKlrGyoPY4mXvHqw-_Inpl6zqpN6U6j-w6SU,83
18
- dub/models/components/__init__.py,sha256=xEPxH2HxXgCeTSSdHGDGFsDczJrc9_0DUkLS5CybHts,19753
19
+ dub/models/components/__init__.py,sha256=jn-5m6iFssuNQuBPvK61zp0viqKAhcE-qvmNetFivwU,20042
19
20
  dub/models/components/analyticsbrowsers.py,sha256=f6qMrkPFf38u3_PIovvdIc0hsX1YpYEaPxNwbXzkoeY,1172
20
21
  dub/models/components/analyticscities.py,sha256=zef22QucFtrOCkPDrpvpNlrbX465_0dFHyZ5va_LRRI,1666
21
22
  dub/models/components/analyticscontinents.py,sha256=D_SQTm1Xp_pOt7qZTLJVo2B3RQUP8k3MQmsYRQYbjlI,1616
@@ -30,7 +31,7 @@ dub/models/components/analyticstimeseries.py,sha256=ZEZpE6oX0FPeiy5snz-kwYhXE9pw
30
31
  dub/models/components/analyticstoplinks.py,sha256=RvhyKQcmDT47F-4sPojhhDgvFYRZCA5k257JrndHSp8,3649
31
32
  dub/models/components/analyticstopurls.py,sha256=1x5MhFQKnXk-VJ0SP3LC7dI7Q4EuUf2smvNCsru3EFs,1190
32
33
  dub/models/components/analyticstriggers.py,sha256=reWQ1cQDNgPc_cDhGrMv5EplFviiyWZ0nYTvU7bm3C0,1484
33
- dub/models/components/commissioncreatedevent.py,sha256=9dVdgcBxxDwsOAy4tR-WFWzewa2WRNM7Y1l0-ofw83k,9431
34
+ dub/models/components/commissioncreatedevent.py,sha256=_4Fna2jOUOp9c3jCYhGenGYo24Qr3rDkRfln-6e_xiM,10605
34
35
  dub/models/components/domainschema.py,sha256=m0QHTiOcO20Ne77d1VanWGSdOxdi5Zt4kIgtQFpXbgI,6688
35
36
  dub/models/components/folderschema.py,sha256=RTeyCW0V8AvFtGDREay_2imS76T063aJZ-OhyyGN0Oc,2577
36
37
  dub/models/components/leadcreatedevent.py,sha256=RfYaBd8U-zTH-cQZr1YJ7h3tYKfmLeK7I2Ov-rta3zA,21903
@@ -63,7 +64,8 @@ dub/models/errors/responsevalidationerror.py,sha256=ODuGOuGulVoPYKLAXuKF4HWDZ7uq
63
64
  dub/models/errors/sdkerror.py,sha256=K1Fk_HkOwYdNxWGY0XTOzCz4o0XeDqwFLNAmXeO2zQg,1279
64
65
  dub/models/errors/unauthorized.py,sha256=wTZD3otsoV2MxnV6zmXnoliC0lRinkOjEZ0Fu6yaUNc,1822
65
66
  dub/models/errors/unprocessableentity.py,sha256=Ns3lkmwq8Puc2Gscwg1yUMP6lkuedUbZjY-OEWEFwR4,1805
66
- dub/models/operations/__init__.py,sha256=_L3wJOFpySCrz-bv6fStuiyZziZ_tgnWLMJ6lRnfvPQ,45966
67
+ dub/models/operations/__init__.py,sha256=2GD2rZ1YkI9cJDZ8k_0LV7C2ihUgClLfu-RALGzqm0w,50478
68
+ dub/models/operations/approvebountysubmission.py,sha256=GAMUn2zlV-wd_vnXDL09c2zoytgDtzPV7AoAlmb6Ou4,5330
67
69
  dub/models/operations/banpartner.py,sha256=ytTEip4T1xdnuC4NxWy2NATHlz00L6xW0GQKKJ6K1BM,2709
68
70
  dub/models/operations/bulkcreatelinks.py,sha256=BHsqm2NHfaVPOUeN3F576egqYYbqSnkJjzaxwchr6pw,17870
69
71
  dub/models/operations/bulkdeletelinks.py,sha256=u_hEFC9TZ1UnGGgLhQ-Mf3HNDO98Ur49MtdBnNVIRsE,1151
@@ -89,12 +91,14 @@ dub/models/operations/getlinkscount.py,sha256=dgYEelagIL0h3Ko4kMBF33lFgl9GLe_gLv
89
91
  dub/models/operations/getqrcode.py,sha256=o5cd919ZD4RE0P8h9VGVtBafkbxfrVDQB_el0OstmpQ,3849
90
92
  dub/models/operations/gettags.py,sha256=c9p_JrHFnTDJURyR5iiKFKpXFHlzJDt3R5X1U-anyYg,2664
91
93
  dub/models/operations/getworkspace.py,sha256=V4-NfsEg3M1BTeoE13sDyazefb2_kI4yFxnzgvHPv4s,625
94
+ dub/models/operations/listbountysubmissions.py,sha256=Yk0t4g2nzKyRtbTendbq5Y7mA7WedVrcs7NicI5ehvw,6390
92
95
  dub/models/operations/listcommissions.py,sha256=66DflUWCKuK1Bv_li2jeya1qV_BiX5IsozhpT5dnq60,14897
93
96
  dub/models/operations/listdomains.py,sha256=MNbJFYPJ2I9OptPXzMPKkg8A7A_4cUMsV3mgQpeUzqs,1937
94
97
  dub/models/operations/listevents.py,sha256=Cg-H85x3YYrnLE4hjccwiU8XCAQ6dlL8VJedpvKWnHo,87727
95
98
  dub/models/operations/listfolders.py,sha256=5FGf62ZTjquVXjq5axlzQgYGfEnrEwDn8QLlgGH_7jQ,1209
96
99
  dub/models/operations/listpartners.py,sha256=vQzd1x200NgaxGbgQNkU5TtP1BvGA-vbQfzja4QqPqk,21451
97
100
  dub/models/operations/registerdomain.py,sha256=fjozn1tFU-cNarHdAqN_flQoGAE498ob-f4A2bIAiOc,2058
101
+ dub/models/operations/rejectbountysubmission.py,sha256=WBQXe1KhzIvBlAPkG_x5xamAoZAEEVAUq2bgE7pxAdU,5014
98
102
  dub/models/operations/retrieveanalytics.py,sha256=NyphEa9Z_6Z4vz8uuIizJZmRpI76F52eEtNvZbemUY0,21310
99
103
  dub/models/operations/retrievelinks.py,sha256=gz1nfX4_4WZyFy-Lg8_-_9OX4kiSAxmk2YjvshmCI_c,4634
100
104
  dub/models/operations/retrievepartneranalytics.py,sha256=4bbue9Ef8qW0ioDkiMSpoXjyfOT5Z--ZORtj8GGOoCQ,6756
@@ -108,11 +112,11 @@ dub/models/operations/updatelink.py,sha256=JpleSZ_D7lpf3shPxKDJVF5iRozkp5rj3eQkQ
108
112
  dub/models/operations/updatetag.py,sha256=_cQx77PnR9Jqz9xJ3q3ZwQwpntSibcnlkFFcRbxMqu4,2083
109
113
  dub/models/operations/updateworkspace.py,sha256=j086APm1mMtrUQpQLd-uaEvXcj9yKoszKd2rGjt4ga0,2434
110
114
  dub/models/operations/upsertlink.py,sha256=Wli0fSeYDCa7vX9MbAeAFj0GA32ae2RBQGqrgnDA_7U,17331
111
- dub/models/operations/upsertpartnerlink.py,sha256=KYc8a8dgqk5OsKW5wjIFpArbr9F1rTsXPr03WDrBhPs,14420
115
+ dub/models/operations/upsertpartnerlink.py,sha256=FpAFUaLGgPeoTE6qHXigxviHLN95NI2YbGi7fOAIJM0,14164
112
116
  dub/partners.py,sha256=xgWLQCjr0spsdeZdale6FILU76DSOmcFXUzJs4g352I,85581
113
117
  dub/py.typed,sha256=zrp19r0G21lr2yRiMC0f8MFkQFGj9wMpSbboePMg8KM,59
114
118
  dub/qr_codes.py,sha256=js4MM0s37vYZyrPuf9mGUoCWfk-vmS5SGOF0Tykv1wc,11628
115
- dub/sdk.py,sha256=5CYWxNW6k-XRskdIwLZ_xhpXtGi8rXgfx_aB0RM7Wtg,8127
119
+ dub/sdk.py,sha256=9xp1o32jeB2NaLGYFZMGRIF2KFxlPdlFN3DXAoClyWw,8240
116
120
  dub/sdkconfiguration.py,sha256=2aIgzM94TIYQe5zkQmHhDsdlxJdV6cfhWX0pspYMHow,1605
117
121
  dub/tags.py,sha256=I_siAFeFoPjVPPFOuyzuAINO-8lSMQdbnb_cV9z-SyM,47367
118
122
  dub/track.py,sha256=kRCww0JSL8kJC0YYXEtTj4GRk5tX5bIaG9u3ebm4OCI,24462
@@ -136,7 +140,7 @@ dub/utils/unmarshal_json_response.py,sha256=bq-O_sDTisDOcbllFkpH0hAUh0nkOvc-ORF_
136
140
  dub/utils/url.py,sha256=BgGPgcTA6MRK4bF8fjP2dUopN3NzEzxWMXPBVg8NQUA,5254
137
141
  dub/utils/values.py,sha256=CcaCXEa3xHhkUDROyXZocN8f0bdITftv9Y0P9lTf0YM,3517
138
142
  dub/workspaces.py,sha256=C4gsyMp--OtSryEpws76_yp_j2tnILm5OZKGPAkw5Yw,24325
139
- dub-0.34.0.dist-info/METADATA,sha256=9kVR_xb7YhMN7F_otQEXLxlNYB6rv28x3VG3FT79yk8,30447
140
- dub-0.34.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
141
- dub-0.34.0.dist-info/licenses/LICENSE,sha256=kc_aZ6YHHcdSsRy-mGsT0Ehji0ZgR_zevXiUt05V2KY,1079
142
- dub-0.34.0.dist-info/RECORD,,
143
+ dub-0.34.1.dist-info/METADATA,sha256=BGsOa47ZNE7K1TzmEMuFj6IECw9F4k3v-OGcyoQnuJA,30985
144
+ dub-0.34.1.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
145
+ dub-0.34.1.dist-info/licenses/LICENSE,sha256=kc_aZ6YHHcdSsRy-mGsT0Ehji0ZgR_zevXiUt05V2KY,1079
146
+ dub-0.34.1.dist-info/RECORD,,
File without changes