localstack-core 4.6.1.dev74__py3-none-any.whl → 4.10.1.dev7__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 localstack-core might be problematic. Click here for more details.

Files changed (672) hide show
  1. localstack/aws/api/apigateway/__init__.py +87 -110
  2. localstack/aws/api/cloudformation/__init__.py +18 -4
  3. localstack/aws/api/cloudwatch/__init__.py +41 -1
  4. localstack/aws/api/config/__init__.py +4 -0
  5. localstack/aws/api/core.py +8 -5
  6. localstack/aws/api/dynamodb/__init__.py +30 -0
  7. localstack/aws/api/ec2/__init__.py +1524 -64
  8. localstack/aws/api/events/__init__.py +12 -16
  9. localstack/aws/api/iam/__init__.py +7 -0
  10. localstack/aws/api/kinesis/__init__.py +19 -0
  11. localstack/aws/api/kms/__init__.py +6 -0
  12. localstack/aws/api/lambda_/__init__.py +13 -0
  13. localstack/aws/api/logs/__init__.py +20 -8
  14. localstack/aws/api/opensearch/__init__.py +16 -0
  15. localstack/aws/api/pipes/__init__.py +24 -32
  16. localstack/aws/api/redshift/__init__.py +9 -3
  17. localstack/aws/api/route53/__init__.py +5 -0
  18. localstack/aws/api/s3/__init__.py +12 -0
  19. localstack/aws/api/s3control/__init__.py +56 -0
  20. localstack/aws/api/scheduler/__init__.py +14 -16
  21. localstack/aws/api/ssm/__init__.py +2 -0
  22. localstack/aws/api/stepfunctions/__init__.py +88 -114
  23. localstack/aws/api/support/__init__.py +8 -9
  24. localstack/aws/api/transcribe/__init__.py +17 -0
  25. localstack/aws/chain.py +2 -2
  26. localstack/aws/client.py +14 -11
  27. localstack/aws/connect.py +42 -41
  28. localstack/aws/forwarder.py +57 -9
  29. localstack/aws/gateway.py +1 -3
  30. localstack/aws/handlers/analytics.py +2 -3
  31. localstack/aws/handlers/cors.py +4 -5
  32. localstack/aws/handlers/internal_requests.py +6 -1
  33. localstack/aws/handlers/logging.py +13 -4
  34. localstack/aws/handlers/metric_handler.py +44 -5
  35. localstack/aws/handlers/service.py +48 -28
  36. localstack/aws/mocking.py +18 -27
  37. localstack/aws/patches.py +2 -2
  38. localstack/aws/protocol/op_router.py +11 -10
  39. localstack/aws/protocol/parser.py +475 -49
  40. localstack/aws/protocol/serializer.py +723 -106
  41. localstack/aws/protocol/service_router.py +133 -33
  42. localstack/aws/protocol/validate.py +6 -6
  43. localstack/aws/scaffold.py +9 -10
  44. localstack/aws/serving/edge.py +5 -6
  45. localstack/aws/serving/hypercorn.py +2 -2
  46. localstack/aws/serving/twisted.py +1 -2
  47. localstack/aws/serving/werkzeug.py +2 -2
  48. localstack/aws/skeleton.py +12 -11
  49. localstack/aws/spec-patches.json +58 -0
  50. localstack/aws/spec.py +66 -46
  51. localstack/cli/exceptions.py +1 -1
  52. localstack/cli/localstack.py +11 -11
  53. localstack/cli/lpm.py +4 -5
  54. localstack/cli/plugins.py +1 -1
  55. localstack/cli/profiles.py +1 -2
  56. localstack/config.py +40 -31
  57. localstack/constants.py +4 -29
  58. localstack/deprecations.py +5 -5
  59. localstack/dev/kubernetes/__main__.py +85 -5
  60. localstack/dev/run/__main__.py +5 -5
  61. localstack/dev/run/configurators.py +1 -4
  62. localstack/dev/run/paths.py +6 -6
  63. localstack/dns/models.py +2 -1
  64. localstack/dns/plugins.py +5 -1
  65. localstack/dns/server.py +16 -6
  66. localstack/http/dispatcher.py +1 -2
  67. localstack/http/response.py +2 -2
  68. localstack/http/router.py +1 -1
  69. localstack/http/trace.py +2 -1
  70. localstack/logging/format.py +6 -6
  71. localstack/packages/api.py +13 -12
  72. localstack/packages/core.py +4 -4
  73. localstack/packages/debugpy.py +1 -3
  74. localstack/packages/ffmpeg.py +1 -2
  75. localstack/packages/java.py +38 -12
  76. localstack/packages/plugins.py +0 -8
  77. localstack/runtime/analytics.py +3 -0
  78. localstack/runtime/hooks.py +1 -1
  79. localstack/runtime/init.py +8 -9
  80. localstack/runtime/main.py +5 -5
  81. localstack/runtime/patches.py +2 -2
  82. localstack/runtime/shutdown.py +2 -1
  83. localstack/services/apigateway/exporter.py +1 -2
  84. localstack/services/apigateway/helpers.py +7 -10
  85. localstack/services/apigateway/legacy/context.py +21 -21
  86. localstack/services/apigateway/legacy/helpers.py +27 -28
  87. localstack/services/apigateway/legacy/integration.py +11 -10
  88. localstack/services/apigateway/legacy/invocations.py +6 -5
  89. localstack/services/apigateway/legacy/provider.py +148 -68
  90. localstack/services/apigateway/legacy/router_asf.py +2 -2
  91. localstack/services/apigateway/legacy/templates.py +6 -6
  92. localstack/services/apigateway/models.py +16 -16
  93. localstack/services/apigateway/next_gen/execute_api/api.py +2 -2
  94. localstack/services/apigateway/next_gen/execute_api/context.py +25 -25
  95. localstack/services/apigateway/next_gen/execute_api/handlers/api_key_validation.py +2 -5
  96. localstack/services/apigateway/next_gen/execute_api/handlers/method_request.py +7 -2
  97. localstack/services/apigateway/next_gen/execute_api/handlers/parse.py +1 -2
  98. localstack/services/apigateway/next_gen/execute_api/handlers/resource_router.py +2 -3
  99. localstack/services/apigateway/next_gen/execute_api/header_utils.py +1 -1
  100. localstack/services/apigateway/next_gen/execute_api/helpers.py +2 -2
  101. localstack/services/apigateway/next_gen/execute_api/integrations/aws.py +9 -6
  102. localstack/services/apigateway/next_gen/execute_api/integrations/http.py +12 -12
  103. localstack/services/apigateway/next_gen/execute_api/router.py +31 -0
  104. localstack/services/apigateway/next_gen/execute_api/template_mapping.py +2 -2
  105. localstack/services/apigateway/next_gen/execute_api/test_invoke.py +114 -9
  106. localstack/services/apigateway/next_gen/execute_api/variables.py +63 -63
  107. localstack/services/apigateway/next_gen/provider.py +5 -0
  108. localstack/services/apigateway/resource_providers/aws_apigateway_account.py +3 -3
  109. localstack/services/apigateway/resource_providers/aws_apigateway_account_plugin.py +1 -3
  110. localstack/services/apigateway/resource_providers/aws_apigateway_apikey.py +14 -14
  111. localstack/services/apigateway/resource_providers/aws_apigateway_apikey_plugin.py +1 -3
  112. localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping.py +5 -5
  113. localstack/services/apigateway/resource_providers/aws_apigateway_basepathmapping_plugin.py +1 -3
  114. localstack/services/apigateway/resource_providers/aws_apigateway_deployment.py +46 -46
  115. localstack/services/apigateway/resource_providers/aws_apigateway_deployment_plugin.py +1 -3
  116. localstack/services/apigateway/resource_providers/aws_apigateway_domainname.py +18 -18
  117. localstack/services/apigateway/resource_providers/aws_apigateway_domainname_plugin.py +1 -3
  118. localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse.py +7 -7
  119. localstack/services/apigateway/resource_providers/aws_apigateway_gatewayresponse_plugin.py +1 -3
  120. localstack/services/apigateway/resource_providers/aws_apigateway_method.py +36 -36
  121. localstack/services/apigateway/resource_providers/aws_apigateway_method_plugin.py +1 -3
  122. localstack/services/apigateway/resource_providers/aws_apigateway_model.py +6 -6
  123. localstack/services/apigateway/resource_providers/aws_apigateway_model_plugin.py +1 -3
  124. localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator.py +6 -6
  125. localstack/services/apigateway/resource_providers/aws_apigateway_requestvalidator_plugin.py +1 -3
  126. localstack/services/apigateway/resource_providers/aws_apigateway_resource.py +6 -6
  127. localstack/services/apigateway/resource_providers/aws_apigateway_resource_plugin.py +1 -3
  128. localstack/services/apigateway/resource_providers/aws_apigateway_restapi.py +26 -26
  129. localstack/services/apigateway/resource_providers/aws_apigateway_restapi_plugin.py +1 -3
  130. localstack/services/apigateway/resource_providers/aws_apigateway_stage.py +33 -33
  131. localstack/services/apigateway/resource_providers/aws_apigateway_stage_plugin.py +1 -3
  132. localstack/services/apigateway/resource_providers/aws_apigateway_usageplan.py +18 -18
  133. localstack/services/apigateway/resource_providers/aws_apigateway_usageplan_plugin.py +1 -3
  134. localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey.py +5 -5
  135. localstack/services/apigateway/resource_providers/aws_apigateway_usageplankey_plugin.py +1 -3
  136. localstack/services/cdk/resource_providers/cdk_metadata.py +4 -3
  137. localstack/services/cdk/resource_providers/cdk_metadata_plugin.py +1 -3
  138. localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate.py +14 -14
  139. localstack/services/certificatemanager/resource_providers/aws_certificatemanager_certificate_plugin.py +1 -3
  140. localstack/services/cloudformation/api_utils.py +4 -8
  141. localstack/services/cloudformation/cfn_utils.py +2 -2
  142. localstack/services/cloudformation/deployment_utils.py +14 -12
  143. localstack/services/cloudformation/engine/changes.py +3 -3
  144. localstack/services/cloudformation/engine/entities.py +27 -17
  145. localstack/services/cloudformation/engine/parameters.py +4 -4
  146. localstack/services/cloudformation/engine/template_deployer.py +15 -14
  147. localstack/services/cloudformation/engine/template_utils.py +34 -12
  148. localstack/services/cloudformation/engine/transformers.py +11 -8
  149. localstack/services/cloudformation/engine/types.py +5 -4
  150. localstack/services/cloudformation/engine/v2/change_set_model.py +336 -39
  151. localstack/services/cloudformation/engine/v2/change_set_model_describer.py +96 -17
  152. localstack/services/cloudformation/engine/v2/change_set_model_executor.py +286 -139
  153. localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +315 -146
  154. localstack/services/cloudformation/engine/v2/change_set_model_transform.py +380 -105
  155. localstack/services/cloudformation/engine/v2/change_set_model_validator.py +161 -31
  156. localstack/services/cloudformation/engine/v2/change_set_model_visitor.py +6 -0
  157. localstack/services/cloudformation/engine/v2/resolving.py +102 -0
  158. localstack/services/cloudformation/engine/yaml_parser.py +9 -2
  159. localstack/services/cloudformation/provider.py +8 -6
  160. localstack/services/cloudformation/provider_utils.py +34 -4
  161. localstack/services/cloudformation/resource_provider.py +31 -21
  162. localstack/services/cloudformation/resource_providers/aws_cloudformation_macro.py +7 -7
  163. localstack/services/cloudformation/resource_providers/aws_cloudformation_macro_plugin.py +1 -3
  164. localstack/services/cloudformation/resource_providers/aws_cloudformation_stack.py +9 -9
  165. localstack/services/cloudformation/resource_providers/aws_cloudformation_stack_plugin.py +1 -3
  166. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition.py +6 -6
  167. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitcondition_plugin.py +1 -3
  168. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle.py +2 -2
  169. localstack/services/cloudformation/resource_providers/aws_cloudformation_waitconditionhandle_plugin.py +1 -3
  170. localstack/services/cloudformation/resources.py +24149 -0
  171. localstack/services/cloudformation/scaffolding/__main__.py +13 -12
  172. localstack/services/cloudformation/scaffolding/propgen.py +2 -2
  173. localstack/services/cloudformation/service_models.py +2 -2
  174. localstack/services/cloudformation/stores.py +31 -22
  175. localstack/services/cloudformation/v2/entities.py +65 -92
  176. localstack/services/cloudformation/v2/provider.py +553 -128
  177. localstack/services/cloudformation/v2/types.py +38 -0
  178. localstack/services/cloudformation/v2/utils.py +4 -1
  179. localstack/services/cloudwatch/alarm_scheduler.py +11 -8
  180. localstack/services/cloudwatch/cloudwatch_database_helper.py +4 -5
  181. localstack/services/cloudwatch/models.py +5 -7
  182. localstack/services/cloudwatch/provider.py +30 -25
  183. localstack/services/cloudwatch/provider_v2.py +27 -32
  184. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm.py +40 -40
  185. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_alarm_plugin.py +1 -3
  186. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm.py +12 -12
  187. localstack/services/cloudwatch/resource_providers/aws_cloudwatch_compositealarm_plugin.py +1 -3
  188. localstack/services/dynamodb/packages.py +3 -3
  189. localstack/services/dynamodb/provider.py +49 -8
  190. localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable.py +63 -63
  191. localstack/services/dynamodb/resource_providers/aws_dynamodb_globaltable_plugin.py +1 -3
  192. localstack/services/dynamodb/resource_providers/aws_dynamodb_table.py +57 -57
  193. localstack/services/dynamodb/resource_providers/aws_dynamodb_table_plugin.py +1 -3
  194. localstack/services/dynamodb/server.py +2 -2
  195. localstack/services/dynamodb/utils.py +13 -14
  196. localstack/services/dynamodb/v2/provider.py +48 -7
  197. localstack/services/dynamodbstreams/dynamodbstreams_api.py +2 -2
  198. localstack/services/dynamodbstreams/models.py +1 -3
  199. localstack/services/ec2/patches.py +26 -5
  200. localstack/services/ec2/provider.py +3 -3
  201. localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions.py +10 -10
  202. localstack/services/ec2/resource_providers/aws_ec2_dhcpoptions_plugin.py +1 -3
  203. localstack/services/ec2/resource_providers/aws_ec2_instance.py +96 -96
  204. localstack/services/ec2/resource_providers/aws_ec2_instance_plugin.py +1 -3
  205. localstack/services/ec2/resource_providers/aws_ec2_internetgateway.py +5 -5
  206. localstack/services/ec2/resource_providers/aws_ec2_internetgateway_plugin.py +1 -3
  207. localstack/services/ec2/resource_providers/aws_ec2_keypair.py +10 -10
  208. localstack/services/ec2/resource_providers/aws_ec2_keypair_plugin.py +1 -3
  209. localstack/services/ec2/resource_providers/aws_ec2_natgateway.py +13 -13
  210. localstack/services/ec2/resource_providers/aws_ec2_natgateway_plugin.py +1 -3
  211. localstack/services/ec2/resource_providers/aws_ec2_networkacl.py +6 -6
  212. localstack/services/ec2/resource_providers/aws_ec2_networkacl_plugin.py +1 -3
  213. localstack/services/ec2/resource_providers/aws_ec2_prefixlist.py +14 -14
  214. localstack/services/ec2/resource_providers/aws_ec2_prefixlist_plugin.py +1 -3
  215. localstack/services/ec2/resource_providers/aws_ec2_route.py +15 -15
  216. localstack/services/ec2/resource_providers/aws_ec2_route_plugin.py +1 -3
  217. localstack/services/ec2/resource_providers/aws_ec2_routetable.py +6 -6
  218. localstack/services/ec2/resource_providers/aws_ec2_routetable_plugin.py +1 -3
  219. localstack/services/ec2/resource_providers/aws_ec2_securitygroup.py +29 -29
  220. localstack/services/ec2/resource_providers/aws_ec2_securitygroup_plugin.py +1 -3
  221. localstack/services/ec2/resource_providers/aws_ec2_subnet.py +19 -19
  222. localstack/services/ec2/resource_providers/aws_ec2_subnet_plugin.py +1 -3
  223. localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation.py +4 -4
  224. localstack/services/ec2/resource_providers/aws_ec2_subnetroutetableassociation_plugin.py +1 -3
  225. localstack/services/ec2/resource_providers/aws_ec2_transitgateway.py +16 -16
  226. localstack/services/ec2/resource_providers/aws_ec2_transitgateway_plugin.py +1 -3
  227. localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment.py +9 -9
  228. localstack/services/ec2/resource_providers/aws_ec2_transitgatewayattachment_plugin.py +1 -3
  229. localstack/services/ec2/resource_providers/aws_ec2_vpc.py +15 -15
  230. localstack/services/ec2/resource_providers/aws_ec2_vpc_plugin.py +1 -3
  231. localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint.py +29 -22
  232. localstack/services/ec2/resource_providers/aws_ec2_vpcendpoint_plugin.py +1 -3
  233. localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment.py +5 -5
  234. localstack/services/ec2/resource_providers/aws_ec2_vpcgatewayattachment_plugin.py +1 -3
  235. localstack/services/ecr/resource_providers/aws_ecr_repository.py +22 -19
  236. localstack/services/ecr/resource_providers/aws_ecr_repository_plugin.py +1 -3
  237. localstack/services/edge.py +6 -6
  238. localstack/services/es/provider.py +21 -21
  239. localstack/services/events/archive.py +2 -2
  240. localstack/services/events/connection.py +5 -5
  241. localstack/services/events/event_bus.py +9 -9
  242. localstack/services/events/event_rule_engine.py +31 -13
  243. localstack/services/events/models.py +29 -30
  244. localstack/services/events/provider.py +29 -26
  245. localstack/services/events/replay.py +3 -3
  246. localstack/services/events/resource_providers/aws_events_apidestination.py +8 -8
  247. localstack/services/events/resource_providers/aws_events_apidestination_plugin.py +1 -3
  248. localstack/services/events/resource_providers/aws_events_connection.py +27 -27
  249. localstack/services/events/resource_providers/aws_events_connection_plugin.py +1 -3
  250. localstack/services/events/resource_providers/aws_events_eventbus.py +9 -9
  251. localstack/services/events/resource_providers/aws_events_eventbus_plugin.py +1 -3
  252. localstack/services/events/resource_providers/aws_events_eventbuspolicy.py +11 -11
  253. localstack/services/events/resource_providers/aws_events_eventbuspolicy_plugin.py +1 -3
  254. localstack/services/events/resource_providers/aws_events_rule.py +82 -82
  255. localstack/services/events/resource_providers/aws_events_rule_plugin.py +1 -3
  256. localstack/services/events/rule.py +15 -15
  257. localstack/services/events/target.py +21 -13
  258. localstack/services/events/utils.py +7 -7
  259. localstack/services/events/v1/models.py +1 -3
  260. localstack/services/events/v1/provider.py +15 -15
  261. localstack/services/firehose/models.py +1 -3
  262. localstack/services/firehose/provider.py +25 -16
  263. localstack/services/iam/iam_patches.py +5 -6
  264. localstack/services/iam/provider.py +14 -119
  265. localstack/services/iam/resource_providers/aws_iam_accesskey.py +6 -6
  266. localstack/services/iam/resource_providers/aws_iam_accesskey_plugin.py +1 -3
  267. localstack/services/iam/resource_providers/aws_iam_group.py +9 -9
  268. localstack/services/iam/resource_providers/aws_iam_group_plugin.py +1 -3
  269. localstack/services/iam/resource_providers/aws_iam_instanceprofile.py +5 -5
  270. localstack/services/iam/resource_providers/aws_iam_instanceprofile_plugin.py +1 -3
  271. localstack/services/iam/resource_providers/aws_iam_managedpolicy.py +9 -9
  272. localstack/services/iam/resource_providers/aws_iam_managedpolicy_plugin.py +1 -3
  273. localstack/services/iam/resource_providers/aws_iam_policy.py +7 -7
  274. localstack/services/iam/resource_providers/aws_iam_policy_plugin.py +1 -3
  275. localstack/services/iam/resource_providers/aws_iam_role.py +16 -16
  276. localstack/services/iam/resource_providers/aws_iam_role_plugin.py +1 -3
  277. localstack/services/iam/resource_providers/aws_iam_servercertificate.py +10 -10
  278. localstack/services/iam/resource_providers/aws_iam_servercertificate_plugin.py +1 -3
  279. localstack/services/iam/resource_providers/aws_iam_servicelinkedrole.py +5 -5
  280. localstack/services/iam/resource_providers/aws_iam_servicelinkedrole_plugin.py +1 -3
  281. localstack/services/iam/resource_providers/aws_iam_user.py +17 -17
  282. localstack/services/iam/resource_providers/aws_iam_user_plugin.py +1 -3
  283. localstack/services/iam/resources/policy_simulator.py +133 -0
  284. localstack/services/kinesis/kinesis_mock_server.py +7 -8
  285. localstack/services/kinesis/models.py +17 -5
  286. localstack/services/kinesis/packages.py +3 -3
  287. localstack/services/kinesis/provider.py +86 -3
  288. localstack/services/kinesis/resource_providers/aws_kinesis_stream.py +13 -13
  289. localstack/services/kinesis/resource_providers/aws_kinesis_stream_plugin.py +1 -3
  290. localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer.py +7 -7
  291. localstack/services/kinesis/resource_providers/aws_kinesis_streamconsumer_plugin.py +1 -3
  292. localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream.py +191 -191
  293. localstack/services/kinesisfirehose/resource_providers/aws_kinesisfirehose_deliverystream_plugin.py +1 -3
  294. localstack/services/kms/models.py +21 -18
  295. localstack/services/kms/provider.py +17 -11
  296. localstack/services/kms/resource_providers/aws_kms_alias.py +3 -3
  297. localstack/services/kms/resource_providers/aws_kms_alias_plugin.py +1 -3
  298. localstack/services/kms/resource_providers/aws_kms_key.py +14 -14
  299. localstack/services/kms/resource_providers/aws_kms_key_plugin.py +1 -3
  300. localstack/services/kms/utils.py +4 -3
  301. localstack/services/lambda_/api_utils.py +19 -16
  302. localstack/services/lambda_/custom_endpoints.py +2 -2
  303. localstack/services/lambda_/event_source_mapping/esm_worker_factory.py +4 -7
  304. localstack/services/lambda_/event_source_mapping/pipe_utils.py +2 -2
  305. localstack/services/lambda_/event_source_mapping/pollers/stream_poller.py +1 -1
  306. localstack/services/lambda_/event_source_mapping/senders/sender_utils.py +2 -1
  307. localstack/services/lambda_/hooks.py +6 -1
  308. localstack/services/lambda_/invocation/assignment.py +1 -2
  309. localstack/services/lambda_/invocation/docker_runtime_executor.py +7 -11
  310. localstack/services/lambda_/invocation/event_manager.py +1 -1
  311. localstack/services/lambda_/invocation/execution_environment.py +4 -4
  312. localstack/services/lambda_/invocation/executor_endpoint.py +8 -11
  313. localstack/services/lambda_/invocation/internal_sqs_queue.py +6 -10
  314. localstack/services/lambda_/invocation/lambda_models.py +33 -30
  315. localstack/services/lambda_/invocation/lambda_service.py +12 -5
  316. localstack/services/lambda_/invocation/logs.py +2 -3
  317. localstack/services/lambda_/invocation/runtime_executor.py +3 -3
  318. localstack/services/lambda_/invocation/version_manager.py +31 -8
  319. localstack/services/lambda_/ldm.py +14 -0
  320. localstack/services/lambda_/packages.py +3 -4
  321. localstack/services/lambda_/provider.py +9 -26
  322. localstack/services/lambda_/provider_utils.py +1 -1
  323. localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig.py +8 -8
  324. localstack/services/lambda_/resource_providers/aws_lambda_codesigningconfig_plugin.py +1 -3
  325. localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig.py +11 -11
  326. localstack/services/lambda_/resource_providers/aws_lambda_eventinvokeconfig_plugin.py +1 -3
  327. localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping.py +39 -39
  328. localstack/services/lambda_/resource_providers/aws_lambda_eventsourcemapping_plugin.py +1 -3
  329. localstack/services/lambda_/resource_providers/aws_lambda_function.py +54 -54
  330. localstack/services/lambda_/resource_providers/aws_lambda_function_plugin.py +1 -3
  331. localstack/services/lambda_/resource_providers/aws_lambda_layerversion.py +11 -11
  332. localstack/services/lambda_/resource_providers/aws_lambda_layerversion_plugin.py +1 -3
  333. localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission.py +6 -6
  334. localstack/services/lambda_/resource_providers/aws_lambda_layerversionpermission_plugin.py +1 -3
  335. localstack/services/lambda_/resource_providers/aws_lambda_permission.py +10 -10
  336. localstack/services/lambda_/resource_providers/aws_lambda_permission_plugin.py +1 -3
  337. localstack/services/lambda_/resource_providers/aws_lambda_url.py +15 -15
  338. localstack/services/lambda_/resource_providers/aws_lambda_url_plugin.py +1 -3
  339. localstack/services/lambda_/resource_providers/aws_lambda_version.py +8 -8
  340. localstack/services/lambda_/resource_providers/aws_lambda_version_plugin.py +1 -3
  341. localstack/services/lambda_/resource_providers/lambda_alias.py +12 -12
  342. localstack/services/lambda_/resource_providers/lambda_alias_plugin.py +1 -3
  343. localstack/services/lambda_/runtimes.py +1 -3
  344. localstack/services/lambda_/urlrouter.py +14 -1
  345. localstack/services/logs/models.py +1 -3
  346. localstack/services/logs/provider.py +4 -4
  347. localstack/services/logs/resource_providers/aws_logs_loggroup.py +9 -9
  348. localstack/services/logs/resource_providers/aws_logs_loggroup_plugin.py +1 -3
  349. localstack/services/logs/resource_providers/aws_logs_logstream.py +4 -4
  350. localstack/services/logs/resource_providers/aws_logs_logstream_plugin.py +1 -3
  351. localstack/services/logs/resource_providers/aws_logs_subscriptionfilter.py +7 -7
  352. localstack/services/logs/resource_providers/aws_logs_subscriptionfilter_plugin.py +1 -3
  353. localstack/services/moto.py +5 -4
  354. localstack/services/opensearch/cluster.py +28 -20
  355. localstack/services/opensearch/cluster_manager.py +13 -14
  356. localstack/services/opensearch/models.py +1 -3
  357. localstack/services/opensearch/packages.py +27 -9
  358. localstack/services/opensearch/provider.py +15 -10
  359. localstack/services/opensearch/resource_providers/aws_elasticsearch_domain.py +61 -61
  360. localstack/services/opensearch/resource_providers/aws_elasticsearch_domain_plugin.py +1 -3
  361. localstack/services/opensearch/resource_providers/aws_opensearchservice_domain.py +89 -89
  362. localstack/services/opensearch/resource_providers/aws_opensearchservice_domain_plugin.py +1 -3
  363. localstack/services/opensearch/versions.py +57 -10
  364. localstack/services/plugins.py +37 -32
  365. localstack/services/providers.py +10 -2
  366. localstack/services/redshift/provider.py +0 -21
  367. localstack/services/redshift/resource_providers/aws_redshift_cluster.py +57 -57
  368. localstack/services/redshift/resource_providers/aws_redshift_cluster_plugin.py +1 -3
  369. localstack/services/resource_groups/resource_providers/aws_resourcegroups_group.py +21 -21
  370. localstack/services/resource_groups/resource_providers/aws_resourcegroups_group_plugin.py +1 -3
  371. localstack/services/route53/models.py +1 -3
  372. localstack/services/route53/provider.py +1 -2
  373. localstack/services/route53/resource_providers/aws_route53_healthcheck.py +6 -6
  374. localstack/services/route53/resource_providers/aws_route53_healthcheck_plugin.py +1 -3
  375. localstack/services/route53/resource_providers/aws_route53_recordset.py +27 -27
  376. localstack/services/route53/resource_providers/aws_route53_recordset_plugin.py +1 -3
  377. localstack/services/route53resolver/models.py +8 -10
  378. localstack/services/route53resolver/provider.py +12 -12
  379. localstack/services/s3/codec.py +2 -2
  380. localstack/services/s3/constants.py +5 -2
  381. localstack/services/s3/cors.py +8 -8
  382. localstack/services/s3/models.py +73 -73
  383. localstack/services/s3/notifications.py +74 -58
  384. localstack/services/s3/presigned_url.py +41 -59
  385. localstack/services/s3/provider.py +86 -29
  386. localstack/services/s3/resource_providers/aws_s3_bucket.py +180 -180
  387. localstack/services/s3/resource_providers/aws_s3_bucket_plugin.py +1 -3
  388. localstack/services/s3/resource_providers/aws_s3_bucketpolicy.py +4 -4
  389. localstack/services/s3/resource_providers/aws_s3_bucketpolicy_plugin.py +1 -3
  390. localstack/services/s3/storage/core.py +4 -3
  391. localstack/services/s3/storage/ephemeral.py +7 -6
  392. localstack/services/s3/utils.py +51 -31
  393. localstack/services/s3/validation.py +47 -33
  394. localstack/services/s3/website_hosting.py +9 -7
  395. localstack/services/scheduler/resource_providers/aws_scheduler_schedule.py +60 -60
  396. localstack/services/scheduler/resource_providers/aws_scheduler_schedule_plugin.py +1 -3
  397. localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup.py +9 -9
  398. localstack/services/scheduler/resource_providers/aws_scheduler_schedulegroup_plugin.py +1 -3
  399. localstack/services/secretsmanager/provider.py +10 -12
  400. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy.py +5 -5
  401. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_resourcepolicy_plugin.py +1 -3
  402. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule.py +21 -21
  403. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_rotationschedule_plugin.py +1 -3
  404. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret.py +23 -23
  405. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secret_plugin.py +1 -3
  406. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment.py +5 -5
  407. localstack/services/secretsmanager/resource_providers/aws_secretsmanager_secrettargetattachment_plugin.py +1 -3
  408. localstack/services/ses/models.py +8 -1
  409. localstack/services/ses/provider.py +128 -55
  410. localstack/services/ses/resource_providers/aws_ses_emailidentity.py +21 -21
  411. localstack/services/ses/resource_providers/aws_ses_emailidentity_plugin.py +1 -3
  412. localstack/services/sns/constants.py +7 -1
  413. localstack/services/sns/executor.py +9 -2
  414. localstack/services/sns/models.py +25 -25
  415. localstack/services/sns/provider.py +9 -7
  416. localstack/services/sns/publisher.py +37 -23
  417. localstack/services/sns/resource_providers/aws_sns_subscription.py +13 -13
  418. localstack/services/sns/resource_providers/aws_sns_subscription_plugin.py +1 -3
  419. localstack/services/sns/resource_providers/aws_sns_topic.py +16 -16
  420. localstack/services/sns/resource_providers/aws_sns_topic_plugin.py +1 -3
  421. localstack/services/sns/resource_providers/aws_sns_topicpolicy.py +4 -4
  422. localstack/services/sns/resource_providers/aws_sns_topicpolicy_plugin.py +1 -3
  423. localstack/services/sns/v2/models.py +167 -0
  424. localstack/services/sns/v2/provider.py +867 -0
  425. localstack/services/sns/v2/utils.py +130 -0
  426. localstack/services/sqs/constants.py +2 -2
  427. localstack/services/sqs/developer_api.py +205 -0
  428. localstack/services/sqs/models.py +71 -36
  429. localstack/services/sqs/provider.py +56 -332
  430. localstack/services/sqs/query_api.py +8 -5
  431. localstack/services/sqs/resource_providers/aws_sqs_queue.py +21 -21
  432. localstack/services/sqs/resource_providers/aws_sqs_queue_plugin.py +1 -3
  433. localstack/services/sqs/resource_providers/aws_sqs_queuepolicy.py +4 -4
  434. localstack/services/sqs/resource_providers/aws_sqs_queuepolicy_plugin.py +1 -3
  435. localstack/services/sqs/utils.py +123 -4
  436. localstack/services/ssm/provider.py +3 -4
  437. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow.py +15 -15
  438. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindow_plugin.py +1 -3
  439. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget.py +10 -10
  440. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtarget_plugin.py +1 -3
  441. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask.py +48 -48
  442. localstack/services/ssm/resource_providers/aws_ssm_maintenancewindowtask_plugin.py +1 -3
  443. localstack/services/ssm/resource_providers/aws_ssm_parameter.py +10 -10
  444. localstack/services/ssm/resource_providers/aws_ssm_parameter_plugin.py +1 -3
  445. localstack/services/ssm/resource_providers/aws_ssm_patchbaseline.py +29 -29
  446. localstack/services/ssm/resource_providers/aws_ssm_patchbaseline_plugin.py +1 -3
  447. localstack/services/stepfunctions/asl/antlt4utils/antlr4utils.py +3 -4
  448. localstack/services/stepfunctions/asl/component/common/assign/assign_decl.py +1 -1
  449. localstack/services/stepfunctions/asl/component/common/assign/assign_decl_binding.py +1 -1
  450. localstack/services/stepfunctions/asl/component/common/assign/assign_template_value_array.py +1 -1
  451. localstack/services/stepfunctions/asl/component/common/assign/assign_template_value_object.py +1 -1
  452. localstack/services/stepfunctions/asl/component/common/catch/catcher_decl.py +9 -9
  453. localstack/services/stepfunctions/asl/component/common/error_name/custom_error_name.py +2 -2
  454. localstack/services/stepfunctions/asl/component/common/error_name/error_name.py +4 -4
  455. localstack/services/stepfunctions/asl/component/common/error_name/failure_event.py +8 -8
  456. localstack/services/stepfunctions/asl/component/common/error_name/states_error_name_type.py +1 -1
  457. localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_binding.py +2 -2
  458. localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_value_array.py +1 -1
  459. localstack/services/stepfunctions/asl/component/common/jsonata/jsonata_template_value_object.py +1 -1
  460. localstack/services/stepfunctions/asl/component/common/path/input_path.py +4 -4
  461. localstack/services/stepfunctions/asl/component/common/path/output_path.py +4 -4
  462. localstack/services/stepfunctions/asl/component/common/path/result_path.py +3 -3
  463. localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadarr/payload_arr.py +1 -1
  464. localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadbinding/payload_binding.py +3 -3
  465. localstack/services/stepfunctions/asl/component/common/payload/payloadvalue/payloadtmpl/payload_tmpl.py +1 -1
  466. localstack/services/stepfunctions/asl/component/common/retry/retrier_decl.py +8 -8
  467. localstack/services/stepfunctions/asl/component/common/string/string_expression.py +3 -3
  468. localstack/services/stepfunctions/asl/component/common/timeouts/timeout.py +3 -3
  469. localstack/services/stepfunctions/asl/component/eval_component.py +2 -3
  470. localstack/services/stepfunctions/asl/component/intrinsic/argument/argument.py +4 -4
  471. localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/array/array_partition.py +1 -1
  472. localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/generic/string_format.py +1 -1
  473. localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/states_function_array.py +1 -1
  474. localstack/services/stepfunctions/asl/component/intrinsic/function/statesfunction/states_function_format.py +1 -1
  475. localstack/services/stepfunctions/asl/component/intrinsic/jsonata.py +3 -3
  476. localstack/services/stepfunctions/asl/component/intrinsic/member.py +1 -1
  477. localstack/services/stepfunctions/asl/component/program/program.py +9 -9
  478. localstack/services/stepfunctions/asl/component/program/states.py +1 -1
  479. localstack/services/stepfunctions/asl/component/state/state.py +10 -11
  480. localstack/services/stepfunctions/asl/component/state/state_choice/choice_rule.py +11 -11
  481. localstack/services/stepfunctions/asl/component/state/state_choice/comparison/comparison.py +5 -11
  482. localstack/services/stepfunctions/asl/component/state/state_choice/comparison/operator/implementations/is_operator.py +2 -2
  483. localstack/services/stepfunctions/asl/component/state/state_choice/state_choice.py +3 -5
  484. localstack/services/stepfunctions/asl/component/state/state_execution/execute_state.py +9 -9
  485. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/item_reader_decl.py +7 -7
  486. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/reader_config/reader_config_decl.py +5 -5
  487. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_eval_s3.py +2 -1
  488. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/item_reader/resource_eval/resource_output_transformer/resource_output_transformer_csv.py +2 -2
  489. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/distributed_iteration_component.py +8 -8
  490. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/inline_iteration_component.py +7 -7
  491. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/distributed_item_processor_worker.py +4 -4
  492. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/inline_item_processor_worker.py +5 -5
  493. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/itemprocessor/map_run_record.py +10 -10
  494. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_component.py +3 -3
  495. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_declaration.py +3 -3
  496. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iteration_worker.py +2 -2
  497. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/distributed_iterator_worker.py +3 -5
  498. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator.py +1 -2
  499. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/iterator/inline_iterator_worker.py +5 -5
  500. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/iteration/job.py +9 -9
  501. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/result_writer/resource_eval/resource_eval_s3.py +2 -1
  502. localstack/services/stepfunctions/asl/component/state/state_execution/state_map/state_map.py +12 -13
  503. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branch_worker.py +3 -3
  504. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/branches_decl.py +7 -7
  505. localstack/services/stepfunctions/asl/component/state/state_execution/state_parallel/state_parallel.py +2 -3
  506. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/lambda_eval_utils.py +7 -7
  507. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/resource.py +3 -3
  508. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service.py +10 -10
  509. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_api_gateway.py +18 -18
  510. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_aws_sdk.py +1 -1
  511. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_batch.py +8 -7
  512. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_callback.py +18 -17
  513. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_dynamodb.py +2 -2
  514. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_ecs.py +5 -4
  515. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_events.py +4 -4
  516. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_glue.py +7 -6
  517. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_lambda.py +4 -4
  518. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sfn.py +9 -8
  519. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sns.py +2 -2
  520. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/service/state_task_service_sqs.py +4 -4
  521. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task.py +5 -5
  522. localstack/services/stepfunctions/asl/component/state/state_execution/state_task/state_task_lambda.py +2 -2
  523. localstack/services/stepfunctions/asl/component/state/state_fail/state_fail.py +3 -5
  524. localstack/services/stepfunctions/asl/component/state/state_pass/state_pass.py +5 -7
  525. localstack/services/stepfunctions/asl/component/state/state_succeed/state_succeed.py +1 -1
  526. localstack/services/stepfunctions/asl/component/state/state_wait/state_wait.py +1 -1
  527. localstack/services/stepfunctions/asl/component/state/state_wait/wait_function/timestamp.py +2 -2
  528. localstack/services/stepfunctions/asl/eval/callback/callback.py +18 -18
  529. localstack/services/stepfunctions/asl/eval/environment.py +22 -24
  530. localstack/services/stepfunctions/asl/eval/evaluation_details.py +3 -5
  531. localstack/services/stepfunctions/asl/eval/event/event_manager.py +10 -10
  532. localstack/services/stepfunctions/asl/eval/event/logging.py +3 -3
  533. localstack/services/stepfunctions/asl/eval/program_state.py +8 -8
  534. localstack/services/stepfunctions/asl/eval/states.py +12 -12
  535. localstack/services/stepfunctions/asl/eval/test_state/environment.py +3 -5
  536. localstack/services/stepfunctions/asl/eval/variable_store.py +6 -6
  537. localstack/services/stepfunctions/asl/jsonata/jsonata.py +7 -6
  538. localstack/services/stepfunctions/asl/parse/asl_parser.py +1 -1
  539. localstack/services/stepfunctions/asl/parse/intrinsic/preprocessor.py +2 -3
  540. localstack/services/stepfunctions/asl/parse/preprocessor.py +44 -44
  541. localstack/services/stepfunctions/asl/parse/typed_props.py +2 -2
  542. localstack/services/stepfunctions/asl/static_analyser/intrinsic/variable_names_intrinsic_static_analyser.py +1 -1
  543. localstack/services/stepfunctions/asl/static_analyser/variable_references_static_analyser.py +2 -2
  544. localstack/services/stepfunctions/asl/utils/encoding.py +2 -2
  545. localstack/services/stepfunctions/asl/utils/json_path.py +2 -2
  546. localstack/services/stepfunctions/backend/activity.py +4 -4
  547. localstack/services/stepfunctions/backend/alias.py +8 -8
  548. localstack/services/stepfunctions/backend/execution.py +29 -30
  549. localstack/services/stepfunctions/backend/execution_worker.py +7 -7
  550. localstack/services/stepfunctions/backend/state_machine.py +28 -28
  551. localstack/services/stepfunctions/backend/test_state/execution.py +3 -4
  552. localstack/services/stepfunctions/backend/test_state/execution_worker.py +1 -3
  553. localstack/services/stepfunctions/mocking/mock_config.py +9 -9
  554. localstack/services/stepfunctions/mocking/mock_config_file.py +10 -10
  555. localstack/services/stepfunctions/packages.py +14 -5
  556. localstack/services/stepfunctions/provider.py +34 -44
  557. localstack/services/stepfunctions/quotas.py +2 -3
  558. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity.py +6 -6
  559. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_activity_plugin.py +1 -3
  560. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine.py +25 -25
  561. localstack/services/stepfunctions/resource_providers/aws_stepfunctions_statemachine_plugin.py +1 -3
  562. localstack/services/stepfunctions/stepfunctions_utils.py +1 -2
  563. localstack/services/stores.py +8 -8
  564. localstack/services/transcribe/packages.py +1 -3
  565. localstack/services/transcribe/provider.py +8 -3
  566. localstack/state/codecs.py +61 -0
  567. localstack/state/core.py +11 -5
  568. localstack/state/inspect.py +4 -4
  569. localstack/state/pickle.py +22 -60
  570. localstack/testing/aws/asf_utils.py +3 -2
  571. localstack/testing/aws/cloudformation_utils.py +1 -1
  572. localstack/testing/aws/lambda_utils.py +15 -14
  573. localstack/testing/aws/util.py +3 -2
  574. localstack/testing/pytest/cloudformation/fixtures.py +68 -18
  575. localstack/testing/pytest/container.py +5 -5
  576. localstack/testing/pytest/filters.py +1 -3
  577. localstack/testing/pytest/fixtures.py +188 -55
  578. localstack/testing/pytest/in_memory_localstack.py +1 -3
  579. localstack/testing/pytest/marking.py +42 -15
  580. localstack/testing/pytest/path_filter.py +1 -1
  581. localstack/testing/pytest/stepfunctions/fixtures.py +4 -4
  582. localstack/testing/pytest/stepfunctions/utils.py +11 -10
  583. localstack/testing/pytest/util.py +1 -1
  584. localstack/testing/pytest/validation_tracking.py +3 -4
  585. localstack/testing/scenario/provisioning.py +11 -10
  586. localstack/testing/snapshots/transformer_utility.py +8 -3
  587. localstack/testing/testselection/matching.py +2 -2
  588. localstack/testing/testselection/opt_out.py +1 -1
  589. localstack/testing/testselection/scripts/filter_by_test_selection.py +1 -1
  590. localstack/testing/testselection/scripts/generate_test_selection.py +1 -1
  591. localstack/testing/testselection/testselection.py +2 -2
  592. localstack/utils/analytics/cli.py +2 -3
  593. localstack/utils/analytics/client.py +5 -5
  594. localstack/utils/analytics/events.py +2 -2
  595. localstack/utils/analytics/metadata.py +6 -4
  596. localstack/utils/analytics/metrics/counter.py +11 -18
  597. localstack/utils/analytics/metrics/registry.py +2 -2
  598. localstack/utils/analytics/publisher.py +4 -5
  599. localstack/utils/analytics/service_providers.py +19 -0
  600. localstack/utils/analytics/service_request_aggregator.py +4 -4
  601. localstack/utils/archives.py +12 -12
  602. localstack/utils/asyncio.py +2 -2
  603. localstack/utils/aws/arns.py +26 -31
  604. localstack/utils/aws/aws_responses.py +21 -28
  605. localstack/utils/aws/aws_stack.py +7 -12
  606. localstack/utils/aws/dead_letter_queue.py +4 -9
  607. localstack/utils/aws/message_forwarding.py +8 -11
  608. localstack/utils/aws/request_context.py +5 -6
  609. localstack/utils/aws/resources.py +1 -1
  610. localstack/utils/aws/templating.py +4 -4
  611. localstack/utils/batch_policy.py +4 -4
  612. localstack/utils/bootstrap.py +37 -30
  613. localstack/utils/catalog/catalog.py +139 -0
  614. localstack/utils/catalog/catalog_loader.py +11 -0
  615. localstack/utils/catalog/common.py +58 -0
  616. localstack/utils/catalog/plugins.py +28 -0
  617. localstack/utils/cloudwatch/cloudwatch_util.py +5 -5
  618. localstack/utils/collections.py +33 -27
  619. localstack/utils/config_listener.py +2 -2
  620. localstack/utils/container_networking.py +5 -6
  621. localstack/utils/container_utils/container_client.py +156 -160
  622. localstack/utils/container_utils/docker_cmd_client.py +97 -81
  623. localstack/utils/container_utils/docker_sdk_client.py +75 -72
  624. localstack/utils/crypto.py +12 -13
  625. localstack/utils/diagnose.py +11 -12
  626. localstack/utils/docker_utils.py +11 -7
  627. localstack/utils/files.py +34 -15
  628. localstack/utils/functions.py +5 -4
  629. localstack/utils/http.py +14 -14
  630. localstack/utils/iputils.py +2 -1
  631. localstack/utils/json.py +21 -7
  632. localstack/utils/kinesis/kinesis_connector.py +2 -1
  633. localstack/utils/net.py +25 -17
  634. localstack/utils/no_exit_argument_parser.py +2 -2
  635. localstack/utils/numbers.py +9 -2
  636. localstack/utils/objects.py +15 -14
  637. localstack/utils/patch.py +14 -7
  638. localstack/utils/platform.py +2 -2
  639. localstack/utils/run.py +15 -14
  640. localstack/utils/scheduler.py +13 -12
  641. localstack/utils/server/tcp_proxy.py +2 -2
  642. localstack/utils/serving.py +3 -4
  643. localstack/utils/strings.py +15 -16
  644. localstack/utils/sync.py +126 -1
  645. localstack/utils/tagging.py +10 -8
  646. localstack/utils/testutil.py +17 -17
  647. localstack/utils/threads.py +3 -3
  648. localstack/utils/time.py +12 -4
  649. localstack/utils/urls.py +1 -3
  650. localstack/utils/xml.py +1 -1
  651. localstack/utils/xray/traceid.py +1 -1
  652. localstack/version.py +16 -3
  653. {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/METADATA +18 -14
  654. {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/RECORD +663 -656
  655. {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/entry_points.txt +8 -4
  656. localstack_core-4.10.1.dev7.dist-info/plux.json +1 -0
  657. localstack/packages/terraform.py +0 -47
  658. localstack/services/cloudformation/deploy.html +0 -144
  659. localstack/services/cloudformation/deploy_ui.py +0 -47
  660. localstack/services/cloudformation/plugins.py +0 -12
  661. localstack/services/lambda_/lambda_debug_mode/ldm.py +0 -375
  662. localstack/services/lambda_/lambda_debug_mode/ldm_config_file.py +0 -178
  663. localstack/services/lambda_/lambda_debug_mode/ldm_types.py +0 -11
  664. localstack/services/lambda_/lambda_debug_mode/ldm_utils.py +0 -43
  665. localstack_core-4.6.1.dev74.dist-info/plux.json +0 -1
  666. /localstack/{services/lambda_/lambda_debug_mode/__init__.py → testing/pytest/cloudformation/transformers.py} +0 -0
  667. {localstack_core-4.6.1.dev74.data → localstack_core-4.10.1.dev7.data}/scripts/localstack +0 -0
  668. {localstack_core-4.6.1.dev74.data → localstack_core-4.10.1.dev7.data}/scripts/localstack-supervisor +0 -0
  669. {localstack_core-4.6.1.dev74.data → localstack_core-4.10.1.dev7.data}/scripts/localstack.bat +0 -0
  670. {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/WHEEL +0 -0
  671. {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/licenses/LICENSE.txt +0 -0
  672. {localstack_core-4.6.1.dev74.dist-info → localstack_core-4.10.1.dev7.dist-info}/top_level.txt +0 -0
@@ -1,12 +1,11 @@
1
- import json
2
- from typing import Final, Union
1
+ from typing import Any, Final
3
2
 
4
3
  from localstack.services.stepfunctions.asl.utils.encoding import to_json_str
5
4
 
6
5
  MAX_STATE_SIZE_UTF8_BYTES: Final[int] = 256 * 1024 # 256 KB of data as a UTF-8 encoded string.
7
6
 
8
7
 
9
- def is_within_size_quota(value: Union[str, json]) -> bool:
8
+ def is_within_size_quota(value: str | Any) -> bool:
10
9
  item_str = value if isinstance(value, str) else to_json_str(value)
11
10
  item_bytes = item_str.encode("utf-8")
12
11
  len_item_bytes = len(item_bytes)
@@ -2,7 +2,7 @@
2
2
  from __future__ import annotations
3
3
 
4
4
  from pathlib import Path
5
- from typing import Optional, TypedDict
5
+ from typing import TypedDict
6
6
 
7
7
  import localstack.services.cloudformation.provider_utils as util
8
8
  from localstack.services.cloudformation.resource_provider import (
@@ -14,14 +14,14 @@ from localstack.services.cloudformation.resource_provider import (
14
14
 
15
15
 
16
16
  class StepFunctionsActivityProperties(TypedDict):
17
- Name: Optional[str]
18
- Arn: Optional[str]
19
- Tags: Optional[list[TagsEntry]]
17
+ Name: str | None
18
+ Arn: str | None
19
+ Tags: list[TagsEntry] | None
20
20
 
21
21
 
22
22
  class TagsEntry(TypedDict):
23
- Key: Optional[str]
24
- Value: Optional[str]
23
+ Key: str | None
24
+ Value: str | None
25
25
 
26
26
 
27
27
  REPEATED_INVOCATION = "repeated_invocation"
@@ -1,5 +1,3 @@
1
- from typing import Optional, Type
2
-
3
1
  from localstack.services.cloudformation.resource_provider import (
4
2
  CloudFormationResourceProviderPlugin,
5
3
  ResourceProvider,
@@ -10,7 +8,7 @@ class StepFunctionsActivityProviderPlugin(CloudFormationResourceProviderPlugin):
10
8
  name = "AWS::StepFunctions::Activity"
11
9
 
12
10
  def __init__(self):
13
- self.factory: Optional[Type[ResourceProvider]] = None
11
+ self.factory: type[ResourceProvider] | None = None
14
12
 
15
13
  def load(self):
16
14
  from localstack.services.stepfunctions.resource_providers.aws_stepfunctions_activity import (
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
  import json
5
5
  import re
6
6
  from pathlib import Path
7
- from typing import Optional, TypedDict
7
+ from typing import TypedDict
8
8
 
9
9
  import localstack.services.cloudformation.provider_utils as util
10
10
  from localstack.services.cloudformation.resource_provider import (
@@ -18,48 +18,48 @@ from localstack.utils.strings import to_str
18
18
 
19
19
 
20
20
  class StepFunctionsStateMachineProperties(TypedDict):
21
- RoleArn: Optional[str]
22
- Arn: Optional[str]
23
- Definition: Optional[dict]
24
- DefinitionS3Location: Optional[S3Location]
25
- DefinitionString: Optional[str]
26
- DefinitionSubstitutions: Optional[dict]
27
- LoggingConfiguration: Optional[LoggingConfiguration]
28
- Name: Optional[str]
29
- StateMachineName: Optional[str]
30
- StateMachineRevisionId: Optional[str]
31
- StateMachineType: Optional[str]
32
- Tags: Optional[list[TagsEntry]]
33
- TracingConfiguration: Optional[TracingConfiguration]
21
+ RoleArn: str | None
22
+ Arn: str | None
23
+ Definition: dict | None
24
+ DefinitionS3Location: S3Location | None
25
+ DefinitionString: str | None
26
+ DefinitionSubstitutions: dict | None
27
+ LoggingConfiguration: LoggingConfiguration | None
28
+ Name: str | None
29
+ StateMachineName: str | None
30
+ StateMachineRevisionId: str | None
31
+ StateMachineType: str | None
32
+ Tags: list[TagsEntry] | None
33
+ TracingConfiguration: TracingConfiguration | None
34
34
 
35
35
 
36
36
  class CloudWatchLogsLogGroup(TypedDict):
37
- LogGroupArn: Optional[str]
37
+ LogGroupArn: str | None
38
38
 
39
39
 
40
40
  class LogDestination(TypedDict):
41
- CloudWatchLogsLogGroup: Optional[CloudWatchLogsLogGroup]
41
+ CloudWatchLogsLogGroup: CloudWatchLogsLogGroup | None
42
42
 
43
43
 
44
44
  class LoggingConfiguration(TypedDict):
45
- Destinations: Optional[list[LogDestination]]
46
- IncludeExecutionData: Optional[bool]
47
- Level: Optional[str]
45
+ Destinations: list[LogDestination] | None
46
+ IncludeExecutionData: bool | None
47
+ Level: str | None
48
48
 
49
49
 
50
50
  class TracingConfiguration(TypedDict):
51
- Enabled: Optional[bool]
51
+ Enabled: bool | None
52
52
 
53
53
 
54
54
  class S3Location(TypedDict):
55
- Bucket: Optional[str]
56
- Key: Optional[str]
57
- Version: Optional[str]
55
+ Bucket: str | None
56
+ Key: str | None
57
+ Version: str | None
58
58
 
59
59
 
60
60
  class TagsEntry(TypedDict):
61
- Key: Optional[str]
62
- Value: Optional[str]
61
+ Key: str | None
62
+ Value: str | None
63
63
 
64
64
 
65
65
  REPEATED_INVOCATION = "repeated_invocation"
@@ -1,5 +1,3 @@
1
- from typing import Optional, Type
2
-
3
1
  from localstack.services.cloudformation.resource_provider import (
4
2
  CloudFormationResourceProviderPlugin,
5
3
  ResourceProvider,
@@ -10,7 +8,7 @@ class StepFunctionsStateMachineProviderPlugin(CloudFormationResourceProviderPlug
10
8
  name = "AWS::StepFunctions::StateMachine"
11
9
 
12
10
  def __init__(self):
13
- self.factory: Optional[Type[ResourceProvider]] = None
11
+ self.factory: type[ResourceProvider] | None = None
14
12
 
15
13
  def load(self):
16
14
  from localstack.services.stepfunctions.resource_providers.aws_stepfunctions_statemachine import (
@@ -1,6 +1,5 @@
1
1
  import base64
2
2
  import logging
3
- from typing import Dict
4
3
 
5
4
  from localstack.aws.api.stepfunctions import ValidationException
6
5
  from localstack.aws.connect import connect_to
@@ -11,7 +10,7 @@ from localstack.utils.strings import to_bytes, to_str
11
10
  LOG = logging.getLogger(__name__)
12
11
 
13
12
 
14
- def await_sfn_execution_result(execution_arn: str, timeout_secs: int = 60) -> Dict:
13
+ def await_sfn_execution_result(execution_arn: str, timeout_secs: int = 60) -> dict:
15
14
  """Wait until the given SFN execution ARN is no longer in RUNNING status, then return execution result."""
16
15
 
17
16
  arn_data = parse_arn(execution_arn)
@@ -30,9 +30,9 @@ While not recommended, store classes may define member helper functions and prop
30
30
  """
31
31
 
32
32
  import re
33
- from collections.abc import Callable
33
+ from collections.abc import Callable, Iterator
34
34
  from threading import RLock
35
- from typing import Any, Generic, Iterator, Type, TypeVar, Union
35
+ from typing import Any, Generic, TypeVar
36
36
 
37
37
  from localstack import config
38
38
  from localstack.utils.aws.aws_stack import get_valid_regions_for_service
@@ -52,7 +52,7 @@ class LocalAttribute:
52
52
  Descriptor protocol for marking store attributes as local to a region.
53
53
  """
54
54
 
55
- def __init__(self, default: Union[Callable, int, float, str, bool, None]):
55
+ def __init__(self, default: Callable | int | float | str | bool | None):
56
56
  """
57
57
  :param default: Default value assigned to the local attribute. Must be a scalar
58
58
  or a callable.
@@ -81,7 +81,7 @@ class CrossRegionAttribute:
81
81
  Descriptor protocol for marking store attributes as shared across all regions.
82
82
  """
83
83
 
84
- def __init__(self, default: Union[Callable, int, float, str, bool, None]):
84
+ def __init__(self, default: Callable | int | float | str | bool | None):
85
85
  """
86
86
  :param default: The default value assigned to the cross-region attribute.
87
87
  This must be a scalar or a callable.
@@ -122,7 +122,7 @@ class CrossAccountAttribute:
122
122
  This should be used for resources that are identified by ARNs.
123
123
  """
124
124
 
125
- def __init__(self, default: Union[Callable, int, float, str, bool, None]):
125
+ def __init__(self, default: Callable | int | float | str | bool | None):
126
126
  """
127
127
  :param default: The default value assigned to the cross-account attribute.
128
128
  This must be a scalar or a callable.
@@ -198,7 +198,7 @@ class RegionBundle(dict, Generic[BaseStoreType]):
198
198
  def __init__(
199
199
  self,
200
200
  service_name: str,
201
- store: Type[BaseStoreType],
201
+ store: type[BaseStoreType],
202
202
  account_id: str,
203
203
  validate: bool = True,
204
204
  lock: RLock = None,
@@ -238,7 +238,7 @@ class RegionBundle(dict, Generic[BaseStoreType]):
238
238
 
239
239
  store_obj._global = self._global
240
240
  store_obj._universal = self._universal
241
- store_obj.service_name = self.service_name
241
+ store_obj._service_name = self.service_name
242
242
  store_obj._account_id = self.account_id
243
243
  store_obj._region_name = region_name
244
244
 
@@ -286,7 +286,7 @@ class AccountRegionBundle(dict, Generic[BaseStoreType]):
286
286
  Encapsulation for all stores for all AWS account IDs.
287
287
  """
288
288
 
289
- def __init__(self, service_name: str, store: Type[BaseStoreType], validate: bool = True):
289
+ def __init__(self, service_name: str, store: type[BaseStoreType], validate: bool = True):
290
290
  """
291
291
  :param service_name: Name of the service. Must be a valid service defined in botocore.
292
292
  :param store: Class definition of the Store
@@ -1,5 +1,3 @@
1
- from typing import List
2
-
3
1
  from localstack.packages import Package
4
2
  from localstack.packages.core import PythonPackageInstaller
5
3
 
@@ -13,7 +11,7 @@ class VoskPackage(Package[PythonPackageInstaller]):
13
11
  def _get_installer(self, version: str) -> PythonPackageInstaller:
14
12
  return VoskPackageInstaller(version)
15
13
 
16
- def get_versions(self) -> List[str]:
14
+ def get_versions(self) -> list[str]:
17
15
  return [_VOSK_DEFAULT_VERSION]
18
16
 
19
17
 
@@ -5,7 +5,7 @@ import threading
5
5
  import wave
6
6
  from functools import cache
7
7
  from pathlib import Path
8
- from typing import Any, Tuple
8
+ from typing import Any
9
9
  from zipfile import ZipFile
10
10
 
11
11
  from localstack import config
@@ -277,7 +277,7 @@ class TranscribeProvider(TranscribeApi):
277
277
  # Threads
278
278
  #
279
279
 
280
- def _run_transcription_job(self, args: Tuple[TranscribeStore, str]) -> None:
280
+ def _run_transcription_job(self, args: tuple[TranscribeStore, str]) -> None:
281
281
  store, job_name = args
282
282
 
283
283
  job = store.transcription_jobs[job_name]
@@ -412,4 +412,9 @@ class TranscribeProvider(TranscribeApi):
412
412
  job["FailureReason"] = failure_reason or str(exc)
413
413
  job["TranscriptionJobStatus"] = TranscriptionJobStatus.FAILED
414
414
 
415
- LOG.exception("Transcription job %s failed: %s", job_name, job["FailureReason"])
415
+ LOG.error(
416
+ "Transcription job %s failed: %s",
417
+ job_name,
418
+ job["FailureReason"],
419
+ exc_info=LOG.isEnabledFor(logging.DEBUG),
420
+ )
@@ -0,0 +1,61 @@
1
+ """Factory for encoders and decoders"""
2
+
3
+ from localstack import config
4
+ from localstack.state import Decoder, Encoder
5
+ from localstack.state.pickle import PickleDecoder, PickleEncoder
6
+
7
+ ENCODERS = {
8
+ "dill": PickleEncoder,
9
+ }
10
+ """Encoders that map to the name of ``STATE_SERIALIZATION_BACKEND``."""
11
+
12
+ DECODERS = {
13
+ "dill": PickleDecoder,
14
+ }
15
+ """Decoders that map to the name of ``STATE_SERIALIZATION_BACKEND``."""
16
+
17
+
18
+ def create_encoder(encoder_type: str) -> Encoder:
19
+ cls = ENCODERS.get(encoder_type)
20
+ if cls is None:
21
+ raise ValueError(f"Unknown encoder type: {encoder_type}")
22
+ return cls()
23
+
24
+
25
+ def create_decoder(decoder_type: str) -> Decoder:
26
+ cls = DECODERS.get(decoder_type, PickleDecoder)
27
+ if cls is None:
28
+ raise ValueError(f"Unknown decoder type: {decoder_type}")
29
+ return cls()
30
+
31
+
32
+ def get_default_encoder() -> Encoder:
33
+ """
34
+ Gets the default encoder based on the state serialization backend defined in the configuration
35
+ ``STATE_SERIALIZATION_BACKEND``.
36
+
37
+ If the serialization backend specified in the configuration leads to an error
38
+ (such as an invalid backend), a ``PickleEncoder`` is returned as a fallback.
39
+
40
+ :return: The default encoder for state serialization.
41
+ """
42
+ try:
43
+ return create_encoder(config.STATE_SERIALIZATION_BACKEND)
44
+ except ValueError:
45
+ return PickleEncoder()
46
+
47
+
48
+ def get_default_decoder() -> Decoder:
49
+ """
50
+ Gets the default decoder based on the state serialization backend defined in the configuration
51
+ ``STATE_SERIALIZATION_BACKEND``.
52
+
53
+ If the serialization backend specified in the configuration leads to an error
54
+ (such as an invalid backend), a ``PickleDecoder`` is returned as a fallback.
55
+
56
+ :return: The default decoder for state serialization.
57
+ """
58
+ try:
59
+ return create_decoder(config.STATE_SERIALIZATION_BACKEND)
60
+ except ValueError:
61
+ return PickleDecoder()
localstack/state/core.py CHANGED
@@ -97,42 +97,48 @@ class AssetDirectory:
97
97
 
98
98
 
99
99
  class Encoder:
100
- def encodes(self, obj: Any) -> bytes:
100
+ def encodes(self, obj: Any, py_type: type = None) -> bytes:
101
101
  """
102
102
  Encode an object into bytes.
103
103
 
104
104
  :param obj: the object to encode
105
+ :param py_type: the type of the object. needed by some encoders that don't have implicit type knowledge.
105
106
  :return: the encoded object
106
107
  """
107
108
  b = io.BytesIO()
108
109
  self.encode(obj, b)
109
110
  return b.getvalue()
110
111
 
111
- def encode(self, obj: Any, file: IO[bytes]):
112
+ def encode(self, obj: Any, file: IO[bytes], py_type: type = None):
112
113
  """
113
114
  Encode an object into bytes.
114
115
 
115
116
  :param obj: the object to encode
117
+ :param py_type: the type of the object. needed by some encoders that don't have implicit type knowledge.
116
118
  :param file: the file to write the encoded data into
117
119
  """
118
120
  raise NotImplementedError
119
121
 
120
122
 
121
123
  class Decoder:
122
- def decodes(self, data: bytes) -> Any:
124
+ def decodes(self, data: bytes, py_type: type = None) -> Any:
123
125
  """
124
126
  Decode a previously encoded object.
125
127
 
126
128
  :param data: the encoded object to decode
129
+ :param py_type: the type that is expected as return type. Needed by some decoders that don't have implicit
130
+ type knowledge.
127
131
  :return: the decoded object
128
132
  """
129
- return self.decode(io.BytesIO(data))
133
+ return self.decode(io.BytesIO(data), py_type)
130
134
 
131
- def decode(self, file: IO[bytes]) -> Any:
135
+ def decode(self, file: IO[bytes], py_type: type = None) -> Any:
132
136
  """
133
137
  Decode a previously encoded object.
134
138
 
135
139
  :param file: the io object containing the object to decode
140
+ :param py_type: the type that is expected as return type. Needed by some decoders that don't have implicit
141
+ type knowledge.
136
142
  :return: the decoded object
137
143
  """
138
144
  raise NotImplementedError
@@ -3,7 +3,7 @@
3
3
  import importlib
4
4
  import logging
5
5
  from functools import singledispatchmethod
6
- from typing import Any, Dict, Optional, TypedDict
6
+ from typing import Any, TypedDict
7
7
 
8
8
  from moto.core.base_backend import BackendDict
9
9
 
@@ -17,14 +17,14 @@ class ServiceBackend(TypedDict, total=False):
17
17
  """Wrapper of the possible type of backends that a service can use."""
18
18
 
19
19
  localstack: AccountRegionBundle | None
20
- moto: BackendDict | Dict | None
20
+ moto: BackendDict | dict | None
21
21
 
22
22
 
23
23
  class ServiceBackendCollectorVisitor(StateVisitor):
24
24
  """Implementation of StateVisitor meant to collect the backends that a given service use to hold its state."""
25
25
 
26
26
  store: AccountRegionBundle | None
27
- backend_dict: BackendDict | Dict | None
27
+ backend_dict: BackendDict | dict | None
28
28
 
29
29
  def __init__(self) -> None:
30
30
  self.store = None
@@ -60,7 +60,7 @@ class ReflectionStateLocator:
60
60
 
61
61
  provider: Any
62
62
 
63
- def __init__(self, provider: Optional[Any] = None, service: Optional[str] = None):
63
+ def __init__(self, provider: Any | None = None, service: str | None = None):
64
64
  self.provider = provider
65
65
  self.service = service or provider.service
66
66
 
@@ -29,14 +29,12 @@ https://dill.readthedocs.io/en/latest/index.html?highlight=register#dill.Pickler
29
29
  """
30
30
 
31
31
  import inspect
32
- from typing import IO, Any, BinaryIO, Callable, Generic, Type, TypeVar
32
+ from collections.abc import Callable
33
+ from typing import Any, BinaryIO, Generic, TypeVar
33
34
 
34
35
  import dill
35
- import jsonpickle
36
36
  from dill._dill import MetaCatchingDict
37
37
 
38
- from localstack import config
39
-
40
38
  from .core import Decoder, Encoder
41
39
 
42
40
  _T = TypeVar("_T")
@@ -45,7 +43,7 @@ PythonPickler = Any
45
43
  """Type placeholder for pickle._Pickler (which has for instance the save_reduce method)"""
46
44
 
47
45
 
48
- def register(cls: Type = None, subclasses: bool = False):
46
+ def register(cls: type = None, subclasses: bool = False):
49
47
  """
50
48
  Decorator to register a custom type or type tree into the dill pickling dispatcher table.
51
49
 
@@ -63,14 +61,14 @@ def register(cls: Type = None, subclasses: bool = False):
63
61
  elif callable(fn):
64
62
  add_dispatch_entry(cls, fn, subclasses=subclasses)
65
63
  else:
66
- raise ValueError("cannot register %s" % fn)
64
+ raise ValueError(f"cannot register {fn}")
67
65
 
68
66
  return fn
69
67
 
70
68
  return _wrapper
71
69
 
72
70
 
73
- def reducer(cls: Type, restore: Callable = None, subclasses: bool = False):
71
+ def reducer(cls: type, restore: Callable = None, subclasses: bool = False):
74
72
  """
75
73
  Convenience decorator to simplify the following pattern::
76
74
 
@@ -118,14 +116,14 @@ def reducer(cls: Type, restore: Callable = None, subclasses: bool = False):
118
116
 
119
117
 
120
118
  def add_dispatch_entry(
121
- cls: Type, fn: Callable[[PythonPickler, Any], None], subclasses: bool = False
119
+ cls: type, fn: Callable[[PythonPickler, Any], None], subclasses: bool = False
122
120
  ):
123
121
  Pickler.dispatch_overwrite[cls] = fn
124
122
  if subclasses:
125
123
  Pickler.match_subclasses_of.add(cls)
126
124
 
127
125
 
128
- def remove_dispatch_entry(cls: Type):
126
+ def remove_dispatch_entry(cls: type):
129
127
  try:
130
128
  del Pickler.dispatch_overwrite[cls]
131
129
  except KeyError:
@@ -190,7 +188,7 @@ class _SuperclassMatchingTypeDict(MetaCatchingDict):
190
188
 
191
189
  """
192
190
 
193
- def __init__(self, seq=None, match_subclasses_of: set[Type] = None):
191
+ def __init__(self, seq=None, match_subclasses_of: set[type] = None):
194
192
  if seq is not None:
195
193
  super().__init__(seq)
196
194
  else:
@@ -215,8 +213,8 @@ class Pickler(dill.Pickler):
215
213
  Custom dill pickler that considers dispatchers and subclass dispatchers registered via ``register``.
216
214
  """
217
215
 
218
- match_subclasses_of: set[Type] = set()
219
- dispatch_overwrite: dict[Type, Callable] = {}
216
+ match_subclasses_of: set[type] = set()
217
+ dispatch_overwrite: dict[type, Callable] = {}
220
218
 
221
219
  def __init__(self, *args, **kwargs):
222
220
  super().__init__(*args, **kwargs)
@@ -234,12 +232,12 @@ class PickleEncoder(Encoder):
234
232
  extended with custom serializers.
235
233
  """
236
234
 
237
- pickler_class: Type[dill.Pickler]
235
+ pickler_class: type[dill.Pickler]
238
236
 
239
- def __init__(self, pickler_class: Type[dill.Pickler] = None):
237
+ def __init__(self, pickler_class: type[dill.Pickler] = None):
240
238
  self.pickler_class = pickler_class or Pickler
241
239
 
242
- def encode(self, obj: Any, file: BinaryIO):
240
+ def encode(self, obj: Any, file: BinaryIO, py_type: type = None) -> Any:
243
241
  return self.pickler_class(file).dump(obj)
244
242
 
245
243
 
@@ -249,61 +247,25 @@ class PickleDecoder(Decoder):
249
247
  extended with custom serializers.
250
248
  """
251
249
 
252
- unpickler_class: Type[dill.Unpickler]
250
+ unpickler_class: type[dill.Unpickler]
253
251
 
254
- def __init__(self, unpickler_class: Type[dill.Unpickler] = None):
252
+ def __init__(self, unpickler_class: type[dill.Unpickler] = None):
255
253
  self.unpickler_class = unpickler_class or dill.Unpickler
256
254
 
257
- def decode(self, file: BinaryIO) -> Any:
255
+ def decode(self, file: BinaryIO, py_type=None) -> Any:
258
256
  return self.unpickler_class(file).load()
259
257
 
260
258
 
261
- class JsonEncoder(Encoder):
262
- """
263
- An Encoder that uses ``jsonpickle`` under the hood.
264
- """
265
-
266
- def __init__(self, pickler_class: Type[jsonpickle.Pickler] = None):
267
- self.pickler_class = pickler_class or jsonpickle.Pickler()
268
-
269
- def encode(self, obj: Any, file: IO[bytes]):
270
- json_str = jsonpickle.encode(obj, context=self.pickler_class)
271
- file.write(json_str.encode("utf-8"))
272
-
273
-
274
- class JsonDecoder(Decoder):
275
- """
276
- A Decoder that uses ``jsonpickle`` under the hood.
277
- """
278
-
279
- unpickler_class: Type[jsonpickle.Unpickler]
280
-
281
- def __init__(self, unpickler_class: Type[jsonpickle.Unpickler] = None):
282
- self.unpickler_class = unpickler_class or jsonpickle.Unpickler()
283
-
284
- def decode(self, file: IO[bytes]) -> Any:
285
- json_str = file.read().decode("utf-8")
286
- return jsonpickle.decode(json_str, context=self.unpickler_class)
287
-
288
-
289
259
  def get_default_encoder() -> Encoder:
290
- match config.STATE_SERIALIZATION_BACKEND:
291
- case "jsonpickle":
292
- return JsonEncoder()
293
- case "dill":
294
- return PickleEncoder()
295
- case _:
296
- return PickleEncoder()
260
+ from .codecs import get_default_encoder
261
+
262
+ return get_default_encoder()
297
263
 
298
264
 
299
265
  def get_default_decoder() -> Decoder:
300
- match config.STATE_SERIALIZATION_BACKEND:
301
- case "jsonpickle":
302
- return JsonDecoder()
303
- case "dill":
304
- return PickleDecoder()
305
- case _:
306
- return PickleDecoder()
266
+ from .codecs import get_default_decoder
267
+
268
+ return get_default_decoder()
307
269
 
308
270
 
309
271
  class ObjectStateReducer(Generic[_T]):
@@ -3,12 +3,13 @@ import importlib.util
3
3
  import inspect
4
4
  import pkgutil
5
5
  import re
6
+ from re import Pattern
6
7
  from types import FunctionType, ModuleType, NoneType, UnionType
7
- from typing import Optional, Pattern, Union, get_args, get_origin
8
+ from typing import Union, get_args, get_origin
8
9
 
9
10
 
10
11
  def _import_submodules(
11
- package_name: str, module_regex: Optional[Pattern] = None, recursive: bool = True
12
+ package_name: str, module_regex: Pattern | None = None, recursive: bool = True
12
13
  ) -> dict[str, ModuleType]:
13
14
  """
14
15
  Imports all submodules of the given package with the defined (optional) module_suffix.
@@ -29,7 +29,7 @@ def load_template_file(file_path: str | os.PathLike, *, path_ctx: str | os.PathL
29
29
  elif not file_path_obj.is_absolute():
30
30
  raise ValueError("Provided path must be absolute if no path_ctx is provided")
31
31
 
32
- return load_file(file_path_obj.absolute())
32
+ return load_file(file_path_obj.absolute(), strict=True)
33
33
 
34
34
 
35
35
  # TODO: TBH this utility really doesn't add anything, probably better to just remove it