pulumi-dnsimple 3.5.0a1709211875__py3-none-any.whl → 4.3.0a1736832784__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.

Potentially problematic release.


This version of pulumi-dnsimple might be problematic. Click here for more details.

@@ -5,14 +5,22 @@
5
5
  from . import _utilities
6
6
  import typing
7
7
  # Export this package's modules as members:
8
+ from ._enums import *
9
+ from .contact import *
8
10
  from .domain import *
11
+ from .domain_delegation import *
12
+ from .ds_record import *
9
13
  from .email_forward import *
10
14
  from .get_certificate import *
15
+ from .get_registrant_change_check import *
11
16
  from .get_zone import *
12
17
  from .lets_encrypt_certificate import *
13
18
  from .provider import *
14
- from .record import *
19
+ from .registered_domain import *
20
+ from .zone import *
15
21
  from .zone_record import *
22
+ from ._inputs import *
23
+ from . import outputs
16
24
 
17
25
  # Make subpackages available:
18
26
  if typing.TYPE_CHECKING:
@@ -24,6 +32,14 @@ else:
24
32
  _utilities.register(
25
33
  resource_modules="""
26
34
  [
35
+ {
36
+ "pkg": "dnsimple",
37
+ "mod": "index/contact",
38
+ "fqn": "pulumi_dnsimple",
39
+ "classes": {
40
+ "dnsimple:index/contact:Contact": "Contact"
41
+ }
42
+ },
27
43
  {
28
44
  "pkg": "dnsimple",
29
45
  "mod": "index/domain",
@@ -32,6 +48,22 @@ _utilities.register(
32
48
  "dnsimple:index/domain:Domain": "Domain"
33
49
  }
34
50
  },
51
+ {
52
+ "pkg": "dnsimple",
53
+ "mod": "index/domainDelegation",
54
+ "fqn": "pulumi_dnsimple",
55
+ "classes": {
56
+ "dnsimple:index/domainDelegation:DomainDelegation": "DomainDelegation"
57
+ }
58
+ },
59
+ {
60
+ "pkg": "dnsimple",
61
+ "mod": "index/dsRecord",
62
+ "fqn": "pulumi_dnsimple",
63
+ "classes": {
64
+ "dnsimple:index/dsRecord:DsRecord": "DsRecord"
65
+ }
66
+ },
35
67
  {
36
68
  "pkg": "dnsimple",
37
69
  "mod": "index/emailForward",
@@ -50,10 +82,18 @@ _utilities.register(
50
82
  },
51
83
  {
52
84
  "pkg": "dnsimple",
53
- "mod": "index/record",
85
+ "mod": "index/registeredDomain",
86
+ "fqn": "pulumi_dnsimple",
87
+ "classes": {
88
+ "dnsimple:index/registeredDomain:RegisteredDomain": "RegisteredDomain"
89
+ }
90
+ },
91
+ {
92
+ "pkg": "dnsimple",
93
+ "mod": "index/zone",
54
94
  "fqn": "pulumi_dnsimple",
55
95
  "classes": {
56
- "dnsimple:index/record:Record": "Record"
96
+ "dnsimple:index/zone:Zone": "Zone"
57
97
  }
58
98
  },
59
99
  {
@@ -0,0 +1,31 @@
1
+ # coding=utf-8
2
+ # *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
3
+ # *** Do not edit by hand unless you're certain you know what you are doing! ***
4
+
5
+ from enum import Enum
6
+
7
+ __all__ = [
8
+ 'RecordTypes',
9
+ ]
10
+
11
+
12
+ class RecordTypes(str, Enum):
13
+ """
14
+ DNS Record types.
15
+ """
16
+ A = "A"
17
+ AAAA = "AAAA"
18
+ ALIAS = "ALIAS"
19
+ CAA = "CAA"
20
+ CNAME = "CNAME"
21
+ HINFO = "HINFO"
22
+ MX = "MX"
23
+ NAPTR = "NAPTR"
24
+ NS = "NS"
25
+ POOL = "POOL"
26
+ PTR = "PTR"
27
+ SPF = "SPF"
28
+ SRV = "SRV"
29
+ SSHFP = "SSHFP"
30
+ TXT = "TXT"
31
+ URL = "URL"
@@ -0,0 +1,378 @@
1
+ # coding=utf-8
2
+ # *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
3
+ # *** Do not edit by hand unless you're certain you know what you are doing! ***
4
+
5
+ import copy
6
+ import warnings
7
+ import sys
8
+ import pulumi
9
+ import pulumi.runtime
10
+ from typing import Any, Mapping, Optional, Sequence, Union, overload
11
+ if sys.version_info >= (3, 11):
12
+ from typing import NotRequired, TypedDict, TypeAlias
13
+ else:
14
+ from typing_extensions import NotRequired, TypedDict, TypeAlias
15
+ from . import _utilities
16
+ from ._enums import *
17
+
18
+ __all__ = [
19
+ 'RegisteredDomainDomainRegistrationArgs',
20
+ 'RegisteredDomainDomainRegistrationArgsDict',
21
+ 'RegisteredDomainRegistrantChangeArgs',
22
+ 'RegisteredDomainRegistrantChangeArgsDict',
23
+ 'RegisteredDomainTimeoutsArgs',
24
+ 'RegisteredDomainTimeoutsArgsDict',
25
+ 'GetCertificateTimeoutsArgs',
26
+ 'GetCertificateTimeoutsArgsDict',
27
+ ]
28
+
29
+ MYPY = False
30
+
31
+ if not MYPY:
32
+ class RegisteredDomainDomainRegistrationArgsDict(TypedDict):
33
+ id: NotRequired[pulumi.Input[int]]
34
+ """
35
+ The ID of this resource.
36
+ """
37
+ period: NotRequired[pulumi.Input[int]]
38
+ """
39
+ The registration period in years.
40
+ """
41
+ state: NotRequired[pulumi.Input[str]]
42
+ """
43
+ The state of the domain.
44
+ """
45
+ elif False:
46
+ RegisteredDomainDomainRegistrationArgsDict: TypeAlias = Mapping[str, Any]
47
+
48
+ @pulumi.input_type
49
+ class RegisteredDomainDomainRegistrationArgs:
50
+ def __init__(__self__, *,
51
+ id: Optional[pulumi.Input[int]] = None,
52
+ period: Optional[pulumi.Input[int]] = None,
53
+ state: Optional[pulumi.Input[str]] = None):
54
+ """
55
+ :param pulumi.Input[int] id: The ID of this resource.
56
+ :param pulumi.Input[int] period: The registration period in years.
57
+ :param pulumi.Input[str] state: The state of the domain.
58
+ """
59
+ if id is not None:
60
+ pulumi.set(__self__, "id", id)
61
+ if period is not None:
62
+ pulumi.set(__self__, "period", period)
63
+ if state is not None:
64
+ pulumi.set(__self__, "state", state)
65
+
66
+ @property
67
+ @pulumi.getter
68
+ def id(self) -> Optional[pulumi.Input[int]]:
69
+ """
70
+ The ID of this resource.
71
+ """
72
+ return pulumi.get(self, "id")
73
+
74
+ @id.setter
75
+ def id(self, value: Optional[pulumi.Input[int]]):
76
+ pulumi.set(self, "id", value)
77
+
78
+ @property
79
+ @pulumi.getter
80
+ def period(self) -> Optional[pulumi.Input[int]]:
81
+ """
82
+ The registration period in years.
83
+ """
84
+ return pulumi.get(self, "period")
85
+
86
+ @period.setter
87
+ def period(self, value: Optional[pulumi.Input[int]]):
88
+ pulumi.set(self, "period", value)
89
+
90
+ @property
91
+ @pulumi.getter
92
+ def state(self) -> Optional[pulumi.Input[str]]:
93
+ """
94
+ The state of the domain.
95
+ """
96
+ return pulumi.get(self, "state")
97
+
98
+ @state.setter
99
+ def state(self, value: Optional[pulumi.Input[str]]):
100
+ pulumi.set(self, "state", value)
101
+
102
+
103
+ if not MYPY:
104
+ class RegisteredDomainRegistrantChangeArgsDict(TypedDict):
105
+ account_id: NotRequired[pulumi.Input[int]]
106
+ """
107
+ DNSimple Account ID to which the registrant change belongs to
108
+ """
109
+ contact_id: NotRequired[pulumi.Input[int]]
110
+ """
111
+ The ID of the contact to be used for the domain registration. The contact ID can be changed after the domain has been registered. The change will result in a new registrant change this may result in a [60-day lock](https://support.dnsimple.com/articles/icann-60-day-lock-registrant-change/).
112
+ """
113
+ domain_id: NotRequired[pulumi.Input[str]]
114
+ """
115
+ DNSimple domain ID for which the registrant change is being performed
116
+ """
117
+ extended_attributes: NotRequired[pulumi.Input[Mapping[str, pulumi.Input[str]]]]
118
+ """
119
+ A map of extended attributes to be set for the domain registration. To see if there are any required extended attributes for any TLD use our [Lists the TLD Extended Attributes API](https://developer.dnsimple.com/v2/tlds/#getTldExtendedAttributes). The values provided in the `extended_attributes` will also be sent when a registrant change is initiated as part of changing the `contact_id`.
120
+ """
121
+ id: NotRequired[pulumi.Input[int]]
122
+ """
123
+ The ID of this resource.
124
+ """
125
+ irt_lock_lifted_by: NotRequired[pulumi.Input[str]]
126
+ """
127
+ Date when the registrant change lock was lifted for the domain
128
+ """
129
+ registry_owner_change: NotRequired[pulumi.Input[bool]]
130
+ """
131
+ True if the registrant change will result in a registry owner change
132
+ """
133
+ state: NotRequired[pulumi.Input[str]]
134
+ """
135
+ The state of the domain.
136
+ """
137
+ elif False:
138
+ RegisteredDomainRegistrantChangeArgsDict: TypeAlias = Mapping[str, Any]
139
+
140
+ @pulumi.input_type
141
+ class RegisteredDomainRegistrantChangeArgs:
142
+ def __init__(__self__, *,
143
+ account_id: Optional[pulumi.Input[int]] = None,
144
+ contact_id: Optional[pulumi.Input[int]] = None,
145
+ domain_id: Optional[pulumi.Input[str]] = None,
146
+ extended_attributes: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
147
+ id: Optional[pulumi.Input[int]] = None,
148
+ irt_lock_lifted_by: Optional[pulumi.Input[str]] = None,
149
+ registry_owner_change: Optional[pulumi.Input[bool]] = None,
150
+ state: Optional[pulumi.Input[str]] = None):
151
+ """
152
+ :param pulumi.Input[int] account_id: DNSimple Account ID to which the registrant change belongs to
153
+ :param pulumi.Input[int] contact_id: The ID of the contact to be used for the domain registration. The contact ID can be changed after the domain has been registered. The change will result in a new registrant change this may result in a [60-day lock](https://support.dnsimple.com/articles/icann-60-day-lock-registrant-change/).
154
+ :param pulumi.Input[str] domain_id: DNSimple domain ID for which the registrant change is being performed
155
+ :param pulumi.Input[Mapping[str, pulumi.Input[str]]] extended_attributes: A map of extended attributes to be set for the domain registration. To see if there are any required extended attributes for any TLD use our [Lists the TLD Extended Attributes API](https://developer.dnsimple.com/v2/tlds/#getTldExtendedAttributes). The values provided in the `extended_attributes` will also be sent when a registrant change is initiated as part of changing the `contact_id`.
156
+ :param pulumi.Input[int] id: The ID of this resource.
157
+ :param pulumi.Input[str] irt_lock_lifted_by: Date when the registrant change lock was lifted for the domain
158
+ :param pulumi.Input[bool] registry_owner_change: True if the registrant change will result in a registry owner change
159
+ :param pulumi.Input[str] state: The state of the domain.
160
+ """
161
+ if account_id is not None:
162
+ pulumi.set(__self__, "account_id", account_id)
163
+ if contact_id is not None:
164
+ pulumi.set(__self__, "contact_id", contact_id)
165
+ if domain_id is not None:
166
+ pulumi.set(__self__, "domain_id", domain_id)
167
+ if extended_attributes is not None:
168
+ pulumi.set(__self__, "extended_attributes", extended_attributes)
169
+ if id is not None:
170
+ pulumi.set(__self__, "id", id)
171
+ if irt_lock_lifted_by is not None:
172
+ pulumi.set(__self__, "irt_lock_lifted_by", irt_lock_lifted_by)
173
+ if registry_owner_change is not None:
174
+ pulumi.set(__self__, "registry_owner_change", registry_owner_change)
175
+ if state is not None:
176
+ pulumi.set(__self__, "state", state)
177
+
178
+ @property
179
+ @pulumi.getter(name="accountId")
180
+ def account_id(self) -> Optional[pulumi.Input[int]]:
181
+ """
182
+ DNSimple Account ID to which the registrant change belongs to
183
+ """
184
+ return pulumi.get(self, "account_id")
185
+
186
+ @account_id.setter
187
+ def account_id(self, value: Optional[pulumi.Input[int]]):
188
+ pulumi.set(self, "account_id", value)
189
+
190
+ @property
191
+ @pulumi.getter(name="contactId")
192
+ def contact_id(self) -> Optional[pulumi.Input[int]]:
193
+ """
194
+ The ID of the contact to be used for the domain registration. The contact ID can be changed after the domain has been registered. The change will result in a new registrant change this may result in a [60-day lock](https://support.dnsimple.com/articles/icann-60-day-lock-registrant-change/).
195
+ """
196
+ return pulumi.get(self, "contact_id")
197
+
198
+ @contact_id.setter
199
+ def contact_id(self, value: Optional[pulumi.Input[int]]):
200
+ pulumi.set(self, "contact_id", value)
201
+
202
+ @property
203
+ @pulumi.getter(name="domainId")
204
+ def domain_id(self) -> Optional[pulumi.Input[str]]:
205
+ """
206
+ DNSimple domain ID for which the registrant change is being performed
207
+ """
208
+ return pulumi.get(self, "domain_id")
209
+
210
+ @domain_id.setter
211
+ def domain_id(self, value: Optional[pulumi.Input[str]]):
212
+ pulumi.set(self, "domain_id", value)
213
+
214
+ @property
215
+ @pulumi.getter(name="extendedAttributes")
216
+ def extended_attributes(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
217
+ """
218
+ A map of extended attributes to be set for the domain registration. To see if there are any required extended attributes for any TLD use our [Lists the TLD Extended Attributes API](https://developer.dnsimple.com/v2/tlds/#getTldExtendedAttributes). The values provided in the `extended_attributes` will also be sent when a registrant change is initiated as part of changing the `contact_id`.
219
+ """
220
+ return pulumi.get(self, "extended_attributes")
221
+
222
+ @extended_attributes.setter
223
+ def extended_attributes(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
224
+ pulumi.set(self, "extended_attributes", value)
225
+
226
+ @property
227
+ @pulumi.getter
228
+ def id(self) -> Optional[pulumi.Input[int]]:
229
+ """
230
+ The ID of this resource.
231
+ """
232
+ return pulumi.get(self, "id")
233
+
234
+ @id.setter
235
+ def id(self, value: Optional[pulumi.Input[int]]):
236
+ pulumi.set(self, "id", value)
237
+
238
+ @property
239
+ @pulumi.getter(name="irtLockLiftedBy")
240
+ def irt_lock_lifted_by(self) -> Optional[pulumi.Input[str]]:
241
+ """
242
+ Date when the registrant change lock was lifted for the domain
243
+ """
244
+ return pulumi.get(self, "irt_lock_lifted_by")
245
+
246
+ @irt_lock_lifted_by.setter
247
+ def irt_lock_lifted_by(self, value: Optional[pulumi.Input[str]]):
248
+ pulumi.set(self, "irt_lock_lifted_by", value)
249
+
250
+ @property
251
+ @pulumi.getter(name="registryOwnerChange")
252
+ def registry_owner_change(self) -> Optional[pulumi.Input[bool]]:
253
+ """
254
+ True if the registrant change will result in a registry owner change
255
+ """
256
+ return pulumi.get(self, "registry_owner_change")
257
+
258
+ @registry_owner_change.setter
259
+ def registry_owner_change(self, value: Optional[pulumi.Input[bool]]):
260
+ pulumi.set(self, "registry_owner_change", value)
261
+
262
+ @property
263
+ @pulumi.getter
264
+ def state(self) -> Optional[pulumi.Input[str]]:
265
+ """
266
+ The state of the domain.
267
+ """
268
+ return pulumi.get(self, "state")
269
+
270
+ @state.setter
271
+ def state(self, value: Optional[pulumi.Input[str]]):
272
+ pulumi.set(self, "state", value)
273
+
274
+
275
+ if not MYPY:
276
+ class RegisteredDomainTimeoutsArgsDict(TypedDict):
277
+ create: NotRequired[pulumi.Input[str]]
278
+ """
279
+ Create timeout.
280
+ """
281
+ delete: NotRequired[pulumi.Input[str]]
282
+ """
283
+ Delete timeout (currently unused).
284
+ """
285
+ update: NotRequired[pulumi.Input[str]]
286
+ """
287
+ Update timeout.
288
+ """
289
+ elif False:
290
+ RegisteredDomainTimeoutsArgsDict: TypeAlias = Mapping[str, Any]
291
+
292
+ @pulumi.input_type
293
+ class RegisteredDomainTimeoutsArgs:
294
+ def __init__(__self__, *,
295
+ create: Optional[pulumi.Input[str]] = None,
296
+ delete: Optional[pulumi.Input[str]] = None,
297
+ update: Optional[pulumi.Input[str]] = None):
298
+ """
299
+ :param pulumi.Input[str] create: Create timeout.
300
+ :param pulumi.Input[str] delete: Delete timeout (currently unused).
301
+ :param pulumi.Input[str] update: Update timeout.
302
+ """
303
+ if create is not None:
304
+ pulumi.set(__self__, "create", create)
305
+ if delete is not None:
306
+ pulumi.set(__self__, "delete", delete)
307
+ if update is not None:
308
+ pulumi.set(__self__, "update", update)
309
+
310
+ @property
311
+ @pulumi.getter
312
+ def create(self) -> Optional[pulumi.Input[str]]:
313
+ """
314
+ Create timeout.
315
+ """
316
+ return pulumi.get(self, "create")
317
+
318
+ @create.setter
319
+ def create(self, value: Optional[pulumi.Input[str]]):
320
+ pulumi.set(self, "create", value)
321
+
322
+ @property
323
+ @pulumi.getter
324
+ def delete(self) -> Optional[pulumi.Input[str]]:
325
+ """
326
+ Delete timeout (currently unused).
327
+ """
328
+ return pulumi.get(self, "delete")
329
+
330
+ @delete.setter
331
+ def delete(self, value: Optional[pulumi.Input[str]]):
332
+ pulumi.set(self, "delete", value)
333
+
334
+ @property
335
+ @pulumi.getter
336
+ def update(self) -> Optional[pulumi.Input[str]]:
337
+ """
338
+ Update timeout.
339
+ """
340
+ return pulumi.get(self, "update")
341
+
342
+ @update.setter
343
+ def update(self, value: Optional[pulumi.Input[str]]):
344
+ pulumi.set(self, "update", value)
345
+
346
+
347
+ if not MYPY:
348
+ class GetCertificateTimeoutsArgsDict(TypedDict):
349
+ read: NotRequired[str]
350
+ """
351
+ (String) - The timeout for the read operation e.g. `5m`
352
+ """
353
+ elif False:
354
+ GetCertificateTimeoutsArgsDict: TypeAlias = Mapping[str, Any]
355
+
356
+ @pulumi.input_type
357
+ class GetCertificateTimeoutsArgs:
358
+ def __init__(__self__, *,
359
+ read: Optional[str] = None):
360
+ """
361
+ :param str read: (String) - The timeout for the read operation e.g. `5m`
362
+ """
363
+ if read is not None:
364
+ pulumi.set(__self__, "read", read)
365
+
366
+ @property
367
+ @pulumi.getter
368
+ def read(self) -> Optional[str]:
369
+ """
370
+ (String) - The timeout for the read operation e.g. `5m`
371
+ """
372
+ return pulumi.get(self, "read")
373
+
374
+ @read.setter
375
+ def read(self, value: Optional[str]):
376
+ pulumi.set(self, "read", value)
377
+
378
+
@@ -4,6 +4,7 @@
4
4
 
5
5
 
6
6
  import asyncio
7
+ import functools
7
8
  import importlib.metadata
8
9
  import importlib.util
9
10
  import inspect
@@ -11,14 +12,19 @@ import json
11
12
  import os
12
13
  import sys
13
14
  import typing
15
+ import warnings
16
+ import base64
14
17
 
15
18
  import pulumi
16
19
  import pulumi.runtime
17
20
  from pulumi.runtime.sync_await import _sync_await
21
+ from pulumi.runtime.proto import resource_pb2
18
22
 
19
23
  from semver import VersionInfo as SemverVersion
20
24
  from parver import Version as PEP440Version
21
25
 
26
+ C = typing.TypeVar("C", bound=typing.Callable)
27
+
22
28
 
23
29
  def get_env(*args):
24
30
  for v in args:
@@ -96,10 +102,6 @@ def _get_semver_version():
96
102
  _version = _get_semver_version()
97
103
  _version_str = str(_version)
98
104
 
99
-
100
- def get_version():
101
- return _version_str
102
-
103
105
  def get_resource_opts_defaults() -> pulumi.ResourceOptions:
104
106
  return pulumi.ResourceOptions(
105
107
  version=get_version(),
@@ -262,7 +264,7 @@ def call_plain(
262
264
  output = pulumi.runtime.call(tok, props, res, typ)
263
265
 
264
266
  # Ingoring deps silently. They are typically non-empty, r.f() calls include r as a dependency.
265
- result, known, secret, _ = _sync_await(asyncio.ensure_future(_await_output(output)))
267
+ result, known, secret, _ = _sync_await(asyncio.create_task(_await_output(output)))
266
268
 
267
269
  problem = None
268
270
  if not known:
@@ -287,5 +289,39 @@ async def _await_output(o: pulumi.Output[typing.Any]) -> typing.Tuple[object, bo
287
289
  await o._resources,
288
290
  )
289
291
 
292
+
293
+ # This is included to provide an upgrade path for users who are using a version
294
+ # of the Pulumi SDK (<3.121.0) that does not include the `deprecated` decorator.
295
+ def deprecated(message: str) -> typing.Callable[[C], C]:
296
+ """
297
+ Decorator to indicate a function is deprecated.
298
+
299
+ As well as inserting appropriate statements to indicate that the function is
300
+ deprecated, this decorator also tags the function with a special attribute
301
+ so that Pulumi code can detect that it is deprecated and react appropriately
302
+ in certain situations.
303
+
304
+ message is the deprecation message that should be printed if the function is called.
305
+ """
306
+
307
+ def decorator(fn: C) -> C:
308
+ if not callable(fn):
309
+ raise TypeError("Expected fn to be callable")
310
+
311
+ @functools.wraps(fn)
312
+ def deprecated_fn(*args, **kwargs):
313
+ warnings.warn(message)
314
+ pulumi.warn(f"{fn.__name__} is deprecated: {message}")
315
+
316
+ return fn(*args, **kwargs)
317
+
318
+ deprecated_fn.__dict__["_pulumi_deprecated_callable"] = fn
319
+ return typing.cast(C, deprecated_fn)
320
+
321
+ return decorator
322
+
290
323
  def get_plugin_download_url():
291
324
  return None
325
+
326
+ def get_version():
327
+ return _version_str
@@ -4,9 +4,14 @@
4
4
 
5
5
  import copy
6
6
  import warnings
7
+ import sys
7
8
  import pulumi
8
9
  import pulumi.runtime
9
10
  from typing import Any, Mapping, Optional, Sequence, Union, overload
11
+ if sys.version_info >= (3, 11):
12
+ from typing import NotRequired, TypedDict, TypeAlias
13
+ else:
14
+ from typing_extensions import NotRequired, TypedDict, TypeAlias
10
15
  from .. import _utilities
11
16
 
12
17
  account: Optional[str]
@@ -4,9 +4,14 @@
4
4
 
5
5
  import copy
6
6
  import warnings
7
+ import sys
7
8
  import pulumi
8
9
  import pulumi.runtime
9
10
  from typing import Any, Mapping, Optional, Sequence, Union, overload
11
+ if sys.version_info >= (3, 11):
12
+ from typing import NotRequired, TypedDict, TypeAlias
13
+ else:
14
+ from typing_extensions import NotRequired, TypedDict, TypeAlias
10
15
  from .. import _utilities
11
16
 
12
17
  import types