Skip to content

Commit 7a861be

Browse files
committed
feat: ccb generic add function and tests outline for configuring packages
1 parent 3957124 commit 7a861be

2 files changed

Lines changed: 110 additions & 19 deletions

File tree

packages/polywrap-client-config-builder/polywrap_client_config_builder/client_config_builder.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,21 @@ def build(self) -> ClientConfig:
3131
"""Returns a sanitized config object from the builder's config."""
3232
pass
3333

34+
@abstractmethod
35+
def add(self, new_config: ClientConfig) -> ClientConfig:
36+
"""Returns a sanitized config object from the builder's config after receiving a partial `ClientConfig` object."""
37+
if new_config.envs:
38+
self.config.envs.update(new_config.envs)
39+
if new_config.interfaces:
40+
self.config.interfaces.update(new_config.interfaces)
41+
if new_config.resolver:
42+
self.config.resolver.extend(new_config.resolver)
43+
if new_config.wrappers:
44+
self.config.wrappers.extend(new_config.wrappers)
45+
if new_config.packages:
46+
self.config.packages.extend(new_config.packages)
47+
return self.config
48+
3449
@abstractmethod
3550
def get_envs(self)-> Dict[Uri, Dict[str, Any]]:
3651
"""Returns the envs dictionary from the builder's config."""
@@ -128,6 +143,14 @@ def add_packages(self, uri_packages: List[UriPackage]):
128143
self.add_package(uri_package)
129144
return self
130145

146+
@abstractmethod
147+
def remove_package(self, uri_package: UriPackage):
148+
"""
149+
Removes a package from the list of packages
150+
"""
151+
self.config.packages.remove(uri_package)
152+
return self
153+
131154
@abstractmethod
132155
def set_resolver(self, uri_resolver):
133156
"""
@@ -164,6 +187,13 @@ def build(self)-> ClientConfig:
164187
"""
165188
return self.config
166189

190+
def add(self, new_config: ClientConfig) -> ClientConfig:
191+
"""
192+
Returns a sanitized config object from the builder's config after receiving a partial `ClientConfig` object.
193+
"""
194+
super().add(new_config)
195+
return self.config
196+
167197
def get_envs(self) -> Dict[Uri, Dict[str, Any]]:
168198
return super().get_envs()
169199

@@ -207,6 +237,10 @@ def add_packages(self, uri_packages: List[UriPackage])-> BaseClientConfigBuilder
207237
super().add_packages(uri_packages)
208238
return self
209239

240+
def remove_package(self, uri_package: UriPackage)-> BaseClientConfigBuilder:
241+
super().remove_package(uri_package)
242+
return self
243+
210244
def set_resolver(self, uri_resolver: IUriResolver)-> BaseClientConfigBuilder:
211245
super().set_resolver(uri_resolver)
212246
return self

packages/polywrap-client-config-builder/tests/test_client_config_builder.py

Lines changed: 76 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from typing import List, Any, Dict, Union
22
from polywrap_core import Env
33
from polywrap_core import Uri
4-
from polywrap_core import IUriResolver
4+
from polywrap_core import IUriResolver, UriPackage, UriWrapper
55
from polywrap_client_config_builder import ClientConfigBuilder
66
import pytest
77
from pytest import fixture
@@ -27,33 +27,33 @@ def test_client_config_builder_set_env():
2727
envs = { env_uriX: env_varA }
2828
ccb = ccb.set_env( env_varA, env_uriX)
2929
client_config = ccb.build()
30-
assert asdict(client_config) == asdict(ClientConfig(envs=envs, interfaces={}, resolver = [], wrappers=[]))
30+
assert asdict(client_config) == asdict(ClientConfig(envs=envs, interfaces={}, resolver = [], wrappers=[], packages=[]))
3131

3232
def test_client_config_builder_add_env():
3333
ccb = ClientConfigBuilder() # instantiate new client config builder
3434
ccb = ccb.add_env(env = env_varA, uri = env_uriX) # add env to client config builder
3535
client_config: ClientConfig = ccb.build() # build a client config object
3636
print(client_config)
37-
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[]))
37+
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[]))
3838

3939
def test_client_config_builder_add_env_updates_env_value():
4040
ccb = ClientConfigBuilder() # instantiate new client config builder
4141
ccb = ccb.add_env(env = env_varA, uri = env_uriX) # add env to client config builder
4242
client_config: ClientConfig = ccb.build() # build a client config object
43-
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[]))
43+
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[]))
4444
ccb = ccb.add_env(env = env_varB, uri = env_uriX) # update value of env var on client config builder
4545
client_config: ClientConfig = ccb.build() # build a new client config object
46-
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varB}, interfaces={}, resolver = [], wrappers=[]))
46+
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varB}, interfaces={}, resolver = [], wrappers=[], packages=[]))
4747

4848
def test_client_config_builder_set_env_and_add_env_updates_and_add_values():
4949
ccb = ClientConfigBuilder()
5050
ccb = ccb.set_env(env_varA, env_uriX) # set the environment variables A
5151
client_config: ClientConfig = ccb.build()
52-
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[]))
52+
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[]))
5353

5454
ccb = ccb.set_env(env_varB, env_uriX) # set new vars on the same Uri
5555
client_config: ClientConfig = ccb.build()
56-
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varB}, interfaces={}, resolver = [], wrappers=[]))
56+
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varB}, interfaces={}, resolver = [], wrappers=[], packages=[]))
5757

5858
ccb = ccb.add_env(env_varM, env_uriY) # add new env vars on a new Uri
5959
client_config: ClientConfig = ccb.build()
@@ -62,14 +62,14 @@ def test_client_config_builder_set_env_and_add_env_updates_and_add_values():
6262
env_uriX: env_varB,
6363
env_uriY: env_varM
6464
},
65-
interfaces={}, resolver = [], wrappers=[]))
65+
interfaces={}, resolver = [], wrappers=[], packages=[]))
6666

6767
# add new env vars on the second Uri, while also updating the Env vars of dog and season
6868
ccb = ccb.add_envs([env_varN, env_varS], env_uriY)
6969
new_envs = {**env_varM, **env_varN, **env_varS}
7070
print(new_envs)
7171
client_config = ccb.build()
72-
assert asdict(client_config) == asdict(ClientConfig(envs = {env_uriX: env_varB, env_uriY: new_envs}, interfaces={}, resolver = [], wrappers=[]))
72+
assert asdict(client_config) == asdict(ClientConfig(envs = {env_uriX: env_varB, env_uriY: new_envs}, interfaces={}, resolver = [], wrappers=[], packages=[]))
7373

7474
# INTERFACES AND IMPLEMENTATIONS
7575

@@ -79,7 +79,58 @@ def test_client_config_builder_adds_interface_implementations():
7979
implementations_uris = [Uri("wrap://ens/eth.plugin.one"), Uri("wrap://ens/eth.plugin.two")]
8080
ccb = ccb.add_interface_implementations(interfaces_uri, implementations_uris)
8181
client_config = ccb.build()
82-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={interfaces_uri: implementations_uris}, resolver = [], wrappers=[]))
82+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={interfaces_uri: implementations_uris}, resolver = [], wrappers=[], packages=[]))
83+
84+
# PACKAGES
85+
86+
@pytest.mark.skip("Should implement UriPackage interface with package argument")
87+
def test_client_config_builder_set_package():
88+
ccb = ClientConfigBuilder()
89+
package = UriPackage(Uri("wrap://ens/uni.wrapper.eth"), version="1.0.0")
90+
ccb = ccb.set_package(package)
91+
client_config = ccb.build()
92+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[], packages=[package]))
93+
94+
@pytest.mark.skip("Should implement UriPackage interface with package argument")
95+
def test_client_config_builder_add_package():
96+
ccb = ClientConfigBuilder()
97+
package = UriPackage(Uri("wrap://ens/uni.wrapper.eth"))
98+
ccb = ccb.add_package(package)
99+
client_config = ccb.build()
100+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[], packages=[package]))
101+
102+
@pytest.mark.skip("Should implement UriPackage interface with package argument")
103+
def test_client_config_builder_add_package_updates_package():
104+
ccb = ClientConfigBuilder()
105+
package = UriPackage(Uri("wrap://ens/uni.wrapper.eth"))
106+
ccb = ccb.add_package(package)
107+
client_config = ccb.build()
108+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[], packages=[package]))
109+
package = UriPackage(Uri("wrap://ens/uni.wrapper.eth"))
110+
ccb = ccb.add_package(package)
111+
client_config = ccb.build()
112+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[], packages=[package]))
113+
114+
@pytest.mark.skip("Should implement UriPackage interface with package argument")
115+
def test_client_config_builder_add_packages():
116+
ccb = ClientConfigBuilder()
117+
package = UriPackage(Uri("wrap://ens/uni.wrapper.eth"))
118+
package2 = UriPackage(Uri("wrap://ens/uni.wrapper.eth"))
119+
ccb = ccb.add_packages([package, package2])
120+
client_config = ccb.build()
121+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[], packages=[package, package2]))
122+
123+
@pytest.mark.skip("Should implement UriPackage interface with package argument")
124+
def test_client_config_builder_add_packages_removes_packages():
125+
ccb = ClientConfigBuilder()
126+
package = UriPackage(Uri("wrap://ens/uni.wrapper.eth"))
127+
package2 = UriPackage(Uri("wrap://ens/uni.wrapper.eth"))
128+
ccb = ccb.add_packages([package, package2])
129+
client_config = ccb.build()
130+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[], packages=[package, package2]))
131+
ccb = ccb.remove_package([package1])
132+
client_config = ccb.build()
133+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[], packages=[package2]))
83134

84135
# WRAPPERS AND PLUGINS
85136

@@ -88,24 +139,24 @@ def test_client_config_builder_add_wrapper():
88139
wrapper = Uri("wrap://ens/uni.wrapper.eth")
89140
ccb = ccb.add_wrapper(wrapper)
90141
client_config = ccb.build()
91-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[wrapper]))
142+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[wrapper], packages=[]))
92143

93144
def test_client_config_builder_adds_multiple_wrappers():
94145
ccb = ClientConfigBuilder()
95146
wrappers = [Uri("wrap://ens/uni.wrapper.eth"), Uri("wrap://ens/https.plugin.eth")]
96147
ccb = ccb.add_wrappers(wrappers)
97148
client_config = ccb.build()
98-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=wrappers))
149+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=wrappers, packages=[]))
99150

100151
def test_client_config_builder_removes_wrapper():
101152
ccb = ClientConfigBuilder()
102153
wrapper = Uri("wrap://ens/uni.wrapper.eth")
103154
ccb = ccb.add_wrapper(wrapper)
104155
client_config = ccb.build()
105-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[wrapper]))
156+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[wrapper], packages=[]))
106157
ccb = ccb.remove_wrapper(wrapper)
107158
client_config = ccb.build()
108-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[]))
159+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[], packages=[]))
109160

110161
# RESOLVER
111162

@@ -114,9 +165,9 @@ def test_client_config_builder_set_uri_resolver():
114165
ccb = ClientConfigBuilder()
115166
resolver = IUriResolver()
116167
Uri("wrap://ens/eth.resolver.one")
117-
ccb = ccb.set_resolver()
168+
ccb = ccb.set_resolver(resolver)
118169
client_config = ccb.build()
119-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=resolver, wrappers=[]))
170+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[resolver], wrappers=[], packages=[]))
120171

121172
def test_client_config_builder_add_resolver():
122173

@@ -125,18 +176,24 @@ def test_client_config_builder_add_resolver():
125176
resolverA = Uri("wrap://ens/eth.resolver.one")
126177
ccb: ClientConfigBuilder = ccb.set_resolver(resolverA)
127178
client_config: ClientConfig = ccb.build()
128-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[resolverA], wrappers=[]))
179+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[resolverA], wrappers=[], packages=[]))
129180

130181
# add a second resolver
131182
resolverB = Uri("wrap://ens/eth.resolver.two")
132183
ccb = ccb.add_resolver(resolverB)
133184
client_config: ClientConfig = ccb.build()
134-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[resolverA, resolverB], wrappers=[]))
185+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[resolverA, resolverB], wrappers=[], packages=[]))
135186

136187
# add a third and fourth resolver
137188
resolverC = Uri("wrap://ens/eth.resolver.three")
138189
resolverD = Uri("wrap://ens/eth.resolver.four")
139190
ccb = ccb.add_resolvers([resolverC, resolverD])
140191
client_config: ClientConfig = ccb.build()
141192
resolvers = [resolverA, resolverB, resolverC, resolverD]
142-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=resolvers, wrappers=[]))
193+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=resolvers, wrappers=[], packages=[]))
194+
195+
# TODO: add tests for the following methods
196+
197+
def test_client_config_builder_generic_add():
198+
# Test adding package, wrapper, resolver, interface, and env with the ccb.add method
199+
pass

0 commit comments

Comments
 (0)