pulumi 3.218.0a1769600557__py3-none-any.whl → 3.219.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.
pulumi/__init__.py CHANGED
@@ -93,6 +93,9 @@ from .output import (
93
93
  )
94
94
 
95
95
  from .resource_hooks import (
96
+ ErrorHook,
97
+ ErrorHookArgs,
98
+ ErrorHookFunction,
96
99
  ResourceHookArgs,
97
100
  ResourceHookFunction,
98
101
  ResourceHook,
@@ -189,6 +192,9 @@ __all__ = [
189
192
  "contains_unknowns",
190
193
  "deferred_output",
191
194
  # resource_hooks
195
+ "ErrorHook",
196
+ "ErrorHookArgs",
197
+ "ErrorHookFunction",
192
198
  "ResourceHookArgs",
193
199
  "ResourceHookFunction",
194
200
  "ResourceHook",
pulumi/_version.py CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  from semver import VersionInfo
16
16
 
17
- _VERSION = "3.218.0"
17
+ _VERSION = "3.219.0"
18
18
 
19
19
  version = VersionInfo.parse(_VERSION)
20
20
  """Version is the Pulumi SDK's release version."""
pulumi/dynamic/dynamic.py CHANGED
@@ -329,7 +329,9 @@ class Resource(CustomResource):
329
329
 
330
330
  _resource_type_name: ClassVar[str]
331
331
 
332
- def __init_subclass__(cls, module: str = "", name: str = "Resource"):
332
+ def __init_subclass__(cls, module: str = "", name: str = "Resource", **kwargs):
333
+ super().__init_subclass__(**kwargs)
334
+
333
335
  if module:
334
336
  module = f"/{module}"
335
337
  cls._resource_type_name = f"dynamic{module}:{name}"
pulumi/resource_hooks.py CHANGED
@@ -5,7 +5,7 @@ from collections.abc import Callable
5
5
  from collections.abc import Awaitable, Mapping
6
6
 
7
7
 
8
- from .runtime.resource import register_resource_hook
8
+ from .runtime.resource import register_resource_hook, register_error_hook
9
9
 
10
10
 
11
11
  class ResourceHookArgs:
@@ -81,6 +81,105 @@ ResourceHookFunction = Callable[
81
81
  """ResourceHookFunction is a function that can be registered as a resource hook."""
82
82
 
83
83
 
84
+ class ErrorHookArgs:
85
+ """
86
+ ErrorHookArgs represents the arguments passed to an error hook.
87
+
88
+ Depending on the failed operation, only some of the new/old inputs/outputs are set.
89
+
90
+ | Failed Operation | old_inputs | new_inputs | old_outputs |
91
+ | ---------------- | ---------- | ---------- | ----------- |
92
+ | create | | ✓ | |
93
+ | update | ✓ | ✓ | ✓ |
94
+ | delete | ✓ | | ✓ |
95
+ """
96
+
97
+ urn: str
98
+ """The URN of the resource that triggered the hook."""
99
+ id: str
100
+ """The ID of the resource that triggered the hook."""
101
+ name: str
102
+ """The name of the resource that triggered the hook."""
103
+ type: str
104
+ """The type of the resource that triggered the hook."""
105
+ new_inputs: Optional[Mapping[str, Any]] = None
106
+ """The new inputs of the resource that triggered the hook."""
107
+ old_inputs: Optional[Mapping[str, Any]] = None
108
+ """The old inputs of the resource that triggered the hook."""
109
+ old_outputs: Optional[Mapping[str, Any]] = None
110
+ """The old outputs of the resource that triggered the hook."""
111
+ failed_operation: str
112
+ """The operation that failed (create, update, or delete)."""
113
+ errors: list[str]
114
+ """The errors that have been seen so far (newest first)."""
115
+
116
+ def __init__(
117
+ self,
118
+ urn: str,
119
+ id: str,
120
+ name: str,
121
+ type: str,
122
+ new_inputs: Optional[Mapping[str, Any]] = None,
123
+ old_inputs: Optional[Mapping[str, Any]] = None,
124
+ old_outputs: Optional[Mapping[str, Any]] = None,
125
+ failed_operation: str = "",
126
+ errors: Optional[list[str]] = None,
127
+ ):
128
+ self.urn = urn
129
+ self.id = id
130
+ self.name = name
131
+ self.type = type
132
+ self.new_inputs = new_inputs
133
+ self.old_inputs = old_inputs
134
+ self.old_outputs = old_outputs
135
+ self.failed_operation = failed_operation
136
+ self.errors = errors or []
137
+
138
+ def __repr__(self):
139
+ return (
140
+ f"ErrorHookArgs(urn={self.urn}, "
141
+ + f"id={self.id}, "
142
+ + f"name={self.name}, "
143
+ + f"type={self.type}, "
144
+ + f"failed_operation={self.failed_operation}, "
145
+ + f"errors={self.errors})"
146
+ )
147
+
148
+
149
+ ErrorHookFunction = Callable[
150
+ [ErrorHookArgs],
151
+ Union[bool, Awaitable[bool]],
152
+ ]
153
+ """ErrorHookFunction is a function that can be registered as an error hook. Returns True to retry, False to not retry."""
154
+
155
+
156
+ class ErrorHook:
157
+ """ErrorHook is a named hook that can be registered as an error hook."""
158
+
159
+ name: str
160
+ """The unique name of the error hook."""
161
+ callback: ErrorHookFunction
162
+ """The function that will be called when the error hook is triggered."""
163
+ _registered: asyncio.Future[None]
164
+ """
165
+ Tracks the registration of the error hook. The future will resolve once
166
+ the hook has been registered, or reject if any error occurs.
167
+ """
168
+
169
+ def __init__(self, name: str, func: ErrorHookFunction):
170
+ self.__doc__ = getattr(func, "__doc__", None)
171
+ self.__name__ = getattr(func, "__name__", None)
172
+ self.name = name
173
+ self.callback = func
174
+ self._registered = register_error_hook(self)
175
+
176
+ def __call__(self, args: ErrorHookArgs) -> Union[bool, Awaitable[bool]]:
177
+ return self.callback(args)
178
+
179
+ def __repr__(self) -> str:
180
+ return f"ErrorHook(name={self.name}, callback={self.callback})"
181
+
182
+
84
183
  class ResourceHookOptions:
85
184
  """Options for registering a resource hook."""
86
185
 
@@ -168,6 +267,8 @@ class ResourceHookBinding:
168
267
  :class:`ResourceHookFunction`. This is because the engine needs to be able to identify a hook when a resource is
169
268
  deleted.
170
269
  """
270
+ on_error: Optional[list["ErrorHook"]]
271
+ """Hooks to be invoked when a resource operation fails. Return True to retry, False to not retry."""
171
272
 
172
273
  def __init__(
173
274
  self,
@@ -177,6 +278,7 @@ class ResourceHookBinding:
177
278
  after_update: Optional[list[Union[ResourceHook, ResourceHookFunction]]] = None,
178
279
  before_delete: Optional[list[ResourceHook]] = None,
179
280
  after_delete: Optional[list[ResourceHook]] = None,
281
+ on_error: Optional[list["ErrorHook"]] = None,
180
282
  ):
181
283
  self.before_create = before_create
182
284
  self.after_create = after_create
@@ -184,6 +286,7 @@ class ResourceHookBinding:
184
286
  self.after_update = after_update
185
287
  self.before_delete = before_delete
186
288
  self.after_delete = after_delete
289
+ self.on_error = on_error
187
290
 
188
291
  def __repr__(self):
189
292
  return (
@@ -192,7 +295,8 @@ class ResourceHookBinding:
192
295
  + f"before_update={self.before_update}, "
193
296
  + f"after_update={self.after_update}, "
194
297
  + f"before_delete={self.before_delete}, "
195
- + f"after_delete={self.after_delete})"
298
+ + f"after_delete={self.after_delete}, "
299
+ + f"on_error={self.on_error})"
196
300
  )
197
301
 
198
302
  def _copy(self):
@@ -223,6 +327,7 @@ class ResourceHookBinding:
223
327
  dest.after_update = _merge_lists(dest.after_update, source.after_update)
224
328
  dest.before_delete = _merge_lists(dest.before_delete, source.before_delete)
225
329
  dest.after_delete = _merge_lists(dest.after_delete, source.after_delete)
330
+ dest.on_error = _merge_lists(dest.on_error, source.on_error)
226
331
 
227
332
  return dest
228
333
 
@@ -54,7 +54,7 @@ if TYPE_CHECKING:
54
54
  ResourceOptions,
55
55
  ResourceTransform,
56
56
  )
57
- from ..resource_hooks import ResourceHook
57
+ from ..resource_hooks import ErrorHook, ResourceHook
58
58
 
59
59
 
60
60
  # Workaround for https://github.com/grpc/grpc/issues/38679,
@@ -381,6 +381,91 @@ class _CallbackServicer(callback_pb2_grpc.CallbacksServicer):
381
381
  on_dry_run=hook.opts.on_dry_run if hook.opts else False,
382
382
  )
383
383
 
384
+ def do_register_error_hook(
385
+ self, hook: ErrorHook
386
+ ) -> resource_pb2.RegisterErrorHookRequest:
387
+ log.debug(f"do_register_error_hook {hook.name}")
388
+
389
+ async def cb(s: bytes) -> Message:
390
+ request: resource_pb2.ErrorHookRequest = (
391
+ resource_pb2.ErrorHookRequest.FromString(s)
392
+ )
393
+
394
+ try:
395
+ from ..resource_hooks import ErrorHookArgs
396
+
397
+ new_inputs = (
398
+ outputtify_secrets(
399
+ cast(
400
+ dict[str, Any],
401
+ deserialize_properties(
402
+ request.new_inputs,
403
+ keep_unknowns=True,
404
+ ),
405
+ )
406
+ )
407
+ if request.HasField("new_inputs") and request.new_inputs
408
+ else None
409
+ )
410
+ old_inputs = (
411
+ outputtify_secrets(
412
+ cast(
413
+ dict[str, Any],
414
+ deserialize_properties(
415
+ request.old_inputs,
416
+ keep_unknowns=True,
417
+ ),
418
+ )
419
+ )
420
+ if request.HasField("old_inputs") and request.old_inputs
421
+ else None
422
+ )
423
+ old_outputs = (
424
+ outputtify_secrets(
425
+ cast(
426
+ dict[str, Any],
427
+ deserialize_properties(
428
+ request.old_outputs,
429
+ keep_unknowns=True,
430
+ ),
431
+ )
432
+ )
433
+ if request.HasField("old_outputs") and request.old_outputs
434
+ else None
435
+ )
436
+
437
+ args = ErrorHookArgs(
438
+ urn=request.urn,
439
+ id=request.id,
440
+ name=request.name,
441
+ type=request.type,
442
+ new_inputs=new_inputs,
443
+ old_inputs=old_inputs,
444
+ old_outputs=old_outputs,
445
+ failed_operation=request.failed_operation,
446
+ errors=list(request.errors),
447
+ )
448
+ maybe_retry = hook(args)
449
+ if isinstance(maybe_retry, Awaitable):
450
+ retry = await maybe_retry
451
+ else:
452
+ retry = maybe_retry
453
+ return resource_pb2.ErrorHookResponse(retry=retry)
454
+ except Exception as e: # noqa: BLE001 catch blind exception
455
+ log.debug(f"Exception while executing error hook: {str(e)}")
456
+ return resource_pb2.ErrorHookResponse(error=str(e))
457
+
458
+ token = str(uuid.uuid4())
459
+ self._callbacks[token] = cb
460
+ callback = callback_pb2.Callback(
461
+ token=token,
462
+ target=self._target,
463
+ )
464
+ return resource_pb2.RegisterErrorHookRequest(
465
+ name=hook.name,
466
+ callback=callback,
467
+ )
468
+
384
469
  def register_resource_hook(self, hook: ResourceHook) -> None:
385
470
  req = self.do_register_resource_hook(hook)
386
471
  try:
@@ -390,6 +475,14 @@ class _CallbackServicer(callback_pb2_grpc.CallbacksServicer):
390
475
  self._callbacks.pop(req.callback.token)
391
476
  raise
392
477
 
478
+ def register_error_hook(self, hook: ErrorHook) -> None:
479
+ req = self.do_register_error_hook(hook)
480
+ try:
481
+ self._monitor.RegisterErrorHook(req)
482
+ except Exception:
483
+ self._callbacks.pop(req.callback.token)
484
+ raise
485
+
393
486
  def _resource_options(
394
487
  self, request: resource_pb2.TransformRequest
395
488
  ) -> ResourceOptions:
@@ -39,6 +39,7 @@ from .settings import (
39
39
  _get_callbacks,
40
40
  _get_rpc_manager,
41
41
  _sync_monitor_supports_transforms,
42
+ monitor_supports_error_hooks,
42
43
  monitor_supports_resource_hooks,
43
44
  handle_grpc_error,
44
45
  )
@@ -53,7 +54,12 @@ if TYPE_CHECKING:
53
54
  CustomTimeouts,
54
55
  )
55
56
  from ..resource import ResourceOptions
56
- from ..resource_hooks import ResourceHook, ResourceHookBinding, ResourceHookFunction
57
+ from ..resource_hooks import (
58
+ ErrorHook,
59
+ ResourceHook,
60
+ ResourceHookBinding,
61
+ ResourceHookFunction,
62
+ )
57
63
 
58
64
 
59
65
  class ResourceResolverOperations(NamedTuple):
@@ -1344,7 +1350,7 @@ async def _prepare_resource_hooks(
1344
1350
  hooks: Optional["ResourceHookBinding"],
1345
1351
  name_prefix: str,
1346
1352
  ) -> resource_pb2.RegisterResourceRequest.ResourceHooksBinding:
1347
- from ..resource_hooks import ResourceHook
1353
+ from ..resource_hooks import ErrorHook, ResourceHook
1348
1354
 
1349
1355
  proto = resource_pb2.RegisterResourceRequest.ResourceHooksBinding()
1350
1356
  if not hooks:
@@ -1382,6 +1388,19 @@ async def _prepare_resource_hooks(
1382
1388
  await hook._registered
1383
1389
  getattr(proto, hook_type).append(hook.name)
1384
1390
 
1391
+ on_error_hooks_list: list[ErrorHook] = getattr(hooks, "on_error", []) or []
1392
+ if on_error_hooks_list:
1393
+ if not await monitor_supports_error_hooks():
1394
+ raise Exception(
1395
+ "The Pulumi CLI does not support error hooks. Please update the Pulumi CLI."
1396
+ )
1397
+
1398
+ for error_hook in on_error_hooks_list:
1399
+ if not isinstance(error_hook, ErrorHook):
1400
+ raise ValueError("Error hooks must be ErrorHook instances")
1401
+ await error_hook._registered
1402
+ proto.on_error.append(error_hook.name)
1403
+
1385
1404
  return proto
1386
1405
 
1387
1406
 
@@ -1406,3 +1425,26 @@ def register_resource_hook(hook: "ResourceHook") -> asyncio.Future[None]:
1406
1425
  return result
1407
1426
 
1408
1427
  return asyncio.ensure_future(wrapper())
1428
+
1429
+
1430
+ def register_error_hook(hook: "ErrorHook") -> asyncio.Future[None]:
1431
+ async def do_register() -> None:
1432
+ callbacks = await _get_callbacks()
1433
+ if callbacks is None:
1434
+ raise Exception("No callback server registered.")
1435
+ return callbacks.register_error_hook(hook)
1436
+
1437
+ async def wrapper() -> None:
1438
+ if not await monitor_supports_error_hooks():
1439
+ raise Exception(
1440
+ "The Pulumi CLI does not support error hooks. Please update the Pulumi CLI."
1441
+ )
1442
+
1443
+ result, exception = await _get_rpc_manager().do_rpc(
1444
+ "register error hook", do_register
1445
+ )()
1446
+ if exception:
1447
+ raise exception
1448
+ return result
1449
+
1450
+ return asyncio.ensure_future(wrapper())
@@ -14,7 +14,13 @@
14
14
 
15
15
  import asyncio
16
16
  from typing import Optional, Union
17
- from ..resource_hooks import ResourceHookArgs, ResourceHook, ResourceHookBinding
17
+ from ..resource_hooks import (
18
+ ErrorHookArgs,
19
+ ErrorHook,
20
+ ResourceHookArgs,
21
+ ResourceHook,
22
+ ResourceHookBinding,
23
+ )
18
24
  from .proto import RegisterResourceRequest, ConstructRequest
19
25
 
20
26
 
@@ -22,6 +28,28 @@ def noop(args: ResourceHookArgs) -> None:
22
28
  pass
23
29
 
24
30
 
31
+ def noop_error(args: ErrorHookArgs) -> bool:
32
+ return False
33
+
34
+
35
+ class StubErrorHook(ErrorHook):
36
+ """
37
+ StubErrorHook is an error hook that does nothing and returns False (no retry).
38
+
39
+ We need to reconstruct ErrorHook instances to set on ResourceOptions when
40
+ we only have the name available (e.g. from Construct request). These
41
+ stubs will later be serialized back into a list of hook names.
42
+ """
43
+
44
+ def __init__(self, name: str):
45
+ # Note: we intentionally do not call super here, because we do not
46
+ # want to kick off a registration for this hook.
47
+ self.name = name
48
+ self.callback = noop_error
49
+ self._registered = asyncio.Future()
50
+ self._registered.set_result(None)
51
+
52
+
25
53
  class StubResourceHook(ResourceHook):
26
54
  """
27
55
  StubResourceHook is a resource hook that does nothing.
@@ -64,4 +92,5 @@ def _binding_from_proto(
64
92
  after_update=list(map(StubResourceHook, protoBinding.after_update)),
65
93
  before_delete=list(map(StubResourceHook, protoBinding.before_delete)),
66
94
  after_delete=list(map(StubResourceHook, protoBinding.after_delete)),
95
+ on_error=list(map(StubErrorHook, protoBinding.on_error)),
67
96
  )
@@ -386,6 +386,10 @@ async def monitor_supports_resource_hooks() -> bool:
386
386
  return await monitor_supports_feature("resourceHooks")
387
387
 
388
388
 
389
+ async def monitor_supports_error_hooks() -> bool:
390
+ return await monitor_supports_feature("errorHooks")
391
+
392
+
389
393
  def reset_options(
390
394
  project: Optional[str] = None,
391
395
  stack: Optional[str] = None,
@@ -444,4 +448,5 @@ async def _load_monitor_feature_support():
444
448
  monitor_supports_feature("invokeTransforms"),
445
449
  monitor_supports_feature("parameterization"),
446
450
  monitor_supports_feature("resourceHooks"),
451
+ monitor_supports_feature("errorHooks"),
447
452
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pulumi
3
- Version: 3.218.0a1769600557
3
+ Version: 3.219.0
4
4
  Summary: Pulumi's Python SDK
5
5
  Project-URL: Documentation, https://www.pulumi.com
6
6
  Project-URL: Changelog, https://github.com/pulumi/pulumi/blob/master/CHANGELOG.md
@@ -17,8 +17,8 @@ Requires-Dist: debugpy~=1.8.7
17
17
  Requires-Dist: dill~=0.4
18
18
  Requires-Dist: grpcio<2,>=1.68.1; python_version < '3.14'
19
19
  Requires-Dist: grpcio<2,>=1.75.1; python_version >= '3.14'
20
- Requires-Dist: pip<26,>=24.3.1
21
- Requires-Dist: protobuf<6,>=3.20.3
20
+ Requires-Dist: pip>=24.3.1
21
+ Requires-Dist: protobuf<7,>=3.20.3
22
22
  Requires-Dist: pyyaml~=6.0
23
23
  Requires-Dist: semver~=3.0
24
24
  Description-Content-Type: text/markdown
@@ -1,7 +1,7 @@
1
- pulumi/__init__.py,sha256=yp9QASkDzo6Ta6qWSuouj0xQeXRkg8fbGzjIaNuj48c,4449
1
+ pulumi/__init__.py,sha256=ySZJClazJdfK-zoRuhf5HPA54VMKeGRYb_EdFMKobwk,4569
2
2
  pulumi/_types.py,sha256=C_gCpJIlb7V39x-iSNgMqYdLkTSqmZ8RHQb2BIIzGtU,39333
3
3
  pulumi/_utils.py,sha256=cIeLt2NXeHVhODfh4JEpoyV1wMesDGOzJN5u5NyyEs8,11263
4
- pulumi/_version.py,sha256=05gCdsBMH0kz7oGLyEAbYVBx7XESsrYpRhzQhRS8dRo,733
4
+ pulumi/_version.py,sha256=N4aY505FlfZHOC6MG9h89RtItTB9X_tp19xjh42MKkQ,733
5
5
  pulumi/asset.py,sha256=jOZBKiC8GYHpGYL5pOi-hfL30efiK8FLdc4fad7YwII,3952
6
6
  pulumi/config.py,sha256=pWMfMNLTZe63QmvyT-3XMG3VWTUTHkk6SMQg5lJZapE,25047
7
7
  pulumi/deprecated.py,sha256=aO0kXzGtYg14UDqK-MLxaAaqIfMMg4-oUvAO6FIVBV0,1738
@@ -12,7 +12,7 @@ pulumi/metadata.py,sha256=g2wWNl1eEQ-08jZmyrvFYcB447gMvBFfzqef1NnqOxc,1858
12
12
  pulumi/output.py,sha256=NNBkQ66S8wuddDJZjsTL2fiJ-Rz-6uXHNBhpF0b8A-o,43578
13
13
  pulumi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  pulumi/resource.py,sha256=4Bf6ZJQ1-2YEx5tvSufxv2t-xVKIrcnRS1MfSVJ1I-E,52632
15
- pulumi/resource_hooks.py,sha256=yOgxETQMuKplUyTD7re6IleBODaIplvOqrCCIJPdiFk,9197
15
+ pulumi/resource_hooks.py,sha256=0Tc62wdCi6FmEkAU1QYbQcCoQEQoIA9NcYWIdTT--cQ,13040
16
16
  pulumi/stack_reference.py,sha256=Vx_0v_22e6Xy5Ofr_NMUBiNeyIr5Klaj94keJTr3Y0w,6360
17
17
  pulumi/stash.py,sha256=jBJfzC5cH5h-xhx0bDHnIms6gidZ7RAIQFuRZIVSoo0,4503
18
18
  pulumi/type_token.py,sha256=RIA-r-IcmqYqUvlLwnPvT9Y5Xbg--nFHneWq2dpK7vw,1276
@@ -38,7 +38,7 @@ pulumi/automation/events.py,sha256=229awNpKDtZKzV1d_4_CidsJ7K8_rsQAaFxFIsHYkOw,2
38
38
  pulumi/dynamic/__init__.py,sha256=uZFY_4BlGZq5Bgwp37Dm9Hqy3Uf8iDd_TVvMaK2Yz8U,1139
39
39
  pulumi/dynamic/__main__.py,sha256=QehWmvtoPkqClqYn7PeOzAtSVkJwQlpFVrHoUD_6hs4,9943
40
40
  pulumi/dynamic/config.py,sha256=50XzNBN6u_0TkCqQOVBK1zcWHWCEVV1a_JpyB7ZNWnE,1272
41
- pulumi/dynamic/dynamic.py,sha256=e74-iTE_ZwOTLsWeVq25RXDMhS5_77E6Zw7DucD-LOg,11601
41
+ pulumi/dynamic/dynamic.py,sha256=wol9OFnalSA_AE92V2JaAxZwc97clsBlEwNprMGvb-o,11656
42
42
  pulumi/policy/__init__.py,sha256=MNs4_1_aoIZHwvoPuYSYwhvpF1RNhFeVuw2zzu4F5so,667
43
43
  pulumi/policy/__main__.py,sha256=siArVFRKjv7Jx_ufWFwVw4f2cMBc2qKqnQCp-FYAKM8,2556
44
44
  pulumi/provider/__init__.py,sha256=lvzJnqpo1pXMHsl7A8ZHhcBqaYvzQeiUxc_8JV8XhPE,800
@@ -55,7 +55,7 @@ pulumi/provider/experimental/server.py,sha256=-ntiIdGTNg3CdSKTQ3tnLjpLHtmjT2Ev7v
55
55
  pulumi/provider/experimental/util.py,sha256=pJQ7M-Qcyqpc_z_9lH6pTBdlGMN9nFWd8Bp7Rlk2ywc,827
56
56
  pulumi/run/plugin/__main__.py,sha256=oJ4b-7Mu9QUqbbAFDh0Bd4_7gXwPX020X_bL-dKa29c,2502
57
57
  pulumi/runtime/__init__.py,sha256=SEjqSJXIBd6BKMMWczVoX7-E-nsVvXPvaVy9FQTvkYE,2520
58
- pulumi/runtime/_callbacks.py,sha256=o-ZNwmlJc1ZXCj5vhzXHnTtb1sYy4oAM-VQit1JMb2E,22724
58
+ pulumi/runtime/_callbacks.py,sha256=hhZHvx1LEdsbcCrNOPbJCTPBDoPyNcaujG9A81dQRJg,26183
59
59
  pulumi/runtime/_depends_on.py,sha256=LxxLqz7JPWCsa8I_nxO9NvyXnS8Vj1vBGCukNU7RYI0,1966
60
60
  pulumi/runtime/_grpc_settings.py,sha256=0GCSqaPJVZ6tO1GSV_2kOUJwf5Jil9sTkJsEn6hrrOc,1403
61
61
  pulumi/runtime/_json.py,sha256=Za60rKUrykdf-_L31Wlq1lLSz9yyo2HhNIji9x9pGgo,1625
@@ -64,12 +64,12 @@ pulumi/runtime/config.py,sha256=B77z24lPlTcSbJ8ssEwxbXj_A1hmfk30SlXe48jwgfY,3406
64
64
  pulumi/runtime/invoke.py,sha256=Tl0Ndo84PaDQZQvqAQYtZ9jjeawGqXfKdE_k1KJc_0g,23005
65
65
  pulumi/runtime/known_types.py,sha256=rUKAoP-JBww1LFkbK3vIgGEJVjuEB5p3fjBXllAPuRw,2702
66
66
  pulumi/runtime/mocks.py,sha256=Mtm2Ilr77hTy4eGptzct1BRT8PvexBDOMHYTC-CCVX8,11342
67
- pulumi/runtime/resource.py,sha256=rNf9I1qTMrWBvsEiPSAIKWRVANx9csflRL7Uvgu_9Y0,54016
67
+ pulumi/runtime/resource.py,sha256=7lFemDzH96y7KOpMdPPU6WiltE27HItgUodZJcv0A8U,55435
68
68
  pulumi/runtime/resource_cycle_breaker.py,sha256=CBtvlxlxguf4_F3UYxM2fySfDdygq1rDpyxQlWNQ6dA,2014
69
- pulumi/runtime/resource_hooks.py,sha256=iAtHKsZVySWgil9iQsu1bAQ_lbzj0QpsSTX9cqvS3Ws,2527
69
+ pulumi/runtime/resource_hooks.py,sha256=NkAN5XuLjc-WMi8M5Vh9wExHoF1OnI1dLwoSclqwwVg,3374
70
70
  pulumi/runtime/rpc.py,sha256=Nkw8osBqVA_n5PKuzLetZtqGySbPp30sfxm_7qlYTG0,67038
71
71
  pulumi/runtime/rpc_manager.py,sha256=7GguypHU0XFAp0Lmv-fOrbhVty-oLk6gn_lYfvJbL7I,3153
72
- pulumi/runtime/settings.py,sha256=k_m-In4OAQUHPsfbCd4_o_c6Clyg1Qh41_YBI6A0dLM,13563
72
+ pulumi/runtime/settings.py,sha256=VcU69la8jWGupp12jzixDjSJRjTsKAupSJh0Ef1P-MM,13719
73
73
  pulumi/runtime/stack.py,sha256=c7FAGsglh4EI4JRTTaAG1-es3hWC3yZ1dlcGBGFnLA0,14657
74
74
  pulumi/runtime/sync_await.py,sha256=U49qpS7youGQlePoG6AlLwJ7QBzFepWKAZBephXuOgM,3157
75
75
  pulumi/runtime/proto/__init__.py,sha256=xthtRh9YwifZj00_6U63gubzeM7y_xkePihT9B87GGw,1105
@@ -146,7 +146,7 @@ pulumi/runtime/proto/testing/language_pb2.py,sha256=gllx-3VVuRToAlIpt0IvEfVPsxnQ
146
146
  pulumi/runtime/proto/testing/language_pb2.pyi,sha256=1KyoBEhlUsf6cApa4Hh0W59S3jdFoUwdrv3zhuRbbUw,10383
147
147
  pulumi/runtime/proto/testing/language_pb2_grpc.py,sha256=Lna44LwQpf8CSA03H8c49E-o9JgnRztohjJM3YDNkSI,6800
148
148
  pulumi/runtime/proto/testing/language_pb2_grpc.pyi,sha256=U1DOZIPP_vJx-qocDQbx5asRqsmb66JdUuXTLYRgULc,5008
149
- pulumi-3.218.0a1769600557.dist-info/METADATA,sha256=f62KCMTZJXrjpBzZ7xLx9fC5ep1jgkafNji_HIWZy_I,3795
150
- pulumi-3.218.0a1769600557.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
151
- pulumi-3.218.0a1769600557.dist-info/licenses/LICENSE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
152
- pulumi-3.218.0a1769600557.dist-info/RECORD,,
149
+ pulumi-3.219.0.dist-info/METADATA,sha256=llhWlFFjDcpGgGiMHLyrPM8Vx7nimBN2Z9qSnzlVYDI,3780
150
+ pulumi-3.219.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
151
+ pulumi-3.219.0.dist-info/licenses/LICENSE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
152
+ pulumi-3.219.0.dist-info/RECORD,,