11from abc import ABC , abstractmethod
22from dataclasses import dataclass
3- from polywrap_core import Uri , IUriResolver , Env
3+ from polywrap_core import Uri , IUriResolver , Env , UriWrapper ,UriPackage
4+ from polywrap_uri_resolvers import IUriResolver
45from typing import Dict , Any , List , Optional , Union
56
67@dataclass (slots = True , kw_only = True )
@@ -11,8 +12,9 @@ class ClientConfig():
1112 """
1213 envs : Dict [Uri , Dict [str , Any ]]
1314 interfaces : Dict [Uri , List [Uri ]]
15+ packages : List [UriPackage ]
1416 resolver : List [IUriResolver ]
15- wrappers : List [Uri ]
17+ wrappers : List [UriWrapper ]
1618
1719
1820class BaseClientConfigBuilder (ABC ):
@@ -22,7 +24,7 @@ class BaseClientConfigBuilder(ABC):
2224 """
2325
2426 def __init__ (self ):
25- self .config = ClientConfig (envs = {}, interfaces = {}, resolver = [], wrappers = [])
27+ self .config = ClientConfig (envs = {}, interfaces = {}, resolver = [], wrappers = [], packages = [] )
2628
2729 @abstractmethod
2830 def build (self ) -> ClientConfig :
@@ -37,13 +39,11 @@ def get_envs(self)-> Dict[Uri, Dict[str, Any]]:
3739 @abstractmethod
3840 def set_env (self , env : Env , uri : Uri ):
3941 """Sets the envs dictionary in the builder's config, overiding any existing values."""
40- if (env or uri ) is None :
41- raise KeyError ("Must provide both an env or uri" )
4242 self .config .envs [uri ] = env
4343 return self
4444
4545 @abstractmethod
46- def add_env (self , env : Env = None , uri : Uri = None ):
46+ def add_env (self , env : Env , uri : Uri ):
4747 """Adds an environment (in the form of an `Env`) for a given uri, without overwriting existing environments,
4848 unless the env key already exists in the environment, then it will overwrite the existing value"""
4949 if (env or uri ) is None :
@@ -103,6 +103,31 @@ def remove_wrapper(self, wrapper_uri: Uri) :
103103 self .config .wrappers .remove (wrapper_uri )
104104 return self
105105
106+ @abstractmethod
107+ def set_package (self , uri_package : UriPackage ):
108+ """
109+ Sets the package in the builder's config, overiding any existing values.
110+ """
111+ self .config .packages = [uri_package ]
112+ return self
113+
114+ @abstractmethod
115+ def add_package (self , uri_package : UriPackage ):
116+ """
117+ Adds a package to the list of packages
118+ """
119+ self .config .packages .append (uri_package )
120+ return self
121+
122+ @abstractmethod
123+ def add_packages (self , uri_packages : List [UriPackage ]):
124+ """
125+ Adds a list of packages to the list of packages
126+ """
127+ for uri_package in uri_packages :
128+ self .add_package (uri_package )
129+ return self
130+
106131 @abstractmethod
107132 def set_resolver (self , uri_resolver ):
108133 """
@@ -170,6 +195,18 @@ def remove_wrapper(self, wrapper_uri: Uri)-> BaseClientConfigBuilder:
170195 super ().remove_wrapper (wrapper_uri )
171196 return self
172197
198+ def set_package (self , uri_package : UriPackage )-> BaseClientConfigBuilder :
199+ super ().set_package (uri_package )
200+ return self
201+
202+ def add_package (self , uri_package : UriPackage )-> BaseClientConfigBuilder :
203+ super ().add_package (uri_package )
204+ return self
205+
206+ def add_packages (self , uri_packages : List [UriPackage ])-> BaseClientConfigBuilder :
207+ super ().add_packages (uri_packages )
208+ return self
209+
173210 def set_resolver (self , uri_resolver : IUriResolver )-> BaseClientConfigBuilder :
174211 super ().set_resolver (uri_resolver )
175212 return self
0 commit comments