40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
import typing
|
|
from typing import Any
|
|
|
|
if typing.TYPE_CHECKING:
|
|
from skyvern.forge.forge_app import ForgeApp
|
|
|
|
|
|
class AppHolder:
|
|
def __init__(self) -> None:
|
|
object.__setattr__(self, "_inst", None)
|
|
|
|
def set_app(self, inst: ForgeApp) -> None:
|
|
object.__setattr__(self, "_inst", inst)
|
|
|
|
def __getattr__(self, name: str) -> Any:
|
|
inst = object.__getattribute__(self, "_inst")
|
|
if inst is None:
|
|
raise RuntimeError("ForgeApp is not initialized. Call start_forge_app() before accessing app properties.")
|
|
|
|
return getattr(inst, name)
|
|
|
|
def __setattr__(self, name: str, value: Any) -> None:
|
|
inst = object.__getattribute__(self, "_inst")
|
|
if inst is None:
|
|
raise RuntimeError("ForgeApp is not initialized. Call start_forge_app() before accessing app properties.")
|
|
|
|
setattr(inst, name, value)
|
|
|
|
|
|
if typing.TYPE_CHECKING:
|
|
app: ForgeApp
|
|
else:
|
|
app = AppHolder() # type: ignore
|
|
|
|
|
|
def set_force_app_instance(inst: ForgeApp) -> None:
|
|
app.set_app(inst) # type: ignore
|