コード例 #1
0
ファイル: test_shape_parser.py プロジェクト: vemel/mypy_boto3
    def test_init(self) -> None:
        session_mock = MagicMock()
        service_name_mock = MagicMock()
        shape_parser = ShapeParser(session_mock, service_name_mock)
        self.assertEqual(shape_parser.service_name, service_name_mock)

        session_mock._loader.load_service_model.side_effect = UnknownServiceError(
            service_name="service_name",
            known_service_names="known_service_names",
        )
        ShapeParser(session_mock, service_name_mock)
コード例 #2
0
    def test_bad_resource_name_with_no_client_has_simple_err_msg(self):
        mock_bc_session = mock.Mock()
        loader = mock.Mock(spec=loaders.Loader)
        loader.load_service_model.side_effect = UnknownServiceError(
            service_name='foo', known_service_names='asdf')
        mock_bc_session.get_component.return_value = loader
        loader.list_available_services.return_value = ['good-resource']
        mock_bc_session.get_available_services.return_value = ['good-client']

        session = Session(botocore_session=mock_bc_session)
        with self.assertRaises(ResourceNotExistsError) as e:
            session.resource('bad-client')
        err_msg = str(e.exception)
        # Shouldn't mention anything about clients because
        # 'bad-client' it not a valid boto3.client(...)
        self.assertNotIn('boto3.client', err_msg)
コード例 #3
0
    def load_service_model(self, service_name, type_name, api_version=None):
        """Load a botocore service model

        This is the main method for loading botocore outputs (e.g. a service
        model, pagination configs, waiter configs, etc.).

        :type service_name: str
        :param service_name: The name of the service (e.g ``ec2``, ``s3``).

        :type type_name: str
        :param type_name: The model type.  Valid types include, but are not
            limited to: ``service-2``, ``paginators-1``, ``waiters-2``.

        :type api_version: str
        :param api_version: The API version to load.  If this is not
            provided, then the latest API version will be used.

        :type load_extras: bool
        :param load_extras: Whether or not to load the tool extras which
            contain additional data to be added to the model.

        :raises: UnknownServiceError if there is no known service with
            the provided service_name.

        :raises: DataNotFoundError if no data could be found for the
            service_name/type_name/api_version.

        :return: The loaded data, as a python type (e.g. dict, list, etc).
        """
        # Wrapper around the load_data.  This will calculate the path
        # to call load_data with.
        known_services = self.list_available_services(type_name)
        if service_name not in known_services:
            raise UnknownServiceError(service_name=service_name,
                                      known_service_names=', '.join(
                                          sorted(known_services)))
        if api_version is None:
            api_version = self.determine_latest_version(
                service_name, type_name)
        full_path = os.path.join(service_name, api_version, type_name)
        model = self.load_data(full_path)

        # Load in all the extras
        extras_data = self._find_extras(service_name, type_name, api_version)
        self._extras_processor.process(model, extras_data)

        return model
コード例 #4
0
    def test_bad_resource_name(self):
        mock_bc_session = mock.Mock()
        loader = mock.Mock(spec=loaders.Loader)
        loader.load_service_model.side_effect = UnknownServiceError(
            service_name='foo', known_service_names='asdf')
        mock_bc_session.get_component.return_value = loader
        loader.list_available_services.return_value = ['good-resource']
        mock_bc_session.get_available_services.return_value = ['sqs']

        session = Session(botocore_session=mock_bc_session)
        with self.assertRaises(ResourceNotExistsError) as e:
            session.resource('sqs')
        err_msg = str(e.exception)
        # 1. should say the resource doesn't exist.
        self.assertIn('resource does not exist', err_msg)
        self.assertIn('sqs', err_msg)
        # 2. Should list available resources you can choose.
        self.assertIn('good-resource', err_msg)
        # 3. Should list client if available.
        self.assertIn('client', err_msg)
コード例 #5
0
 def get_unknown_service_exception(self, name="Error"):
     return UnknownServiceError(service_name=name,
                                known_service_names=[name])
コード例 #6
0
 def _get_unknowservice(self, client_type):
     return MagicMock(side_effect=UnknownServiceError(
         service_name=client_type, known_service_names=['rds']))
コード例 #7
0
 def test_handle_service_model_load_failure(self):
     self.session.get_service_model.side_effect = (UnknownServiceError(
         service_name='s3', known_service_names=''))
     self.completer.set_shape_dict('s3api', 'list_buckets')
     self.assertEqual(self.completer._shape_dict, None)