Skip to content

Commit 572901c

Browse files
committed
feat:implement uri_redirects
1 parent 54ce58c commit 572901c

4 files changed

Lines changed: 53 additions & 44 deletions

File tree

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class ClientConfig:
2020
wrappers: List[UriWrapper]
2121
packages: List[UriPackage]
2222
resolver: List[UriResolverLike]
23+
redirects: Dict[Uri, Uri]
2324

2425

2526
class BaseClientConfigBuilder(ABC):
@@ -30,7 +31,7 @@ class BaseClientConfigBuilder(ABC):
3031

3132
def __init__(self):
3233
self.config = ClientConfig(
33-
envs={}, interfaces={}, resolver=[], wrappers=[], packages=[]
34+
envs={}, interfaces={}, resolver=[], wrappers=[], packages=[], redirects={}
3435
)
3536

3637
@abstractmethod
@@ -158,7 +159,6 @@ def add_resolver(self, resolver: UriResolverLike):
158159
"""
159160
Adds a resolver to the list of resolvers
160161
"""
161-
162162
if self.config.resolver is None:
163163
raise ValueError(
164164
"This resolver is not set. Please set a resolver before adding resolvers."
@@ -174,9 +174,17 @@ def add_resolvers(self, resolvers_list: List[UriResolverLike]):
174174
self.add_resolver(resolver)
175175
return self
176176

177+
def set_uri_redirect(self, uri_from: Uri, uri_to: Uri):
178+
"""
179+
Sets an uri redirect, from one uri to another
180+
If there was a redirect previously listed, it's changed to the new one
181+
"""
182+
self.config.redirects = {uri_from : uri_to}
183+
return self
184+
177185

178186
class ClientConfigBuilder(BaseClientConfigBuilder):
179-
187+
180188
def build(self) -> ClientConfig:
181189
"""
182190
Returns a sanitized config object from the builder's config.

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,16 +105,16 @@ def test_client_config_builder_set_package():
105105
uri_package = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Todo")
106106
ccb = ccb.set_package(uri_package)
107107
client_config = ccb.build()
108-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[], packages=[uri_package]))
108+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[], packages=[uri_package], redirects={}))
109109

110110
def test_client_config_builder_add_wrapper():
111111
ccb = ClientConfigBuilder()
112112
uri_wrapper = UriWrapper(uri=Uri("wrap://ens/eth.plugin.one"),wrapper="todo")
113113
ccb = ccb.add_wrapper(uri_wrapper)
114114
client_config = ccb.build()
115-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[uri_wrapper], packages=[]))
115+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[uri_wrapper], packages=[], redirects={}))
116116
# add second wrapper
117117
uri_wrapper2 = UriWrapper(uri=Uri("wrap://ens/eth.plugin.two"),wrapper="Todo")
118118
ccb = ccb.add_wrapper(uri_wrapper2)
119119
client_config = ccb.build()
120-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[uri_wrapper, uri_wrapper2], packages=[]))
120+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[uri_wrapper, uri_wrapper2], packages=[], redirects={}))

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

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,33 @@ def test_client_config_builder_set_env(env_varA, env_uriX):
1717
envs = { env_uriX: env_varA }
1818
ccb = ccb.set_env( env_varA, env_uriX)
1919
client_config = ccb.build()
20-
assert asdict(client_config) == asdict(ClientConfig(envs=envs, interfaces={}, resolver = [], wrappers=[], packages=[]))
20+
assert asdict(client_config) == asdict(ClientConfig(envs=envs, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={}))
2121

2222
def test_client_config_builder_add_env(env_varA, env_uriX):
2323
ccb = ClientConfigBuilder() # instantiate new client config builder
2424
ccb = ccb.add_env(env = env_varA, uri = env_uriX) # add env to client config builder
2525
client_config: ClientConfig = ccb.build() # build a client config object
2626
print(client_config)
27-
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[]))
27+
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={}))
2828

2929
def test_client_config_builder_add_env_updates_env_value(env_varA,env_varB, env_uriX):
3030
ccb = ClientConfigBuilder() # instantiate new client config builder
3131
ccb = ccb.add_env(env = env_varA, uri = env_uriX) # add env to client config builder
3232
client_config: ClientConfig = ccb.build() # build a client config object
33-
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[]))
33+
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={}))
3434
ccb = ccb.add_env(env = env_varB, uri = env_uriX) # update value of env var on client config builder
3535
client_config: ClientConfig = ccb.build() # build a new client config object
36-
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varB}, interfaces={}, resolver = [], wrappers=[], packages=[]))
36+
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varB}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={}))
3737

3838
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):
3939
ccb = ClientConfigBuilder()
4040
ccb = ccb.set_env(env_varA, env_uriX) # set the environment variables A
4141
client_config: ClientConfig = ccb.build()
42-
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[]))
42+
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={}))
4343

4444
ccb = ccb.set_env(env_varB, env_uriX) # set new vars on the same Uri
4545
client_config: ClientConfig = ccb.build()
46-
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varB}, interfaces={}, resolver = [], wrappers=[], packages=[]))
46+
assert asdict(client_config) == asdict(ClientConfig(envs={env_uriX: env_varB}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={}))
4747

4848
ccb = ccb.add_env(env_varM, env_uriY) # add new env vars on a new Uri
4949
client_config: ClientConfig = ccb.build()
@@ -52,14 +52,14 @@ def test_client_config_builder_set_env_and_add_env_updates_and_add_values(env_va
5252
env_uriX: env_varB,
5353
env_uriY: env_varM
5454
},
55-
interfaces={}, resolver = [], wrappers=[], packages=[]))
55+
interfaces={}, resolver = [], wrappers=[], packages=[], redirects={}))
5656

5757
# add new env vars on the second Uri, while also updating the Env vars of dog and season
5858
ccb = ccb.add_envs([env_varN, env_varS], env_uriY)
5959
new_envs = {**env_varM, **env_varN, **env_varS}
6060
print(new_envs)
6161
client_config = ccb.build()
62-
assert asdict(client_config) == asdict(ClientConfig(envs = {env_uriX: env_varB, env_uriY: new_envs}, interfaces={}, resolver = [], wrappers=[], packages=[]))
62+
assert asdict(client_config) == asdict(ClientConfig(envs = {env_uriX: env_varB, env_uriY: new_envs}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={}))
6363

6464
# INTERFACES AND IMPLEMENTATIONS
6565

@@ -69,7 +69,7 @@ def test_client_config_builder_adds_interface_implementations():
6969
implementations_uris = [Uri("wrap://ens/eth.plugin.one"), Uri("wrap://ens/eth.plugin.two")]
7070
ccb = ccb.add_interface_implementations(interfaces_uri, implementations_uris)
7171
client_config = ccb.build()
72-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={interfaces_uri: implementations_uris}, resolver = [], wrappers=[], packages=[]))
72+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={interfaces_uri: implementations_uris}, resolver = [], wrappers=[], packages=[], redirects={}))
7373

7474
# PACKAGES
7575

@@ -85,28 +85,28 @@ def test_client_config_builder_set_package():
8585
ccb = ccb.set_package(uri_package)
8686
client_config = ccb.build()
8787
assert asdict(client_config) == asdict(ClientConfig(envs={},
88-
interfaces={}, resolver = [], wrappers=[], packages=[uri_package]))
88+
interfaces={}, resolver = [], wrappers=[], packages=[uri_package], redirects={}))
8989

9090
def test_client_config_builder_add_package():
9191
ccb = ClientConfigBuilder()
9292
uri_package = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Todo")
9393
ccb = ccb.add_package(uri_package)
9494
client_config = ccb.build()
9595
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={},
96-
resolver = [], wrappers=[], packages=[uri_package]))
96+
resolver = [], wrappers=[], packages=[uri_package], redirects={}))
9797

9898
def test_client_config_builder_add_package_updates_packages_list():
9999
ccb = ClientConfigBuilder()
100100
uri_package1 = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Todo")
101101
ccb = ccb.add_package(uri_package1)
102102
client_config = ccb.build()
103103
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={},
104-
resolver = [], wrappers=[], packages=[uri_package1]))
104+
resolver = [], wrappers=[], packages=[uri_package1], redirects={}))
105105
uri_package2 = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Updated")
106106
ccb = ccb.add_package(uri_package2)
107107
client_config = ccb.build()
108108
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={},
109-
resolver = [], wrappers=[], packages=[uri_package1, uri_package2]))
109+
resolver = [], wrappers=[], packages=[uri_package1, uri_package2], redirects={}))
110110

111111
def test_client_config_builder_add_multiple_packages():
112112
ccb = ClientConfigBuilder()
@@ -115,7 +115,7 @@ def test_client_config_builder_add_multiple_packages():
115115
ccb = ccb.add_packages([uri_package1, uri_package2])
116116
client_config = ccb.build()
117117
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [],
118-
wrappers=[], packages=[uri_package1, uri_package2]))
118+
wrappers=[], packages=[uri_package1, uri_package2], redirects={}))
119119

120120
def test_client_config_builder_add_packages_removes_packages():
121121
ccb = ClientConfigBuilder()
@@ -124,11 +124,11 @@ def test_client_config_builder_add_packages_removes_packages():
124124
ccb = ccb.add_packages([uri_package1, uri_package2])
125125
client_config = ccb.build()
126126
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [],
127-
wrappers=[], packages=[uri_package1, uri_package2]))
127+
wrappers=[], packages=[uri_package1, uri_package2], redirects={}))
128128
ccb = ccb.remove_package(uri_package1)
129129
client_config = ccb.build()
130130
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [],
131-
wrappers=[], packages=[uri_package2]))
131+
wrappers=[], packages=[uri_package2], redirects={}))
132132

133133
# WRAPPERS AND PLUGINS
134134

@@ -137,24 +137,24 @@ def test_client_config_builder_add_wrapper():
137137
wrapper = Uri("wrap://ens/uni.wrapper.eth")
138138
ccb = ccb.add_wrapper(wrapper)
139139
client_config = ccb.build()
140-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[wrapper], packages=[]))
140+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[wrapper], packages=[], redirects={}))
141141

142142
def test_client_config_builder_adds_multiple_wrappers():
143143
ccb = ClientConfigBuilder()
144144
wrappers = [Uri("wrap://ens/uni.wrapper.eth"), Uri("wrap://ens/https.plugin.eth")]
145145
ccb = ccb.add_wrappers(wrappers)
146146
client_config = ccb.build()
147-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=wrappers, packages=[]))
147+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=wrappers, packages=[], redirects={}))
148148

149149
def test_client_config_builder_removes_wrapper():
150150
ccb = ClientConfigBuilder()
151151
wrapper = Uri("wrap://ens/uni.wrapper.eth")
152152
ccb = ccb.add_wrapper(wrapper)
153153
client_config = ccb.build()
154-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[wrapper], packages=[]))
154+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[wrapper], packages=[], redirects={}))
155155
ccb = ccb.remove_wrapper(wrapper)
156156
client_config = ccb.build()
157-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[], packages=[]))
157+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={}))
158158

159159
# RESOLVER
160160

@@ -163,29 +163,29 @@ def test_client_config_builder_set_uri_resolver():
163163
resolver: UriResolverLike = Uri("wrap://ens/eth.resolver.one")
164164
ccb = ccb.set_resolver(resolver)
165165
client_config = ccb.build()
166-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[resolver], wrappers=[], packages=[]))
166+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[resolver], wrappers=[], packages=[], redirects={}))
167167

168168
def test_client_config_builder_add_resolver():
169169
# set a first resolver
170170
ccb = ClientConfigBuilder()
171171
resolverA = Uri("wrap://ens/eth.resolver.one")
172172
ccb: BaseClientConfigBuilder = ccb.set_resolver(resolverA)
173173
client_config: ClientConfig = ccb.build()
174-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[resolverA], wrappers=[], packages=[]))
174+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[resolverA], wrappers=[], packages=[], redirects={}))
175175

176176
# add a second resolver
177177
resolverB = Uri("wrap://ens/eth.resolver.two")
178178
ccb = ccb.add_resolver(resolverB)
179179
client_config: ClientConfig = ccb.build()
180-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[resolverA, resolverB], wrappers=[], packages=[]))
180+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=[resolverA, resolverB], wrappers=[], packages=[], redirects={}))
181181

182182
# add a third and fourth resolver
183183
resolverC = Uri("wrap://ens/eth.resolver.three")
184184
resolverD = Uri("wrap://ens/eth.resolver.four")
185185
ccb = ccb.add_resolvers([resolverC, resolverD])
186186
client_config: ClientConfig = ccb.build()
187187
resolvers: List[UriResolverLike] = [resolverA, resolverB, resolverC, resolverD]
188-
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=resolvers, wrappers=[], packages=[]))
188+
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={}, resolver=resolvers, wrappers=[], packages=[], redirects={}))
189189

190190
# GENERIC ADD FUNCTION
191191

@@ -196,53 +196,53 @@ def test_client_config_builder_generic_add(env_varA,env_uriX, env_uriY):
196196
# starts empty
197197
client_config = ccb.build()
198198
assert asdict(client_config) == asdict(ClientConfig(envs={}, interfaces={},
199-
resolver = [], wrappers=[], packages=[]))
199+
resolver = [], wrappers=[], packages=[], redirects={}))
200200

201201
# add an env
202-
new_config = ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[])
202+
new_config = ClientConfig(envs={env_uriX: env_varA}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={})
203203
ccb = ccb.add(new_config)
204204
client_config1 = ccb.build()
205205
assert asdict(client_config1) == asdict(new_config)
206206

207207
# add a resolver
208-
new_resolvers = ClientConfig(resolver=[Uri("wrap://ens/eth.resolver.one")], envs={}, interfaces={}, wrappers=[], packages=[])
208+
new_resolvers = ClientConfig(resolver=[Uri("wrap://ens/eth.resolver.one")], envs={}, interfaces={}, wrappers=[], packages=[], redirects={})
209209
ccb = ccb.add(new_resolvers)
210210
client_config2 = ccb.build()
211211
assert asdict(client_config2) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={},
212-
resolver = [Uri("wrap://ens/eth.resolver.one")], wrappers=[], packages=[]))
212+
resolver = [Uri("wrap://ens/eth.resolver.one")], wrappers=[], packages=[], redirects={}))
213213

214214
# add a second resolver
215-
new_resolver = ClientConfig(resolver=[Uri("wrap://ens/eth.resolver.two")], envs={}, interfaces={}, wrappers=[], packages=[])
215+
new_resolver = ClientConfig(resolver=[Uri("wrap://ens/eth.resolver.two")], envs={}, interfaces={}, wrappers=[], packages=[], redirects={})
216216
ccb = ccb.add(new_resolver)
217217
client_config5 = ccb.build()
218218
assert asdict(client_config5) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={},
219-
resolver = [Uri("wrap://ens/eth.resolver.one"), Uri("wrap://ens/eth.resolver.two")], wrappers=[], packages=[]))
219+
resolver = [Uri("wrap://ens/eth.resolver.one"), Uri("wrap://ens/eth.resolver.two")], wrappers=[], packages=[], redirects={}))
220220

221221

222222
# add a wrapper
223-
new_wrapper = ClientConfig(wrappers=[Uri("wrap://ens/uni.wrapper.eth")], envs={}, interfaces={}, resolver = [], packages=[])
223+
new_wrapper = ClientConfig(wrappers=[Uri("wrap://ens/uni.wrapper.eth")], envs={}, interfaces={}, resolver = [], packages=[], redirects={})
224224
ccb = ccb.add(new_wrapper)
225225
client_config3 = ccb.build()
226226
assert asdict(client_config3) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces={},
227227
resolver = [Uri("wrap://ens/eth.resolver.one"), Uri("wrap://ens/eth.resolver.two")],
228-
wrappers=[Uri("wrap://ens/uni.wrapper.eth")], packages=[]))
228+
wrappers=[Uri("wrap://ens/uni.wrapper.eth")], packages=[], redirects={}))
229229

230230
# add an interface
231231
interfaces: Dict[Uri, List[Uri]] = {Uri("wrap://ens/eth.interface.eth"): [env_uriX,env_uriY]}
232-
new_interface = ClientConfig(interfaces=interfaces, envs={}, resolver = [], wrappers=[], packages=[])
232+
new_interface = ClientConfig(interfaces=interfaces, envs={}, resolver = [], wrappers=[], packages=[], redirects={})
233233
ccb = ccb.add(new_interface)
234234
client_config4 = ccb.build()
235235
assert asdict(client_config4) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces=interfaces,
236236
resolver = [Uri("wrap://ens/eth.resolver.one"), Uri("wrap://ens/eth.resolver.two")],
237-
wrappers=[Uri("wrap://ens/uni.wrapper.eth")], packages=[]))
237+
wrappers=[Uri("wrap://ens/uni.wrapper.eth")], packages=[], redirects={}))
238238

239239
# add a package
240240
uri_package = UriPackage(uri=Uri("wrap://ens/eth.plugin.one"),package="Todo")
241-
new_package = ClientConfig(packages=[uri_package], envs={}, interfaces={}, resolver = [], wrappers=[])
241+
new_package = ClientConfig(packages=[uri_package], envs={}, interfaces={}, resolver = [], wrappers=[], redirects={})
242242
ccb = ccb.add(new_package)
243243
client_config6 = ccb.build()
244244
assert asdict(client_config6) == asdict(ClientConfig(envs={env_uriX: env_varA}, interfaces=interfaces,
245245
resolver = [Uri("wrap://ens/eth.resolver.one"), Uri("wrap://ens/eth.resolver.two")],
246-
wrappers=[Uri("wrap://ens/uni.wrapper.eth")], packages=[uri_package]))
246+
wrappers=[Uri("wrap://ens/uni.wrapper.eth")], packages=[uri_package], redirects={}))
247247

248248

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ def test_client_config_structure_starts_empty():
1111
interfaces={},
1212
resolver = [],
1313
wrappers = [],
14-
packages=[]
14+
packages=[],
15+
redirects={}
1516
)
1617
assert asdict(client_config) == asdict(result)
1718

@@ -25,5 +26,5 @@ def test_client_config_structure_sets_env():
2526
env = env
2627
)
2728
client_config = ccb.build()
28-
assert asdict(client_config) == asdict(ClientConfig(envs={uri: env}, interfaces={}, resolver = [], wrappers=[], packages=[]))
29+
assert asdict(client_config) == asdict(ClientConfig(envs={uri: env}, interfaces={}, resolver = [], wrappers=[], packages=[], redirects={}))
2930

0 commit comments

Comments
 (0)