Skip to content

Commit 60c1a06

Browse files
committed
changed logic for setting env vars like setting cwd
1 parent ab53907 commit 60c1a06

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

template/server/messaging.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,13 @@ async def _wait_for_result(self, message_id: str):
136136
yield output.model_dump(exclude_none=True)
137137

138138
async def set_env_vars(self, env_vars: Dict[StrictStr, str]):
139-
env_commands = []
139+
message_id = str(uuid.uuid4())
140+
self._executions[message_id] = Execution(in_background=True)
140141

142+
env_commands = []
141143
for k, v in env_vars.items():
142144
if self.language == "python":
143-
env_commands.append(f"os.environ['{k}'] = '{v}'")
145+
env_commands.append(f"import os; os.environ['{k}'] = '{v}'")
144146
elif self.language in ["javascript", "typescript"]:
145147
env_commands.append(f"process.env['{k}'] = '{v}'")
146148
elif self.language == "deno":
@@ -151,13 +153,19 @@ async def set_env_vars(self, env_vars: Dict[StrictStr, str]):
151153
env_commands.append(f"System.setProperty('{k}', '{v}')")
152154
elif self.language == "bash":
153155
env_commands.append(f"export {k}='{v}'")
156+
else:
157+
return
154158

155159
if env_commands:
156160
env_vars_snippet = "\n".join(env_commands)
157161
print(f"Setting env vars: {env_vars_snippet}")
158-
request = self._get_execute_request(str(uuid.uuid4()), env_vars_snippet, False)
162+
request = self._get_execute_request(message_id, env_vars_snippet, True)
159163
await self._ws.send(request)
160164

165+
async for item in self._wait_for_result(message_id):
166+
if item["type"] == "error":
167+
raise ExecutionError(f"Error during execution: {item}")
168+
161169
async def reset_env_vars(self, env_vars: Dict[StrictStr, str]):
162170
global_env_vars = get_envs()
163171

@@ -177,10 +185,13 @@ async def reset_env_vars(self, env_vars: Dict[StrictStr, str]):
177185

178186
# Remove vars that don't exist in global env vars
179187
if vars_to_remove:
188+
message_id = str(uuid.uuid4())
189+
self._executions[message_id] = Execution(in_background=True)
190+
180191
remove_commands = []
181192
for key in vars_to_remove:
182193
if self.language == "python":
183-
remove_commands.append(f"del os.environ['{key}']")
194+
remove_commands.append(f"import os; del os.environ['{key}']")
184195
elif self.language in ["javascript", "typescript"]:
185196
remove_commands.append(f"delete process.env['{key}']")
186197
elif self.language == "deno":
@@ -191,13 +202,19 @@ async def reset_env_vars(self, env_vars: Dict[StrictStr, str]):
191202
remove_commands.append(f"System.clearProperty('{key}')")
192203
elif self.language == "bash":
193204
remove_commands.append(f"unset {key}")
205+
else:
206+
return
194207

195208
if remove_commands:
196209
remove_snippet = "\n".join(remove_commands)
197210
print(f"Removing env vars: {remove_snippet}")
198-
request = self._get_execute_request(str(uuid.uuid4()), remove_snippet, False)
211+
request = self._get_execute_request(message_id, remove_snippet, True)
199212
await self._ws.send(request)
200213

214+
async for item in self._wait_for_result(message_id):
215+
if item["type"] == "error":
216+
raise ExecutionError(f"Error during execution: {item}")
217+
201218
async def change_current_directory(
202219
self, path: Union[str, StrictStr], language: str
203220
):

0 commit comments

Comments
 (0)