Rename ResultsContext -> SharedContext

This commit is contained in:
2025-04-30 21:45:11 -04:00
parent 80de941335
commit bc1637143c
6 changed files with 69 additions and 40 deletions

View File

@@ -1,5 +1,7 @@
# Falyx CLI Framework — (c) 2025 rtj.dev LLC — MIT Licensed
"""context.py"""
from __future__ import annotations
import time
from datetime import datetime
from typing import Any
@@ -24,6 +26,8 @@ class ExecutionContext(BaseModel):
extra: dict[str, Any] = Field(default_factory=dict)
console: Console = Field(default_factory=lambda: Console(color_system="auto"))
shared_context: SharedContext | None = None
model_config = ConfigDict(arbitrary_types_allowed=True)
def start_timer(self):
@@ -34,6 +38,9 @@ class ExecutionContext(BaseModel):
self.end_time = time.perf_counter()
self.end_wall = datetime.now()
def get_shared_context(self) -> SharedContext:
return self.shared_context or SharedContext(name="default")
@property
def duration(self) -> float | None:
if self.start_time is None:
@@ -104,7 +111,7 @@ class ExecutionContext(BaseModel):
)
class ResultsContext(BaseModel):
class SharedContext(BaseModel):
name: str
results: list[Any] = Field(default_factory=list)
errors: list[tuple[int, Exception]] = Field(default_factory=list)
@@ -112,11 +119,16 @@ class ResultsContext(BaseModel):
is_parallel: bool = False
shared_result: Any | None = None
share: dict[str, Any] = Field(default_factory=dict)
model_config = ConfigDict(arbitrary_types_allowed=True)
def add_result(self, result: Any) -> None:
self.results.append(result)
def add_error(self, index: int, error: Exception) -> None:
self.errors.append((index, error))
def set_shared_result(self, result: Any) -> None:
self.shared_result = result
if self.is_parallel:
@@ -127,10 +139,16 @@ class ResultsContext(BaseModel):
return self.shared_result
return self.results[-1] if self.results else None
def get(self, key: str, default: Any = None) -> Any:
return self.share.get(key, default)
def set(self, key: str, value: Any) -> None:
self.share[key] = value
def __str__(self) -> str:
parallel_label = "Parallel" if self.is_parallel else "Sequential"
return (
f"<{parallel_label}ResultsContext '{self.name}' | "
f"<{parallel_label}SharedContext '{self.name}' | "
f"Results: {self.results} | "
f"Errors: {self.errors}>"
)