(self, api)
Add a new API to the listing.

        :param object api: An object implementing either the
            :obj:`IAPIMock` or :obj:`IExternalAPIMock` interfaces.
        :raises: TypeError if the object does not implement the
            correct interfaces.
Add a new API to the listing.
Add a new API to the listing .
def add_api(self, api):
        """
        Add a new API to the listing.

        :param object api: An object implementing either the
            :obj:`IAPIMock` or :obj:`IExternalAPIMock` interfaces.
        :raises: TypeError if the object does not implement the
            correct interfaces.
        """
        # Gate check the API to make sure it implements one of the
        # supported interfaces
        if IExternalAPIMock.providedBy(api):
            # External APIs need to be able to be easily managed by
            # the same object so long as they have the same uuid
            this_api_id = api.uuid_key

            if this_api_id in self._uuid_to_api_external:
                raise ServiceIdExists(
                    'An Existing API already exists with the given UUID'
                )

            for existing_api in self._uuid_to_api_external.values():
                if existing_api.name_key == api.name_key:
                    raise ServiceNameExists(
                        'An Existing API with UUID ' + existing_api.uuid_key +
                        ' is already using that name'
                    )
            self._uuid_to_api_external[this_api_id] = api
        elif IAPIMock.providedBy(api):
            # Internal APIs can be added easily on the fly since
            # they also provide the resource for implementing the API
            this_api_id = ((api.__class__.__name__) + '-' +
                           random_hex_generator(3))
            self._uuid_to_api_internal[this_api_id] = api
        else:
            raise ServiceBadInterface(
                api.__class__.__module__ + '/' +
                api.__class__.__name__ +
                " does not implement IAPIMock or IExternalAPIMock"
            )
def add_api ( self , api ) : # Gate check the API to make sure it implements one of the # supported interfaces if IExternalAPIMock . providedBy ( api ) : # External APIs need to be able to be easily managed by # the same object so long as they have the same uuid this_api_id = api . uuid_key if this_api_id in self . _uuid_to_api_external : raise ServiceIdExists ( 'An Existing API already exists with the given UUID' ) for existing_api in self . _uuid_to_api_external . values ( ) : if existing_api . name_key == api . name_key : raise ServiceNameExists ( 'An Existing API with UUID ' + existing_api . uuid_key + ' is already using that name' ) self . _uuid_to_api_external [ this_api_id ] = api elif IAPIMock . providedBy ( api ) : # Internal APIs can be added easily on the fly since # they also provide the resource for implementing the API this_api_id = ( ( api . __class__ . __name__ ) + '-' + random_hex_generator ( 3 ) ) self . _uuid_to_api_internal [ this_api_id ] = api else : raise ServiceBadInterface ( api . __class__ . __module__ + '/' + api . __class__ . __name__ + " does not implement IAPIMock or IExternalAPIMock" )