1515from __future__ import annotations
1616
1717from enum import Enum
18- import pprint
18+ import importlib
1919from typing import (
2020 TYPE_CHECKING ,
2121 ClassVar ,
@@ -110,38 +110,31 @@ class Client:
110110 _file : DefaultFindFilePath
111111 _proxy : Optional [BaseProxyClient ]
112112 _data_layer_history : dict [DataCloudObjectType , set [str ]]
113+ _code_type : str
113114
114115 def __new__ (
115116 cls ,
116117 reader : Optional [BaseDataCloudReader ] = None ,
117118 writer : Optional ["BaseDataCloudWriter" ] = None ,
118119 proxy : Optional [BaseProxyClient ] = None ,
119120 spark_provider : Optional ["BaseSparkSessionProvider" ] = None ,
121+ code_type : str = "script" ,
120122 ) -> Client :
121- print ("Chuy client start 2 config:" )
122- pprint .pprint (str (config ), indent = 4 )
123+ print (f"Chuy client new client: { code_type } " )
124+ if "function" in code_type :
125+ print ("Chuy111 client new function client" )
126+ return cls ._new_function_client ()
123127
124128 if cls ._instance is None :
125129 cls ._instance = super ().__new__ (cls )
126-
127- print ("Chuy client here" )
128-
129130 # Initialize Readers and Writers from config
130131 # and/or provided reader and writer
131132 if reader is None or writer is None :
132133 # We need a spark because we will initialize readers and writers
133134 if config .spark_config is None :
134- # Assume BYOC Function
135- # cls._instance._reader = None
136- # cls._instance._writer = None
137- cls ._instance ._file = DefaultFindFilePath ()
138- # cls._instance._data_layer_history = None
139- cls ._instance ._proxy = (
140- config .proxy_config .to_object () # type: ignore
141- if config .proxy_config is not None
142- else None
135+ raise ValueError (
136+ "Spark config is required when reader/writer is not provided"
143137 )
144- return cls ._instance
145138
146139 provider : BaseSparkSessionProvider
147140 if spark_provider is not None :
@@ -173,15 +166,9 @@ def __new__(
173166 writer_init = config .writer_config .to_object (spark ) # type: ignore
174167 else :
175168 writer_init = writer
176- proxy_init : Optional ["BaseProxyClient" ] = None
177- if proxy is not None :
178- proxy_init = proxy
179- elif config .proxy_config is not None :
180- proxy_init = config .proxy_config .to_object () # type: ignore
181169
182170 cls ._instance ._reader = reader_init
183171 cls ._instance ._writer = writer_init
184- cls ._instance ._proxy = proxy_init
185172 cls ._instance ._file = DefaultFindFilePath ()
186173 cls ._instance ._data_layer_history = {
187174 DataCloudObjectType .DLO : set (),
@@ -191,6 +178,22 @@ def __new__(
191178 raise ValueError ("Cannot set reader or writer after client is initialized" )
192179 return cls ._instance
193180
181+ @classmethod
182+ def _new_function_client (cls ) -> Client :
183+ print (f"Chuy config: { config } " )
184+
185+ importlib .import_module (
186+ "datacustomcoderemote.proxy.client.client.ProxyClientProvider"
187+ )
188+
189+ cls ._instance = super ().__new__ (cls )
190+ cls ._instance ._proxy = (
191+ config .proxy_config .to_object () # type: ignore
192+ if config .proxy_config is not None
193+ else None
194+ )
195+ return cls ._instance
196+
194197 def read_dlo (self , name : str ) -> PySparkDataFrame :
195198 """Read a DLO from Data Cloud.
196199
0 commit comments