sqlalchemy 2.0 typing in scenario

This commit is contained in:
Daniel Roth 2026-02-12 11:08:35 +00:00
parent e7f941d5e4
commit 73607a5117

View file

@ -11,6 +11,8 @@ from sqlalchemy import (
) )
from sqlalchemy.orm import declarative_base, Mapped, mapped_column from sqlalchemy.orm import declarative_base, Mapped, mapped_column
from sqlalchemy.sql import func from sqlalchemy.sql import func
from datetime import datetime
from backend.app.db.models.portfolio import Portfolio, PropertyModel from backend.app.db.models.portfolio import Portfolio, PropertyModel
from backend.app.db.models.materials import Material from backend.app.db.models.materials import Material
from backend.app.db.models.portfolio import Epc from backend.app.db.models.portfolio import Epc
@ -140,47 +142,57 @@ class PlanRecommendations(Base):
class Scenario(Base): class Scenario(Base):
__tablename__ = "scenario" __tablename__ = "scenario"
id = Column(BigInteger, primary_key=True, autoincrement=True) id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
name = Column(String, nullable=False) name: Mapped[str] = mapped_column(String, nullable=False)
created_at = Column(TIMESTAMP, nullable=False, server_default=func.now()) created_at: Mapped[datetime] = mapped_column(
budget = Column(Float) TIMESTAMP, nullable=False, server_default=func.now()
portfolio_id = Column(BigInteger, ForeignKey(Portfolio.id), nullable=False) )
housing_type = Column(String, nullable=False) budget: Mapped[Optional[float]] = mapped_column(Float)
goal = Column(String, nullable=False) portfolio_id: Mapped[int] = mapped_column(
goal_value = Column(String, nullable=False) BigInteger, ForeignKey(Portfolio.id), nullable=False
trigger_file_path = Column(String, nullable=False) )
already_installed_file_path = Column(String) housing_type: Mapped[str] = mapped_column(String, nullable=False)
patches_file_path = Column(String) goal: Mapped[str] = mapped_column(String, nullable=False)
non_invasive_recommendations_file_path = Column(String) goal_value: Mapped[str] = mapped_column(String, nullable=False)
exclusions = Column(String) trigger_file_path: Mapped[str] = mapped_column(String, nullable=False)
multi_plan = Column(Boolean, default=False) already_installed_file_path: Mapped[Optional[str]] = mapped_column(String)
is_default = Column(Boolean, default=False, nullable=False) patches_file_path: Mapped[Optional[str]] = mapped_column(String)
non_invasive_recommendations_file_path: Mapped[Optional[str]] = mapped_column(
String
)
exclusions: Mapped[Optional[str]] = mapped_column(String)
multi_plan: Mapped[bool] = mapped_column(Boolean, default=False)
is_default: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
# Add in the fields we need, which were previously sitting at the portfolio level # Add in the fields we need, which were previously sitting at the portfolio level
cost = Column(Float) cost: Mapped[Optional[float]] = mapped_column(Float)
contingency = Column(Float) contingency: Mapped[Optional[float]] = mapped_column(Float)
funding = Column(Float) funding: Mapped[Optional[float]] = mapped_column(Float)
total_work_hours = Column(Float) total_work_hours: Mapped[Optional[float]] = mapped_column(Float)
energy_savings = Column(Float) energy_savings: Mapped[Optional[float]] = mapped_column(Float)
co2_equivalent_savings = Column(Float) co2_equivalent_savings: Mapped[Optional[float]] = mapped_column(Float)
energy_cost_savings = Column(Float) energy_cost_savings: Mapped[Optional[float]] = mapped_column(Float)
epc_breakdown_pre_retrofit = Column(String) epc_breakdown_pre_retrofit: Mapped[Optional[str]] = mapped_column(String)
epc_breakdown_post_retrofit = Column(String) epc_breakdown_post_retrofit: Mapped[Optional[str]] = mapped_column(String)
number_of_properties = Column(BigInteger) number_of_properties: Mapped[Optional[int]] = mapped_column(BigInteger)
n_units_to_retrofit = Column(BigInteger) n_units_to_retrofit: Mapped[Optional[int]] = mapped_column(BigInteger)
co2_per_unit_pre_retrofit = Column(String) co2_per_unit_pre_retrofit: Mapped[Optional[str]] = mapped_column(String)
co2_per_unit_post_retrofit = Column(String) co2_per_unit_post_retrofit: Mapped[Optional[str]] = mapped_column(String)
energy_bill_per_unit_pre_retrofit = Column(String) energy_bill_per_unit_pre_retrofit: Mapped[Optional[str]] = mapped_column(String)
energy_bill_per_unit_post_retrofit = Column(String) energy_bill_per_unit_post_retrofit: Mapped[Optional[str]] = mapped_column(String)
energy_consumption_per_unit_pre_retrofit = Column(String) energy_consumption_per_unit_pre_retrofit: Mapped[Optional[str]] = mapped_column(
energy_consumption_per_unit_post_retrofit = Column(String) String
valuation_improvement_per_unit = Column(String) )
cost_per_unit = Column(String) energy_consumption_per_unit_post_retrofit: Mapped[Optional[str]] = mapped_column(
cost_per_co2_saved = Column(String) String
cost_per_sap_point = Column(String) )
valuation_return_on_investment = Column(String) valuation_improvement_per_unit: Mapped[Optional[str]] = mapped_column(String)
property_valuation_increase = Column(Float) cost_per_unit: Mapped[Optional[str]] = mapped_column(String)
labour_days = Column(Float) cost_per_co2_saved: Mapped[Optional[str]] = mapped_column(String)
cost_per_sap_point: Mapped[Optional[str]] = mapped_column(String)
valuation_return_on_investment: Mapped[Optional[str]] = mapped_column(String)
property_valuation_increase: Mapped[Optional[float]] = mapped_column(Float)
labour_days: Mapped[Optional[float]] = mapped_column(Float)
class MeasureType(enum.Enum): class MeasureType(enum.Enum):