diff --git a/VERSION b/VERSION index e290171e..ec1ca6a8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.0a29 \ No newline at end of file +0.1.0a30 \ No newline at end of file diff --git a/packages/polywrap-client-config-builder/README.md b/packages/polywrap-client-config-builder/README.md index 44c4d6ce..2022a1db 100644 --- a/packages/polywrap-client-config-builder/README.md +++ b/packages/polywrap-client-config-builder/README.md @@ -54,11 +54,11 @@ config = builder.build() # build with a custom cache config = builder.build({ - wrapperCache: WrapperCache(), + resolution_result_cache: ResolutionResultCache(), }) # or build with a custom resolver -coreClientConfig = builder.build({ +config = builder.build({ resolver: RecursiveResolver(...), }) ``` diff --git a/packages/polywrap-client-config-builder/tests/interface/test_get_interface.py b/packages/polywrap-client-config-builder/tests/interface/test_get_interface.py index 325e3dbe..e9e704b5 100644 --- a/packages/polywrap-client-config-builder/tests/interface/test_get_interface.py +++ b/packages/polywrap-client-config-builder/tests/interface/test_get_interface.py @@ -1,4 +1,4 @@ -from typing import Any, Dict, List +from typing import Dict, List from hypothesis import given, settings from polywrap_client_config_builder import ( diff --git a/packages/polywrap-client-config-builder/tests/interface/test_remove_interface.py b/packages/polywrap-client-config-builder/tests/interface/test_remove_interface.py index 74e91e1c..26e932c8 100644 --- a/packages/polywrap-client-config-builder/tests/interface/test_remove_interface.py +++ b/packages/polywrap-client-config-builder/tests/interface/test_remove_interface.py @@ -1,6 +1,6 @@ -from typing import Any, Dict, List +from typing import Dict, List from random import randint -from hypothesis import assume, event, given, settings +from hypothesis import event, given, settings from polywrap_client_config_builder import ( ClientConfigBuilder, diff --git a/packages/polywrap-client-config-builder/tests/resolver/test_get_resolvers.py b/packages/polywrap-client-config-builder/tests/resolver/test_get_resolvers.py index eb78c419..a3b99593 100644 --- a/packages/polywrap-client-config-builder/tests/resolver/test_get_resolvers.py +++ b/packages/polywrap-client-config-builder/tests/resolver/test_get_resolvers.py @@ -1,4 +1,4 @@ -from typing import Any, Dict, List +from typing import List from hypothesis import given, settings from polywrap_client_config_builder import ( diff --git a/packages/polywrap-client-config-builder/tests/test_client_config_builder.py b/packages/polywrap-client-config-builder/tests/test_client_config_builder.py deleted file mode 100644 index e8b2f4a3..00000000 --- a/packages/polywrap-client-config-builder/tests/test_client_config_builder.py +++ /dev/null @@ -1,486 +0,0 @@ -# TODO: ccb test -> post-cd fix -> release -> plugin update -> default ccb - - - -# """ -# Polywrap Python Client. - -# The Test suite for the Polywrap Client Config Builder uses pytest to -# test the various methods of the ClientConfigBuilder class. These tests -# include sample code for configuring the client's: -# - Envs -# - Interfaces -# - Packages -# - Redirects -# - Wrappers -# - Resolvers - -# docs.polywrap.io -# Copyright 2022 Polywrap -# """ - -# from abc import ABC -# from dataclasses import asdict -# from typing import Any, Dict, Generic, List, Optional, TypeVar, Union, cast - -# from polywrap_client import PolywrapClient -# from polywrap_core import ( -# AnyWrapManifest, -# GetFileOptions, -# GetManifestOptions, -# InvocableResult, -# InvokeOptions, -# Invoker, -# IUriResolver, -# IWrapPackage, -# Uri, -# UriPackage, -# UriWrapper, -# Wrapper, -# ) -# from polywrap_result import Err, Ok, Result - -# from polywrap_client_config_builder import ( -# BaseClientConfigBuilder, -# ClientConfig, -# ClientConfigBuilder, -# ) - -# UriResolverLike = Union[Uri, UriPackage, UriWrapper, List["UriResolverLike"]] - - -# # Mocked Classes for the tests (class fixtures arent supported in pytest) -# pw = PolywrapClient() -# resolver: IUriResolver = pw.get_uri_resolver() -# TConfig = TypeVar('TConfig') -# TResult = TypeVar('TResult') - -# class MockedModule(Generic[TConfig, TResult], ABC): -# env: Dict[str, Any] -# config: TConfig - -# def __init__(self, config: TConfig): -# self.config = config - -# def set_env(self, env: Dict[str, Any]) -> None: -# self.env = env - -# async def __wrap_invoke__(self, method: str, args: Dict[str, Any], client: Invoker) -> Result[TResult]: -# methods: List[str] = [name for name in dir(self) if name == method] - -# if not methods: -# return Err.from_str(f"{method} is not defined in plugin") - -# callable_method = getattr(self, method) -# return Ok(callable_method(args, client)) if callable(callable_method) else Err.from_str(f"{method} is an attribute, not a method") - - -# class MockedWrapper(Wrapper, Generic[TConfig, TResult]): -# module: MockedModule[TConfig, TResult] - -# def __init__(self, module: MockedModule[TConfig, TResult], manifest: AnyWrapManifest) -> None: -# self.module = module -# self.manifest = manifest - -# async def invoke( -# self, options: InvokeOptions, invoker: Invoker -# ) -> Result[InvocableResult]: -# env = options.env or {} -# self.module.set_env(env) - -# args: Union[Dict[str, Any], bytes] = options.args or {} -# decoded_args: Dict[str, Any] = msgpack_decode(args) if isinstance(args, bytes) else args - -# result: Result[TResult] = await self.module.__wrap_invoke__(options.method, decoded_args, invoker) - -# if result.is_err(): -# return cast(Err, result.err) - -# return Ok(InvocableResult(result=result,encoded=False)) - - -# async def get_file(self, options: GetFileOptions) -> Result[Union[str, bytes]]: -# return Err.from_str("client.get_file(..) is not implemented for plugins") - -# def get_manifest(self) -> Result[AnyWrapManifest]: -# return Ok(self.manifest) - -# class MockedPackage(Generic[TConfig, TResult], IWrapPackage): -# module: MockedModule[TConfig, TResult] -# manifest: AnyWrapManifest - -# def __init__( -# self, -# module: MockedModule[TConfig, TResult], -# manifest: AnyWrapManifest -# ): -# self.module = module -# self.manifest = manifest - -# async def create_wrapper(self) -> Result[Wrapper]: -# return Ok(MockedWrapper(module=self.module, manifest=self.manifest)) - -# async def get_manifest(self, options: Optional[GetManifestOptions] = None) -> Result[AnyWrapManifest]: -# return Ok(self.manifest) - - - -# def test_client_config_structure_starts_empty(): -# ccb = ClientConfigBuilder() -# client_config = ccb.build() -# result = ClientConfig( -# envs={}, -# interfaces={}, -# resolver = [], -# wrappers = [], -# packages=[], -# redirects={} -# ) -# assert asdict(client_config) == asdict(result) - - -# def test_client_config_structure_sets_env(): -# ccb = ClientConfigBuilder() -# uri = Uri("wrap://ens/eth.plugin.one"), -# env = { 'color': "red", 'size': "small" } -# ccb = ccb.set_env( -# uri = uri, -# env = env -# ) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={uri: env}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={})) - - -# # ENVS - -# def test_client_config_builder_set_env(env_varA, env_uriX): -# ccb = ClientConfigBuilder() -# envs = { env_uriX: env_varA } -# ccb = ccb.set_env( env_varA, env_uriX) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs=envs, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={})) - -# def test_client_config_builder_add_env(env_varA, env_uriX): -# ccb = ClientConfigBuilder() # instantiate new client config builder -# ccb = ccb.add_env(env = env_varA, uri = env_uriX) # add env to client config builder -# client_config: ClientConfig = ccb.build() # build a client config object -# print(client_config) -# assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={})) - -# def test_client_config_builder_add_env_updates_env_value(env_varA,env_varB, env_uriX): -# ccb = ClientConfigBuilder() # instantiate new client config builder -# ccb = ccb.add_env(env = env_varA, uri = env_uriX) # add env to client config builder -# client_config: ClientConfig = ccb.build() # build a client config object -# assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={})) -# ccb = ccb.add_env(env = env_varB, uri = env_uriX) # update value of env var on client config builder -# client_config: ClientConfig = ccb.build() # build a new client config object -# assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varB}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={})) - -# def test_client_config_builder_set_env_and_add_env_updates_and_add_values(env_varA, env_varB, env_varN, env_varM, env_varS, env_uriX, env_uriY): -# ccb = ClientConfigBuilder() -# ccb = ccb.set_env(env_varA, env_uriX) # set the environment variables A -# client_config: ClientConfig = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={})) - -# ccb = ccb.set_env(env_varB, env_uriX) # set new vars on the same Uri -# client_config: ClientConfig = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varB}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={})) - -# ccb = ccb.add_env(env_varM, env_uriY) # add new env vars on a new Uri -# client_config: ClientConfig = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig( -# envs={ -# env_uriX: env_varB, -# env_uriY: env_varM -# }, -# interfaces={}, resolver = [], wrappers=[], packages=[], redirects={})) - -# # add new env vars on the second Uri, while also updating the Env vars of dog and season -# ccb = ccb.add_envs([env_varN, env_varS], env_uriY) -# new_envs = {**env_varM, **env_varN, **env_varS} -# print(new_envs) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs = {env_uriX: env_varB, env_uriY: new_envs}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={})) - -# # INTERFACES AND IMPLEMENTATIONS - -# def test_client_config_builder_adds_interface_implementations(): -# ccb = ClientConfigBuilder() -# interfaces_uri = Uri("wrap://ens/eth.plugin.one") -# implementations_uris = [Uri("wrap://ens/eth.plugin.one"), Uri("wrap://ens/eth.plugin.two")] -# ccb = ccb.add_interface_implementations(interfaces_uri, implementations_uris) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={interfaces_uri: implementations_uris}, resolver = [], wrappers=[], packages=[], redirects={})) - -# # PACKAGES - -# def test_client_config_builder_set_package(): -# # wrap_package = IWrapPackage() -# ccb = ClientConfigBuilder() -# uri_package = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Todo") -# ccb = ccb.set_package(uri_package) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[], packages=[uri_package], redirects={})) - - -# def test_client_config_builder_set_package(): -# ccb = ClientConfigBuilder() -# module: MockedModule[None, str] = MockedModule(config=None) -# manifest = cast(AnyWrapManifest, {}) -# # This implementation below is correct, but the test fails because the UriPackage -# # gets instantiated twice and two different instances are created. -# # uri_package: UriPackage = UriPackage(uri=env_uriX, package=MockedPackage(module, manifest)) -# # so instead we use the following implementation -# uri_package = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Todo") -# ccb = ccb.set_package(uri_package) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, -# interfaces={}, resolver = [], wrappers=[], packages=[uri_package], redirects={})) - -# def test_client_config_builder_add_package(): -# ccb = ClientConfigBuilder() -# uri_package = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Todo") -# ccb = ccb.add_package(uri_package) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, -# resolver = [], wrappers=[], packages=[uri_package], redirects={})) - -# def test_client_config_builder_add_package_updates_packages_list(): -# ccb = ClientConfigBuilder() -# uri_package1 = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Todo") -# ccb = ccb.add_package(uri_package1) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, -# resolver = [], wrappers=[], packages=[uri_package1], redirects={})) -# uri_package2 = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Updated") -# ccb = ccb.add_package(uri_package2) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, -# resolver = [], wrappers=[], packages=[uri_package1, uri_package2], redirects={})) - -# def test_client_config_builder_add_multiple_packages(): -# ccb = ClientConfigBuilder() -# uri_package1 = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Todo") -# uri_package2 = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Updated") -# ccb = ccb.add_packages([uri_package1, uri_package2]) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], -# wrappers=[], packages=[uri_package1, uri_package2], redirects={})) - -# def test_client_config_builder_add_packages_removes_packages(): -# ccb = ClientConfigBuilder() -# uri_package1 = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Todo") -# uri_package2 = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Updated") -# ccb = ccb.add_packages([uri_package1, uri_package2]) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], -# wrappers=[], packages=[uri_package1, uri_package2], redirects={})) -# ccb = ccb.remove_package(uri_package1) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], -# wrappers=[], packages=[uri_package2], redirects={})) - -# # WRAPPERS AND PLUGINS - -# def test_client_config_builder_add_wrapper1(): -# ccb = ClientConfigBuilder() -# uri_wrapper = UriWrapper(uri=Uri("wrap://ens/eth.plugin.one"),wrapper="todo") -# ccb = ccb.add_wrapper(uri_wrapper) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[uri_wrapper], packages=[], redirects={})) -# # add second wrapper -# uri_wrapper2 = UriWrapper(uri=Uri("wrap://ens/eth.plugin.two"),wrapper="Todo") -# ccb = ccb.add_wrapper(uri_wrapper2) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[uri_wrapper, uri_wrapper2], packages=[], redirects={})) - - -# def test_client_config_builder_add_wrapper2(): -# ccb = ClientConfigBuilder() -# wrapper = Uri("wrap://ens/uni.wrapper.eth") -# ccb = ccb.add_wrapper(wrapper) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[wrapper], packages=[], redirects={})) - -# def test_client_config_builder_adds_multiple_wrappers(): -# ccb = ClientConfigBuilder() -# wrappers = [Uri("wrap://ens/uni.wrapper.eth"), Uri("wrap://ens/https.plugin.eth")] -# ccb = ccb.add_wrappers(wrappers) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=wrappers, packages=[], redirects={})) - -# def test_client_config_builder_removes_wrapper(): -# ccb = ClientConfigBuilder() -# wrapper = Uri("wrap://ens/uni.wrapper.eth") -# ccb = ccb.add_wrapper(wrapper) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[wrapper], packages=[], redirects={})) -# ccb = ccb.remove_wrapper(wrapper) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={})) - -# # RESOLVER - -# def test_client_config_builder_set_uri_resolver(): -# ccb = ClientConfigBuilder() -# resolver: UriResolverLike = Uri("wrap://ens/eth.resolver.one") -# ccb = ccb.set_resolver(resolver) -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[resolver], wrappers=[], packages=[], redirects={})) - -# def test_client_config_builder_add_resolver(): -# # set a first resolver -# ccb = ClientConfigBuilder() -# resolverA = Uri("wrap://ens/eth.resolver.one") -# ccb: BaseClientConfigBuilder = ccb.set_resolver(resolverA) -# client_config: ClientConfig = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[resolverA], wrappers=[], packages=[], redirects={})) - -# # add a second resolver -# resolverB = Uri("wrap://ens/eth.resolver.two") -# ccb = ccb.add_resolver(resolverB) -# client_config: ClientConfig = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[resolverA, resolverB], wrappers=[], packages=[], redirects={})) - -# # add a third and fourth resolver -# resolverC = Uri("wrap://ens/eth.resolver.three") -# resolverD = Uri("wrap://ens/eth.resolver.four") -# ccb = ccb.add_resolvers([resolverC, resolverD]) -# client_config: ClientConfig = ccb.build() -# resolvers: List[UriResolverLike] = [resolverA, resolverB, resolverC, resolverD] -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=resolvers, wrappers=[], packages=[], redirects={})) - -# # REDIRECTS - -# def test_client_config_builder_sets_uri_redirects(env_uriX, env_uriY, env_uriZ): -# # set a first redirect -# ccb = ClientConfigBuilder() -# ccb = ccb.set_uri_redirect(env_uriX, env_uriY) -# client_config: ClientConfig = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[], wrappers=[], packages=[], -# redirects={env_uriX: env_uriY})) - -# # add a second redirect -# ccb = ccb.set_uri_redirect(env_uriY, env_uriZ) -# client_config: ClientConfig = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[], wrappers=[], packages=[], -# redirects={env_uriX: env_uriY, env_uriY: env_uriZ})) - -# # update the first redirect -# ccb.set_uri_redirect(env_uriX, env_uriZ) -# client_config: ClientConfig = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[], wrappers=[], packages=[], -# redirects={env_uriX: env_uriZ, env_uriY: env_uriZ})) - -# def test_client_config_builder_removes_uri_redirects(env_uriX, env_uriY, env_uriZ): -# ccb = ClientConfigBuilder() -# ccb = ccb.set_uri_redirect(env_uriX, env_uriY) -# ccb = ccb.set_uri_redirect(env_uriY, env_uriZ) -# client_config: ClientConfig = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[], wrappers=[], packages=[], -# redirects={env_uriX: env_uriY, env_uriY: env_uriZ})) - -# ccb = ccb.remove_uri_redirect(env_uriX) -# client_config: ClientConfig = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[], wrappers=[], packages=[], -# redirects={env_uriY: env_uriZ})) - - - -# def test_client_config_builder_sets_many_uri_redirects(env_uriX,env_uriY, env_uriZ): - -# # set a first redirect -# ccb = ClientConfigBuilder() -# ccb = ccb.set_uri_redirects([{ -# env_uriX: env_uriY, -# }] ) -# client_config: ClientConfig = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[], wrappers=[], packages=[], redirects={env_uriX: env_uriY})) - -# # updates that first redirect to a new value -# ccb = ccb.set_uri_redirects([{ -# env_uriX: env_uriZ, -# }] ) -# client_config: ClientConfig = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[], wrappers=[], packages=[], redirects={env_uriX: env_uriZ})) - -# # add a second redirect -# ccb = ccb.set_uri_redirects([{ -# env_uriY: env_uriX, -# }] ) -# client_config: ClientConfig = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[], wrappers=[], packages=[], redirects={env_uriX: env_uriZ, env_uriY: env_uriX})) - -# # add a third redirect and update the first redirect -# ccb = ccb.set_uri_redirects([{ -# env_uriX: env_uriY, -# env_uriZ: env_uriY, -# }] ) -# client_config: ClientConfig = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[], wrappers=[], packages=[], -# redirects={ -# env_uriX: env_uriY, -# env_uriY: env_uriX, -# env_uriZ: env_uriY -# })) - - -# # GENERIC ADD FUNCTION - -# def test_client_config_builder_generic_add(env_varA,env_uriX, env_uriY): -# # Test adding package, wrapper, resolver, interface, and env with the ccb.add method -# ccb = ClientConfigBuilder() - -# # starts empty -# client_config = ccb.build() -# assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, -# resolver = [], wrappers=[], packages=[], redirects={})) - -# # add an env -# new_config = ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={}) -# ccb = ccb.add(new_config) -# client_config1 = ccb.build() -# assert asdict(client_config1) == asdict(new_config) - -# # add a resolver -# new_resolvers = ClientConfig(resolver=[Uri("wrap://ens/eth.resolver.one")], envs={}, interfaces={}, wrappers=[], packages=[], redirects={}) -# ccb = ccb.add(new_resolvers) -# client_config2 = ccb.build() -# assert asdict(client_config2) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, -# resolver = [Uri("wrap://ens/eth.resolver.one")], wrappers=[], packages=[], redirects={})) - -# # add a second resolver -# new_resolver = ClientConfig(resolver=[Uri("wrap://ens/eth.resolver.two")], envs={}, interfaces={}, wrappers=[], packages=[], redirects={}) -# ccb = ccb.add(new_resolver) -# client_config5 = ccb.build() -# assert asdict(client_config5) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, -# resolver = [Uri("wrap://ens/eth.resolver.one"), Uri("wrap://ens/eth.resolver.two")], wrappers=[], packages=[], redirects={})) - - -# # add a wrapper -# new_wrapper = ClientConfig(wrappers=[Uri("wrap://ens/uni.wrapper.eth")], envs={}, interfaces={}, resolver = [], packages=[], redirects={}) -# ccb = ccb.add(new_wrapper) -# client_config3 = ccb.build() -# assert asdict(client_config3) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, -# resolver = [Uri("wrap://ens/eth.resolver.one"), Uri("wrap://ens/eth.resolver.two")], -# wrappers=[Uri("wrap://ens/uni.wrapper.eth")], packages=[], redirects={})) - -# # add an interface -# interfaces: Dict[Uri, List[Uri]] = {Uri("wrap://ens/eth.interface.eth"): [env_uriX,env_uriY]} -# new_interface = ClientConfig(interfaces=interfaces, envs={}, resolver = [], wrappers=[], packages=[], redirects={}) -# ccb = ccb.add(new_interface) -# client_config4 = ccb.build() -# assert asdict(client_config4) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces=interfaces, -# resolver = [Uri("wrap://ens/eth.resolver.one"), Uri("wrap://ens/eth.resolver.two")], -# wrappers=[Uri("wrap://ens/uni.wrapper.eth")], packages=[], redirects={})) - -# # add a package -# uri_package = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Todo") -# new_package = ClientConfig(packages=[uri_package], envs={}, interfaces={}, resolver = [], wrappers=[], redirects={}) -# ccb = ccb.add(new_package) -# client_config6 = ccb.build() -# assert asdict(client_config6) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces=interfaces, -# resolver = [Uri("wrap://ens/eth.resolver.one"), Uri("wrap://ens/eth.resolver.two")], -# wrappers=[Uri("wrap://ens/uni.wrapper.eth")], packages=[uri_package], redirects={})) - - diff --git a/packages/polywrap-client-config-builder/tests/test_sanity.py b/packages/polywrap-client-config-builder/tests/test_sanity.py deleted file mode 100644 index eee2f85b..00000000 --- a/packages/polywrap-client-config-builder/tests/test_sanity.py +++ /dev/null @@ -1,12 +0,0 @@ -from polywrap_core import Uri -from polywrap_client_config_builder import PolywrapClientConfigBuilder - - -def test_sanity(): - config = ( - PolywrapClientConfigBuilder() - .add_env(Uri.from_str("ens/hello.eth"), {"hello": "world"}) - .build() - ) - - assert config.envs[Uri.from_str("ens/hello.eth")]["hello"] == "world" diff --git a/packages/polywrap-client/README.md b/packages/polywrap-client/README.md index 2be53554..a077bc1b 100644 --- a/packages/polywrap-client/README.md +++ b/packages/polywrap-client/README.md @@ -9,12 +9,26 @@ Python implementation of the polywrap client. Use the `polywrap-uri-resolvers` package to configure resolver and build config for the client. ```python -from polywrap_uri_resolvers import FsUriResolver, SimpleFileReader - -config = ClientConfig( - resolver=FsUriResolver(file_reader=SimpleFileReader()) +from polywrap_uri_resolvers import ( + FsUriResolver, + SimpleFileReader ) - +from polywrap_core import Uri, ClientConfig +from polywrap_client import PolywrapClient +from polywrap_client_config_builder import PolywrapClientConfigBuilder + +builder = ( + PolywrapClientConfigBuilder() + .add_resolver(FsUriResolver(file_reader=SimpleFileReader())) + .set_env(Uri.from_str("ens/foo.eth"), {"foo": "bar"}) + .add_interface_implementations( + Uri.from_str("ens/foo.eth"), [ + Uri.from_str("ens/bar.eth"), + Uri.from_str("ens/baz.eth") + ] + ) +) +config = builder.build() client = PolywrapClient(config) ``` @@ -32,9 +46,6 @@ args = { "prop1": "1000", # multiply the base number by this factor }, } -options: InvokerOptions[UriPackageOrWrapper] = InvokerOptions( - uri=uri, method="method", args=args, encode_result=False -) -result = await client.invoke(options) +result = client.invoke(uri=uri, method="method", args=args, encode_result=False) assert result == "123000" ``` \ No newline at end of file diff --git a/packages/polywrap-client/tests/test_plugin_wrapper.py b/packages/polywrap-client/tests/test_plugin_wrapper.py deleted file mode 100644 index 9906e2b8..00000000 --- a/packages/polywrap-client/tests/test_plugin_wrapper.py +++ /dev/null @@ -1 +0,0 @@ -# Encode - Decode need to be tested \ No newline at end of file diff --git a/packages/polywrap-client/tests/test_wasm_wrapper.py b/packages/polywrap-client/tests/test_wasm_wrapper.py deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/polywrap-client/tests/msgpack/__init__.py b/packages/polywrap-client/tests/wrap_types/__init__.py similarity index 100% rename from packages/polywrap-client/tests/msgpack/__init__.py rename to packages/polywrap-client/tests/wrap_types/__init__.py diff --git a/packages/polywrap-client/tests/msgpack/asyncify/__init__.py b/packages/polywrap-client/tests/wrap_types/asyncify/__init__.py similarity index 100% rename from packages/polywrap-client/tests/msgpack/asyncify/__init__.py rename to packages/polywrap-client/tests/wrap_types/asyncify/__init__.py diff --git a/packages/polywrap-client/tests/msgpack/asyncify/conftest.py b/packages/polywrap-client/tests/wrap_types/asyncify/conftest.py similarity index 100% rename from packages/polywrap-client/tests/msgpack/asyncify/conftest.py rename to packages/polywrap-client/tests/wrap_types/asyncify/conftest.py diff --git a/packages/polywrap-client/tests/msgpack/asyncify/test_asyncify.py b/packages/polywrap-client/tests/wrap_types/asyncify/test_asyncify.py similarity index 100% rename from packages/polywrap-client/tests/msgpack/asyncify/test_asyncify.py rename to packages/polywrap-client/tests/wrap_types/asyncify/test_asyncify.py diff --git a/packages/polywrap-client/tests/msgpack/conftest.py b/packages/polywrap-client/tests/wrap_types/conftest.py similarity index 100% rename from packages/polywrap-client/tests/msgpack/conftest.py rename to packages/polywrap-client/tests/wrap_types/conftest.py diff --git a/packages/polywrap-client/tests/msgpack/test_bigint.py b/packages/polywrap-client/tests/wrap_types/test_bigint.py similarity index 100% rename from packages/polywrap-client/tests/msgpack/test_bigint.py rename to packages/polywrap-client/tests/wrap_types/test_bigint.py diff --git a/packages/polywrap-client/tests/msgpack/test_bignumber.py b/packages/polywrap-client/tests/wrap_types/test_bignumber.py similarity index 100% rename from packages/polywrap-client/tests/msgpack/test_bignumber.py rename to packages/polywrap-client/tests/wrap_types/test_bignumber.py diff --git a/packages/polywrap-client/tests/msgpack/test_bytes.py b/packages/polywrap-client/tests/wrap_types/test_bytes.py similarity index 100% rename from packages/polywrap-client/tests/msgpack/test_bytes.py rename to packages/polywrap-client/tests/wrap_types/test_bytes.py diff --git a/packages/polywrap-client/tests/msgpack/test_enum.py b/packages/polywrap-client/tests/wrap_types/test_enum.py similarity index 100% rename from packages/polywrap-client/tests/msgpack/test_enum.py rename to packages/polywrap-client/tests/wrap_types/test_enum.py diff --git a/packages/polywrap-client/tests/msgpack/test_invalid_type.py b/packages/polywrap-client/tests/wrap_types/test_invalid_type.py similarity index 100% rename from packages/polywrap-client/tests/msgpack/test_invalid_type.py rename to packages/polywrap-client/tests/wrap_types/test_invalid_type.py diff --git a/packages/polywrap-client/tests/msgpack/test_json.py b/packages/polywrap-client/tests/wrap_types/test_json.py similarity index 100% rename from packages/polywrap-client/tests/msgpack/test_json.py rename to packages/polywrap-client/tests/wrap_types/test_json.py diff --git a/packages/polywrap-client/tests/msgpack/test_map.py b/packages/polywrap-client/tests/wrap_types/test_map.py similarity index 100% rename from packages/polywrap-client/tests/msgpack/test_map.py rename to packages/polywrap-client/tests/wrap_types/test_map.py diff --git a/packages/polywrap-client/tests/msgpack/test_numbers.py b/packages/polywrap-client/tests/wrap_types/test_numbers.py similarity index 100% rename from packages/polywrap-client/tests/msgpack/test_numbers.py rename to packages/polywrap-client/tests/wrap_types/test_numbers.py diff --git a/packages/polywrap-client/tests/msgpack/test_object.py b/packages/polywrap-client/tests/wrap_types/test_object.py similarity index 100% rename from packages/polywrap-client/tests/msgpack/test_object.py rename to packages/polywrap-client/tests/wrap_types/test_object.py diff --git a/packages/polywrap-plugin/README.md b/packages/polywrap-plugin/README.md index 4f03a985..01a90aa4 100644 --- a/packages/polywrap-plugin/README.md +++ b/packages/polywrap-plugin/README.md @@ -10,7 +10,7 @@ Python implementation of the plugin wrapper runtime. from typing import Any, Dict, List, Union, Optional from polywrap_manifest import AnyWrapManifest from polywrap_plugin import PluginModule -from polywrap_core import Invoker, Uri, InvokerOptions, UriPackageOrWrapper, Env +from polywrap_core import InvokerClient, Uri, InvokerOptions, UriPackageOrWrapper, Env class GreetingModule(PluginModule[None]): def __init__(self, config: None): @@ -24,13 +24,13 @@ wrapper = PluginWrapper(greeting_module, manifest) args = { "name": "Joe" } -options: InvokeOptions[UriPackageOrWrapper] = InvokeOptions( +client: InvokerClient = ... + +result = await wrapper.invoke( uri=Uri.from_str("ens/greeting.eth"), method="greeting", - args=args + args=args, + client=client ) -invoker: Invoker = ... - -result = await wrapper.invoke(options, invoker) assert result, "Greetings from: Joe" ``` diff --git a/packages/polywrap-test-cases/README.md b/packages/polywrap-test-cases/README.md index 00bdf773..75dc5edc 100644 --- a/packages/polywrap-test-cases/README.md +++ b/packages/polywrap-test-cases/README.md @@ -1,36 +1,3 @@ -# polywrap-wasm +# polywrap-test-cases -Python implementation of the plugin wrapper runtime. - -## Usage - -### Invoke Plugin Wrapper - -```python -from typing import Any, Dict, List, Union, Optional -from polywrap_manifest import AnyWrapManifest -from polywrap_plugin import PluginModule -from polywrap_core import Invoker, Uri, InvokerOptions, UriPackageOrWrapper, Env - -class GreetingModule(PluginModule[None]): - def __init__(self, config: None): - super().__init__(config) - - def greeting(self, args: Dict[str, Any], client: Invoker[UriPackageOrWrapper], env: Optional[Env] = None): - return f"Greetings from: {args['name']}" - -manifest = cast(AnyWrapManifest, {}) -wrapper = PluginWrapper(greeting_module, manifest) -args = { - "name": "Joe" -} -options: InvokeOptions[UriPackageOrWrapper] = InvokeOptions( - uri=Uri.from_str("ens/greeting.eth"), - method="greeting", - args=args -) -invoker: Invoker = ... - -result = await wrapper.invoke(options, invoker) -assert result, "Greetings from: Joe" -``` +This package allows fetching wrap test-cases from the wrap-test-harness. diff --git a/packages/polywrap-wasm/README.md b/packages/polywrap-wasm/README.md index 8c3dba73..0cc69865 100644 --- a/packages/polywrap-wasm/README.md +++ b/packages/polywrap-wasm/README.md @@ -9,21 +9,23 @@ Python implementation of the Wasm wrapper runtime. ```python from typing import cast from polywrap_manifest import AnyWrapManifest -from polywrap_core import FileReader, Invoker +from polywrap_core import FileReader, InvokerClient from polywrap_wasm import WasmWrapper file_reader: FileReader = ... # any valid file_reader, pass NotImplemented for mocking wasm_module: bytes = bytes("") wrap_manifest: AnyWrapManifest = ... wrapper = WasmWrapper(file_reader, wasm_module, wrap_manifest) -invoker: Invoker = ... # any valid invoker, mostly PolywrapClient +client: InvokerClient = ... # any valid invoker client, mostly PolywrapClient message = "hey" args = {"arg": message} -options: InvokeOptions[UriPackageOrWrapper] = InvokeOptions( - uri=Uri.from_str("fs/./build"), method="simpleMethod", args=args +result = wrapper.invoke( + uri=Uri.from_str("fs/./build"), + method="simpleMethod", + args=args, + client=client ) -result = await wrapper.invoke(options, invoker) assert result.encoded is True assert msgpack_decode(cast(bytes, result.result)) == message ```