feat(fase2a): optional Project.bundle_dir + loader (backward-compat, S2.0)
This commit is contained in:
parent
3497e64bdc
commit
9659045fee
1 changed files with 11 additions and 0 deletions
|
|
@ -46,6 +46,8 @@ class Project:
|
||||||
cost_items: tuple[CostItem, ...]
|
cost_items: tuple[CostItem, ...]
|
||||||
docs_dir: str # absolute path to this project's bundled cost-docs folder (config-driven)
|
docs_dir: str # absolute path to this project's bundled cost-docs folder (config-driven)
|
||||||
verdict_input: dict[str, str] # SYNTHETIC Layer-2 expert decision/rationale (config-driven)
|
verdict_input: dict[str, str] # SYNTHETIC Layer-2 expert decision/rationale (config-driven)
|
||||||
|
bundle_dir: str | None = None # abs path to an OKF bundle backing this project (Fase 2a S2.0)
|
||||||
|
verdict_dir: str | None = None # abs path to this project's async verdict inbox (Fase 2a S2.0)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def total_cost(self) -> float:
|
def total_cost(self) -> float:
|
||||||
|
|
@ -61,6 +63,13 @@ def load_reference_projects() -> tuple[Project, ...]:
|
||||||
existing loader contract)."""
|
existing loader contract)."""
|
||||||
resource = files("portfolio_optimiser").joinpath(_DATA_RESOURCE)
|
resource = files("portfolio_optimiser").joinpath(_DATA_RESOURCE)
|
||||||
raw = json.loads(resource.read_text(encoding="utf-8"))
|
raw = json.loads(resource.read_text(encoding="utf-8"))
|
||||||
|
|
||||||
|
def _resolve(rel: str | None) -> str | None:
|
||||||
|
"""Optional config paths (bundle_dir/verdict_dir) resolve to absolute like docs_dir when set,
|
||||||
|
else stay None. Read via ``p.get(...)`` — never fail-fast: the shipped JSON omits both, so
|
||||||
|
every existing row keeps loading (backward-compatible; contrast the required-key reads)."""
|
||||||
|
return str(files("portfolio_optimiser").joinpath(f"data/{rel}")) if rel else None
|
||||||
|
|
||||||
return tuple(
|
return tuple(
|
||||||
Project(
|
Project(
|
||||||
id=p["id"],
|
id=p["id"],
|
||||||
|
|
@ -79,6 +88,8 @@ def load_reference_projects() -> tuple[Project, ...]:
|
||||||
),
|
),
|
||||||
docs_dir=str(files("portfolio_optimiser").joinpath(f"data/{p['docs_dir']}")),
|
docs_dir=str(files("portfolio_optimiser").joinpath(f"data/{p['docs_dir']}")),
|
||||||
verdict_input=p["verdict_input"],
|
verdict_input=p["verdict_input"],
|
||||||
|
bundle_dir=_resolve(p.get("bundle_dir")),
|
||||||
|
verdict_dir=_resolve(p.get("verdict_dir")),
|
||||||
)
|
)
|
||||||
for p in raw["projects"]
|
for p in raw["projects"]
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue