71 lines
1.4 KiB
Python
71 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from datetime import datetime
|
|
from typing import Protocol
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class EnsureRuntimeRequest:
|
|
runtime_id: str
|
|
workspace_id: str
|
|
workspace_code: str
|
|
owner_user_id: str
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class RuntimeEndpoint:
|
|
runtime_id: str
|
|
runtime_type: str
|
|
provider: str
|
|
runtime_ref: str
|
|
internal_url: str
|
|
proxy_base_path: str
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class RuntimeHealth:
|
|
runtime_id: str
|
|
healthy: bool
|
|
checked_at: datetime
|
|
detail: str | None = None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class CreateSessionRequest:
|
|
runtime_id: str
|
|
workspace_code: str
|
|
relative_path: str
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class RuntimeSession:
|
|
runtime_id: str
|
|
session_id: str
|
|
jupyter_url: str
|
|
reused: bool
|
|
|
|
|
|
class RuntimeAdapter(Protocol):
|
|
async def ensure_running(
|
|
self,
|
|
request: EnsureRuntimeRequest,
|
|
) -> RuntimeEndpoint: ...
|
|
|
|
async def stop(self, runtime_id: str, reason: str) -> None: ...
|
|
|
|
async def restart(self, runtime_id: str) -> RuntimeEndpoint: ...
|
|
|
|
async def health(self, runtime_id: str) -> RuntimeHealth: ...
|
|
|
|
async def create_session(
|
|
self,
|
|
request: CreateSessionRequest,
|
|
) -> RuntimeSession: ...
|
|
|
|
async def terminate_session(
|
|
self,
|
|
runtime_id: str,
|
|
session_id: str,
|
|
) -> None: ...
|