dub 0.24.1__py3-none-any.whl → 0.25.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/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,
@@ -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/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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dub
3
- Version: 0.24.1
3
+ Version: 0.25.0
4
4
  Summary: Python Client SDK Generated by Speakeasy
5
5
  Author: Speakeasy
6
6
  Requires-Python: >=3.9.2
@@ -3,7 +3,7 @@ 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=rJnjdoN95vzgKndVOyLVGUjUPTgRLriVgnil1oa58tY,450
6
+ dub/_version.py,sha256=POWsHi28k6iCKw5JSxFglj_sMtFpgV63cFgePy9SIq8,450
7
7
  dub/analytics.py,sha256=vlYINh0VlD1myVlTz5GbsJxoTEk45avOATjpJ_P_b9I,12938
8
8
  dub/basesdk.py,sha256=rDM8sEHVtFjFSi7RgfDnl3T0gLUJzqguXrSxFOWFRqE,12105
9
9
  dub/commissions.py,sha256=pt5N2JGW4VHmhp01yl0RoIbi4dn6yE0MRtvIsLFcwBw,25608
@@ -14,8 +14,8 @@ dub/events.py,sha256=HyGsrKz18bEfjrKBOAwXKyo4MFKJ1EXK6uZoHmwUZ0U,12585
14
14
  dub/folders.py,sha256=X6DIToZTRqmzjGulZE_4CrBYUyi2a8HrpEIjm3W-DnQ,50316
15
15
  dub/httpclient.py,sha256=Eu73urOAiZQtdUIyOUnPccxCiBbWEKrXG-JrRG3SLM4,3946
16
16
  dub/links.py,sha256=Nq6Xo-jaw-hL0rcB8a-tAnDu6qUe9kTAcArhPugwRyY,128470
17
- dub/models/__init__.py,sha256=HRiFG5CV9y2HvWWQl_JQNbYTPme0UYR1Mhh13Qc-5jE,84
18
- dub/models/components/__init__.py,sha256=l2w2vvyhJTRJaSRPIxgqig8KphSuEuhiyvO4G1Lynf4,10710
17
+ dub/models/__init__.py,sha256=wIW9sbvSKlrGyoPY4mXvHqw-_Inpl6zqpN6U6j-w6SU,83
18
+ dub/models/components/__init__.py,sha256=qyjDjiJJ5hAFA9-6GctJOsR2EakJS01Mq7DAYMJvivY,21058
19
19
  dub/models/components/analyticsbrowsers.py,sha256=f6qMrkPFf38u3_PIovvdIc0hsX1YpYEaPxNwbXzkoeY,1172
20
20
  dub/models/components/analyticscities.py,sha256=4DLioMjQkwGDCGPtSJ_RQK24ZJx5B2xPhMHVlUDFm3Y,5231
21
21
  dub/models/components/analyticscontinents.py,sha256=D_SQTm1Xp_pOt7qZTLJVo2B3RQUP8k3MQmsYRQYbjlI,1616
@@ -34,7 +34,7 @@ dub/models/components/clickevent.py,sha256=rUrryTVLNYuf0H0TNIcP8k4-uJrStYr3jaRQJ
34
34
  dub/models/components/continentcode.py,sha256=YFw3_x0w7CxCQijsbfiiOoS9FbNATeHyGLcw-LEsXYw,315
35
35
  dub/models/components/countrycode.py,sha256=ZDcCf4vay2mX6w6qzRliHkcXkV60zGJOgNvr3nfqHyQ,3713
36
36
  dub/models/components/domainschema.py,sha256=MBaPJhQDSQtMTQYVsV8khaQGpY5BXa6IpwYP7qaWnzQ,5328
37
- dub/models/components/folderschema.py,sha256=6bniUPyjg8U_DQO3ETJKYdypLSvjy4Bire9GdXovGxw,2666
37
+ dub/models/components/folderschema.py,sha256=tfVy46SHPHMKl-_bOTr6_j5KHtx6aOJiFniYntBOVe4,2415
38
38
  dub/models/components/leadcreatedevent.py,sha256=VJiD78KspBq0Y9scs_s5e-tk0QtMLoL8B5Te7cYD0Xo,40656
39
39
  dub/models/components/leadevent.py,sha256=knRNJj561GgQM0jU7qwSCKoQhNoKkkpCNPpXLEfI9Ek,44531
40
40
  dub/models/components/linkclickedevent.py,sha256=jMdhw1NNlK8wQK28JchgdOZ54IKpLO24AqBwxfZtAF8,37459
@@ -52,7 +52,7 @@ dub/models/components/security.py,sha256=be_cng1n5ULto_xGGPBKH1ZE5LrtmBTg6kX2uPJ
52
52
  dub/models/components/tagschema.py,sha256=9aymPZgSYT_OUsr4AtHAt4GLej9v89yuS5X1YSZ72sE,759
53
53
  dub/models/components/webhookevent.py,sha256=oDE16DmD_gDcnzqXSDKsSSXzItXdl_O4qY_rjxPo3EE,1090
54
54
  dub/models/components/workspaceschema.py,sha256=qXd33iubVO_CO0JwiREmhmZrh-Ane-Kl6TI9dQdjm0A,10441
55
- dub/models/errors/__init__.py,sha256=jFRYA12n8JwJPHLVL3XJuyQlwiF-7B2mlNhNQeVJuaI,2594
55
+ dub/models/errors/__init__.py,sha256=Jx3RBLkPkjtNeQLlk8fGx6NfxvdNPBBpVery014Ty0E,5692
56
56
  dub/models/errors/badrequest.py,sha256=WsUugiJ6-ffUlJ4BhQUxYWhkBZ8PcBeCP5IuP1mkX4w,1459
57
57
  dub/models/errors/conflict.py,sha256=UF4vQkbQRXWnVwZgbL4-_D9UWxwwvKCYcnBd7OPwU_0,1373
58
58
  dub/models/errors/forbidden.py,sha256=NkHGpNMym4tXZKrtfH406eXwZ2CEYqDze_SkDPnp8a0,1514
@@ -63,7 +63,7 @@ dub/models/errors/ratelimitexceeded.py,sha256=0S2eQlQMdVQ8BZYXX59AQZkf5HtexijmQn
63
63
  dub/models/errors/sdkerror.py,sha256=kd75e3JYF2TXNgRZopcV-oGdBWoBZqRcvrwqn2fsFYs,528
64
64
  dub/models/errors/unauthorized.py,sha256=ranMcawvM0oJxxVkShfZsc7V5YYjbz9luhHywE_ObIg,1525
65
65
  dub/models/errors/unprocessableentity.py,sha256=TxgP43hrqcBW-UDMo8yJ7B0_o_skIH_dXw3DfEWG_cY,1515
66
- dub/models/operations/__init__.py,sha256=iO0hpDBTrrYqr3ETtyPiSV4i2c39K-G7BrQgi7Rqd3k,20282
66
+ dub/models/operations/__init__.py,sha256=RcVE85OwAkVhIt8CbgdBK7QjfSK10cfmWg5XSCad_Tc,38059
67
67
  dub/models/operations/bulkcreatelinks.py,sha256=tT5lA_5LxR_k-WgIFNpYHZu4uvLANSssZbmZ7IamFFA,17466
68
68
  dub/models/operations/bulkdeletelinks.py,sha256=u_hEFC9TZ1UnGGgLhQ-Mf3HNDO98Ur49MtdBnNVIRsE,1151
69
69
  dub/models/operations/bulkupdatelinks.py,sha256=DDEW9Zp2BKPSwdzYGSnATxuFUsv175z3fq4UQ15IvME,16022
@@ -91,7 +91,7 @@ dub/models/operations/getworkspace.py,sha256=V4-NfsEg3M1BTeoE13sDyazefb2_kI4yFxn
91
91
  dub/models/operations/listcommissions.py,sha256=6bP8Hc5kwoMi--nCSIaMgDipwUnin47qRV11vEkpQks,7995
92
92
  dub/models/operations/listdomains.py,sha256=gbQrJyBIvTGKSeqJo0Jb08iE44Xu39NS9zbfetx4p-s,1936
93
93
  dub/models/operations/listevents.py,sha256=V-RYIPZwLN3djEK4oFBWafVd-BzzPrTYcShwkvGbmfA,17611
94
- dub/models/operations/listfolders.py,sha256=3XQRy8yCZ6r1ftzOWw7CFTdFUXdz2qD3IlOP5rKixxw,1575
94
+ dub/models/operations/listfolders.py,sha256=5FGf62ZTjquVXjq5axlzQgYGfEnrEwDn8QLlgGH_7jQ,1209
95
95
  dub/models/operations/retrieveanalytics.py,sha256=Y8bP9pXuaTOqpfgqOjWTXVgXyj8Rl4-HfdfbS3OoxsU,18845
96
96
  dub/models/operations/retrievelinks.py,sha256=1bLrT_Q2y60eU_gdOHTu99VW8c09gX3nkidb0R5qLuk,2988
97
97
  dub/models/operations/retrievepartneranalytics.py,sha256=MmBDRCB5lQ1lKkfHpeMnZcQXkKIjSCVGEUVcvJgZ_Io,5275
@@ -109,13 +109,13 @@ dub/models/operations/upsertpartnerlink.py,sha256=h08QRwsQyiIvDTUKu1ANE9mrwikDCq
109
109
  dub/partners.py,sha256=unCEeCCrZDx0TqT5QtVlnoEciBEJr8aKXStFpoWt2_g,64363
110
110
  dub/py.typed,sha256=zrp19r0G21lr2yRiMC0f8MFkQFGj9wMpSbboePMg8KM,59
111
111
  dub/qr_codes.py,sha256=E0qlx0gs5CWbcz4M-GMLjvoMlGmUmAtHb3dtEWUO8cY,12164
112
- dub/sdk.py,sha256=XffBcjT6CXjDR6P7wRhU0Lq4YyXRF9nWC_JWeXWbfVA,6489
112
+ dub/sdk.py,sha256=wsukjwDRhJHVjypxnscm-nlULDAkeuOgQ_6c4rKS4ck,7597
113
113
  dub/sdkconfiguration.py,sha256=iGOSRTCoNX5k8H98ONo6B8rS6v5CtjAUN69Z6t5ftPg,1762
114
114
  dub/tags.py,sha256=d9Sb4yZVKMQfdSqFNHFCfkTIVy0cgFLE3jA_TtPQp_Q,49757
115
115
  dub/track.py,sha256=znqpHDO_LBQmIiN4BO3PXCklIUz4xR0S8SKd5oElTJg,25772
116
116
  dub/types/__init__.py,sha256=RArOwSgeeTIva6h-4ttjXwMUeCkz10nAFBL9D-QljI4,377
117
117
  dub/types/basemodel.py,sha256=L79WXvTECbSqaJzs8D3ud_KdIWkU7Cx2wbohDAktE9E,1127
118
- dub/utils/__init__.py,sha256=srwCxQa-o7LVSIbziUI2u9_LMEEvJNBU0I14OEQUOpA,2441
118
+ dub/utils/__init__.py,sha256=811KKdkxMaWDfz2lMohUWqrR4JnIWxqeNQ1lRGQU4DM,5341
119
119
  dub/utils/annotations.py,sha256=aR7mZG34FzgRdew7WZPYEu9QGBerpuKxCF4sek5Z_5Y,1699
120
120
  dub/utils/datetimes.py,sha256=oppAA5e3V35pQov1-FNLKxAaNF1_XWi-bQtyjjql3H8,855
121
121
  dub/utils/enums.py,sha256=REU6ydF8gsVL3xaeGX4sMNyiL3q5P9h29-f6Sa6luAE,2633
@@ -132,7 +132,7 @@ dub/utils/serializers.py,sha256=hiHBXM1AY8_N2Z_rvFfNSYwvLBkSQlPGFp8poasdU4s,5986
132
132
  dub/utils/url.py,sha256=BgGPgcTA6MRK4bF8fjP2dUopN3NzEzxWMXPBVg8NQUA,5254
133
133
  dub/utils/values.py,sha256=CcaCXEa3xHhkUDROyXZocN8f0bdITftv9Y0P9lTf0YM,3517
134
134
  dub/workspaces.py,sha256=d4eBlOvwuYlENsGcYI0fHQKN-cpC8U9kekTbfNJ2C_4,25635
135
- dub-0.24.1.dist-info/LICENSE,sha256=kc_aZ6YHHcdSsRy-mGsT0Ehji0ZgR_zevXiUt05V2KY,1079
136
- dub-0.24.1.dist-info/METADATA,sha256=aNMB2gyUSc2ZOUcYSNHk8RGqhlgf-cYMrpTrcMNIi8g,27735
137
- dub-0.24.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
138
- dub-0.24.1.dist-info/RECORD,,
135
+ dub-0.25.0.dist-info/LICENSE,sha256=kc_aZ6YHHcdSsRy-mGsT0Ehji0ZgR_zevXiUt05V2KY,1079
136
+ dub-0.25.0.dist-info/METADATA,sha256=Li3bnmCuA4YErC9jVtJNV0BvkJ5vgMl6LBpSeF1WNFQ,27735
137
+ dub-0.25.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
138
+ dub-0.25.0.dist-info/RECORD,,
File without changes
File without changes