Corrections + circonscription outre-mer et étranger
This commit is contained in:
		@@ -23,7 +23,7 @@ class Departement(Base):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    code_insee: Mapped[str] = mapped_column(String(3), primary_key=True)
 | 
					    code_insee: Mapped[str] = mapped_column(String(3), primary_key=True)
 | 
				
			||||||
    libelle: Mapped[str] = mapped_column(String(64), unique=True)
 | 
					    libelle: Mapped[str] = mapped_column(String(64), unique=True)
 | 
				
			||||||
    region_code: Mapped[int] = mapped_column(ForeignKey("region.code_insee"))
 | 
					    region_code: Mapped[str] = mapped_column(ForeignKey("region.code_insee"))
 | 
				
			||||||
    geometry: Mapped[dict] = mapped_column(JSON())
 | 
					    geometry: Mapped[dict] = mapped_column(JSON())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    region: Mapped[Region] = relationship(Region, back_populates="departements")
 | 
					    region: Mapped[Region] = relationship(Region, back_populates="departements")
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -148,8 +148,8 @@ def importer_resultats_commune(engine: Engine, verbose: bool = False) -> None:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                for liste in session.execute(select(Liste)).scalars().all():
 | 
					                for liste in session.execute(select(Liste)).scalars().all():
 | 
				
			||||||
                    voix_liste_com = session.execute(select(VoixListeCommune)
 | 
					                    voix_liste_com = session.execute(select(VoixListeCommune)
 | 
				
			||||||
                                                    .filter_by(resultats_commune_id=resultats_commune.id,
 | 
					                                                     .filter_by(resultats_commune_id=resultats_commune.id,
 | 
				
			||||||
                                                               liste_id=liste.id)) \
 | 
					                                                                liste_id=liste.id)) \
 | 
				
			||||||
                        .scalar_one_or_none()
 | 
					                        .scalar_one_or_none()
 | 
				
			||||||
                    if not voix_liste_com:
 | 
					                    if not voix_liste_com:
 | 
				
			||||||
                        voix_liste_com = VoixListeCommune(resultats_commune_id=resultats_commune.id, liste_id=liste.id)
 | 
					                        voix_liste_com = VoixListeCommune(resultats_commune_id=resultats_commune.id, liste_id=liste.id)
 | 
				
			||||||
@@ -169,7 +169,7 @@ def importer_resultats_circo(engine: Engine, verbose: bool = False) -> None:
 | 
				
			|||||||
        with Session(engine) as session:
 | 
					        with Session(engine) as session:
 | 
				
			||||||
            for row in tqdm(reader, desc="Circonscription", disable=not verbose):
 | 
					            for row in tqdm(reader, desc="Circonscription", disable=not verbose):
 | 
				
			||||||
                circo_code = row['Code circonscription législative']
 | 
					                circo_code = row['Code circonscription législative']
 | 
				
			||||||
                dpt_code, circo_code = circo_code[:]
 | 
					                dpt_code, circo_code = circo_code[:-2], circo_code[-2:]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                resultats_circo = session.execute(select(ResultatsCirconscription).filter_by(circo_id=circo_code)) \
 | 
					                resultats_circo = session.execute(select(ResultatsCirconscription).filter_by(circo_id=circo_code)) \
 | 
				
			||||||
                    .scalar_one_or_none()
 | 
					                    .scalar_one_or_none()
 | 
				
			||||||
@@ -232,7 +232,7 @@ def importer_resultats_circo(engine: Engine, verbose: bool = False) -> None:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
def importer_resultats_departement(engine: Engine, verbose: bool = False) -> None:
 | 
					def importer_resultats_departement(engine: Engine, verbose: bool = False) -> None:
 | 
				
			||||||
    file = get_file("https://www.data.gouv.fr/fr/datasets/r/b77cc4da-644f-4323-b6f7-ae6fe9b33f86",
 | 
					    file = get_file("https://www.data.gouv.fr/fr/datasets/r/b77cc4da-644f-4323-b6f7-ae6fe9b33f86",
 | 
				
			||||||
                    "resultats-europeennes-par-circonscription.csv")
 | 
					                    "resultats-europeennes-par-departement.csv")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    with file.open('r') as f:
 | 
					    with file.open('r') as f:
 | 
				
			||||||
        reader = DictReader(f, delimiter=';')
 | 
					        reader = DictReader(f, delimiter=';')
 | 
				
			||||||
@@ -240,11 +240,15 @@ def importer_resultats_departement(engine: Engine, verbose: bool = False) -> Non
 | 
				
			|||||||
            for row in tqdm(reader, desc="Département", disable=not verbose):
 | 
					            for row in tqdm(reader, desc="Département", disable=not verbose):
 | 
				
			||||||
                dpt_code = row['Code département']
 | 
					                dpt_code = row['Code département']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if dpt_code == "ZX":
 | 
				
			||||||
 | 
					                    dpt_code = "977"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                resultats_dpt = session.execute(select(ResultatsDepartement).filter_by(dpt_id=dpt_code)) \
 | 
					                resultats_dpt = session.execute(select(ResultatsDepartement).filter_by(dpt_id=dpt_code)) \
 | 
				
			||||||
                    .scalar_one_or_none()
 | 
					                    .scalar_one_or_none()
 | 
				
			||||||
                if not resultats_dpt:
 | 
					                if not resultats_dpt:
 | 
				
			||||||
 | 
					                    print(f"Département {dpt_code} non trouvé")
 | 
				
			||||||
                    dpt = session.execute(select(Departement)
 | 
					                    dpt = session.execute(select(Departement)
 | 
				
			||||||
                                          .filter_by(code_insee=f"{row['Code département'].zfill(2)}")) \
 | 
					                                          .filter_by(code_insee=f"{dpt_code.zfill(2)}")) \
 | 
				
			||||||
                        .scalar_one()
 | 
					                        .scalar_one()
 | 
				
			||||||
                    resultats_reg = session.execute(select(ResultatsRegion)
 | 
					                    resultats_reg = session.execute(select(ResultatsRegion)
 | 
				
			||||||
                                                    .filter_by(region_id=dpt.region_code)) \
 | 
					                                                    .filter_by(region_id=dpt.region_code)) \
 | 
				
			||||||
@@ -286,34 +290,32 @@ def importer_resultats_departement(engine: Engine, verbose: bool = False) -> Non
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    voix_liste_dpt.voix = int(row[f"Voix {liste.id}"])
 | 
					                    voix_liste_dpt.voix = int(row[f"Voix {liste.id}"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                session.commit()
 | 
					            session.commit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def importer_resultats_region(engine: Engine, verbose: bool = False) -> None:
 | 
					def importer_resultats_region(engine: Engine, verbose: bool = False) -> None:
 | 
				
			||||||
    file = get_file("https://www.data.gouv.fr/fr/datasets/r/6a782ef9-8ad6-4e66-832d-338b1041a42d",
 | 
					    file = get_file("https://www.data.gouv.fr/fr/datasets/r/7c3a854b-7344-4c68-b1f9-9d651b4ca823",
 | 
				
			||||||
                    "resultats-europeennes-par-commune.csv")
 | 
					                    "resultats-europeennes-par-region.csv")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    with file.open('r') as f:
 | 
					    with file.open('r') as f:
 | 
				
			||||||
        reader = DictReader(f, delimiter=';')
 | 
					        reader = DictReader(f, delimiter=';')
 | 
				
			||||||
        with Session(engine) as session:
 | 
					        with Session(engine) as session:
 | 
				
			||||||
            for row in tqdm(reader, desc="Région", disable=not verbose):
 | 
					            for row in tqdm(reader, desc="Région", disable=not verbose):
 | 
				
			||||||
                dpt_code = row['Code département']
 | 
					                reg_code = row['Code région']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                resultats_reg = session.execute(select(ResultatsRegion).filter_by(region_id=dpt_code)) \
 | 
					                resultats_reg = session.execute(select(ResultatsRegion).filter_by(region_id=reg_code)) \
 | 
				
			||||||
                    .scalar_one_or_none()
 | 
					                    .scalar_one_or_none()
 | 
				
			||||||
                if not resultats_reg:
 | 
					                if not resultats_reg:
 | 
				
			||||||
                    dpt = session.execute(select(Departement)
 | 
					 | 
				
			||||||
                                          .filter_by(code_insee=f"{row['Code département'].zfill(2)}")) \
 | 
					 | 
				
			||||||
                        .scalar_one()
 | 
					 | 
				
			||||||
                    resultats_france = session.execute(select(ResultatsFrance)).scalar_one_or_none()
 | 
					                    resultats_france = session.execute(select(ResultatsFrance)).scalar_one_or_none()
 | 
				
			||||||
                    if not resultats_france:
 | 
					                    if not resultats_france:
 | 
				
			||||||
                        session.add(ResultatsFrance())
 | 
					                        session.add(ResultatsFrance())
 | 
				
			||||||
                        resultats_france = session.execute(select(ResultatsFrance)).scalar_one()
 | 
					                        resultats_france = session.execute(select(ResultatsFrance)).scalar_one()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    resultats_reg = ResultatsRegion(region_id=str(dpt.region_code),
 | 
					                    resultats_reg = ResultatsRegion(region_id=reg_code,
 | 
				
			||||||
                                                    resultats_france_id=resultats_france.id)
 | 
					                                                    resultats_france_id=resultats_france.id)
 | 
				
			||||||
                    session.add(resultats_reg)
 | 
					                    session.add(resultats_reg)
 | 
				
			||||||
                    resultats_reg = session.execute(select(ResultatsRegion).filter_by(region_id=dpt_code)) \
 | 
					                    session.commit()
 | 
				
			||||||
 | 
					                    resultats_reg = session.execute(select(ResultatsRegion).filter_by(region_id=reg_code)) \
 | 
				
			||||||
                        .scalar_one()
 | 
					                        .scalar_one()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                resultats_reg.inscrits = int(row['Inscrits'])
 | 
					                resultats_reg.inscrits = int(row['Inscrits'])
 | 
				
			||||||
@@ -352,34 +354,32 @@ def calculer_resultats_france(engine: Engine, verbose: bool = False) -> None:
 | 
				
			|||||||
                select(VoixListeFrance).filter_by(resultats_france_id=resultats_france.id)).scalars().all():
 | 
					                select(VoixListeFrance).filter_by(resultats_france_id=resultats_france.id)).scalars().all():
 | 
				
			||||||
            voix_liste_france.voix = 0  # Réinitialisation des voix
 | 
					            voix_liste_france.voix = 0  # Réinitialisation des voix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for resultats_reg in session.execute(select(ResultatsRegion)).scalars().all():
 | 
					        for resultats_dpt in session.execute(select(ResultatsDepartement)).scalars().all():
 | 
				
			||||||
            resultats_france.inscrits += resultats_reg.inscrits
 | 
					            resultats_france.inscrits += resultats_dpt.inscrits
 | 
				
			||||||
            resultats_france.votants += resultats_reg.votants
 | 
					            resultats_france.votants += resultats_dpt.votants
 | 
				
			||||||
            resultats_france.abstentions += resultats_reg.abstentions
 | 
					            resultats_france.abstentions += resultats_dpt.abstentions
 | 
				
			||||||
            resultats_france.exprimes += resultats_reg.exprimes
 | 
					            resultats_france.exprimes += resultats_dpt.exprimes
 | 
				
			||||||
            resultats_france.blancs += resultats_reg.blancs
 | 
					            resultats_france.blancs += resultats_dpt.blancs
 | 
				
			||||||
            resultats_france.nuls += resultats_reg.nuls
 | 
					            resultats_france.nuls += resultats_dpt.nuls
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for voix_liste_reg in session.execute(select(VoixListeRegion)
 | 
					            for voix_liste_dpt in session.execute(select(VoixListeDepartement)
 | 
				
			||||||
                                                  .filter_by(resultats_region_id=resultats_reg.id)).scalars().all():
 | 
					                                                  .filter_by(resultats_departement_id=resultats_dpt.id)) \
 | 
				
			||||||
                voix_liste_france = session.execute(select(VoixListeFrance)
 | 
					                    .scalars().all():
 | 
				
			||||||
                                                    .filter_by(resultats_france_id=resultats_france.id,
 | 
					                if voix_liste_france := session.execute(
 | 
				
			||||||
                                                               liste_id=voix_liste_reg.liste_id)) \
 | 
					                        select(VoixListeFrance).filter_by(resultats_france_id=resultats_france.id,
 | 
				
			||||||
                    .scalar_one_or_none()
 | 
					                                                          liste_id=voix_liste_dpt.liste_id)).scalar_one_or_none():
 | 
				
			||||||
                if not voix_liste_france:
 | 
					                    voix_liste_france.voix += voix_liste_dpt.voix
 | 
				
			||||||
                    voix_liste_france = VoixListeFrance(resultats_france_id=resultats_france.id,
 | 
					                else:
 | 
				
			||||||
                                                        liste_id=voix_liste_reg.liste_id)
 | 
					                    session.add(VoixListeFrance(resultats_france_id=resultats_france.id,
 | 
				
			||||||
                    session.add(voix_liste_france)
 | 
					                                                liste_id=voix_liste_dpt.liste_id, voix=voix_liste_dpt.voix))
 | 
				
			||||||
 | 
					 | 
				
			||||||
                voix_liste_france.voix += voix_liste_reg.voix
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        session.commit()
 | 
					        session.commit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def run(engine: Engine, verbose: bool = False) -> None:
 | 
					def run(engine: Engine, verbose: bool = False) -> None:
 | 
				
			||||||
    importer_resultats_bv(engine, verbose)
 | 
					 | 
				
			||||||
    importer_resultats_commune(engine, verbose)
 | 
					 | 
				
			||||||
    importer_resultats_circo(engine, verbose)
 | 
					 | 
				
			||||||
    importer_resultats_departement(engine, verbose)
 | 
					 | 
				
			||||||
    importer_resultats_region(engine, verbose)
 | 
					    importer_resultats_region(engine, verbose)
 | 
				
			||||||
 | 
					    importer_resultats_departement(engine, verbose)
 | 
				
			||||||
    calculer_resultats_france(engine, verbose)
 | 
					    calculer_resultats_france(engine, verbose)
 | 
				
			||||||
 | 
					    importer_resultats_circo(engine, verbose)
 | 
				
			||||||
 | 
					    importer_resultats_commune(engine, verbose)
 | 
				
			||||||
 | 
					    importer_resultats_bv(engine, verbose)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user