from typing import List from sqlalchemy import ForeignKey, Integer, JSON, String from sqlalchemy.orm import mapped_column, Mapped, relationship from nupes.models import Base class Region(Base): __tablename__ = "region" code_insee: Mapped[str] = mapped_column(String(3), primary_key=True) libelle: Mapped[str] = mapped_column(String(64), unique=True) geometry: Mapped[dict] = mapped_column(JSON()) departements: Mapped[List["Departement"]] = relationship("Departement", back_populates="region") resultats_legislatives_2022 = relationship("ResultatsRegionLegislatives2022", back_populates="region") resultats_europeennes_2024 = relationship("ResultatsRegionEuropeennes2024", back_populates="region") resultats_legislatives_2024 = relationship("ResultatsRegionLegislatives2024", back_populates="region") class Departement(Base): __tablename__ = "departement" code_insee: Mapped[str] = mapped_column(String(3), primary_key=True) libelle: Mapped[str] = mapped_column(String(64), unique=True) region_code: Mapped[str] = mapped_column(ForeignKey("region.code_insee")) geometry: Mapped[dict] = mapped_column(JSON()) region: Mapped[Region] = relationship(Region, back_populates="departements") circonscriptions: Mapped[List["Circonscription"]] = relationship("Circonscription", back_populates="departement") communes: Mapped[List["Commune"]] = relationship("Commune", back_populates="departement") resultats_legislatives_2022 = relationship("ResultatsDepartementLegislatives2022", back_populates="departement") resultats_europeennes_2024 = relationship("ResultatsDepartementEuropeennes2024", back_populates="departement") resultats_legislatives_2024 = relationship("ResultatsDepartementLegislatives2024", back_populates="departement") class Commune(Base): __tablename__ = "commune" code_insee: Mapped[str] = mapped_column(String(5), primary_key=True) libelle: Mapped[str] = mapped_column(String(64)) departement_code: Mapped[str] = mapped_column(ForeignKey("departement.code_insee")) geometry: Mapped[dict] = mapped_column(JSON()) departement: Mapped[Departement] = relationship(Departement, back_populates="communes") bureaux_vote: Mapped[List["BureauVote"]] = relationship("BureauVote", back_populates="commune") resultats_legislatives_2022 = relationship("ResultatsCommuneLegislatives2022", back_populates="commune") resultats_europeennes_2024 = relationship("ResultatsCommuneEuropeennes2024", back_populates="commune") resultats_legislatives_2024 = relationship("ResultatsCommuneLegislatives2024", back_populates="commune") class Circonscription(Base): __tablename__ = "circonscription" id: Mapped[str] = mapped_column(String(6), primary_key=True) departement_code: Mapped[str] = mapped_column(ForeignKey("departement.code_insee")) numero: Mapped[int] = mapped_column(Integer()) geometry: Mapped[dict] = mapped_column(JSON()) departement: Mapped[Departement] = relationship(Departement, back_populates="circonscriptions") bureaux_vote: Mapped[List["BureauVote"]] = relationship("BureauVote", back_populates="circonscription") candidats_legislatives_2022 = relationship("CandidatLegislatives2022", back_populates="circonscription") resultats_legislatives_2022 = relationship("ResultatsCirconscriptionLegislatives2022", back_populates="circonscription") resultats_europeennes_2024 = relationship("ResultatsCirconscriptionEuropeennes2024", back_populates="circonscription") candidats_legislatives_2024 = relationship("CandidatLegislatives2024", back_populates="circonscription") resultats_legislatives_2024 = relationship("ResultatsCirconscriptionLegislatives2024", back_populates="circonscription") class BureauVote(Base): __tablename__ = "bureau_vote" id: Mapped[str] = mapped_column(String(16), primary_key=True) commune_code: Mapped[str] = mapped_column(ForeignKey("commune.code_insee")) code_bureau: Mapped[str] = mapped_column(String(8)) circo_code: Mapped[str] = mapped_column(ForeignKey("circonscription.id")) libelle: Mapped[str] = mapped_column(String(256)) adresse: Mapped[str] = mapped_column(String(256), nullable=True) geometry: Mapped[dict] = mapped_column(JSON()) commune: Mapped[Commune] = relationship(Commune, back_populates="bureaux_vote") circonscription: Mapped[Circonscription] = relationship(Circonscription, back_populates="bureaux_vote") resultats_legislatives_2022 = relationship("ResultatsBureauVoteLegislatives2022", back_populates="bureau_vote") resultats_europeennes_2024 = relationship("ResultatsBureauVoteEuropeennes2024", back_populates="bureau_vote") resultats_legislatives_2024 = relationship("ResultatsBureauVoteLegislatives2024", back_populates="bureau_vote")