Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions packages/polywrap-client/polywrap_client/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]:
Expand Down
21 changes: 13 additions & 8 deletions packages/polywrap-client/tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down Expand Up @@ -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(
Expand All @@ -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}


Expand Down
4 changes: 2 additions & 2 deletions packages/polywrap-core/polywrap_core/types/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand All @@ -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
Expand Down