refactor(pre-alpha): fail closed on historical preview fallbacks
This commit is contained in:
@@ -289,9 +289,9 @@ def _render_backtests_page(workspace_id: str | None = None) -> None:
|
||||
row_key="date",
|
||||
).classes("w-full")
|
||||
|
||||
def validate_current_scenario() -> str | None:
|
||||
def validate_current_scenario(*, entry_spot: float | None = None) -> str | None:
|
||||
try:
|
||||
service.run_read_only_scenario(
|
||||
service.validate_preview_inputs(
|
||||
symbol=str(symbol_input.value or ""),
|
||||
start_date=parse_iso_date(start_input.value, "Start date"),
|
||||
end_date=parse_iso_date(end_input.value, "End date"),
|
||||
@@ -299,6 +299,7 @@ def _render_backtests_page(workspace_id: str | None = None) -> None:
|
||||
underlying_units=float(units_input.value or 0.0),
|
||||
loan_amount=float(loan_input.value or 0.0),
|
||||
margin_call_ltv=float(ltv_input.value or 0.0),
|
||||
entry_spot=entry_spot,
|
||||
)
|
||||
except (ValueError, KeyError) as exc:
|
||||
return str(exc)
|
||||
@@ -320,12 +321,7 @@ def _render_backtests_page(workspace_id: str | None = None) -> None:
|
||||
def refresh_workspace_seeded_units() -> None:
|
||||
validation_label.set_text("")
|
||||
entry_spot, entry_error = derive_entry_spot()
|
||||
if (
|
||||
workspace_id
|
||||
and config is not None
|
||||
and config.gold_value is not None
|
||||
and entry_spot is not None
|
||||
):
|
||||
if workspace_id and config is not None and config.gold_value is not None and entry_spot is not None:
|
||||
units_input.value = asset_quantity_from_workspace_config(config, entry_spot=entry_spot, symbol="GLD")
|
||||
entry_spot_hint.set_text(f"Auto-derived entry spot: ${entry_spot:,.2f}")
|
||||
else:
|
||||
@@ -335,7 +331,7 @@ def _render_backtests_page(workspace_id: str | None = None) -> None:
|
||||
validation_label.set_text(entry_error)
|
||||
render_result_state("Scenario validation failed", entry_error, tone="warning")
|
||||
return
|
||||
validation_error = validate_current_scenario()
|
||||
validation_error = validate_current_scenario(entry_spot=entry_spot)
|
||||
if validation_error:
|
||||
validation_label.set_text(validation_error)
|
||||
render_result_state("Scenario validation failed", validation_error, tone="warning")
|
||||
@@ -351,7 +347,7 @@ def _render_backtests_page(workspace_id: str | None = None) -> None:
|
||||
validation_label.set_text(entry_error)
|
||||
render_result_state("Scenario validation failed", entry_error, tone="warning")
|
||||
return
|
||||
validation_error = validate_current_scenario()
|
||||
validation_error = validate_current_scenario(entry_spot=entry_spot)
|
||||
if validation_error:
|
||||
validation_label.set_text(validation_error)
|
||||
render_result_state("Scenario validation failed", validation_error, tone="warning")
|
||||
@@ -371,12 +367,18 @@ def _render_backtests_page(workspace_id: str | None = None) -> None:
|
||||
margin_call_ltv=float(ltv_input.value or 0.0),
|
||||
)
|
||||
except (ValueError, KeyError) as exc:
|
||||
render_seeded_summary(entry_spot=None, entry_spot_error=None)
|
||||
entry_spot, entry_error = derive_entry_spot()
|
||||
render_seeded_summary(entry_spot=entry_spot, entry_spot_error=entry_error)
|
||||
if entry_spot is None:
|
||||
entry_spot_hint.set_text("Entry spot unavailable until the scenario dates are valid.")
|
||||
validation_label.set_text(str(exc))
|
||||
render_result_state("Scenario validation failed", str(exc), tone="warning")
|
||||
return
|
||||
except Exception:
|
||||
render_seeded_summary(entry_spot=None, entry_spot_error=None)
|
||||
entry_spot, entry_error = derive_entry_spot()
|
||||
render_seeded_summary(entry_spot=entry_spot, entry_spot_error=entry_error)
|
||||
if entry_spot is None:
|
||||
entry_spot_hint.set_text("Entry spot unavailable until the scenario dates are valid.")
|
||||
message = "Backtest failed. Please verify the scenario inputs and try again."
|
||||
logger.exception(
|
||||
"Backtest page run failed for workspace=%s symbol=%s start=%s end=%s template=%s units=%s loan=%s margin_call_ltv=%s",
|
||||
|
||||
Reference in New Issue
Block a user