capo-lambda-microvms 0.1.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 (180) hide show
  1. capo_lambda_microvms/__init__.py +73 -0
  2. capo_lambda_microvms/_async.py +25 -0
  3. capo_lambda_microvms/_auth/_identity.py +16 -0
  4. capo_lambda_microvms/_auth/_providers.py +886 -0
  5. capo_lambda_microvms/_auth/_signers.py +125 -0
  6. capo_lambda_microvms/_auth/_sigv4.py +579 -0
  7. capo_lambda_microvms/_auth/_zapros_handler.py +80 -0
  8. capo_lambda_microvms/_body.py +221 -0
  9. capo_lambda_microvms/_iter.py +113 -0
  10. capo_lambda_microvms/_operations/lambda_microvms/create_microvm_auth_token.py +181 -0
  11. capo_lambda_microvms/_operations/lambda_microvms/create_microvm_image.py +190 -0
  12. capo_lambda_microvms/_operations/lambda_microvms/create_microvm_shell_auth_token.py +181 -0
  13. capo_lambda_microvms/_operations/lambda_microvms/delete_microvm_image.py +170 -0
  14. capo_lambda_microvms/_operations/lambda_microvms/delete_microvm_image_version.py +174 -0
  15. capo_lambda_microvms/_operations/lambda_microvms/get_microvm.py +171 -0
  16. capo_lambda_microvms/_operations/lambda_microvms/get_microvm_image.py +170 -0
  17. capo_lambda_microvms/_operations/lambda_microvms/get_microvm_image_build.py +177 -0
  18. capo_lambda_microvms/_operations/lambda_microvms/get_microvm_image_version.py +179 -0
  19. capo_lambda_microvms/_operations/lambda_microvms/list_managed_microvm_image_versions.py +172 -0
  20. capo_lambda_microvms/_operations/lambda_microvms/list_managed_microvm_images.py +162 -0
  21. capo_lambda_microvms/_operations/lambda_microvms/list_microvm_image_builds.py +196 -0
  22. capo_lambda_microvms/_operations/lambda_microvms/list_microvm_image_versions.py +172 -0
  23. capo_lambda_microvms/_operations/lambda_microvms/list_microvm_images.py +164 -0
  24. capo_lambda_microvms/_operations/lambda_microvms/list_microvms.py +175 -0
  25. capo_lambda_microvms/_operations/lambda_microvms/list_tags.py +182 -0
  26. capo_lambda_microvms/_operations/lambda_microvms/resume_microvm.py +167 -0
  27. capo_lambda_microvms/_operations/lambda_microvms/run_microvm.py +187 -0
  28. capo_lambda_microvms/_operations/lambda_microvms/suspend_microvm.py +167 -0
  29. capo_lambda_microvms/_operations/lambda_microvms/tag_resource.py +164 -0
  30. capo_lambda_microvms/_operations/lambda_microvms/terminate_microvm.py +167 -0
  31. capo_lambda_microvms/_operations/lambda_microvms/untag_resource.py +162 -0
  32. capo_lambda_microvms/_operations/lambda_microvms/update_microvm_image.py +191 -0
  33. capo_lambda_microvms/_operations/lambda_microvms/update_microvm_image_version.py +190 -0
  34. capo_lambda_microvms/_pagination.py +21 -0
  35. capo_lambda_microvms/_protocol/__init__.py +1 -0
  36. capo_lambda_microvms/_protocol/errors.py +93 -0
  37. capo_lambda_microvms/_protocol/eventstream.py +240 -0
  38. capo_lambda_microvms/_protocol/serialize.py +47 -0
  39. capo_lambda_microvms/_protocol/xml.py +33 -0
  40. capo_lambda_microvms/_resources/lambda_microvms/microvm.py +983 -0
  41. capo_lambda_microvms/_resources/lambda_microvms/microvm_image.py +1394 -0
  42. capo_lambda_microvms/_rule_engine/__init__.py +0 -0
  43. capo_lambda_microvms/_rule_engine/_aws_partition.py +160 -0
  44. capo_lambda_microvms/_rule_engine/_endpoint_rule_set.py +135 -0
  45. capo_lambda_microvms/_rule_engine/_endpoint_runtime.py +389 -0
  46. capo_lambda_microvms/_services/_aws_config.py +160 -0
  47. capo_lambda_microvms/_services/_pipeline.py +247 -0
  48. capo_lambda_microvms/_services/async_lambda_microvms.py +1822 -0
  49. capo_lambda_microvms/_services/lambda_microvms.py +1798 -0
  50. capo_lambda_microvms/errors/__init__.py +49 -0
  51. capo_lambda_microvms/errors/_base.py +94 -0
  52. capo_lambda_microvms/errors/access_denied_exception.py +46 -0
  53. capo_lambda_microvms/errors/conflict_exception.py +56 -0
  54. capo_lambda_microvms/errors/insufficient_capacity_exception.py +49 -0
  55. capo_lambda_microvms/errors/internal_server_exception.py +48 -0
  56. capo_lambda_microvms/errors/invalid_parameter_value_exception.py +54 -0
  57. capo_lambda_microvms/errors/resource_conflict_exception.py +52 -0
  58. capo_lambda_microvms/errors/resource_not_found_exception.py +59 -0
  59. capo_lambda_microvms/errors/service_exception.py +50 -0
  60. capo_lambda_microvms/errors/service_quota_exceeded_exception.py +72 -0
  61. capo_lambda_microvms/errors/throttling_exception.py +58 -0
  62. capo_lambda_microvms/errors/too_many_requests_exception.py +52 -0
  63. capo_lambda_microvms/errors/validation_exception.py +44 -0
  64. capo_lambda_microvms/py.typed +0 -0
  65. capo_lambda_microvms/types/_prelude/blob.py +12 -0
  66. capo_lambda_microvms/types/_prelude/timestamp.py +17 -0
  67. capo_lambda_microvms/types/architecture.py +14 -0
  68. capo_lambda_microvms/types/auth_token_key.py +5 -0
  69. capo_lambda_microvms/types/auth_token_value.py +5 -0
  70. capo_lambda_microvms/types/build_state.py +19 -0
  71. capo_lambda_microvms/types/capability.py +15 -0
  72. capo_lambda_microvms/types/capability_list.py +29 -0
  73. capo_lambda_microvms/types/chipset.py +14 -0
  74. capo_lambda_microvms/types/cloud_watch_logging.py +34 -0
  75. capo_lambda_microvms/types/code_artifact.py +32 -0
  76. capo_lambda_microvms/types/cpu_configuration.py +39 -0
  77. capo_lambda_microvms/types/cpu_configuration_list.py +31 -0
  78. capo_lambda_microvms/types/create_microvm_auth_token_request.py +62 -0
  79. capo_lambda_microvms/types/create_microvm_auth_token_response.py +39 -0
  80. capo_lambda_microvms/types/create_microvm_image_request.py +219 -0
  81. capo_lambda_microvms/types/create_microvm_image_response.py +294 -0
  82. capo_lambda_microvms/types/create_microvm_shell_auth_token_request.py +38 -0
  83. capo_lambda_microvms/types/create_microvm_shell_auth_token_response.py +41 -0
  84. capo_lambda_microvms/types/delete_microvm_image_input.py +26 -0
  85. capo_lambda_microvms/types/delete_microvm_image_output.py +49 -0
  86. capo_lambda_microvms/types/delete_microvm_image_version_input.py +29 -0
  87. capo_lambda_microvms/types/delete_microvm_image_version_output.py +65 -0
  88. capo_lambda_microvms/types/environment_variable_key.py +5 -0
  89. capo_lambda_microvms/types/environment_variable_map.py +29 -0
  90. capo_lambda_microvms/types/environment_variable_value.py +5 -0
  91. capo_lambda_microvms/types/get_microvm_image_build_input.py +31 -0
  92. capo_lambda_microvms/types/get_microvm_image_build_output.py +144 -0
  93. capo_lambda_microvms/types/get_microvm_image_input.py +26 -0
  94. capo_lambda_microvms/types/get_microvm_image_output.py +117 -0
  95. capo_lambda_microvms/types/get_microvm_image_version_input.py +29 -0
  96. capo_lambda_microvms/types/get_microvm_image_version_output.py +308 -0
  97. capo_lambda_microvms/types/get_microvm_request.py +26 -0
  98. capo_lambda_microvms/types/get_microvm_response.py +188 -0
  99. capo_lambda_microvms/types/hook_state.py +18 -0
  100. capo_lambda_microvms/types/hooks.py +65 -0
  101. capo_lambda_microvms/types/idle_policy.py +40 -0
  102. capo_lambda_microvms/types/image_name.py +6 -0
  103. capo_lambda_microvms/types/list_managed_microvm_image_versions_input.py +31 -0
  104. capo_lambda_microvms/types/list_managed_microvm_image_versions_output.py +52 -0
  105. capo_lambda_microvms/types/list_managed_microvm_images_input.py +26 -0
  106. capo_lambda_microvms/types/list_managed_microvm_images_output.py +50 -0
  107. capo_lambda_microvms/types/list_microvm_image_builds_input.py +44 -0
  108. capo_lambda_microvms/types/list_microvm_image_builds_output.py +50 -0
  109. capo_lambda_microvms/types/list_microvm_image_versions_input.py +31 -0
  110. capo_lambda_microvms/types/list_microvm_image_versions_output.py +50 -0
  111. capo_lambda_microvms/types/list_microvm_images_request.py +31 -0
  112. capo_lambda_microvms/types/list_microvm_images_response.py +48 -0
  113. capo_lambda_microvms/types/list_microvms_request.py +33 -0
  114. capo_lambda_microvms/types/list_microvms_response.py +46 -0
  115. capo_lambda_microvms/types/list_of_port_specification.py +31 -0
  116. capo_lambda_microvms/types/list_tags_request.py +24 -0
  117. capo_lambda_microvms/types/list_tags_response.py +32 -0
  118. capo_lambda_microvms/types/logging.py +65 -0
  119. capo_lambda_microvms/types/logging_disabled.py +18 -0
  120. capo_lambda_microvms/types/managed_microvm_image_summary.py +66 -0
  121. capo_lambda_microvms/types/managed_microvm_image_summary_list.py +39 -0
  122. capo_lambda_microvms/types/managed_microvm_image_version.py +94 -0
  123. capo_lambda_microvms/types/managed_microvm_image_version_list.py +39 -0
  124. capo_lambda_microvms/types/managed_microvm_image_version_status.py +18 -0
  125. capo_lambda_microvms/types/microvm_hooks.py +108 -0
  126. capo_lambda_microvms/types/microvm_identifier.py +6 -0
  127. capo_lambda_microvms/types/microvm_image_arn.py +6 -0
  128. capo_lambda_microvms/types/microvm_image_build_summaries.py +37 -0
  129. capo_lambda_microvms/types/microvm_image_build_summary.py +125 -0
  130. capo_lambda_microvms/types/microvm_image_hooks.py +66 -0
  131. capo_lambda_microvms/types/microvm_image_identifier.py +6 -0
  132. capo_lambda_microvms/types/microvm_image_state.py +24 -0
  133. capo_lambda_microvms/types/microvm_image_summaries.py +35 -0
  134. capo_lambda_microvms/types/microvm_image_summary.py +90 -0
  135. capo_lambda_microvms/types/microvm_image_version_state.py +22 -0
  136. capo_lambda_microvms/types/microvm_image_version_status.py +17 -0
  137. capo_lambda_microvms/types/microvm_image_version_summary.py +300 -0
  138. capo_lambda_microvms/types/microvm_image_version_summary_list.py +39 -0
  139. capo_lambda_microvms/types/microvm_item.py +82 -0
  140. capo_lambda_microvms/types/microvm_item_list.py +29 -0
  141. capo_lambda_microvms/types/microvm_state.py +22 -0
  142. capo_lambda_microvms/types/network_connector.py +5 -0
  143. capo_lambda_microvms/types/network_connector_list.py +19 -0
  144. capo_lambda_microvms/types/non_blank_string.py +6 -0
  145. capo_lambda_microvms/types/port_number.py +6 -0
  146. capo_lambda_microvms/types/port_range.py +38 -0
  147. capo_lambda_microvms/types/port_specification.py +63 -0
  148. capo_lambda_microvms/types/positive_integer.py +5 -0
  149. capo_lambda_microvms/types/resources.py +26 -0
  150. capo_lambda_microvms/types/resources_list.py +29 -0
  151. capo_lambda_microvms/types/resume_microvm_request.py +26 -0
  152. capo_lambda_microvms/types/resume_microvm_response.py +18 -0
  153. capo_lambda_microvms/types/role_arn.py +6 -0
  154. capo_lambda_microvms/types/run_hook_payload.py +5 -0
  155. capo_lambda_microvms/types/run_microvm_request.py +139 -0
  156. capo_lambda_microvms/types/run_microvm_response.py +188 -0
  157. capo_lambda_microvms/types/snapshot_build.py +35 -0
  158. capo_lambda_microvms/types/string.py +5 -0
  159. capo_lambda_microvms/types/suspend_microvm_request.py +26 -0
  160. capo_lambda_microvms/types/suspend_microvm_response.py +18 -0
  161. capo_lambda_microvms/types/tag_key.py +5 -0
  162. capo_lambda_microvms/types/tag_key_list.py +17 -0
  163. capo_lambda_microvms/types/tag_resource_request.py +38 -0
  164. capo_lambda_microvms/types/tag_value.py +5 -0
  165. capo_lambda_microvms/types/taggable_resource.py +6 -0
  166. capo_lambda_microvms/types/tags.py +29 -0
  167. capo_lambda_microvms/types/terminate_microvm_request.py +26 -0
  168. capo_lambda_microvms/types/terminate_microvm_response.py +18 -0
  169. capo_lambda_microvms/types/token_parts.py +29 -0
  170. capo_lambda_microvms/types/untag_resource_request.py +27 -0
  171. capo_lambda_microvms/types/update_microvm_image_request.py +205 -0
  172. capo_lambda_microvms/types/update_microvm_image_response.py +284 -0
  173. capo_lambda_microvms/types/update_microvm_image_version_request.py +51 -0
  174. capo_lambda_microvms/types/update_microvm_image_version_response.py +312 -0
  175. capo_lambda_microvms/types/version.py +5 -0
  176. capo_lambda_microvms-0.1.0.dist-info/METADATA +103 -0
  177. capo_lambda_microvms-0.1.0.dist-info/RECORD +180 -0
  178. capo_lambda_microvms-0.1.0.dist-info/WHEEL +5 -0
  179. capo_lambda_microvms-0.1.0.dist-info/licenses/LICENSE +21 -0
  180. capo_lambda_microvms-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,162 @@
1
+ """Generated from Smithy shape ``com.amazonaws.lambdamicrovms#UntagResource``."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from typing import Any
7
+ from urllib.parse import quote
8
+
9
+ import zapros
10
+ from typing_extensions import Never
11
+
12
+ import capo_lambda_microvms._auth._signers
13
+ import capo_lambda_microvms._auth._sigv4
14
+ import capo_lambda_microvms._protocol.eventstream
15
+ import capo_lambda_microvms.errors.access_denied_exception
16
+ import capo_lambda_microvms.errors.internal_server_exception
17
+ import capo_lambda_microvms.errors.invalid_parameter_value_exception
18
+ import capo_lambda_microvms.errors.resource_conflict_exception
19
+ import capo_lambda_microvms.errors.resource_not_found_exception
20
+ import capo_lambda_microvms.errors.service_exception
21
+ import capo_lambda_microvms.errors.throttling_exception
22
+ import capo_lambda_microvms.errors.too_many_requests_exception
23
+ import capo_lambda_microvms.errors.validation_exception
24
+ import capo_lambda_microvms.types.tag_key_list
25
+ import capo_lambda_microvms.types.untag_resource_request
26
+ from capo_lambda_microvms._protocol.errors import parse_error_metadata_json
27
+ from capo_lambda_microvms._rule_engine._endpoint_rule_set import EndpointParams, resolve
28
+ from capo_lambda_microvms._services._pipeline import (
29
+ AsyncOperationOptions,
30
+ OperationOptions,
31
+ )
32
+ from capo_lambda_microvms.errors import UnknownServiceError
33
+
34
+
35
+ def handle_error(response: zapros.Response) -> Never:
36
+ data = json.loads(response.read())
37
+ code, message = parse_error_metadata_json(response, data)
38
+ match code:
39
+ case "AccessDeniedException":
40
+ raise capo_lambda_microvms.errors.access_denied_exception.AccessDeniedException.from_json(
41
+ data, message
42
+ )
43
+ case "InternalServerException":
44
+ raise capo_lambda_microvms.errors.internal_server_exception.InternalServerException.from_json(
45
+ data, message
46
+ )
47
+ case "ThrottlingException":
48
+ raise capo_lambda_microvms.errors.throttling_exception.ThrottlingException.from_json(
49
+ data, message
50
+ )
51
+ case "ValidationException":
52
+ raise capo_lambda_microvms.errors.validation_exception.ValidationException.from_json(
53
+ data, message
54
+ )
55
+ case "InvalidParameterValueException":
56
+ raise capo_lambda_microvms.errors.invalid_parameter_value_exception.InvalidParameterValueException.from_json(
57
+ data, message
58
+ )
59
+ case "ResourceConflictException":
60
+ raise capo_lambda_microvms.errors.resource_conflict_exception.ResourceConflictException.from_json(
61
+ data, message
62
+ )
63
+ case "ResourceNotFoundException":
64
+ raise capo_lambda_microvms.errors.resource_not_found_exception.ResourceNotFoundException.from_json(
65
+ data, message
66
+ )
67
+ case "ServiceException":
68
+ raise capo_lambda_microvms.errors.service_exception.ServiceException.from_json(
69
+ data, message
70
+ )
71
+ case "TooManyRequestsException":
72
+ raise capo_lambda_microvms.errors.too_many_requests_exception.TooManyRequestsException.from_json(
73
+ data, message
74
+ )
75
+ case _:
76
+ raise UnknownServiceError(code=code, message=message, response=response)
77
+
78
+
79
+ def get_signer(
80
+ options: AsyncOperationOptions | OperationOptions,
81
+ auth_schemes: list[dict[str, Any]] | None = None,
82
+ ) -> capo_lambda_microvms._auth._signers.Signer | None:
83
+ name_to_schema = {s["name"]: s for s in (auth_schemes or [])} # noqa: F841
84
+ if (
85
+ options.credentials_provider is not None
86
+ and name_to_schema
87
+ and not name_to_schema.keys() & {"sigv4", "sigv4-s3express"}
88
+ ):
89
+ raise RuntimeError(
90
+ "Endpoint requires an unsupported auth scheme: " + ", ".join(name_to_schema)
91
+ )
92
+ if options.credentials_provider is not None:
93
+ endpoint_scheme = name_to_schema.get("sigv4") or name_to_schema.get(
94
+ "sigv4-s3express"
95
+ )
96
+ if endpoint_scheme is not None or not name_to_schema:
97
+ sigv4_config = capo_lambda_microvms._auth._sigv4.build_sigv4_auth_scheme(
98
+ "lambda", options.region, endpoint_scheme
99
+ )
100
+ if sigv4_config is not None:
101
+ return capo_lambda_microvms._auth._signers.SigV4Signer(
102
+ options.credentials_provider, auth_scheme=sigv4_config
103
+ )
104
+ raise RuntimeError("Auth was not resolved")
105
+
106
+
107
+ def build_request(
108
+ options: OperationOptions | AsyncOperationOptions,
109
+ input_: capo_lambda_microvms.types.untag_resource_request.UntagResourceRequest,
110
+ ) -> zapros.Request:
111
+ endpoint = resolve(
112
+ EndpointParams(
113
+ Region=options.region,
114
+ UseDualStack=options.use_dual_stack,
115
+ UseFIPS=options.use_fips,
116
+ Endpoint=options.endpoint,
117
+ )
118
+ ) # noqa: F841
119
+ url = endpoint.url.rstrip("/") + "/2017-03-31/tags/{Resource}"
120
+ url = url.replace("{Resource}", quote(input_["resource"], safe=""))
121
+ params: list[tuple[str, str]] = []
122
+ for item in input_["tag_keys"]:
123
+ params.append(("tagKeys", item))
124
+ headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
125
+ body: bytes | None = b""
126
+ signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
127
+ normalized_url = zapros.URL(url)
128
+ for k, v in params:
129
+ normalized_url.search_params.append(k, v)
130
+ return zapros.Request(
131
+ normalized_url, "DELETE", headers=headers, body=body, context={"signer": signer}
132
+ )
133
+
134
+
135
+ def untag_resource(
136
+ options: OperationOptions,
137
+ input_: capo_lambda_microvms.types.untag_resource_request.UntagResourceRequest,
138
+ ) -> tuple[None, zapros.Response]:
139
+ response = options.client.handler.handle(build_request(options, input_))
140
+ try:
141
+ if response.status >= 300:
142
+ response.read()
143
+ handle_error(response)
144
+ return None, response
145
+ except BaseException:
146
+ response.close()
147
+ raise
148
+
149
+
150
+ async def async_untag_resource(
151
+ options: AsyncOperationOptions,
152
+ input_: capo_lambda_microvms.types.untag_resource_request.UntagResourceRequest,
153
+ ) -> tuple[None, zapros.Response]:
154
+ response = await options.client.handler.ahandle(build_request(options, input_))
155
+ try:
156
+ if response.status >= 300:
157
+ await response.aread()
158
+ handle_error(response)
159
+ return None, response
160
+ except BaseException:
161
+ await response.aclose()
162
+ raise
@@ -0,0 +1,191 @@
1
+ """Generated from Smithy shape ``com.amazonaws.lambdamicrovms#UpdateMicrovmImage``."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from typing import Any
7
+ from urllib.parse import quote
8
+
9
+ import zapros
10
+ from typing_extensions import Never
11
+
12
+ import capo_lambda_microvms._auth._signers
13
+ import capo_lambda_microvms._auth._sigv4
14
+ import capo_lambda_microvms._protocol.eventstream
15
+ import capo_lambda_microvms.errors.access_denied_exception
16
+ import capo_lambda_microvms.errors.conflict_exception
17
+ import capo_lambda_microvms.errors.internal_server_exception
18
+ import capo_lambda_microvms.errors.resource_not_found_exception
19
+ import capo_lambda_microvms.errors.service_quota_exceeded_exception
20
+ import capo_lambda_microvms.errors.throttling_exception
21
+ import capo_lambda_microvms.errors.validation_exception
22
+ import capo_lambda_microvms.types.capability_list
23
+ import capo_lambda_microvms.types.code_artifact
24
+ import capo_lambda_microvms.types.cpu_configuration_list
25
+ import capo_lambda_microvms.types.environment_variable_map
26
+ import capo_lambda_microvms.types.hooks
27
+ import capo_lambda_microvms.types.logging
28
+ import capo_lambda_microvms.types.microvm_image_state
29
+ import capo_lambda_microvms.types.network_connector_list
30
+ import capo_lambda_microvms.types.resources_list
31
+ import capo_lambda_microvms.types.update_microvm_image_request
32
+ import capo_lambda_microvms.types.update_microvm_image_response
33
+ from capo_lambda_microvms._protocol.errors import parse_error_metadata_json
34
+ from capo_lambda_microvms._rule_engine._endpoint_rule_set import EndpointParams, resolve
35
+ from capo_lambda_microvms._services._pipeline import (
36
+ AsyncOperationOptions,
37
+ OperationOptions,
38
+ )
39
+ from capo_lambda_microvms.errors import UnknownServiceError
40
+
41
+
42
+ def handle_error(response: zapros.Response) -> Never:
43
+ data = json.loads(response.read())
44
+ code, message = parse_error_metadata_json(response, data)
45
+ match code:
46
+ case "AccessDeniedException":
47
+ raise capo_lambda_microvms.errors.access_denied_exception.AccessDeniedException.from_json(
48
+ data, message
49
+ )
50
+ case "InternalServerException":
51
+ raise capo_lambda_microvms.errors.internal_server_exception.InternalServerException.from_json(
52
+ data, message
53
+ )
54
+ case "ThrottlingException":
55
+ raise capo_lambda_microvms.errors.throttling_exception.ThrottlingException.from_json(
56
+ data, message
57
+ )
58
+ case "ValidationException":
59
+ raise capo_lambda_microvms.errors.validation_exception.ValidationException.from_json(
60
+ data, message
61
+ )
62
+ case "ConflictException":
63
+ raise capo_lambda_microvms.errors.conflict_exception.ConflictException.from_json(
64
+ data, message
65
+ )
66
+ case "ResourceNotFoundException":
67
+ raise capo_lambda_microvms.errors.resource_not_found_exception.ResourceNotFoundException.from_json(
68
+ data, message
69
+ )
70
+ case "ServiceQuotaExceededException":
71
+ raise capo_lambda_microvms.errors.service_quota_exceeded_exception.ServiceQuotaExceededException.from_json(
72
+ data, message
73
+ )
74
+ case _:
75
+ raise UnknownServiceError(code=code, message=message, response=response)
76
+
77
+
78
+ def handle_response(
79
+ response: zapros.Response,
80
+ ) -> (
81
+ capo_lambda_microvms.types.update_microvm_image_response.UpdateMicrovmImageResponse
82
+ ):
83
+ out: capo_lambda_microvms.types.update_microvm_image_response.UpdateMicrovmImageResponse = capo_lambda_microvms.types.update_microvm_image_response.deserialize_json(
84
+ json.loads(response.read())
85
+ )
86
+ return out
87
+
88
+
89
+ async def async_handle_response(
90
+ response: zapros.Response,
91
+ ) -> (
92
+ capo_lambda_microvms.types.update_microvm_image_response.UpdateMicrovmImageResponse
93
+ ):
94
+ out: capo_lambda_microvms.types.update_microvm_image_response.UpdateMicrovmImageResponse = capo_lambda_microvms.types.update_microvm_image_response.deserialize_json(
95
+ json.loads(await response.aread())
96
+ )
97
+ return out
98
+
99
+
100
+ def get_signer(
101
+ options: AsyncOperationOptions | OperationOptions,
102
+ auth_schemes: list[dict[str, Any]] | None = None,
103
+ ) -> capo_lambda_microvms._auth._signers.Signer | None:
104
+ name_to_schema = {s["name"]: s for s in (auth_schemes or [])} # noqa: F841
105
+ if (
106
+ options.credentials_provider is not None
107
+ and name_to_schema
108
+ and not name_to_schema.keys() & {"sigv4", "sigv4-s3express"}
109
+ ):
110
+ raise RuntimeError(
111
+ "Endpoint requires an unsupported auth scheme: " + ", ".join(name_to_schema)
112
+ )
113
+ if options.credentials_provider is not None:
114
+ endpoint_scheme = name_to_schema.get("sigv4") or name_to_schema.get(
115
+ "sigv4-s3express"
116
+ )
117
+ if endpoint_scheme is not None or not name_to_schema:
118
+ sigv4_config = capo_lambda_microvms._auth._sigv4.build_sigv4_auth_scheme(
119
+ "lambda", options.region, endpoint_scheme
120
+ )
121
+ if sigv4_config is not None:
122
+ return capo_lambda_microvms._auth._signers.SigV4Signer(
123
+ options.credentials_provider, auth_scheme=sigv4_config
124
+ )
125
+ raise RuntimeError("Auth was not resolved")
126
+
127
+
128
+ def build_request(
129
+ options: OperationOptions | AsyncOperationOptions,
130
+ input_: capo_lambda_microvms.types.update_microvm_image_request.UpdateMicrovmImageRequest,
131
+ ) -> zapros.Request:
132
+ endpoint = resolve(
133
+ EndpointParams(
134
+ Region=options.region,
135
+ UseDualStack=options.use_dual_stack,
136
+ UseFIPS=options.use_fips,
137
+ Endpoint=options.endpoint,
138
+ )
139
+ ) # noqa: F841
140
+ url = endpoint.url.rstrip("/") + "/2025-09-09/microvm-images/{imageIdentifier}"
141
+ url = url.replace("{imageIdentifier}", quote(input_["image_identifier"], safe=""))
142
+ params: list[tuple[str, str]] = []
143
+ headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
144
+ body: bytes | None = json.dumps(
145
+ capo_lambda_microvms.types.update_microvm_image_request.serialize_json(input_),
146
+ allow_nan=False,
147
+ ).encode()
148
+ headers["content-type"] = "application/json"
149
+ signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
150
+ normalized_url = zapros.URL(url)
151
+ for k, v in params:
152
+ normalized_url.search_params.append(k, v)
153
+ return zapros.Request(
154
+ normalized_url, "PUT", headers=headers, body=body, context={"signer": signer}
155
+ )
156
+
157
+
158
+ def update_microvm_image(
159
+ options: OperationOptions,
160
+ input_: capo_lambda_microvms.types.update_microvm_image_request.UpdateMicrovmImageRequest,
161
+ ) -> tuple[
162
+ capo_lambda_microvms.types.update_microvm_image_response.UpdateMicrovmImageResponse,
163
+ zapros.Response,
164
+ ]:
165
+ response = options.client.handler.handle(build_request(options, input_))
166
+ try:
167
+ if response.status >= 300:
168
+ response.read()
169
+ handle_error(response)
170
+ return handle_response(response), response
171
+ except BaseException:
172
+ response.close()
173
+ raise
174
+
175
+
176
+ async def async_update_microvm_image(
177
+ options: AsyncOperationOptions,
178
+ input_: capo_lambda_microvms.types.update_microvm_image_request.UpdateMicrovmImageRequest,
179
+ ) -> tuple[
180
+ capo_lambda_microvms.types.update_microvm_image_response.UpdateMicrovmImageResponse,
181
+ zapros.Response,
182
+ ]:
183
+ response = await options.client.handler.ahandle(build_request(options, input_))
184
+ try:
185
+ if response.status >= 300:
186
+ await response.aread()
187
+ handle_error(response)
188
+ return await async_handle_response(response), response
189
+ except BaseException:
190
+ await response.aclose()
191
+ raise
@@ -0,0 +1,190 @@
1
+ """Generated from Smithy shape ``com.amazonaws.lambdamicrovms#UpdateMicrovmImageVersion``."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from typing import Any
7
+ from urllib.parse import quote
8
+
9
+ import zapros
10
+ from typing_extensions import Never
11
+
12
+ import capo_lambda_microvms._auth._signers
13
+ import capo_lambda_microvms._auth._sigv4
14
+ import capo_lambda_microvms._protocol.eventstream
15
+ import capo_lambda_microvms.errors.access_denied_exception
16
+ import capo_lambda_microvms.errors.conflict_exception
17
+ import capo_lambda_microvms.errors.internal_server_exception
18
+ import capo_lambda_microvms.errors.resource_not_found_exception
19
+ import capo_lambda_microvms.errors.throttling_exception
20
+ import capo_lambda_microvms.errors.validation_exception
21
+ import capo_lambda_microvms.types.capability_list
22
+ import capo_lambda_microvms.types.code_artifact
23
+ import capo_lambda_microvms.types.cpu_configuration_list
24
+ import capo_lambda_microvms.types.environment_variable_map
25
+ import capo_lambda_microvms.types.hooks
26
+ import capo_lambda_microvms.types.logging
27
+ import capo_lambda_microvms.types.microvm_image_version_state
28
+ import capo_lambda_microvms.types.microvm_image_version_status
29
+ import capo_lambda_microvms.types.network_connector_list
30
+ import capo_lambda_microvms.types.resources_list
31
+ import capo_lambda_microvms.types.tags
32
+ import capo_lambda_microvms.types.update_microvm_image_version_request
33
+ import capo_lambda_microvms.types.update_microvm_image_version_response
34
+ from capo_lambda_microvms._protocol.errors import parse_error_metadata_json
35
+ from capo_lambda_microvms._rule_engine._endpoint_rule_set import EndpointParams, resolve
36
+ from capo_lambda_microvms._services._pipeline import (
37
+ AsyncOperationOptions,
38
+ OperationOptions,
39
+ )
40
+ from capo_lambda_microvms.errors import UnknownServiceError
41
+
42
+
43
+ def handle_error(response: zapros.Response) -> Never:
44
+ data = json.loads(response.read())
45
+ code, message = parse_error_metadata_json(response, data)
46
+ match code:
47
+ case "AccessDeniedException":
48
+ raise capo_lambda_microvms.errors.access_denied_exception.AccessDeniedException.from_json(
49
+ data, message
50
+ )
51
+ case "InternalServerException":
52
+ raise capo_lambda_microvms.errors.internal_server_exception.InternalServerException.from_json(
53
+ data, message
54
+ )
55
+ case "ThrottlingException":
56
+ raise capo_lambda_microvms.errors.throttling_exception.ThrottlingException.from_json(
57
+ data, message
58
+ )
59
+ case "ValidationException":
60
+ raise capo_lambda_microvms.errors.validation_exception.ValidationException.from_json(
61
+ data, message
62
+ )
63
+ case "ConflictException":
64
+ raise capo_lambda_microvms.errors.conflict_exception.ConflictException.from_json(
65
+ data, message
66
+ )
67
+ case "ResourceNotFoundException":
68
+ raise capo_lambda_microvms.errors.resource_not_found_exception.ResourceNotFoundException.from_json(
69
+ data, message
70
+ )
71
+ case _:
72
+ raise UnknownServiceError(code=code, message=message, response=response)
73
+
74
+
75
+ def handle_response(
76
+ response: zapros.Response,
77
+ ) -> capo_lambda_microvms.types.update_microvm_image_version_response.UpdateMicrovmImageVersionResponse:
78
+ out: capo_lambda_microvms.types.update_microvm_image_version_response.UpdateMicrovmImageVersionResponse = capo_lambda_microvms.types.update_microvm_image_version_response.deserialize_json(
79
+ json.loads(response.read())
80
+ )
81
+ return out
82
+
83
+
84
+ async def async_handle_response(
85
+ response: zapros.Response,
86
+ ) -> capo_lambda_microvms.types.update_microvm_image_version_response.UpdateMicrovmImageVersionResponse:
87
+ out: capo_lambda_microvms.types.update_microvm_image_version_response.UpdateMicrovmImageVersionResponse = capo_lambda_microvms.types.update_microvm_image_version_response.deserialize_json(
88
+ json.loads(await response.aread())
89
+ )
90
+ return out
91
+
92
+
93
+ def get_signer(
94
+ options: AsyncOperationOptions | OperationOptions,
95
+ auth_schemes: list[dict[str, Any]] | None = None,
96
+ ) -> capo_lambda_microvms._auth._signers.Signer | None:
97
+ name_to_schema = {s["name"]: s for s in (auth_schemes or [])} # noqa: F841
98
+ if (
99
+ options.credentials_provider is not None
100
+ and name_to_schema
101
+ and not name_to_schema.keys() & {"sigv4", "sigv4-s3express"}
102
+ ):
103
+ raise RuntimeError(
104
+ "Endpoint requires an unsupported auth scheme: " + ", ".join(name_to_schema)
105
+ )
106
+ if options.credentials_provider is not None:
107
+ endpoint_scheme = name_to_schema.get("sigv4") or name_to_schema.get(
108
+ "sigv4-s3express"
109
+ )
110
+ if endpoint_scheme is not None or not name_to_schema:
111
+ sigv4_config = capo_lambda_microvms._auth._sigv4.build_sigv4_auth_scheme(
112
+ "lambda", options.region, endpoint_scheme
113
+ )
114
+ if sigv4_config is not None:
115
+ return capo_lambda_microvms._auth._signers.SigV4Signer(
116
+ options.credentials_provider, auth_scheme=sigv4_config
117
+ )
118
+ raise RuntimeError("Auth was not resolved")
119
+
120
+
121
+ def build_request(
122
+ options: OperationOptions | AsyncOperationOptions,
123
+ input_: capo_lambda_microvms.types.update_microvm_image_version_request.UpdateMicrovmImageVersionRequest,
124
+ ) -> zapros.Request:
125
+ endpoint = resolve(
126
+ EndpointParams(
127
+ Region=options.region,
128
+ UseDualStack=options.use_dual_stack,
129
+ UseFIPS=options.use_fips,
130
+ Endpoint=options.endpoint,
131
+ )
132
+ ) # noqa: F841
133
+ url = (
134
+ endpoint.url.rstrip("/")
135
+ + "/2025-09-09/microvm-images/{imageIdentifier}/versions/{imageVersion}"
136
+ )
137
+ url = url.replace("{imageIdentifier}", quote(input_["image_identifier"], safe=""))
138
+ url = url.replace("{imageVersion}", quote(input_["image_version"], safe=""))
139
+ params: list[tuple[str, str]] = []
140
+ headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
141
+ body: bytes | None = json.dumps(
142
+ capo_lambda_microvms.types.update_microvm_image_version_request.serialize_json(
143
+ input_
144
+ ),
145
+ allow_nan=False,
146
+ ).encode()
147
+ headers["content-type"] = "application/json"
148
+ signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
149
+ normalized_url = zapros.URL(url)
150
+ for k, v in params:
151
+ normalized_url.search_params.append(k, v)
152
+ return zapros.Request(
153
+ normalized_url, "PATCH", headers=headers, body=body, context={"signer": signer}
154
+ )
155
+
156
+
157
+ def update_microvm_image_version(
158
+ options: OperationOptions,
159
+ input_: capo_lambda_microvms.types.update_microvm_image_version_request.UpdateMicrovmImageVersionRequest,
160
+ ) -> tuple[
161
+ capo_lambda_microvms.types.update_microvm_image_version_response.UpdateMicrovmImageVersionResponse,
162
+ zapros.Response,
163
+ ]:
164
+ response = options.client.handler.handle(build_request(options, input_))
165
+ try:
166
+ if response.status >= 300:
167
+ response.read()
168
+ handle_error(response)
169
+ return handle_response(response), response
170
+ except BaseException:
171
+ response.close()
172
+ raise
173
+
174
+
175
+ async def async_update_microvm_image_version(
176
+ options: AsyncOperationOptions,
177
+ input_: capo_lambda_microvms.types.update_microvm_image_version_request.UpdateMicrovmImageVersionRequest,
178
+ ) -> tuple[
179
+ capo_lambda_microvms.types.update_microvm_image_version_response.UpdateMicrovmImageVersionResponse,
180
+ zapros.Response,
181
+ ]:
182
+ response = await options.client.handler.ahandle(build_request(options, input_))
183
+ try:
184
+ if response.status >= 300:
185
+ await response.aread()
186
+ handle_error(response)
187
+ return await async_handle_response(response), response
188
+ except BaseException:
189
+ await response.aclose()
190
+ raise
@@ -0,0 +1,21 @@
1
+ """Runtime helpers for generated paginated ``iter_*`` operation methods."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+
8
+ def resolve_path(obj: Any, path: tuple[str, ...]) -> Any:
9
+ """Walk ``path`` segments on a nested ``dict`` (TypedDict at runtime).
10
+
11
+ Returns ``None`` as soon as any intermediate value is missing or non-dict —
12
+ the generated iter loop uses a falsy token as the terminate signal, so this
13
+ short-circuit gives the same semantics for dotted paths as for top-level ones.
14
+ """
15
+ for key in path:
16
+ if not isinstance(obj, dict):
17
+ return None
18
+ obj = obj.get(key)
19
+ if obj is None:
20
+ return None
21
+ return obj
@@ -0,0 +1 @@
1
+ """Protocol runtime modules. Hand-written; not generated."""
@@ -0,0 +1,93 @@
1
+ """Shared service-error runtime.
2
+
3
+ Hand-written, not regenerated. Helpers for extracting error metadata
4
+ from HTTP error responses.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from typing import TYPE_CHECKING
10
+
11
+ from zapros import Response
12
+
13
+ from .xml import fromstring
14
+
15
+ if TYPE_CHECKING:
16
+ from xml.etree.ElementTree import Element
17
+
18
+
19
+ def find_error_element(root: Element) -> Element:
20
+ """Return the element holding the error structure's members.
21
+
22
+ Handles the three XML error envelopes: a bare ``<Error>`` root
23
+ (restXml with ``noErrorWrapping``), an ``<ErrorResponse><Error>``
24
+ wrapper (restXml/awsQuery), and the ec2Query
25
+ ``<Response><Errors><Error>`` envelope. Falls back to ``root``
26
+ when no ``<Error>`` element is found.
27
+ """
28
+ if root.tag.endswith("Error"):
29
+ return root
30
+ for path in ("Error", "Errors/Error"):
31
+ err = root.find(path)
32
+ if err is not None:
33
+ return err
34
+ return root
35
+
36
+
37
+ def parse_error_metadata(root: Element) -> tuple[str | None, str | None]:
38
+ """Return ``(code, message)`` from an XML error envelope.
39
+
40
+ Accepts any envelope understood by :func:`find_error_element`.
41
+ Missing children yield ``None``.
42
+ """
43
+ err = find_error_element(root)
44
+ code_el = err.find("Code")
45
+ msg_el = err.find("Message")
46
+ code = code_el.text if code_el is not None else None
47
+ message = msg_el.text if msg_el is not None else None
48
+ return code, message
49
+
50
+
51
+ def parse_error_metadata_json(
52
+ response: Response, data: dict
53
+ ) -> tuple[str | None, str | None]:
54
+ """Return ``(code, message)`` from a restJson1 error response.
55
+
56
+ Code precedence: the ``X-Amzn-Errortype`` response header, then the
57
+ ``__type`` body field, then ``code``. The raw value is normalized by
58
+ dropping a trailing ``:uri`` suffix first, then a ``prefix#``
59
+ namespace — in that order, so a ``#`` inside the uri suffix cannot
60
+ hijack the code. Message comes from ``message`` or ``Message``.
61
+ Missing values yield ``None``.
62
+ """
63
+ code = (
64
+ response.headers.get("X-Amzn-Errortype")
65
+ or data.get("__type")
66
+ or data.get("code")
67
+ )
68
+ if code is not None:
69
+ code = code.split(":", 1)[0].rsplit("#", 1)[-1]
70
+ message = data.get("message") or data.get("Message")
71
+ return code, message
72
+
73
+
74
+ def is_xml_error_body(body: bytes) -> bool:
75
+ """Whether a 2xx response body is really an XML error document.
76
+
77
+ S3 answers CopyObject, UploadPartCopy and CompleteMultipartUpload
78
+ with ``200 OK`` before the operation finishes; a failure after that
79
+ point is reported as an ``<Error>`` body (or an empty body) on the
80
+ 200 response. Official SDKs check the body for exactly these
81
+ operations.
82
+ """
83
+ if not body:
84
+ return True
85
+ return fromstring(body).tag == "Error"
86
+
87
+
88
+ __all__ = [
89
+ "find_error_element",
90
+ "is_xml_error_body",
91
+ "parse_error_metadata",
92
+ "parse_error_metadata_json",
93
+ ]