darkfire514's picture
Upload 160 files
399b80c verified
from typing import Any, Dict, Optional
from abc import ABC, abstractmethod
from ..types import SandboxOptions, BackendType
class BaseSandbox(ABC):
def __init__(self, options: SandboxOptions):
self.options = options
self._active = False
@abstractmethod
async def start(self) -> bool:
"""Set self._active to True"""
pass
@abstractmethod
async def stop(self) -> None:
"""Set self._active to False"""
pass
@abstractmethod
async def execute_safe(self, command: str, **kwargs) -> Any:
pass
@abstractmethod
def get_connector(self) -> Any:
pass
@property
def is_active(self) -> bool:
return self._active
class SandboxManager:
def __init__(self):
self._sandboxes: Dict[BackendType, BaseSandbox] = {}
def register_sandbox(self, backend_type: BackendType, sandbox: BaseSandbox) -> None:
self._sandboxes[backend_type] = sandbox
def get_sandbox(self, backend_type: BackendType) -> Optional[BaseSandbox]:
return self._sandboxes.get(backend_type)
async def start_all(self) -> None:
for sandbox in self._sandboxes.values():
await sandbox.start()
async def stop_all(self) -> None:
for sandbox in self._sandboxes.values():
await sandbox.stop()