boto3-errors 0.1.0__tar.gz

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 (421) hide show
  1. boto3_errors-0.1.0/LICENSE +21 -0
  2. boto3_errors-0.1.0/PKG-INFO +117 -0
  3. boto3_errors-0.1.0/README.md +82 -0
  4. boto3_errors-0.1.0/pyproject.toml +99 -0
  5. boto3_errors-0.1.0/src/boto3_errors/__init__.py +6 -0
  6. boto3_errors-0.1.0/src/boto3_errors/_base.py +40 -0
  7. boto3_errors-0.1.0/src/boto3_errors/_patch.py +54 -0
  8. boto3_errors-0.1.0/src/boto3_errors/accessanalyzer.py +118 -0
  9. boto3_errors-0.1.0/src/boto3_errors/account.py +113 -0
  10. boto3_errors-0.1.0/src/boto3_errors/acm.py +125 -0
  11. boto3_errors-0.1.0/src/boto3_errors/acm_pca.py +153 -0
  12. boto3_errors-0.1.0/src/boto3_errors/aiops.py +85 -0
  13. boto3_errors-0.1.0/src/boto3_errors/amp.py +129 -0
  14. boto3_errors-0.1.0/src/boto3_errors/amplify.py +60 -0
  15. boto3_errors-0.1.0/src/boto3_errors/amplifybackend.py +48 -0
  16. boto3_errors-0.1.0/src/boto3_errors/amplifyuibuilder.py +60 -0
  17. boto3_errors-0.1.0/src/boto3_errors/apigateway.py +77 -0
  18. boto3_errors-0.1.0/src/boto3_errors/apigatewaymanagementapi.py +41 -0
  19. boto3_errors-0.1.0/src/boto3_errors/apigatewayv2.py +63 -0
  20. boto3_errors-0.1.0/src/boto3_errors/appconfig.py +96 -0
  21. boto3_errors-0.1.0/src/boto3_errors/appconfigdata.py +60 -0
  22. boto3_errors-0.1.0/src/boto3_errors/appfabric.py +129 -0
  23. boto3_errors-0.1.0/src/boto3_errors/appflow.py +90 -0
  24. boto3_errors-0.1.0/src/boto3_errors/appintegrations.py +62 -0
  25. boto3_errors-0.1.0/src/boto3_errors/application_autoscaling.py +103 -0
  26. boto3_errors-0.1.0/src/boto3_errors/application_insights.py +70 -0
  27. boto3_errors-0.1.0/src/boto3_errors/application_signals.py +60 -0
  28. boto3_errors-0.1.0/src/boto3_errors/applicationcostprofiler.py +47 -0
  29. boto3_errors-0.1.0/src/boto3_errors/appmesh.py +94 -0
  30. boto3_errors-0.1.0/src/boto3_errors/apprunner.py +56 -0
  31. boto3_errors-0.1.0/src/boto3_errors/appstream.py +114 -0
  32. boto3_errors-0.1.0/src/boto3_errors/appsync.py +117 -0
  33. boto3_errors-0.1.0/src/boto3_errors/arc_region_switch.py +62 -0
  34. boto3_errors-0.1.0/src/boto3_errors/arc_zonal_shift.py +71 -0
  35. boto3_errors-0.1.0/src/boto3_errors/artifact.py +126 -0
  36. boto3_errors-0.1.0/src/boto3_errors/athena.py +72 -0
  37. boto3_errors-0.1.0/src/boto3_errors/auditmanager.py +81 -0
  38. boto3_errors-0.1.0/src/boto3_errors/autoscaling.py +100 -0
  39. boto3_errors-0.1.0/src/boto3_errors/autoscaling_plans.py +56 -0
  40. boto3_errors-0.1.0/src/boto3_errors/b2bi.py +111 -0
  41. boto3_errors-0.1.0/src/boto3_errors/backup.py +220 -0
  42. boto3_errors-0.1.0/src/boto3_errors/backup_gateway.py +85 -0
  43. boto3_errors-0.1.0/src/boto3_errors/backupsearch.py +128 -0
  44. boto3_errors-0.1.0/src/boto3_errors/batch.py +30 -0
  45. boto3_errors-0.1.0/src/boto3_errors/bcm_dashboards.py +68 -0
  46. boto3_errors-0.1.0/src/boto3_errors/bcm_data_exports.py +107 -0
  47. boto3_errors-0.1.0/src/boto3_errors/bcm_pricing_calculator.py +145 -0
  48. boto3_errors-0.1.0/src/boto3_errors/bcm_recommended_actions.py +51 -0
  49. boto3_errors-0.1.0/src/boto3_errors/bedrock.py +90 -0
  50. boto3_errors-0.1.0/src/boto3_errors/bedrock_agent.py +66 -0
  51. boto3_errors-0.1.0/src/boto3_errors/bedrock_agent_runtime.py +113 -0
  52. boto3_errors-0.1.0/src/boto3_errors/bedrock_agentcore.py +156 -0
  53. boto3_errors-0.1.0/src/boto3_errors/bedrock_agentcore_control.py +112 -0
  54. boto3_errors-0.1.0/src/boto3_errors/bedrock_data_automation.py +63 -0
  55. boto3_errors-0.1.0/src/boto3_errors/bedrock_data_automation_runtime.py +56 -0
  56. boto3_errors-0.1.0/src/boto3_errors/bedrock_runtime.py +136 -0
  57. boto3_errors-0.1.0/src/boto3_errors/billing.py +130 -0
  58. boto3_errors-0.1.0/src/boto3_errors/billingconductor.py +124 -0
  59. boto3_errors-0.1.0/src/boto3_errors/braket.py +78 -0
  60. boto3_errors-0.1.0/src/boto3_errors/budgets.py +98 -0
  61. boto3_errors-0.1.0/src/boto3_errors/ce.py +131 -0
  62. boto3_errors-0.1.0/src/boto3_errors/chatbot.py +209 -0
  63. boto3_errors-0.1.0/src/boto3_errors/chime.py +127 -0
  64. boto3_errors-0.1.0/src/boto3_errors/chime_sdk_identity.py +107 -0
  65. boto3_errors-0.1.0/src/boto3_errors/chime_sdk_media_pipelines.py +152 -0
  66. boto3_errors-0.1.0/src/boto3_errors/chime_sdk_meetings.py +209 -0
  67. boto3_errors-0.1.0/src/boto3_errors/chime_sdk_messaging.py +107 -0
  68. boto3_errors-0.1.0/src/boto3_errors/chime_sdk_voice.py +89 -0
  69. boto3_errors-0.1.0/src/boto3_errors/cleanrooms.py +106 -0
  70. boto3_errors-0.1.0/src/boto3_errors/cleanroomsml.py +69 -0
  71. boto3_errors-0.1.0/src/boto3_errors/cloud9.py +62 -0
  72. boto3_errors-0.1.0/src/boto3_errors/cloudcontrol.py +183 -0
  73. boto3_errors-0.1.0/src/boto3_errors/clouddirectory.py +290 -0
  74. boto3_errors-0.1.0/src/boto3_errors/cloudformation.py +237 -0
  75. boto3_errors-0.1.0/src/boto3_errors/cloudfront.py +1177 -0
  76. boto3_errors-0.1.0/src/boto3_errors/cloudfront_keyvaluestore.py +50 -0
  77. boto3_errors-0.1.0/src/boto3_errors/cloudhsm.py +37 -0
  78. boto3_errors-0.1.0/src/boto3_errors/cloudhsmv2.py +65 -0
  79. boto3_errors-0.1.0/src/boto3_errors/cloudsearch.py +75 -0
  80. boto3_errors-0.1.0/src/boto3_errors/cloudsearchdomain.py +31 -0
  81. boto3_errors-0.1.0/src/boto3_errors/cloudtrail.py +748 -0
  82. boto3_errors-0.1.0/src/boto3_errors/cloudtrail_data.py +50 -0
  83. boto3_errors-0.1.0/src/boto3_errors/cloudwatch.py +110 -0
  84. boto3_errors-0.1.0/src/boto3_errors/codeartifact.py +104 -0
  85. boto3_errors-0.1.0/src/boto3_errors/codebuild.py +56 -0
  86. boto3_errors-0.1.0/src/boto3_errors/codecatalyst.py +68 -0
  87. boto3_errors-0.1.0/src/boto3_errors/codecommit.py +1486 -0
  88. boto3_errors-0.1.0/src/boto3_errors/codeconnections.py +119 -0
  89. boto3_errors-0.1.0/src/boto3_errors/codedeploy.py +798 -0
  90. boto3_errors-0.1.0/src/boto3_errors/codeguru_reviewer.py +60 -0
  91. boto3_errors-0.1.0/src/boto3_errors/codeguru_security.py +134 -0
  92. boto3_errors-0.1.0/src/boto3_errors/codeguruprofiler.py +58 -0
  93. boto3_errors-0.1.0/src/boto3_errors/codepipeline.py +300 -0
  94. boto3_errors-0.1.0/src/boto3_errors/codestar_connections.py +119 -0
  95. boto3_errors-0.1.0/src/boto3_errors/codestar_notifications.py +78 -0
  96. boto3_errors-0.1.0/src/boto3_errors/cognito_identity.py +99 -0
  97. boto3_errors-0.1.0/src/boto3_errors/cognito_idp.py +456 -0
  98. boto3_errors-0.1.0/src/boto3_errors/cognito_sync.py +100 -0
  99. boto3_errors-0.1.0/src/boto3_errors/comprehend.py +146 -0
  100. boto3_errors-0.1.0/src/boto3_errors/comprehendmedical.py +84 -0
  101. boto3_errors-0.1.0/src/boto3_errors/compute_optimizer.py +71 -0
  102. boto3_errors-0.1.0/src/boto3_errors/compute_optimizer_automation.py +92 -0
  103. boto3_errors-0.1.0/src/boto3_errors/config.py +568 -0
  104. boto3_errors-0.1.0/src/boto3_errors/connect.py +238 -0
  105. boto3_errors-0.1.0/src/boto3_errors/connect_contact_lens.py +44 -0
  106. boto3_errors-0.1.0/src/boto3_errors/connectcampaigns.py +114 -0
  107. boto3_errors-0.1.0/src/boto3_errors/connectcampaignsv2.py +114 -0
  108. boto3_errors-0.1.0/src/boto3_errors/connectcases.py +85 -0
  109. boto3_errors-0.1.0/src/boto3_errors/connectparticipant.py +72 -0
  110. boto3_errors-0.1.0/src/boto3_errors/controlcatalog.py +47 -0
  111. boto3_errors-0.1.0/src/boto3_errors/controltower.py +74 -0
  112. boto3_errors-0.1.0/src/boto3_errors/cost_optimization_hub.py +65 -0
  113. boto3_errors-0.1.0/src/boto3_errors/cur.py +56 -0
  114. boto3_errors-0.1.0/src/boto3_errors/customer_profiles.py +44 -0
  115. boto3_errors-0.1.0/src/boto3_errors/databrew.py +50 -0
  116. boto3_errors-0.1.0/src/boto3_errors/dataexchange.py +94 -0
  117. boto3_errors-0.1.0/src/boto3_errors/datapipeline.py +51 -0
  118. boto3_errors-0.1.0/src/boto3_errors/datasync.py +38 -0
  119. boto3_errors-0.1.0/src/boto3_errors/datazone.py +65 -0
  120. boto3_errors-0.1.0/src/boto3_errors/dax.py +207 -0
  121. boto3_errors-0.1.0/src/boto3_errors/deadline.py +176 -0
  122. boto3_errors-0.1.0/src/boto3_errors/detective.py +105 -0
  123. boto3_errors-0.1.0/src/boto3_errors/devicefarm.py +113 -0
  124. boto3_errors-0.1.0/src/boto3_errors/devops_guru.py +117 -0
  125. boto3_errors-0.1.0/src/boto3_errors/directconnect.py +38 -0
  126. boto3_errors-0.1.0/src/boto3_errors/discovery.py +89 -0
  127. boto3_errors-0.1.0/src/boto3_errors/dlm.py +79 -0
  128. boto3_errors-0.1.0/src/boto3_errors/dms.py +180 -0
  129. boto3_errors-0.1.0/src/boto3_errors/docdb.py +406 -0
  130. boto3_errors-0.1.0/src/boto3_errors/docdb_elastic.py +99 -0
  131. boto3_errors-0.1.0/src/boto3_errors/drs.py +159 -0
  132. boto3_errors-0.1.0/src/boto3_errors/ds.py +470 -0
  133. boto3_errors-0.1.0/src/boto3_errors/ds_data.py +99 -0
  134. boto3_errors-0.1.0/src/boto3_errors/dsql.py +129 -0
  135. boto3_errors-0.1.0/src/boto3_errors/dynamodb.py +480 -0
  136. boto3_errors-0.1.0/src/boto3_errors/dynamodbstreams.py +86 -0
  137. boto3_errors-0.1.0/src/boto3_errors/ebs.py +94 -0
  138. boto3_errors-0.1.0/src/boto3_errors/ec2_instance_connect.py +112 -0
  139. boto3_errors-0.1.0/src/boto3_errors/ecr.py +398 -0
  140. boto3_errors-0.1.0/src/boto3_errors/ecr_public.py +222 -0
  141. boto3_errors-0.1.0/src/boto3_errors/ecs.py +269 -0
  142. boto3_errors-0.1.0/src/boto3_errors/efs.py +427 -0
  143. boto3_errors-0.1.0/src/boto3_errors/eks.py +315 -0
  144. boto3_errors-0.1.0/src/boto3_errors/eks_auth.py +82 -0
  145. boto3_errors-0.1.0/src/boto3_errors/elasticache.py +556 -0
  146. boto3_errors-0.1.0/src/boto3_errors/elasticbeanstalk.py +162 -0
  147. boto3_errors-0.1.0/src/boto3_errors/elb.py +163 -0
  148. boto3_errors-0.1.0/src/boto3_errors/elbv2.py +369 -0
  149. boto3_errors-0.1.0/src/boto3_errors/emr.py +40 -0
  150. boto3_errors-0.1.0/src/boto3_errors/emr_containers.py +44 -0
  151. boto3_errors-0.1.0/src/boto3_errors/emr_serverless.py +50 -0
  152. boto3_errors-0.1.0/src/boto3_errors/entityresolution.py +76 -0
  153. boto3_errors-0.1.0/src/boto3_errors/es.py +107 -0
  154. boto3_errors-0.1.0/src/boto3_errors/events.py +105 -0
  155. boto3_errors-0.1.0/src/boto3_errors/evidently.py +122 -0
  156. boto3_errors-0.1.0/src/boto3_errors/evs.py +111 -0
  157. boto3_errors-0.1.0/src/boto3_errors/finspace.py +83 -0
  158. boto3_errors-0.1.0/src/boto3_errors/finspace_data.py +68 -0
  159. boto3_errors-0.1.0/src/boto3_errors/firehose.py +86 -0
  160. boto3_errors-0.1.0/src/boto3_errors/fis.py +41 -0
  161. boto3_errors-0.1.0/src/boto3_errors/fms.py +64 -0
  162. boto3_errors-0.1.0/src/boto3_errors/forecast.py +56 -0
  163. boto3_errors-0.1.0/src/boto3_errors/forecastquery.py +47 -0
  164. boto3_errors-0.1.0/src/boto3_errors/frauddetector.py +63 -0
  165. boto3_errors-0.1.0/src/boto3_errors/freetier.py +47 -0
  166. boto3_errors-0.1.0/src/boto3_errors/fsx.py +381 -0
  167. boto3_errors-0.1.0/src/boto3_errors/gamelift.py +159 -0
  168. boto3_errors-0.1.0/src/boto3_errors/gameliftstreams.py +75 -0
  169. boto3_errors-0.1.0/src/boto3_errors/geo_maps.py +57 -0
  170. boto3_errors-0.1.0/src/boto3_errors/geo_places.py +48 -0
  171. boto3_errors-0.1.0/src/boto3_errors/geo_routes.py +48 -0
  172. boto3_errors-0.1.0/src/boto3_errors/glacier.py +172 -0
  173. boto3_errors-0.1.0/src/boto3_errors/globalaccelerator.py +146 -0
  174. boto3_errors-0.1.0/src/boto3_errors/glue.py +325 -0
  175. boto3_errors-0.1.0/src/boto3_errors/grafana.py +126 -0
  176. boto3_errors-0.1.0/src/boto3_errors/greengrass.py +36 -0
  177. boto3_errors-0.1.0/src/boto3_errors/greengrassv2.py +148 -0
  178. boto3_errors-0.1.0/src/boto3_errors/groundstation.py +70 -0
  179. boto3_errors-0.1.0/src/boto3_errors/guardduty.py +69 -0
  180. boto3_errors-0.1.0/src/boto3_errors/health.py +36 -0
  181. boto3_errors-0.1.0/src/boto3_errors/healthlake.py +53 -0
  182. boto3_errors-0.1.0/src/boto3_errors/iam.py +319 -0
  183. boto3_errors-0.1.0/src/boto3_errors/identitystore.py +196 -0
  184. boto3_errors-0.1.0/src/boto3_errors/imagebuilder.py +159 -0
  185. boto3_errors-0.1.0/src/boto3_errors/importexport.py +152 -0
  186. boto3_errors-0.1.0/src/boto3_errors/inspector.py +198 -0
  187. boto3_errors-0.1.0/src/boto3_errors/inspector2.py +115 -0
  188. boto3_errors-0.1.0/src/boto3_errors/inspector_scan.py +66 -0
  189. boto3_errors-0.1.0/src/boto3_errors/internetmonitor.py +80 -0
  190. boto3_errors-0.1.0/src/boto3_errors/invoicing.py +110 -0
  191. boto3_errors-0.1.0/src/boto3_errors/iot.py +249 -0
  192. boto3_errors-0.1.0/src/boto3_errors/iot_data.py +80 -0
  193. boto3_errors-0.1.0/src/boto3_errors/iot_jobs_data.py +95 -0
  194. boto3_errors-0.1.0/src/boto3_errors/iot_managed_integrations.py +102 -0
  195. boto3_errors-0.1.0/src/boto3_errors/iotanalytics.py +66 -0
  196. boto3_errors-0.1.0/src/boto3_errors/iotdeviceadvisor.py +38 -0
  197. boto3_errors-0.1.0/src/boto3_errors/iotevents.py +78 -0
  198. boto3_errors-0.1.0/src/boto3_errors/iotevents_data.py +44 -0
  199. boto3_errors-0.1.0/src/boto3_errors/iotfleetwise.py +177 -0
  200. boto3_errors-0.1.0/src/boto3_errors/iotsecuretunneling.py +26 -0
  201. boto3_errors-0.1.0/src/boto3_errors/iotsitewise.py +155 -0
  202. boto3_errors-0.1.0/src/boto3_errors/iotthingsgraph.py +49 -0
  203. boto3_errors-0.1.0/src/boto3_errors/iottwinmaker.py +80 -0
  204. boto3_errors-0.1.0/src/boto3_errors/iotwireless.py +81 -0
  205. boto3_errors-0.1.0/src/boto3_errors/ivs.py +116 -0
  206. boto3_errors-0.1.0/src/boto3_errors/ivs_realtime.py +310 -0
  207. boto3_errors-0.1.0/src/boto3_errors/ivschat.py +102 -0
  208. boto3_errors-0.1.0/src/boto3_errors/kafka.py +201 -0
  209. boto3_errors-0.1.0/src/boto3_errors/kafkaconnect.py +83 -0
  210. boto3_errors-0.1.0/src/boto3_errors/kendra.py +131 -0
  211. boto3_errors-0.1.0/src/boto3_errors/kendra_ranking.py +88 -0
  212. boto3_errors-0.1.0/src/boto3_errors/keyspaces.py +70 -0
  213. boto3_errors-0.1.0/src/boto3_errors/keyspacesstreams.py +82 -0
  214. boto3_errors-0.1.0/src/boto3_errors/kinesis.py +146 -0
  215. boto3_errors-0.1.0/src/boto3_errors/kinesis_video_archived_media.py +98 -0
  216. boto3_errors-0.1.0/src/boto3_errors/kinesis_video_media.py +63 -0
  217. boto3_errors-0.1.0/src/boto3_errors/kinesis_video_signaling.py +57 -0
  218. boto3_errors-0.1.0/src/boto3_errors/kinesis_video_webrtc_storage.py +41 -0
  219. boto3_errors-0.1.0/src/boto3_errors/kinesisanalytics.py +114 -0
  220. boto3_errors-0.1.0/src/boto3_errors/kinesisanalyticsv2.py +125 -0
  221. boto3_errors-0.1.0/src/boto3_errors/kinesisvideo.py +129 -0
  222. boto3_errors-0.1.0/src/boto3_errors/kms.py +554 -0
  223. boto3_errors-0.1.0/src/boto3_errors/lakeformation.py +142 -0
  224. boto3_errors-0.1.0/src/boto3_errors/lambda_.py +576 -0
  225. boto3_errors-0.1.0/src/boto3_errors/launch_wizard.py +47 -0
  226. boto3_errors-0.1.0/src/boto3_errors/lex_models.py +98 -0
  227. boto3_errors-0.1.0/src/boto3_errors/lex_runtime.py +101 -0
  228. boto3_errors-0.1.0/src/boto3_errors/lexv2_models.py +74 -0
  229. boto3_errors-0.1.0/src/boto3_errors/lexv2_runtime.py +54 -0
  230. boto3_errors-0.1.0/src/boto3_errors/license_manager.py +135 -0
  231. boto3_errors-0.1.0/src/boto3_errors/license_manager_linux_subscriptions.py +38 -0
  232. boto3_errors-0.1.0/src/boto3_errors/license_manager_user_subscriptions.py +59 -0
  233. boto3_errors-0.1.0/src/boto3_errors/lightsail.py +180 -0
  234. boto3_errors-0.1.0/src/boto3_errors/location.py +75 -0
  235. boto3_errors-0.1.0/src/boto3_errors/logs.py +189 -0
  236. boto3_errors-0.1.0/src/boto3_errors/lookoutequipment.py +68 -0
  237. boto3_errors-0.1.0/src/boto3_errors/m2.py +143 -0
  238. boto3_errors-0.1.0/src/boto3_errors/machinelearning.py +86 -0
  239. boto3_errors-0.1.0/src/boto3_errors/macie2.py +83 -0
  240. boto3_errors-0.1.0/src/boto3_errors/mailmanager.py +56 -0
  241. boto3_errors-0.1.0/src/boto3_errors/managedblockchain.py +97 -0
  242. boto3_errors-0.1.0/src/boto3_errors/managedblockchain_query.py +115 -0
  243. boto3_errors-0.1.0/src/boto3_errors/marketplace_agreement.py +89 -0
  244. boto3_errors-0.1.0/src/boto3_errors/marketplace_catalog.py +82 -0
  245. boto3_errors-0.1.0/src/boto3_errors/marketplace_deployment.py +69 -0
  246. boto3_errors-0.1.0/src/boto3_errors/marketplace_entitlement.py +35 -0
  247. boto3_errors-0.1.0/src/boto3_errors/marketplace_reporting.py +41 -0
  248. boto3_errors-0.1.0/src/boto3_errors/marketplacecommerceanalytics.py +20 -0
  249. boto3_errors-0.1.0/src/boto3_errors/mediaconnect.py +135 -0
  250. boto3_errors-0.1.0/src/boto3_errors/mediaconvert.py +68 -0
  251. boto3_errors-0.1.0/src/boto3_errors/medialive.py +73 -0
  252. boto3_errors-0.1.0/src/boto3_errors/mediapackage.py +50 -0
  253. boto3_errors-0.1.0/src/boto3_errors/mediapackage_vod.py +50 -0
  254. boto3_errors-0.1.0/src/boto3_errors/mediapackagev2.py +79 -0
  255. boto3_errors-0.1.0/src/boto3_errors/mediastore.py +50 -0
  256. boto3_errors-0.1.0/src/boto3_errors/mediastore_data.py +38 -0
  257. boto3_errors-0.1.0/src/boto3_errors/mediatailor.py +20 -0
  258. boto3_errors-0.1.0/src/boto3_errors/medical_imaging.py +56 -0
  259. boto3_errors-0.1.0/src/boto3_errors/memorydb.py +395 -0
  260. boto3_errors-0.1.0/src/boto3_errors/meteringmarketplace.py +160 -0
  261. boto3_errors-0.1.0/src/boto3_errors/mgh.py +103 -0
  262. boto3_errors-0.1.0/src/boto3_errors/mgn.py +174 -0
  263. boto3_errors-0.1.0/src/boto3_errors/migration_hub_refactor_spaces.py +125 -0
  264. boto3_errors-0.1.0/src/boto3_errors/migrationhub_config.py +67 -0
  265. boto3_errors-0.1.0/src/boto3_errors/migrationhuborchestrator.py +53 -0
  266. boto3_errors-0.1.0/src/boto3_errors/migrationhubstrategy.py +77 -0
  267. boto3_errors-0.1.0/src/boto3_errors/mpa.py +91 -0
  268. boto3_errors-0.1.0/src/boto3_errors/mq.py +80 -0
  269. boto3_errors-0.1.0/src/boto3_errors/mturk.py +37 -0
  270. boto3_errors-0.1.0/src/boto3_errors/mwaa.py +83 -0
  271. boto3_errors-0.1.0/src/boto3_errors/mwaa_serverless.py +162 -0
  272. boto3_errors-0.1.0/src/boto3_errors/neptune.py +472 -0
  273. boto3_errors-0.1.0/src/boto3_errors/neptune_graph.py +97 -0
  274. boto3_errors-0.1.0/src/boto3_errors/neptunedata.py +746 -0
  275. boto3_errors-0.1.0/src/boto3_errors/network_firewall.py +102 -0
  276. boto3_errors-0.1.0/src/boto3_errors/networkflowmonitor.py +56 -0
  277. boto3_errors-0.1.0/src/boto3_errors/networkmanager.py +135 -0
  278. boto3_errors-0.1.0/src/boto3_errors/networkmonitor.py +56 -0
  279. boto3_errors-0.1.0/src/boto3_errors/notifications.py +111 -0
  280. boto3_errors-0.1.0/src/boto3_errors/notificationscontacts.py +121 -0
  281. boto3_errors-0.1.0/src/boto3_errors/nova_act.py +134 -0
  282. boto3_errors-0.1.0/src/boto3_errors/oam.py +92 -0
  283. boto3_errors-0.1.0/src/boto3_errors/observabilityadmin.py +149 -0
  284. boto3_errors-0.1.0/src/boto3_errors/odb.py +128 -0
  285. boto3_errors-0.1.0/src/boto3_errors/omics.py +74 -0
  286. boto3_errors-0.1.0/src/boto3_errors/opensearch.py +126 -0
  287. boto3_errors-0.1.0/src/boto3_errors/opensearchserverless.py +79 -0
  288. boto3_errors-0.1.0/src/boto3_errors/organizations.py +709 -0
  289. boto3_errors-0.1.0/src/boto3_errors/osis.py +71 -0
  290. boto3_errors-0.1.0/src/boto3_errors/outposts.py +60 -0
  291. boto3_errors-0.1.0/src/boto3_errors/panorama.py +125 -0
  292. boto3_errors-0.1.0/src/boto3_errors/partnercentral_account.py +118 -0
  293. boto3_errors-0.1.0/src/boto3_errors/partnercentral_benefits.py +93 -0
  294. boto3_errors-0.1.0/src/boto3_errors/partnercentral_channel.py +119 -0
  295. boto3_errors-0.1.0/src/boto3_errors/partnercentral_selling.py +124 -0
  296. boto3_errors-0.1.0/src/boto3_errors/payment_cryptography.py +118 -0
  297. boto3_errors-0.1.0/src/boto3_errors/payment_cryptography_data.py +68 -0
  298. boto3_errors-0.1.0/src/boto3_errors/pca_connector_ad.py +141 -0
  299. boto3_errors-0.1.0/src/boto3_errors/pca_connector_scep.py +126 -0
  300. boto3_errors-0.1.0/src/boto3_errors/pcs.py +161 -0
  301. boto3_errors-0.1.0/src/boto3_errors/personalize.py +65 -0
  302. boto3_errors-0.1.0/src/boto3_errors/personalize_events.py +32 -0
  303. boto3_errors-0.1.0/src/boto3_errors/personalize_runtime.py +26 -0
  304. boto3_errors-0.1.0/src/boto3_errors/pi.py +32 -0
  305. boto3_errors-0.1.0/src/boto3_errors/pinpoint.py +102 -0
  306. boto3_errors-0.1.0/src/boto3_errors/pinpoint_email.py +80 -0
  307. boto3_errors-0.1.0/src/boto3_errors/pinpoint_sms_voice.py +56 -0
  308. boto3_errors-0.1.0/src/boto3_errors/pinpoint_sms_voice_v2.py +120 -0
  309. boto3_errors-0.1.0/src/boto3_errors/pipes.py +111 -0
  310. boto3_errors-0.1.0/src/boto3_errors/polly.py +182 -0
  311. boto3_errors-0.1.0/src/boto3_errors/pricing.py +65 -0
  312. boto3_errors-0.1.0/src/boto3_errors/proton.py +59 -0
  313. boto3_errors-0.1.0/src/boto3_errors/py.typed +0 -0
  314. boto3_errors-0.1.0/src/boto3_errors/qapps.py +150 -0
  315. boto3_errors-0.1.0/src/boto3_errors/qbusiness.py +138 -0
  316. boto3_errors-0.1.0/src/boto3_errors/qconnect.py +112 -0
  317. boto3_errors-0.1.0/src/boto3_errors/quicksight.py +324 -0
  318. boto3_errors-0.1.0/src/boto3_errors/ram.py +233 -0
  319. boto3_errors-0.1.0/src/boto3_errors/rbin.py +67 -0
  320. boto3_errors-0.1.0/src/boto3_errors/rds.py +1063 -0
  321. boto3_errors-0.1.0/src/boto3_errors/rds_data.py +141 -0
  322. boto3_errors-0.1.0/src/boto3_errors/redshift.py +1039 -0
  323. boto3_errors-0.1.0/src/boto3_errors/redshift_data.py +86 -0
  324. boto3_errors-0.1.0/src/boto3_errors/redshift_serverless.py +115 -0
  325. boto3_errors-0.1.0/src/boto3_errors/rekognition.py +206 -0
  326. boto3_errors-0.1.0/src/boto3_errors/repostspace.py +126 -0
  327. boto3_errors-0.1.0/src/boto3_errors/resiliencehub.py +100 -0
  328. boto3_errors-0.1.0/src/boto3_errors/resource_explorer_2.py +101 -0
  329. boto3_errors-0.1.0/src/boto3_errors/resource_groups.py +59 -0
  330. boto3_errors-0.1.0/src/boto3_errors/resourcegroupstaggingapi.py +86 -0
  331. boto3_errors-0.1.0/src/boto3_errors/rolesanywhere.py +38 -0
  332. boto3_errors-0.1.0/src/boto3_errors/route53.py +635 -0
  333. boto3_errors-0.1.0/src/boto3_errors/route53_recovery_cluster.py +121 -0
  334. boto3_errors-0.1.0/src/boto3_errors/route53_recovery_control_config.py +66 -0
  335. boto3_errors-0.1.0/src/boto3_errors/route53_recovery_readiness.py +50 -0
  336. boto3_errors-0.1.0/src/boto3_errors/route53domains.py +73 -0
  337. boto3_errors-0.1.0/src/boto3_errors/route53globalresolver.py +136 -0
  338. boto3_errors-0.1.0/src/boto3_errors/route53profiles.py +97 -0
  339. boto3_errors-0.1.0/src/boto3_errors/route53resolver.py +171 -0
  340. boto3_errors-0.1.0/src/boto3_errors/rtbfabric.py +68 -0
  341. boto3_errors-0.1.0/src/boto3_errors/rum.py +123 -0
  342. boto3_errors-0.1.0/src/boto3_errors/s3.py +153 -0
  343. boto3_errors-0.1.0/src/boto3_errors/s3control.py +84 -0
  344. boto3_errors-0.1.0/src/boto3_errors/s3outposts.py +59 -0
  345. boto3_errors-0.1.0/src/boto3_errors/s3tables.py +69 -0
  346. boto3_errors-0.1.0/src/boto3_errors/s3vectors.py +126 -0
  347. boto3_errors-0.1.0/src/boto3_errors/sagemaker.py +44 -0
  348. boto3_errors-0.1.0/src/boto3_errors/sagemaker_a2i_runtime.py +66 -0
  349. boto3_errors-0.1.0/src/boto3_errors/sagemaker_edge.py +23 -0
  350. boto3_errors-0.1.0/src/boto3_errors/sagemaker_featurestore_runtime.py +47 -0
  351. boto3_errors-0.1.0/src/boto3_errors/sagemaker_geospatial.py +89 -0
  352. boto3_errors-0.1.0/src/boto3_errors/sagemaker_runtime.py +108 -0
  353. boto3_errors-0.1.0/src/boto3_errors/savingsplans.py +38 -0
  354. boto3_errors-0.1.0/src/boto3_errors/scheduler.py +50 -0
  355. boto3_errors-0.1.0/src/boto3_errors/schemas.py +114 -0
  356. boto3_errors-0.1.0/src/boto3_errors/sdb.py +187 -0
  357. boto3_errors-0.1.0/src/boto3_errors/secretsmanager.py +105 -0
  358. boto3_errors-0.1.0/src/boto3_errors/security_ir.py +119 -0
  359. boto3_errors-0.1.0/src/boto3_errors/securityhub.py +158 -0
  360. boto3_errors-0.1.0/src/boto3_errors/securitylake.py +111 -0
  361. boto3_errors-0.1.0/src/boto3_errors/serverlessrepo.py +83 -0
  362. boto3_errors-0.1.0/src/boto3_errors/service_quotas.py +132 -0
  363. boto3_errors-0.1.0/src/boto3_errors/servicecatalog.py +76 -0
  364. boto3_errors-0.1.0/src/boto3_errors/servicecatalog_appregistry.py +58 -0
  365. boto3_errors-0.1.0/src/boto3_errors/servicediscovery.py +165 -0
  366. boto3_errors-0.1.0/src/boto3_errors/ses.py +455 -0
  367. boto3_errors-0.1.0/src/boto3_errors/sesv2.py +101 -0
  368. boto3_errors-0.1.0/src/boto3_errors/shield.py +157 -0
  369. boto3_errors-0.1.0/src/boto3_errors/signer.py +125 -0
  370. boto3_errors-0.1.0/src/boto3_errors/signin.py +106 -0
  371. boto3_errors-0.1.0/src/boto3_errors/simspaceweaver.py +49 -0
  372. boto3_errors-0.1.0/src/boto3_errors/sms_voice.py +56 -0
  373. boto3_errors-0.1.0/src/boto3_errors/snow_device_management.py +53 -0
  374. boto3_errors-0.1.0/src/boto3_errors/snowball.py +129 -0
  375. boto3_errors-0.1.0/src/boto3_errors/sns.py +265 -0
  376. boto3_errors-0.1.0/src/boto3_errors/socialmessaging.py +71 -0
  377. boto3_errors-0.1.0/src/boto3_errors/sqs.py +221 -0
  378. boto3_errors-0.1.0/src/boto3_errors/ssm.py +1216 -0
  379. boto3_errors-0.1.0/src/boto3_errors/ssm_contacts.py +142 -0
  380. boto3_errors-0.1.0/src/boto3_errors/ssm_guiconnect.py +56 -0
  381. boto3_errors-0.1.0/src/boto3_errors/ssm_incidents.py +114 -0
  382. boto3_errors-0.1.0/src/boto3_errors/ssm_quicksetup.py +56 -0
  383. boto3_errors-0.1.0/src/boto3_errors/ssm_sap.py +44 -0
  384. boto3_errors-0.1.0/src/boto3_errors/sso.py +47 -0
  385. boto3_errors-0.1.0/src/boto3_errors/sso_admin.py +90 -0
  386. boto3_errors-0.1.0/src/boto3_errors/sso_oidc.py +320 -0
  387. boto3_errors-0.1.0/src/boto3_errors/stepfunctions.py +293 -0
  388. boto3_errors-0.1.0/src/boto3_errors/storagegateway.py +60 -0
  389. boto3_errors-0.1.0/src/boto3_errors/sts.py +143 -0
  390. boto3_errors-0.1.0/src/boto3_errors/supplychain.py +56 -0
  391. boto3_errors-0.1.0/src/boto3_errors/support.py +89 -0
  392. boto3_errors-0.1.0/src/boto3_errors/support_app.py +76 -0
  393. boto3_errors-0.1.0/src/boto3_errors/swf.py +113 -0
  394. boto3_errors-0.1.0/src/boto3_errors/synthetics.py +80 -0
  395. boto3_errors-0.1.0/src/boto3_errors/taxsettings.py +84 -0
  396. boto3_errors-0.1.0/src/boto3_errors/textract.py +181 -0
  397. boto3_errors-0.1.0/src/boto3_errors/timestream_influxdb.py +90 -0
  398. boto3_errors-0.1.0/src/boto3_errors/timestream_query.py +73 -0
  399. boto3_errors-0.1.0/src/boto3_errors/timestream_write.py +102 -0
  400. boto3_errors-0.1.0/src/boto3_errors/tnb.py +53 -0
  401. boto3_errors-0.1.0/src/boto3_errors/transcribe.py +60 -0
  402. boto3_errors-0.1.0/src/boto3_errors/transfer.py +101 -0
  403. boto3_errors-0.1.0/src/boto3_errors/translate.py +161 -0
  404. boto3_errors-0.1.0/src/boto3_errors/trustedadvisor.py +53 -0
  405. boto3_errors-0.1.0/src/boto3_errors/verifiedpermissions.py +166 -0
  406. boto3_errors-0.1.0/src/boto3_errors/voice_id.py +100 -0
  407. boto3_errors-0.1.0/src/boto3_errors/vpc_lattice.py +132 -0
  408. boto3_errors-0.1.0/src/boto3_errors/waf.py +258 -0
  409. boto3_errors-0.1.0/src/boto3_errors/waf_regional.py +267 -0
  410. boto3_errors-0.1.0/src/boto3_errors/wafv2.py +259 -0
  411. boto3_errors-0.1.0/src/boto3_errors/wellarchitected.py +104 -0
  412. boto3_errors-0.1.0/src/boto3_errors/wickr.py +91 -0
  413. boto3_errors-0.1.0/src/boto3_errors/wisdom.py +91 -0
  414. boto3_errors-0.1.0/src/boto3_errors/workdocs.py +187 -0
  415. boto3_errors-0.1.0/src/boto3_errors/workmail.py +181 -0
  416. boto3_errors-0.1.0/src/boto3_errors/workmailmessageflow.py +52 -0
  417. boto3_errors-0.1.0/src/boto3_errors/workspaces.py +190 -0
  418. boto3_errors-0.1.0/src/boto3_errors/workspaces_instances.py +126 -0
  419. boto3_errors-0.1.0/src/boto3_errors/workspaces_thin_client.py +130 -0
  420. boto3_errors-0.1.0/src/boto3_errors/workspaces_web.py +137 -0
  421. boto3_errors-0.1.0/src/boto3_errors/xray.py +95 -0
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2026 Adrián Tomás
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,117 @@
1
+ Metadata-Version: 2.4
2
+ Name: boto3-errors
3
+ Version: 0.1.0
4
+ Summary: Typed, statically-importable exception classes for every AWS service
5
+ Keywords: aws,boto3,botocore,errors,exceptions,types
6
+ Author: Adrián Tomás
7
+ Author-email: Adrián Tomás <22175056+adriantomas@users.noreply.github.com>
8
+ License-Expression: MIT
9
+ License-File: LICENSE
10
+ Classifier: Development Status :: 5 - Production/Stable
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Information Technology
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python
15
+ Classifier: Programming Language :: Python :: Implementation :: CPython
16
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
24
+ Classifier: Operating System :: OS Independent
25
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
26
+ Classifier: Topic :: Software Development :: Libraries
27
+ Classifier: Topic :: Software Development
28
+ Classifier: Typing :: Typed
29
+ Requires-Dist: botocore>=1.42.46
30
+ Requires-Python: >=3.10, <3.15
31
+ Project-URL: Homepage, https://github.com/adriantomas/boto3-errors
32
+ Project-URL: Repository, https://github.com/adriantomas/boto3-errors
33
+ Project-URL: Issues, https://github.com/adriantomas/boto3-errors/issues
34
+ Description-Content-Type: text/markdown
35
+
36
+ # (Better) boto3 errors
37
+
38
+ [![Python 3.10 | 3.11 | 3.12 | 3.13 | 3.14](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue.svg)](https://www.python.org/downloads/)
39
+ [![PyPI](https://img.shields.io/pypi/v/boto3_errors.svg)](https://pypi.org/project/boto3_errors/)
40
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
41
+
42
+ Typed, statically-importable exception classes for every AWS service.
43
+
44
+ ## Install
45
+
46
+ ```bash
47
+ pip install boto3-errors
48
+ ```
49
+
50
+ ## Quick start
51
+
52
+ ```python
53
+ import boto3
54
+ from boto3_errors import patch_client
55
+ from boto3_errors.dynamodb import ConditionalCheckFailedException
56
+
57
+ client = boto3.client("dynamodb")
58
+ patch_client(client)
59
+
60
+ try:
61
+ client.put_item(
62
+ TableName="users",
63
+ Item={"pk": {"S": "user#1"}, "name": {"S": "Ada"}},
64
+ ConditionExpression="attribute_not_exists(pk)",
65
+ )
66
+ except ConditionalCheckFailedException as e:
67
+ print(e.message) # "The conditional request failed"
68
+ print(e.error_code) # "ConditionalCheckFailedException"
69
+ print(e.item) # {"pk": {"S": "user#1"}, "name": {"S": "Ada"}}
70
+ ```
71
+
72
+ ## The problem
73
+
74
+ Every boto3 error comes back as a `ClientError`. The only way to distinguish them is by parsing `e.response["Error"]["Code"]` — a stringly-typed dict lookup with no autocomplete, no type checking, and no IDE support. A typo in the error code string won't be caught until it crashes.
75
+
76
+ ## What you get
77
+
78
+ All AWS services with exception classes auto-generated from botocore's service model.
79
+
80
+ ### Exception hierarchy
81
+
82
+ ```text
83
+ ClientError # botocore base — still works
84
+ └── Boto3Error # boto3-errors base
85
+ └── DynamoDBError # per-service base
86
+ ├── ConditionalCheckFailedException
87
+ ├── ResourceNotFoundException
88
+ ├── TransactionCanceledException
89
+ └── ...
90
+ ```
91
+
92
+ Every exception is a `ClientError` subclass, so existing `except ClientError` handlers keep working.
93
+
94
+ ### Built-in properties
95
+
96
+ Every `Boto3Error` exposes:
97
+
98
+ | Property | Type | Source |
99
+ | ------------------ | ----- | ----------------------------------- |
100
+ | `message` | `str` | `Error.Message` |
101
+ | `error_code` | `str` | `Error.Code` |
102
+ | `http_status_code` | `int` | `ResponseMetadata.HTTPStatusCode` |
103
+ | `request_id` | `str` | `ResponseMetadata.RequestId` |
104
+
105
+ ### Service-specific properties
106
+
107
+ Some exceptions expose extra fields from the API response:
108
+
109
+ ```python
110
+ from boto3_errors.dynamodb import (
111
+ ConditionalCheckFailedException,
112
+ TransactionCanceledException,
113
+ )
114
+
115
+ # ConditionalCheckFailedException.item -> dict | None
116
+ # TransactionCanceledException.cancellation_reasons -> list | None
117
+ ```
@@ -0,0 +1,82 @@
1
+ # (Better) boto3 errors
2
+
3
+ [![Python 3.10 | 3.11 | 3.12 | 3.13 | 3.14](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue.svg)](https://www.python.org/downloads/)
4
+ [![PyPI](https://img.shields.io/pypi/v/boto3_errors.svg)](https://pypi.org/project/boto3_errors/)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+
7
+ Typed, statically-importable exception classes for every AWS service.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ pip install boto3-errors
13
+ ```
14
+
15
+ ## Quick start
16
+
17
+ ```python
18
+ import boto3
19
+ from boto3_errors import patch_client
20
+ from boto3_errors.dynamodb import ConditionalCheckFailedException
21
+
22
+ client = boto3.client("dynamodb")
23
+ patch_client(client)
24
+
25
+ try:
26
+ client.put_item(
27
+ TableName="users",
28
+ Item={"pk": {"S": "user#1"}, "name": {"S": "Ada"}},
29
+ ConditionExpression="attribute_not_exists(pk)",
30
+ )
31
+ except ConditionalCheckFailedException as e:
32
+ print(e.message) # "The conditional request failed"
33
+ print(e.error_code) # "ConditionalCheckFailedException"
34
+ print(e.item) # {"pk": {"S": "user#1"}, "name": {"S": "Ada"}}
35
+ ```
36
+
37
+ ## The problem
38
+
39
+ Every boto3 error comes back as a `ClientError`. The only way to distinguish them is by parsing `e.response["Error"]["Code"]` — a stringly-typed dict lookup with no autocomplete, no type checking, and no IDE support. A typo in the error code string won't be caught until it crashes.
40
+
41
+ ## What you get
42
+
43
+ All AWS services with exception classes auto-generated from botocore's service model.
44
+
45
+ ### Exception hierarchy
46
+
47
+ ```text
48
+ ClientError # botocore base — still works
49
+ └── Boto3Error # boto3-errors base
50
+ └── DynamoDBError # per-service base
51
+ ├── ConditionalCheckFailedException
52
+ ├── ResourceNotFoundException
53
+ ├── TransactionCanceledException
54
+ └── ...
55
+ ```
56
+
57
+ Every exception is a `ClientError` subclass, so existing `except ClientError` handlers keep working.
58
+
59
+ ### Built-in properties
60
+
61
+ Every `Boto3Error` exposes:
62
+
63
+ | Property | Type | Source |
64
+ | ------------------ | ----- | ----------------------------------- |
65
+ | `message` | `str` | `Error.Message` |
66
+ | `error_code` | `str` | `Error.Code` |
67
+ | `http_status_code` | `int` | `ResponseMetadata.HTTPStatusCode` |
68
+ | `request_id` | `str` | `ResponseMetadata.RequestId` |
69
+
70
+ ### Service-specific properties
71
+
72
+ Some exceptions expose extra fields from the API response:
73
+
74
+ ```python
75
+ from boto3_errors.dynamodb import (
76
+ ConditionalCheckFailedException,
77
+ TransactionCanceledException,
78
+ )
79
+
80
+ # ConditionalCheckFailedException.item -> dict | None
81
+ # TransactionCanceledException.cancellation_reasons -> list | None
82
+ ```
@@ -0,0 +1,99 @@
1
+ [project]
2
+ name = "boto3-errors"
3
+ version = "0.1.0"
4
+ description = "Typed, statically-importable exception classes for every AWS service"
5
+ readme = "README.md"
6
+ license = "MIT"
7
+ license-files = ["LICENSE"]
8
+ keywords = ["aws", "boto3", "botocore", "errors", "exceptions", "types"]
9
+ authors = [
10
+ { name = "Adrián Tomás", email = "22175056+adriantomas@users.noreply.github.com" }
11
+ ]
12
+ requires-python = ">=3.10,<3.15"
13
+ classifiers = [
14
+ "Development Status :: 5 - Production/Stable",
15
+ "Intended Audience :: Developers",
16
+ "Intended Audience :: Information Technology",
17
+ "License :: OSI Approved :: MIT License",
18
+ "Programming Language :: Python",
19
+ "Programming Language :: Python :: Implementation :: CPython",
20
+ "Programming Language :: Python :: Implementation :: PyPy",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3 :: Only",
23
+ "Programming Language :: Python :: 3.10",
24
+ "Programming Language :: Python :: 3.11",
25
+ "Programming Language :: Python :: 3.12",
26
+ "Programming Language :: Python :: 3.13",
27
+ "Programming Language :: Python :: 3.14",
28
+ "Operating System :: OS Independent",
29
+ "Topic :: Software Development :: Libraries :: Python Modules",
30
+ "Topic :: Software Development :: Libraries",
31
+ "Topic :: Software Development",
32
+ "Typing :: Typed",
33
+ ]
34
+ dependencies = [
35
+ "botocore>=1.42.46",
36
+ ]
37
+
38
+ [project.urls]
39
+ Homepage = "https://github.com/adriantomas/boto3-errors"
40
+ Repository = "https://github.com/adriantomas/boto3-errors"
41
+ Issues = "https://github.com/adriantomas/boto3-errors/issues"
42
+
43
+ [dependency-groups]
44
+ dev = [
45
+ "pytest>=9.0.0",
46
+ "mypy>=1.19",
47
+ "prek>=0.3.2",
48
+ "ruff>=0.15.0",
49
+ "commitizen>=4.13.6",
50
+ "mdformat>=1.0.0",
51
+ "mdformat-ruff>=0.1.3",
52
+ "botocore-stubs>=1.42.41",
53
+ "boto3>=1.38.0",
54
+ "testcontainers[generic]>=4.0.0",
55
+ ]
56
+
57
+ [build-system]
58
+ requires = ["uv_build>=0.10.0,<0.11.0"]
59
+ build-backend = "uv_build"
60
+
61
+ [tool.uv]
62
+ required-version = ">=0.10.0"
63
+
64
+ [tool.mypy]
65
+ strict = true
66
+
67
+ [tool.pytest.ini_options]
68
+ markers = ["integration: requires Docker"]
69
+
70
+ [tool.ruff]
71
+ fix = true
72
+ # Exclude auto-generated service modules — they are produced by scripts/generate.py
73
+ # and should not be hand-edited or linted.
74
+ exclude = ["src/boto3_errors/[!_]*.py"]
75
+
76
+ [tool.ruff.lint]
77
+ select = ["ALL"]
78
+ ignore = [
79
+ "TC002", # typing-only-third-party-import
80
+ "TC003", # typing-only-standard-library-import
81
+ "D203", # incorrect-blank-line-before-class (D203)
82
+ "D213", # multi-line-summary-second-line (D213)
83
+ "COM812", # missing-trailing-comma
84
+ "N818", # error-suffix-on-exception-name
85
+ ]
86
+
87
+ [tool.ruff.lint.per-file-ignores]
88
+ "src/boto3_errors/_patch.py" = [
89
+ "SLF001", # private-member-access — we must monkey-patch client internals
90
+ ]
91
+ "tests/**/*.py" = [
92
+ "D100", # undocumented-public-module
93
+ "D101", # undocumented-public-class
94
+ "D102", # undocumented-public-method
95
+ "D104", # undocumented-public-package
96
+ "S101", # use of assert detected
97
+ "SLF001", # private-member-access — tests must inspect internals
98
+ "INP001", # implicit-namespace-package — tests don't need __init__.py
99
+ ]
@@ -0,0 +1,6 @@
1
+ """Typed, statically-importable exception classes for every AWS service."""
2
+
3
+ from boto3_errors._base import Boto3Error
4
+ from boto3_errors._patch import patch_client
5
+
6
+ __all__ = ["Boto3Error", "patch_client"]
@@ -0,0 +1,40 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+
5
+ from botocore.exceptions import ClientError
6
+
7
+
8
+ class Boto3Error(ClientError):
9
+ """Base class for all typed boto3 exceptions.
10
+
11
+ Inherits from ClientError so existing ``except ClientError`` handlers
12
+ still catch these exceptions.
13
+ """
14
+
15
+ _SERVICE: str = ""
16
+ _ERROR_CODE: str = ""
17
+
18
+ # Widen from botocore-stubs' TypedDict so that generated properties
19
+ # can ``self.response.get("SomeField")`` without returning ``object``.
20
+ response: dict[str, Any] # type: ignore[assignment]
21
+
22
+ @property
23
+ def message(self) -> str:
24
+ """Human-readable error message from the ``Error.Message`` field."""
25
+ return self.response.get("Error", {}).get("Message", "") # type: ignore[no-any-return]
26
+
27
+ @property
28
+ def error_code(self) -> str:
29
+ """AWS error code from the ``Error.Code`` field."""
30
+ return self.response.get("Error", {}).get("Code", "") # type: ignore[no-any-return]
31
+
32
+ @property
33
+ def http_status_code(self) -> int:
34
+ """HTTP status code from ``ResponseMetadata``."""
35
+ return self.response.get("ResponseMetadata", {}).get("HTTPStatusCode", 0) # type: ignore[no-any-return]
36
+
37
+ @property
38
+ def request_id(self) -> str:
39
+ """AWS request ID from ``ResponseMetadata``."""
40
+ return self.response.get("ResponseMetadata", {}).get("RequestId", "") # type: ignore[no-any-return]
@@ -0,0 +1,54 @@
1
+ import functools
2
+ import importlib
3
+ from typing import Any
4
+
5
+ from botocore.client import BaseClient
6
+ from botocore.exceptions import ClientError
7
+
8
+
9
+ def patch_client(client: BaseClient) -> None:
10
+ """Wrap *client*'s ``_make_api_call``.
11
+
12
+ Re-raises ``ClientError`` as a typed :class:`~boto3_errors._base.Boto3Error`
13
+ subclass when a matching exception class exists.
14
+
15
+ Safe to call more than once on the same client (subsequent calls are
16
+ no-ops).
17
+ """
18
+ if getattr(client, "_boto3_errors_patched", False):
19
+ return
20
+
21
+ service: str = client._service_model.service_name # type: ignore[attr-defined]
22
+ module_name = _service_to_module(service)
23
+
24
+ try:
25
+ mod = importlib.import_module(f"boto3_errors.{module_name}")
26
+ except ModuleNotFoundError:
27
+ # No generated module for this service — nothing to patch.
28
+ return
29
+
30
+ exceptions: dict[str, type] = getattr(mod, "EXCEPTIONS", {})
31
+ original = client._make_api_call # type: ignore[attr-defined]
32
+
33
+ @functools.wraps(original)
34
+ def _patched_make_api_call(
35
+ operation_name: str, api_params: dict[str, Any]
36
+ ) -> dict[str, Any]:
37
+ try:
38
+ return original(operation_name, api_params) # type: ignore[no-any-return]
39
+ except ClientError as e:
40
+ code = e.response.get("Error", {}).get("Code", "")
41
+ exc_cls = exceptions.get(code)
42
+ if exc_cls is not None:
43
+ raise exc_cls(e.response, e.operation_name) from e
44
+ raise
45
+
46
+ client._make_api_call = _patched_make_api_call # type: ignore[attr-defined]
47
+ client._boto3_errors_patched = True # type: ignore[attr-defined]
48
+
49
+
50
+ def _service_to_module(service: str) -> str:
51
+ name = service.replace("-", "_")
52
+ if name == "lambda":
53
+ name = "lambda_"
54
+ return name
@@ -0,0 +1,118 @@
1
+ # Auto-generated. Do not edit manually.
2
+ from __future__ import annotations
3
+
4
+ from typing import Any
5
+
6
+ from boto3_errors._base import Boto3Error
7
+
8
+
9
+ class AccessAnalyzerError(Boto3Error):
10
+ _SERVICE = "accessanalyzer"
11
+
12
+
13
+ class AccessDeniedException(AccessAnalyzerError):
14
+ """You do not have sufficient access to perform this action."""
15
+ _ERROR_CODE = "AccessDeniedException"
16
+
17
+
18
+ class ConflictException(AccessAnalyzerError):
19
+ """A conflict exception error."""
20
+ _ERROR_CODE = "ConflictException"
21
+
22
+ @property
23
+ def resource_id(self) -> str | None:
24
+ """The ID of the resource."""
25
+ return self.response.get("resourceId")
26
+
27
+ @property
28
+ def resource_type(self) -> str | None:
29
+ """The resource type."""
30
+ return self.response.get("resourceType")
31
+
32
+
33
+ class InternalServerException(AccessAnalyzerError):
34
+ """Internal server error."""
35
+ _ERROR_CODE = "InternalServerException"
36
+
37
+ @property
38
+ def retry_after_seconds(self) -> int | None:
39
+ """The seconds to wait to retry."""
40
+ return self.response.get("retryAfterSeconds")
41
+
42
+
43
+ class InvalidParameterException(AccessAnalyzerError):
44
+ """The specified parameter is invalid."""
45
+ _ERROR_CODE = "InvalidParameterException"
46
+
47
+
48
+ class ResourceNotFoundException(AccessAnalyzerError):
49
+ """The specified resource could not be found."""
50
+ _ERROR_CODE = "ResourceNotFoundException"
51
+
52
+ @property
53
+ def resource_id(self) -> str | None:
54
+ """The ID of the resource."""
55
+ return self.response.get("resourceId")
56
+
57
+ @property
58
+ def resource_type(self) -> str | None:
59
+ """The type of the resource."""
60
+ return self.response.get("resourceType")
61
+
62
+
63
+ class ServiceQuotaExceededException(AccessAnalyzerError):
64
+ """Service quote met error."""
65
+ _ERROR_CODE = "ServiceQuotaExceededException"
66
+
67
+ @property
68
+ def resource_id(self) -> str | None:
69
+ """The resource ID."""
70
+ return self.response.get("resourceId")
71
+
72
+ @property
73
+ def resource_type(self) -> str | None:
74
+ """The resource type."""
75
+ return self.response.get("resourceType")
76
+
77
+
78
+ class ThrottlingException(AccessAnalyzerError):
79
+ """Throttling limit exceeded error."""
80
+ _ERROR_CODE = "ThrottlingException"
81
+
82
+ @property
83
+ def retry_after_seconds(self) -> int | None:
84
+ """The seconds to wait to retry."""
85
+ return self.response.get("retryAfterSeconds")
86
+
87
+
88
+ class UnprocessableEntityException(AccessAnalyzerError):
89
+ """The specified entity could not be processed."""
90
+ _ERROR_CODE = "UnprocessableEntityException"
91
+
92
+
93
+ class ValidationException(AccessAnalyzerError):
94
+ """Validation exception error."""
95
+ _ERROR_CODE = "ValidationException"
96
+
97
+ @property
98
+ def reason(self) -> str | None:
99
+ """The reason for the exception."""
100
+ return self.response.get("reason")
101
+
102
+ @property
103
+ def field_list(self) -> list[Any] | None:
104
+ """A list of fields that didn't validate."""
105
+ return self.response.get("fieldList")
106
+
107
+
108
+ EXCEPTIONS: dict[str, type[AccessAnalyzerError]] = {
109
+ "AccessDeniedException": AccessDeniedException,
110
+ "ConflictException": ConflictException,
111
+ "InternalServerException": InternalServerException,
112
+ "InvalidParameterException": InvalidParameterException,
113
+ "ResourceNotFoundException": ResourceNotFoundException,
114
+ "ServiceQuotaExceededException": ServiceQuotaExceededException,
115
+ "ThrottlingException": ThrottlingException,
116
+ "UnprocessableEntityException": UnprocessableEntityException,
117
+ "ValidationException": ValidationException,
118
+ }
@@ -0,0 +1,113 @@
1
+ # Auto-generated. Do not edit manually.
2
+ from __future__ import annotations
3
+
4
+ from typing import Any
5
+
6
+ from boto3_errors._base import Boto3Error
7
+
8
+
9
+ class AccountError(Boto3Error):
10
+ _SERVICE = "account"
11
+
12
+
13
+ class AccessDeniedException(AccountError):
14
+ """The operation failed because the calling identity doesn't have the minimum required
15
+ permissions.
16
+ """
17
+
18
+ _ERROR_CODE = "AccessDeniedException"
19
+
20
+ @property
21
+ def error_type(self) -> str | None:
22
+ """The value populated to the `x-amzn-ErrorType` response header by API Gateway."""
23
+ return self.response.get("errorType")
24
+
25
+
26
+ class ConflictException(AccountError):
27
+ """The request could not be processed because of a conflict in the current status of
28
+ the resource. For example, this happens if you try to enable a Region that is
29
+ currently being disabled (in a status of DISABLING) or if you try to change an
30
+ account’s root user email to an email address which is already in use.
31
+ """
32
+
33
+ _ERROR_CODE = "ConflictException"
34
+
35
+ @property
36
+ def error_type(self) -> str | None:
37
+ """The value populated to the `x-amzn-ErrorType` response header by API Gateway."""
38
+ return self.response.get("errorType")
39
+
40
+
41
+ class InternalServerException(AccountError):
42
+ """The operation failed because of an error internal to Amazon Web Services. Try your
43
+ operation again later.
44
+ """
45
+
46
+ _ERROR_CODE = "InternalServerException"
47
+
48
+ @property
49
+ def error_type(self) -> str | None:
50
+ """The value populated to the `x-amzn-ErrorType` response header by API Gateway."""
51
+ return self.response.get("errorType")
52
+
53
+
54
+ class ResourceNotFoundException(AccountError):
55
+ """The operation failed because it specified a resource that can't be found."""
56
+ _ERROR_CODE = "ResourceNotFoundException"
57
+
58
+ @property
59
+ def error_type(self) -> str | None:
60
+ """The value populated to the `x-amzn-ErrorType` response header by API Gateway."""
61
+ return self.response.get("errorType")
62
+
63
+
64
+ class ResourceUnavailableException(AccountError):
65
+ """The operation failed because it specified a resource that is not currently
66
+ available.
67
+ """
68
+
69
+ _ERROR_CODE = "ResourceUnavailableException"
70
+
71
+ @property
72
+ def error_type(self) -> str | None:
73
+ """The value populated to the `x-amzn-ErrorType` response header by API Gateway."""
74
+ return self.response.get("errorType")
75
+
76
+
77
+ class TooManyRequestsException(AccountError):
78
+ """The operation failed because it was called too frequently and exceeded a throttle
79
+ limit.
80
+ """
81
+
82
+ _ERROR_CODE = "TooManyRequestsException"
83
+
84
+ @property
85
+ def error_type(self) -> str | None:
86
+ """The value populated to the `x-amzn-ErrorType` response header by API Gateway."""
87
+ return self.response.get("errorType")
88
+
89
+
90
+ class ValidationException(AccountError):
91
+ """The operation failed because one of the input parameters was invalid."""
92
+ _ERROR_CODE = "ValidationException"
93
+
94
+ @property
95
+ def field_list(self) -> list[Any] | None:
96
+ """The field where the invalid entry was detected."""
97
+ return self.response.get("fieldList")
98
+
99
+ @property
100
+ def reason(self) -> str | None:
101
+ """The reason that validation failed."""
102
+ return self.response.get("reason")
103
+
104
+
105
+ EXCEPTIONS: dict[str, type[AccountError]] = {
106
+ "AccessDeniedException": AccessDeniedException,
107
+ "ConflictException": ConflictException,
108
+ "InternalServerException": InternalServerException,
109
+ "ResourceNotFoundException": ResourceNotFoundException,
110
+ "ResourceUnavailableException": ResourceUnavailableException,
111
+ "TooManyRequestsException": TooManyRequestsException,
112
+ "ValidationException": ValidationException,
113
+ }