Files
OpenHands/opendevin/runtime/sandbox.py
மனோஜ்குமார் பழனிச்சாமி 4e479038f9 Bugfix by added config to disable plugin initialization for Persistent sandbox (#2179)
* refactored source bashrc logic

* added initialize_plugins config

---------

Co-authored-by: Graham Neubig <neubig@gmail.com>
2024-06-04 10:59:30 -04:00

59 lines
1.6 KiB
Python

import json
import os
from abc import ABC, abstractmethod
from opendevin.core.config import config
from opendevin.core.schema import CancellableStream
from opendevin.runtime.docker.process import Process
from opendevin.runtime.plugins.mixin import PluginMixin
class Sandbox(ABC, PluginMixin):
background_commands: dict[int, Process] = {}
_env: dict[str, str] = {}
is_initial_session: bool = True
def __init__(self, **kwargs):
for key in os.environ:
if key.startswith('SANDBOX_ENV_'):
sandbox_key = key.removeprefix('SANDBOX_ENV_')
self.add_to_env(sandbox_key, os.environ[key])
if config.enable_auto_lint:
self.add_to_env('ENABLE_AUTO_LINT', 'true')
self.initialize_plugins: bool = config.initialize_plugins
def add_to_env(self, key: str, value: str):
self._env[key] = value
# Note: json.dumps gives us nice escaping for free
self.execute(f'export {key}={json.dumps(value)}')
@abstractmethod
def execute(
self, cmd: str, stream: bool = False, timeout: int | None = None
) -> tuple[int, str | CancellableStream]:
pass
@abstractmethod
def execute_in_background(self, cmd: str) -> Process:
pass
@abstractmethod
def kill_background(self, id: int) -> Process:
pass
@abstractmethod
def read_logs(self, id: int) -> str:
pass
@abstractmethod
def close(self):
pass
@abstractmethod
def copy_to(self, host_src: str, sandbox_dest: str, recursive: bool = False):
pass
@abstractmethod
def get_working_directory(self):
pass