|
|
- # Copyright 2015 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.
- import sys
- from collections import namedtuple
-
-
- _ServiceContext = namedtuple(
- 'ServiceContext',
- ['service_name', 'service_model', 'service_waiter_model',
- 'resource_json_definitions']
- )
-
-
- class ServiceContext(_ServiceContext):
- """Provides important service-wide, read-only information about a service
-
- :type service_name: str
- :param service_name: The name of the service
-
- :type service_model: :py:class:`botocore.model.ServiceModel`
- :param service_model: The model of the service.
-
- :type service_waiter_model: :py:class:`botocore.waiter.WaiterModel` or
- a waiter model-like object such as
- :py:class:`boto3.utils.LazyLoadedWaiterModel`
- :param service_waiter_model: The waiter model of the service.
-
- :type resource_json_definitions: dict
- :param resource_json_definitions: The loaded json models of all resource
- shapes for a service. It is equivalient of loading a
- ``resource-1.json`` and retrieving the value at the key "resources".
- """
- pass
-
-
- def import_module(name):
- """Import module given a name.
-
- Does not support relative imports.
-
- """
- __import__(name)
- return sys.modules[name]
-
-
- def lazy_call(full_name, **kwargs):
- parent_kwargs = kwargs
-
- def _handler(**kwargs):
- module, function_name = full_name.rsplit('.', 1)
- module = import_module(module)
- kwargs.update(parent_kwargs)
- return getattr(module, function_name)(**kwargs)
-
- return _handler
-
-
- def inject_attribute(class_attributes, name, value):
- if name in class_attributes:
- raise RuntimeError(
- 'Cannot inject class attribute "%s", attribute '
- 'already exists in class dict.' % name)
- else:
- class_attributes[name] = value
-
-
- class LazyLoadedWaiterModel(object):
- """A lazily loaded waiter model
-
- This does not load the service waiter model until an attempt is made
- to retrieve the waiter model for a specific waiter. This is helpful
- in docstring generation where we do not need to actually need to grab
- the waiter-2.json until it is accessed through a ``get_waiter`` call
- when the docstring is generated/accessed.
- """
- def __init__(self, bc_session, service_name, api_version):
- self._session = bc_session
- self._service_name = service_name
- self._api_version = api_version
-
- def get_waiter(self, waiter_name):
- return self._session.get_waiter_model(
- self._service_name, self._api_version).get_waiter(waiter_name)
|