Skip to content

Commit

Permalink
Win Support for LocalProcessProxy
Browse files Browse the repository at this point in the history
Basic Windows support for LocalProcessProxy
  • Loading branch information
HighKeys committed Nov 28, 2024
1 parent ffebbaf commit 16e99cb
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
12 changes: 11 additions & 1 deletion enterprise_gateway/services/kernels/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,17 @@ async def post(self):
raise tornado.web.HTTPError(400)

# Transfer inherited environment variables from current process
env = {key: value for key, value in os.environ.items() if key in self.inherited_envs}
if os.name == "nt":
# We need to ensure we pass all needed environment variables to the kernel
# Users can use inherited_envs to add custom envrioment variables,
# and we ensure PATH, SYSTEMROOT, TEMP, USERPROFILE, WINDIR, COMSPEC, APPDATA, LOCALAPPDATA, PROGRAMDATA and PROGRAMFILES are included
# this allows a more out-of-the-box experience for users
required_envs: set[str] = {"PATH", "SYSTEMROOT", "TEMP", "USERPROFILE", "WINDIR", "COMSPEC",
"APPDATA", "LOCALAPPDATA", "PROGRAMDATA", "PROGRAMFILES"}
env = {key: value for key, value in os.environ.items() if
key in self.inherited_envs or key in required_envs}
else:
env = {key: value for key, value in os.environ.items() if key in self.inherited_envs}

# Allow all KERNEL_* envs and those specified in client_envs and set from client. If this EG
# instance is configured to accept all envs in the payload (i.e., client_envs == '*'), go ahead
Expand Down
4 changes: 4 additions & 0 deletions enterprise_gateway/services/processproxies/processproxy.py
Original file line number Diff line number Diff line change
Expand Up @@ -1043,6 +1043,8 @@ def __init__(self, kernel_manager: RemoteKernelManager, proxy_config: dict): #
"""Initialize the proxy."""
super().__init__(kernel_manager, proxy_config)
kernel_manager.ip = localinterfaces.LOCALHOST
if os.name == "nt":
self.win32_interrupt_event = None

async def launch_process(
self, kernel_cmd: str, **kwargs: dict[str, Any] | None
Expand All @@ -1059,6 +1061,8 @@ async def launch_process(
except OSError:
pass
self.ip = local_ip
if os.name == "nt": # if operating system is Windows then link the win32_interrupt_event from the kernel
self.win32_interrupt_event = self.local_proc.win32_interrupt_event
self.log.info(
"Local kernel launched on '{}', pid: {}, pgid: {}, KernelID: {}, cmd: '{}'".format(
self.ip, self.pid, self.pgid, self.kernel_id, kernel_cmd
Expand Down

0 comments on commit 16e99cb

Please sign in to comment.