Skip to content

Commit b5e0fae

Browse files
committed
kind of working
1 parent 087eaeb commit b5e0fae

6 files changed

Lines changed: 55 additions & 15 deletions

File tree

src/datacustomcode/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@
1717
from datacustomcode.credentials import AuthType, Credentials
1818
from datacustomcode.io.reader.query_api import QueryAPIDataCloudReader
1919
from datacustomcode.io.writer.print import PrintDataCloudWriter
20+
from datacustomcode.proxy.client.local_proxy_client import LocalProxyClientProvider
2021

2122
__all__ = [
2223
"AuthType",
2324
"Client",
2425
"Credentials",
26+
"LocalProxyClientProvider",
2527
"PrintDataCloudWriter",
2628
"QueryAPIDataCloudReader",
2729
]

src/datacustomcode/client.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
from datacustomcode.io.reader.base import BaseDataCloudReader
3535
from datacustomcode.io.writer.base import BaseDataCloudWriter, WriteMode
36+
from datacustomcode.proxy.client.base import BaseProxyClient
3637
from datacustomcode.spark.base import BaseSparkSessionProvider
3738

3839

@@ -106,12 +107,14 @@ class Client:
106107
_reader: BaseDataCloudReader
107108
_writer: BaseDataCloudWriter
108109
_file: DefaultFindFilePath
110+
_proxy: BaseProxyClient
109111
_data_layer_history: dict[DataCloudObjectType, set[str]]
110112

111113
def __new__(
112114
cls,
113115
reader: Optional[BaseDataCloudReader] = None,
114116
writer: Optional["BaseDataCloudWriter"] = None,
117+
proxy: Optional[BaseProxyClient] = None,
115118
spark_provider: Optional["BaseSparkSessionProvider"] = None,
116119
) -> Client:
117120
if cls._instance is None:
@@ -143,9 +146,21 @@ def __new__(
143146
elif reader is None or (
144147
config.reader_config is not None and config.reader_config.force
145148
):
149+
if config.proxy_config is None:
150+
raise ValueError(
151+
"Proxy config is required when reader is built from config"
152+
)
153+
proxy_init = config.proxy_config.to_object(spark)
154+
print(f"chuy1 reader, proxy_init: {proxy_init}")
155+
146156
reader_init = config.reader_config.to_object(spark) # type: ignore
157+
print(f"chuy2 reader, reader_init: {reader_init}, spark: {spark}")
147158
else:
159+
print("chuy2 reader")
148160
reader_init = reader
161+
if config.proxy_config is None:
162+
raise ValueError("Proxy config is required when reader is provided")
163+
proxy_init = config.proxy_config.to_object(spark)
149164
if config.writer_config is None and writer is None:
150165
raise ValueError(
151166
"Writer config is required when writer is not provided"
@@ -159,6 +174,7 @@ def __new__(
159174
cls._instance._reader = reader_init
160175
cls._instance._writer = writer_init
161176
cls._instance._file = DefaultFindFilePath()
177+
cls._instance._proxy = proxy_init
162178
cls._instance._data_layer_history = {
163179
DataCloudObjectType.DLO: set(),
164180
DataCloudObjectType.DMO: set(),
@@ -217,6 +233,9 @@ def write_to_dmo(
217233
self._validate_data_layer_history_does_not_contain(DataCloudObjectType.DLO)
218234
return self._writer.write_to_dmo(name, dataframe, write_mode, **kwargs)
219235

236+
def call_llm_gateway(self, LLM_MODEL_ID: str, prompt: str, maxTokens: int):
237+
self._proxy.call_llm_gateway(LLM_MODEL_ID, prompt, maxTokens)
238+
220239
def find_file_path(self, file_name: str) -> Path:
221240
"""Return a file path"""
222241

src/datacustomcode/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
from datacustomcode.io.base import BaseDataAccessLayer
3939
from datacustomcode.io.reader.base import BaseDataCloudReader # noqa: TCH001
4040
from datacustomcode.io.writer.base import BaseDataCloudWriter # noqa: TCH001
41+
from datacustomcode.proxy.client.base import BaseProxyClient # noqa: TCH001
4142
from datacustomcode.spark.base import BaseSparkSessionProvider
4243

4344
DEFAULT_CONFIG_NAME = "config.yaml"
@@ -109,6 +110,7 @@ def to_object(self) -> _P:
109110
class ClientConfig(BaseModel):
110111
reader_config: Union[AccessLayerObjectConfig[BaseDataCloudReader], None] = None
111112
writer_config: Union[AccessLayerObjectConfig[BaseDataCloudWriter], None] = None
113+
proxy_config: Union[AccessLayerObjectConfig[BaseProxyClient], None] = None
112114
spark_config: Union[SparkConfig, None] = None
113115
spark_provider_config: Union[
114116
SparkProviderConfig[BaseSparkSessionProvider], None
@@ -136,6 +138,7 @@ def merge(
136138

137139
self.reader_config = merge(self.reader_config, other.reader_config)
138140
self.writer_config = merge(self.writer_config, other.writer_config)
141+
self.proxy_config = merge(self.proxy_config, other.proxy_config)
139142
self.spark_config = merge(self.spark_config, other.spark_config)
140143
self.spark_provider_config = merge(
141144
self.spark_provider_config, other.spark_provider_config

src/datacustomcode/config.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,8 @@ spark_config:
1717
spark.submit.deployMode: client
1818
spark.sql.execution.arrow.pyspark.enabled: 'true'
1919
spark.driver.extraJavaOptions: -Djava.security.manager=allow
20+
21+
proxy_config:
22+
type_config_name: LocalProxyClientProvider
23+
options:
24+
credentials_profile: default

src/datacustomcode/credentials.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,8 @@ def from_available(cls, profile: str = "default") -> Credentials:
192192
Raises:
193193
ValueError: If no credentials are found in any source
194194
"""
195+
# print(f"Chuy profile: {profile}")
196+
195197
# Check environment variables first
196198
if os.environ.get("SFDC_LOGIN_URL"):
197199
logger.debug("Loading credentials from environment variables")

src/datacustomcode/run.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from typing import List, Union
2222

2323
from datacustomcode.config import config
24+
from datacustomcode.scan import get_package_type
2425

2526

2627
def _set_config_option(config_obj, key: str, value: str) -> None:
@@ -60,6 +61,12 @@ def run_entrypoint(
6061
f"config.json not found at {config_json_path}. config.json is required."
6162
)
6263

64+
package_type = get_package_type(entrypoint_dir)
65+
print(
66+
f"Chuy entrypoint: {entrypoint} directory: {entrypoint_dir} "
67+
f"package type: {package_type}"
68+
)
69+
6370
try:
6471
with open(config_json_path, "r") as f:
6572
config_json = json.load(f)
@@ -68,21 +75,23 @@ def run_entrypoint(
6875
f"config.json at {config_json_path} is not valid JSON"
6976
) from err
7077

71-
# Require dataspace to be present in config.json
72-
dataspace = config_json.get("dataspace")
73-
if not dataspace:
74-
raise ValueError(
75-
f"config.json at {config_json_path} is missing required field 'dataspace'. "
76-
f"Please ensure config.json contains a 'dataspace' field."
77-
)
78-
79-
# Load config file first
80-
if config_file:
81-
config.load(config_file)
82-
83-
# Add dataspace to reader and writer config options
84-
_set_config_option(config.reader_config, "dataspace", dataspace)
85-
_set_config_option(config.writer_config, "dataspace", dataspace)
78+
if package_type == "script":
79+
# Require dataspace to be present in config.json
80+
dataspace = config_json.get("dataspace")
81+
if not dataspace:
82+
raise ValueError(
83+
f"config.json at {config_json_path} is missing required "
84+
f"field 'dataspace'. "
85+
f"Please ensure config.json contains a 'dataspace' field."
86+
)
87+
88+
# Load config file first
89+
if config_file:
90+
config.load(config_file)
91+
92+
# Add dataspace to reader and writer config options
93+
_set_config_option(config.reader_config, "dataspace", dataspace)
94+
_set_config_option(config.writer_config, "dataspace", dataspace)
8695

8796
if profile != "default":
8897
_set_config_option(config.reader_config, "credentials_profile", profile)

0 commit comments

Comments
 (0)