Пример #1
0
 def setUp(self):
     self.model = {
         "metadata": {
             'endpointPrefix': 'myservice',
             'serviceFullName': 'MyService',
         },
         'operations': {
             'OperationName': {
                 'name':
                 'OperationName',
                 'errors': [
                     {
                         'shape': 'ExceptionMissingCode'
                     },
                     {
                         'shape': 'ExceptionWithModeledCode'
                     },
                 ],
             },
             'AnotherOperationName': {
                 'name':
                 'AnotherOperationName',
                 'errors': [
                     {
                         'shape': 'ExceptionForAnotherOperation'
                     },
                     {
                         'shape': 'ExceptionWithModeledCode'
                     },
                 ],
             }
         },
         'shapes': {
             'ExceptionWithModeledCode': {
                 'type': 'structure',
                 'members': {},
                 'error': {
                     'code': 'ModeledCode'
                 },
                 'exception': True,
             },
             'ExceptionMissingCode': {
                 'type': 'structure',
                 'members': {},
                 'exception': True,
             },
             'ExceptionForAnotherOperation': {
                 'type': 'structure',
                 'members': {},
                 'exception': True,
             }
         }
     }
     self.service_model = ServiceModel(self.model)
     self.exceptions_factory = ClientExceptionsFactory()
Пример #2
0
 def _register_exceptions_factory(self):
     self._internal_components.register_component('exceptions_factory',
                                                  ClientExceptionsFactory())
Пример #3
0
class TestClientExceptionsFactory(unittest.TestCase):
    def setUp(self):
        self.model = {
            "metadata": {
                'endpointPrefix': 'myservice',
                'serviceFullName': 'MyService',
            },
            'operations': {
                'OperationName': {
                    'name':
                    'OperationName',
                    'errors': [
                        {
                            'shape': 'ExceptionMissingCode'
                        },
                        {
                            'shape': 'ExceptionWithModeledCode'
                        },
                    ],
                },
                'AnotherOperationName': {
                    'name':
                    'AnotherOperationName',
                    'errors': [
                        {
                            'shape': 'ExceptionForAnotherOperation'
                        },
                        {
                            'shape': 'ExceptionWithModeledCode'
                        },
                    ],
                }
            },
            'shapes': {
                'ExceptionWithModeledCode': {
                    'type': 'structure',
                    'members': {},
                    'error': {
                        'code': 'ModeledCode'
                    },
                    'exception': True,
                },
                'ExceptionMissingCode': {
                    'type': 'structure',
                    'members': {},
                    'exception': True,
                },
                'ExceptionForAnotherOperation': {
                    'type': 'structure',
                    'members': {},
                    'exception': True,
                }
            }
        }
        self.service_model = ServiceModel(self.model)
        self.exceptions_factory = ClientExceptionsFactory()

    def test_class_name(self):
        exceptions = self.exceptions_factory.create_client_exceptions(
            self.service_model)
        self.assertEqual(exceptions.__class__.__name__, 'MyServiceExceptions')

    def test_creates_modeled_exception(self):
        exceptions = self.exceptions_factory.create_client_exceptions(
            self.service_model)
        self.assertTrue(hasattr(exceptions, 'ExceptionWithModeledCode'))
        modeled_exception = exceptions.ExceptionWithModeledCode
        self.assertEqual(modeled_exception.__name__,
                         'ExceptionWithModeledCode')
        self.assertTrue(issubclass(modeled_exception, ClientError))

    def test_collects_modeled_exceptions_for_all_operations(self):
        exceptions = self.exceptions_factory.create_client_exceptions(
            self.service_model)
        # Make sure exceptions were added for all operations by checking
        # an exception only found on an a different operation.
        self.assertTrue(hasattr(exceptions, 'ExceptionForAnotherOperation'))
        modeled_exception = exceptions.ExceptionForAnotherOperation
        self.assertEqual(modeled_exception.__name__,
                         'ExceptionForAnotherOperation')
        self.assertTrue(issubclass(modeled_exception, ClientError))

    def test_creates_modeled_exception_mapping_that_has_code(self):
        exceptions = self.exceptions_factory.create_client_exceptions(
            self.service_model)
        exception = exceptions.from_code('ModeledCode')
        self.assertEqual(exception.__name__, 'ExceptionWithModeledCode')
        self.assertTrue(issubclass(exception, ClientError))

    def test_creates_modeled_exception_mapping_that_has_no_code(self):
        exceptions = self.exceptions_factory.create_client_exceptions(
            self.service_model)
        # For exceptions that do not have an explicit code associated to them,
        # the code is the name of the exception.
        exception = exceptions.from_code('ExceptionMissingCode')
        self.assertEqual(exception.__name__, 'ExceptionMissingCode')
        self.assertTrue(issubclass(exception, ClientError))