Skip to content

Commit 2da01fd

Browse files
authored
refactor: polywrap-config-builder (#188)
1 parent c229dce commit 2da01fd

File tree

13 files changed

+121
-117
lines changed

13 files changed

+121
-117
lines changed

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,7 @@ celerybeat.pid
104104
# Environments
105105
.env
106106
.venv
107-
env/
108107
venv/
109-
ENV/
110108
env.bak/
111109
venv.bak/
112110

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
"""This package contains modules related to client config builder."""
22

33
from .polywrap_client_config_builder import *
4+
from .types import *

packages/polywrap-client-config-builder/polywrap_client_config_builder/configures/base_configure.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
"""This module contains the base configure class for the client config builder."""
2+
from abc import ABC
3+
24
from ..types import BuilderConfig, ClientConfigBuilder
35

46

5-
class BaseConfigure(ClientConfigBuilder):
7+
class BaseConfigure(ClientConfigBuilder, ABC):
68
"""BaseConfigure is the base configure class for the client config builder.
79
810
Attributes:

packages/polywrap-client-config-builder/polywrap_client_config_builder/configures/env_configure.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,39 @@
11
"""This module contains the env configure class for the client config builder."""
2-
from typing import Dict, List, Union
2+
from abc import ABC
3+
from typing import Any, Dict, List, Union
34

4-
from polywrap_core import Env, Uri
5+
from polywrap_core import Uri
56

6-
from ..types import ClientConfigBuilder
7+
from ..types import BuilderConfig, ClientConfigBuilder
78

89

9-
class EnvConfigure(ClientConfigBuilder):
10+
class EnvConfigure(ClientConfigBuilder, ABC):
1011
"""Allows configuring the environment variables."""
1112

12-
def get_env(self, uri: Uri) -> Union[Env, None]:
13+
config: BuilderConfig
14+
15+
def get_env(self, uri: Uri) -> Union[Any, None]:
1316
"""Return the env for the given uri."""
1417
return self.config.envs.get(uri)
1518

16-
def get_envs(self) -> Dict[Uri, Env]:
19+
def get_envs(self) -> Dict[Uri, Any]:
1720
"""Return the envs from the builder's config."""
1821
return self.config.envs
1922

20-
def set_env(self, uri: Uri, env: Env) -> ClientConfigBuilder:
23+
def set_env(self, uri: Uri, env: Any) -> ClientConfigBuilder:
2124
"""Set the env by uri in the builder's config, overiding any existing values."""
2225
self.config.envs[uri] = env
2326
return self
2427

25-
def set_envs(self, uri_envs: Dict[Uri, Env]) -> ClientConfigBuilder:
28+
def set_envs(self, uri_envs: Dict[Uri, Any]) -> ClientConfigBuilder:
2629
"""Set the envs in the builder's config, overiding any existing values."""
2730
self.config.envs.update(uri_envs)
2831
return self
2932

30-
def add_env(self, uri: Uri, env: Env) -> ClientConfigBuilder:
33+
def add_env(self, uri: Uri, env: Any) -> ClientConfigBuilder:
3134
"""Add an env for the given uri.
3235
33-
If an Env is already associated with the uri, it is modified.
36+
If an Any is already associated with the uri, it is modified.
3437
"""
3538
if self.config.envs.get(uri):
3639
for key in self.config.envs[uri]:
@@ -39,7 +42,7 @@ def add_env(self, uri: Uri, env: Env) -> ClientConfigBuilder:
3942
self.config.envs[uri] = env
4043
return self
4144

42-
def add_envs(self, uri_envs: Dict[Uri, Env]) -> ClientConfigBuilder:
45+
def add_envs(self, uri_envs: Dict[Uri, Any]) -> ClientConfigBuilder:
4346
"""Add a list of envs to the builder's config."""
4447
for uri, env in uri_envs.items():
4548
self.add_env(uri, env)

packages/polywrap-client-config-builder/polywrap_client_config_builder/configures/interface_configure.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
"""This module contains the interface configure class for the client config builder."""
2+
from abc import ABC
23
from typing import Dict, List, Union
34

45
from polywrap_core import Uri
56

6-
from ..types import ClientConfigBuilder
7+
from ..types import BuilderConfig, ClientConfigBuilder
78

89

9-
class InterfaceConfigure(ClientConfigBuilder):
10+
class InterfaceConfigure(ClientConfigBuilder, ABC):
1011
"""Allows configuring the interface-implementations."""
1112

13+
config: BuilderConfig
14+
1215
def get_interfaces(self) -> Dict[Uri, List[Uri]]:
1316
"""Return all registered interface and its implementations\
1417
from the builder's config."""

packages/polywrap-client-config-builder/polywrap_client_config_builder/configures/package_configure.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,31 @@
11
"""This module contains the package configure class for the client config builder."""
2+
from abc import ABC
23
from typing import Dict, List, Union
34

4-
from polywrap_core import Uri, UriPackageOrWrapper, WrapPackage
5+
from polywrap_core import Uri, WrapPackage
56

6-
from ..types import ClientConfigBuilder
7+
from ..types import BuilderConfig, ClientConfigBuilder
78

89

9-
class PackageConfigure(ClientConfigBuilder):
10+
class PackageConfigure(ClientConfigBuilder, ABC):
1011
"""Allows configuring the WRAP packages."""
1112

12-
def get_package(self, uri: Uri) -> Union[WrapPackage[UriPackageOrWrapper], None]:
13+
config: BuilderConfig
14+
15+
def get_package(self, uri: Uri) -> Union[WrapPackage, None]:
1316
"""Return the package for the given uri."""
1417
return self.config.packages.get(uri)
1518

16-
def get_packages(self) -> Dict[Uri, WrapPackage[UriPackageOrWrapper]]:
19+
def get_packages(self) -> Dict[Uri, WrapPackage]:
1720
"""Return the packages from the builder's config."""
1821
return self.config.packages
1922

20-
def set_package(
21-
self, uri: Uri, package: WrapPackage[UriPackageOrWrapper]
22-
) -> ClientConfigBuilder:
23+
def set_package(self, uri: Uri, package: WrapPackage) -> ClientConfigBuilder:
2324
"""Set the package by uri in the builder's config, overiding any existing values."""
2425
self.config.packages[uri] = package
2526
return self
2627

27-
def set_packages(
28-
self, uri_packages: Dict[Uri, WrapPackage[UriPackageOrWrapper]]
29-
) -> ClientConfigBuilder:
28+
def set_packages(self, uri_packages: Dict[Uri, WrapPackage]) -> ClientConfigBuilder:
3029
"""Set the packages in the builder's config, overiding any existing values."""
3130
self.config.packages.update(uri_packages)
3231
return self

packages/polywrap-client-config-builder/polywrap_client_config_builder/configures/redirect_configure.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
"""This module contains the redirect configure class for the client config builder."""
2+
from abc import ABC
23
from typing import Dict, List, Union
34

45
from polywrap_core import Uri
56

6-
from ..types import ClientConfigBuilder
7+
from ..types import BuilderConfig, ClientConfigBuilder
78

89

9-
class RedirectConfigure(ClientConfigBuilder):
10+
class RedirectConfigure(ClientConfigBuilder, ABC):
1011
"""Allows configuring the URI redirects."""
1112

13+
config: BuilderConfig
14+
1215
def get_redirect(self, uri: Uri) -> Union[Uri, None]:
1316
"""Return the redirect for the given uri."""
1417
return self.config.redirects.get(uri)

packages/polywrap-client-config-builder/polywrap_client_config_builder/configures/resolver_configure.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
"""This module contains the resolver configure class for the client config builder."""
2+
from abc import ABC
23
from typing import List
34

45
from polywrap_core import UriResolver
56

6-
from ..types import ClientConfigBuilder
7+
from ..types import BuilderConfig, ClientConfigBuilder
78

89

9-
class ResolverConfigure(ClientConfigBuilder):
10+
class ResolverConfigure(ClientConfigBuilder, ABC):
1011
"""Allows configuring the URI resolvers."""
1112

13+
config: BuilderConfig
14+
1215
def get_resolvers(self) -> List[UriResolver]:
1316
"""Return the resolvers from the builder's config."""
1417
return self.config.resolvers

packages/polywrap-client-config-builder/polywrap_client_config_builder/configures/wrapper_configure.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,31 @@
11
"""This module contains the wrapper configure class for the client config builder."""
2+
from abc import ABC
23
from typing import Dict, List, Union
34

4-
from polywrap_core import Uri, UriPackageOrWrapper, Wrapper
5+
from polywrap_core import Uri, Wrapper
56

6-
from ..types import ClientConfigBuilder
7+
from ..types import BuilderConfig, ClientConfigBuilder
78

89

9-
class WrapperConfigure(ClientConfigBuilder):
10+
class WrapperConfigure(ClientConfigBuilder, ABC):
1011
"""Allows configuring the wrappers."""
1112

12-
def get_wrapper(self, uri: Uri) -> Union[Wrapper[UriPackageOrWrapper], None]:
13+
config: BuilderConfig
14+
15+
def get_wrapper(self, uri: Uri) -> Union[Wrapper, None]:
1316
"""Return the set wrapper for the given uri."""
1417
return self.config.wrappers.get(uri)
1518

16-
def get_wrappers(self) -> Dict[Uri, Wrapper[UriPackageOrWrapper]]:
19+
def get_wrappers(self) -> Dict[Uri, Wrapper]:
1720
"""Return the wrappers from the builder's config."""
1821
return self.config.wrappers
1922

20-
def set_wrapper(
21-
self, uri: Uri, wrapper: Wrapper[UriPackageOrWrapper]
22-
) -> ClientConfigBuilder:
23+
def set_wrapper(self, uri: Uri, wrapper: Wrapper) -> ClientConfigBuilder:
2324
"""Set the wrapper by uri in the builder's config, overiding any existing values."""
2425
self.config.wrappers[uri] = wrapper
2526
return self
2627

27-
def set_wrappers(
28-
self, uri_wrappers: Dict[Uri, Wrapper[UriPackageOrWrapper]]
29-
) -> ClientConfigBuilder:
28+
def set_wrappers(self, uri_wrappers: Dict[Uri, Wrapper]) -> ClientConfigBuilder:
3029
"""Set the wrappers in the builder's config, overiding any existing values."""
3130
self.config.wrappers.update(uri_wrappers)
3231
return self

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

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
"""This module provides a simple builder for building a ClientConfig object."""
22
# pylint: disable=too-many-ancestors
33

4-
from typing import Optional
4+
from typing import Optional, cast
55

6-
from polywrap_core import ClientConfig
6+
from polywrap_core import ClientConfig, UriPackage, UriWrapper
77
from polywrap_uri_resolvers import (
88
ExtendableUriResolver,
9-
InMemoryWrapperCache,
10-
PackageToWrapperResolver,
9+
InMemoryResolutionResultCache,
1110
RecursiveResolver,
12-
RequestSynchronizerResolver,
11+
ResolutionResultCacheResolver,
1312
StaticResolver,
13+
StaticResolverLike,
1414
UriResolverAggregator,
15-
WrapperCacheResolver,
1615
)
1716

1817
from .configures import (
@@ -51,30 +50,33 @@ def __init__(self):
5150
self.config = BuilderConfig(
5251
envs={}, interfaces={}, resolvers=[], wrappers={}, packages={}, redirects={}
5352
)
53+
super().__init__()
5454

5555
def build(self, options: Optional[BuildOptions] = None) -> ClientConfig:
5656
"""Build the ClientConfig object from the builder's config."""
57+
static_resolver_like = cast(StaticResolverLike, self.config.redirects)
58+
59+
for uri, wrapper in self.config.wrappers.items():
60+
static_resolver_like[uri] = UriWrapper(uri=uri, wrapper=wrapper)
61+
62+
for uri, package in self.config.packages.items():
63+
static_resolver_like[uri] = UriPackage(uri=uri, package=package)
64+
5765
resolver = (
5866
options.resolver
5967
if options and options.resolver
6068
else RecursiveResolver(
61-
RequestSynchronizerResolver(
62-
WrapperCacheResolver(
63-
PackageToWrapperResolver(
64-
UriResolverAggregator(
65-
[
66-
StaticResolver(self.config.redirects),
67-
StaticResolver(self.config.wrappers),
68-
StaticResolver(self.config.packages),
69-
*self.config.resolvers,
70-
ExtendableUriResolver(),
71-
]
72-
)
73-
),
74-
options.wrapper_cache
75-
if options and options.wrapper_cache
76-
else InMemoryWrapperCache(),
77-
)
69+
ResolutionResultCacheResolver(
70+
UriResolverAggregator(
71+
[
72+
StaticResolver(static_resolver_like),
73+
*self.config.resolvers,
74+
ExtendableUriResolver(),
75+
]
76+
),
77+
options.resolution_result_cache
78+
if options and options.resolution_result_cache
79+
else InMemoryResolutionResultCache(),
7880
)
7981
)
8082
)
@@ -84,3 +86,6 @@ def build(self, options: Optional[BuildOptions] = None) -> ClientConfig:
8486
interfaces=self.config.interfaces,
8587
resolver=resolver,
8688
)
89+
90+
91+
__all__ = ["PolywrapClientConfigBuilder"]

0 commit comments

Comments
 (0)