about summary refs log tree commit diff
path: root/.venv/lib/python3.12/site-packages/botocore/errorfactory.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/botocore/errorfactory.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are here HEAD master
Diffstat (limited to '.venv/lib/python3.12/site-packages/botocore/errorfactory.py')
-rw-r--r--.venv/lib/python3.12/site-packages/botocore/errorfactory.py90
1 files changed, 90 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/botocore/errorfactory.py b/.venv/lib/python3.12/site-packages/botocore/errorfactory.py
new file mode 100644
index 00000000..6084e51d
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/botocore/errorfactory.py
@@ -0,0 +1,90 @@
+# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+# http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+from botocore.exceptions import ClientError
+from botocore.utils import get_service_module_name
+
+
+class BaseClientExceptions:
+    ClientError = ClientError
+
+    def __init__(self, code_to_exception):
+        """Base class for exceptions object on a client
+
+        :type code_to_exception: dict
+        :param code_to_exception: Mapping of error codes (strings) to exception
+            class that should be raised when encountering a particular
+            error code.
+        """
+        self._code_to_exception = code_to_exception
+
+    def from_code(self, error_code):
+        """Retrieves the error class based on the error code
+
+        This is helpful for identifying the exception class needing to be
+        caught based on the ClientError.parsed_reponse['Error']['Code'] value
+
+        :type error_code: string
+        :param error_code: The error code associated to a ClientError exception
+
+        :rtype: ClientError or a subclass of ClientError
+        :returns: The appropriate modeled exception class for that error
+            code. If the error code does not match any of the known
+            modeled exceptions then return a generic ClientError.
+        """
+        return self._code_to_exception.get(error_code, self.ClientError)
+
+    def __getattr__(self, name):
+        exception_cls_names = [
+            exception_cls.__name__
+            for exception_cls in self._code_to_exception.values()
+        ]
+        raise AttributeError(
+            rf"{self} object has no attribute {name}. "
+            rf"Valid exceptions are: {', '.join(exception_cls_names)}"
+        )
+
+
+class ClientExceptionsFactory:
+    def __init__(self):
+        self._client_exceptions_cache = {}
+
+    def create_client_exceptions(self, service_model):
+        """Creates a ClientExceptions object for the particular service client
+
+        :type service_model: botocore.model.ServiceModel
+        :param service_model: The service model for the client
+
+        :rtype: object that subclasses from BaseClientExceptions
+        :returns: The exceptions object of a client that can be used
+            to grab the various different modeled exceptions.
+        """
+        service_name = service_model.service_name
+        if service_name not in self._client_exceptions_cache:
+            client_exceptions = self._create_client_exceptions(service_model)
+            self._client_exceptions_cache[service_name] = client_exceptions
+        return self._client_exceptions_cache[service_name]
+
+    def _create_client_exceptions(self, service_model):
+        cls_props = {}
+        code_to_exception = {}
+        for error_shape in service_model.error_shapes:
+            exception_name = str(error_shape.name)
+            exception_cls = type(exception_name, (ClientError,), {})
+            cls_props[exception_name] = exception_cls
+            code = str(error_shape.error_code)
+            code_to_exception[code] = exception_cls
+        cls_name = str(get_service_module_name(service_model) + 'Exceptions')
+        client_exceptions_cls = type(
+            cls_name, (BaseClientExceptions,), cls_props
+        )
+        return client_exceptions_cls(code_to_exception)