From fca83c9ca7b2e82e43b3ce5ee75efa49128cb709 Mon Sep 17 00:00:00 2001 From: DaoAdvocate <12145726+rihp@users.noreply.github.com> Date: Fri, 11 Nov 2022 10:54:14 +0100 Subject: [PATCH] interfaceimplementations refactor! --- .../polywrap-client/polywrap_client/client.py | 23 ++++++++++++++----- packages/polywrap-client/tests/test_client.py | 21 ++++++++++------- .../polywrap_core/types/client.py | 4 ++-- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/packages/polywrap-client/polywrap_client/client.py b/packages/polywrap-client/polywrap_client/client.py index b4dab4c4..572fb150 100644 --- a/packages/polywrap-client/polywrap_client/client.py +++ b/packages/polywrap-client/polywrap_client/client.py @@ -58,16 +58,27 @@ def get_envs(self, options: Optional[GetEnvsOptions] = None) -> Union[Dict[Uri, envs: Dict[Uri, Dict[str, Any]] = self._config.envs return envs - def get_interfaces(self) -> List[InterfaceImplementations]: - return self._config.interfaces + def get_interfaces(self) -> Dict[Uri, List[Uri]]: + interfaces: Dict[Uri, List[Uri]] = self._config.interfaces + return interfaces def get_implementations(self, uri: Uri) -> Result[List[Uri]]: - if interface_implementations := next( - filter(lambda x: x.interface == uri, self._config.interfaces), None - ): - return Ok(interface_implementations.implementations) + interfaces: Dict[Uri, List[Uri]] = self.get_interfaces() + if interfaces.get(uri): + print(f"{type(interfaces)=}") + print(f"{interfaces=}") + print(f"{interfaces.get(uri)=}") + + return Ok(interfaces.get(uri)) else: return Err.from_str(f"Unable to find implementations for uri: {uri}") + # previous implementation + # if interface_implementations := next( + # filter(lambda x: x.interface == uri, self._config.interfaces), None + # ): + # return Ok(interface_implementations.implementations) + # else: + # return Err.from_str(f"Unable to find implementations for uri: {uri}") def get_env_by_uri(self, uri: Uri, options: Optional[GetEnvsOptions] = None ) -> Union[Dict[str, Any], None]: diff --git a/packages/polywrap-client/tests/test_client.py b/packages/polywrap-client/tests/test_client.py index a5862828..4039f45a 100644 --- a/packages/polywrap-client/tests/test_client.py +++ b/packages/polywrap-client/tests/test_client.py @@ -3,7 +3,7 @@ from polywrap_client import PolywrapClient from polywrap_core import Uri, InvokerOptions, InterfaceImplementations, Env from polywrap_uri_resolvers import BaseUriResolver, SimpleFileReader - +from polywrap_result import Err, Ok, Result from polywrap_client.client import PolywrapClientConfig @@ -48,19 +48,24 @@ async def test_interface_implementation(): redirects={}, ) + interface_uri = Uri("ens/interface.eth") impl_uri = Uri( f'fs/{Path(__file__).parent.joinpath("cases", "simple-interface", "implementation").absolute()}' ) client = PolywrapClient( config=PolywrapClientConfig( - envs=[], + envs={}, resolver=uri_resolver, - interfaces=[ - InterfaceImplementations( - interface=Uri("ens/interface.eth"), implementations=[impl_uri] - ) - ], + # Dict[Uri, List[Uri]] + + interfaces= {interface_uri : [impl_uri]} + # previous implementations + # interfaces=[ + # InterfaceImplementations( + # interface=Uri("ens/interface.eth"), implementations=[impl_uri] + # ) + # ], ) ) uri = Uri( @@ -71,7 +76,7 @@ async def test_interface_implementation(): uri=uri, method="moduleMethod", args=args, encode_result=False, env={} ) result = await client.invoke(options) - + assert client.get_implementations(interface_uri) == Ok([impl_uri]) assert result.unwrap() == {"str": "hello", "uint8": 2} diff --git a/packages/polywrap-core/polywrap_core/types/client.py b/packages/polywrap-core/polywrap_core/types/client.py index c5b5727b..b7d044a6 100644 --- a/packages/polywrap-core/polywrap_core/types/client.py +++ b/packages/polywrap-core/polywrap_core/types/client.py @@ -19,7 +19,7 @@ class ClientConfig: # TODO is this a naive solution? the `Any` type should be more specific (str | Uri | int, etc.) envs: Dict[Uri, Dict[str, Any]] = field(default_factory=dict) - interfaces: List[InterfaceImplementations] = field(default_factory=list) + interfaces: Dict[Uri, List[Uri]] = field(default_factory=dict) resolver: IUriResolver @@ -46,7 +46,7 @@ class GetManifestOptions(DeserializeManifestOptions): class Client(Invoker, UriResolverHandler): @abstractmethod - def get_interfaces(self) -> List[InterfaceImplementations]: + def get_interfaces(self) -> Dict[Uri, List[Uri]]: pass @abstractmethod