Source code for polywrap_client_config_builder.configures.interface_configure
"""This module contains the interface configure class for the client config builder."""
from typing import Dict, List, Union, cast
from polywrap_core import Uri
from ..types import BuilderConfig, ClientConfigBuilder
[docs]class InterfaceConfigure:
"""Allows configuring the interface-implementations."""
config: BuilderConfig
[docs] def get_interfaces(self) -> Dict[Uri, List[Uri]]:
"""Return all registered interface and its implementations\
from the builder's config."""
return self.config.interfaces
[docs] def get_interface_implementations(self, uri: Uri) -> Union[List[Uri], None]:
"""Return the interface for the given uri."""
return self.config.interfaces.get(uri)
[docs] def add_interface_implementations(
self, interface_uri: Uri, implementations_uris: List[Uri]
) -> ClientConfigBuilder:
"""Add a list of implementation URIs for the given interface URI to the builder's config."""
if interface_uri in self.config.interfaces.keys():
existing_implementations = set(self.config.interfaces[interface_uri])
for implementation_uri in implementations_uris:
if implementation_uri not in existing_implementations:
self.config.interfaces[interface_uri].append(implementation_uri)
else:
self.config.interfaces[interface_uri] = implementations_uris
return cast(ClientConfigBuilder, self)
[docs] def remove_interface_implementations(
self, interface_uri: Uri, implementations_uris: List[Uri]
) -> ClientConfigBuilder:
"""Remove the implementations for the given interface uri."""
self.config.interfaces[interface_uri] = [
uri
for uri in self.config.interfaces[interface_uri]
if uri not in implementations_uris
]
return cast(ClientConfigBuilder, self)
[docs] def remove_interface(self, interface_uri: Uri) -> ClientConfigBuilder:
"""Remove the interface for the given uri."""
self.config.interfaces.pop(interface_uri, None)
return cast(ClientConfigBuilder, self)