15 Commits

7 changed files with 105 additions and 32 deletions

View File

@@ -22,10 +22,18 @@ steps:
PYPI_TOKEN: PYPI_TOKEN:
from_secret: pypi_token from_secret: pypi_token
when: - name: Notify on matrix
event: image: plugins/matrix
include: environment:
- tag MATRIX_ROOMID:
from_secret: MATRIX_ROOMID
MATRIX_ACCESSTOKEN:
from_secret: MATRIX_ACCESSTOKEN
MATRIX_USERID:
from_secret: MATRIX_USERID
settings:
homeserver: https://matrix.poneyworld.net
template: "Une nouvelle version (${DRONE_TAG}) de pdf-oralia est publiée!"
# Déclencheur de la pipeline # Déclencheur de la pipeline
trigger: trigger:

View File

@@ -45,7 +45,7 @@ def from_pdf(pdf):
charge_tables = [] charge_tables = []
patrimoie_tables = [] patrimoie_tables = []
for page in pdf.pages: for page_number, page in enumerate(pdf.pages):
page_text = page.extract_text() page_text = page.extract_text()
date = extract_date(page_text) date = extract_date(page_text)
additionnal_fields = { additionnal_fields = {
@@ -76,7 +76,7 @@ def from_pdf(pdf):
pass pass
else: else:
raise ValueError("Page non reconnu") logging.warning(f"Page {page_number+1} non reconnu. Page ignorée.")
df_charge = charge.table2df(recapitulatif_tables + charge_tables) df_charge = charge.table2df(recapitulatif_tables + charge_tables)
df_loc = locataire.table2df(loc_tables) df_loc = locataire.table2df(loc_tables)

29
pdf_oralia/join.py Normal file
View File

@@ -0,0 +1,29 @@
import glob
import logging
import pandas as pd
def join_excel(src, dest, file_pattern):
"""Join every excel file in arc respecting file_pattern into on unique file in dist"""
filenames = list_files(src, file_pattern)
logging.debug(f"Concatenate {filenames}")
dfs = extract_dfs(filenames)
joined_df = pd.concat(dfs)
logging.debug(f"Writing joined excel to {dest}")
joined_df.to_excel(dest, index=False)
logging.debug(f"with {len(joined_df)} rows")
def list_files(src, file_glob):
return list(glob.iglob(f"{src}/{file_glob}"))
def extract_dfs(filenames):
dfs = []
for filename in filenames:
logging.debug(f"Extracting {filename}")
df = pd.read_excel(filename)
logging.debug(f"Found {len(df)} rows")
dfs.append(df)
return dfs

View File

@@ -17,6 +17,7 @@ DF_TYPES = {
"annee": str, "annee": str,
"lot": str, "lot": str,
} }
DEFAULT_FOURNISSEUR = "ROSIER MODICA MOTTEROZ SA"
def is_it(page_text): def is_it(page_text):
@@ -31,7 +32,10 @@ def is_it(page_text):
def get_lot(txt): def get_lot(txt):
"""Return lot number from "RECAPITULATIF DES OPERATIONS" """ """Return lot number from "RECAPITULATIF DES OPERATIONS" """
regex = r"[BSM](\d+)(?=\s*-)" regex = r"[BSM](\d+)(?=\s*-)"
try:
result = re.findall(regex, txt) result = re.findall(regex, txt)
except TypeError:
return "*"
if result: if result:
return "{:02d}".format(int(result[0])) return "{:02d}".format(int(result[0]))
return "*" return "*"
@@ -62,8 +66,8 @@ def extract(table, additionnal_fields: dict = {}):
for k, v in additionnal_fields.items(): for k, v in additionnal_fields.items():
r[k] = v r[k] = v
if "honoraire" in row[RECAPITULATIF_DES_OPERATIONS]: if "honoraire" in row[RECAPITULATIF_DES_OPERATIONS].lower():
r["Fournisseur"] = "IMI GERANCE" r["Fournisseur"] = DEFAULT_FOURNISSEUR
extracted.append(r) extracted.append(r)

View File

@@ -5,7 +5,16 @@ from pathlib import Path
import click import click
from .extract import extract_save from .extract import extract_save
from .join import join_excel
@click.group()
@click.option("--debug/--no-debug", default=False)
def main(debug):
if debug:
logging_level = logging.DEBUG
else:
logging_level = logging.INFO
logging_config = dict( logging_config = dict(
version=1, version=1,
formatters={"f": {"format": "%(levelname)-8s %(name)-12s %(message)s"}}, formatters={"f": {"format": "%(levelname)-8s %(name)-12s %(message)s"}},
@@ -13,23 +22,18 @@ logging_config = dict(
"h": { "h": {
"class": "logging.StreamHandler", "class": "logging.StreamHandler",
"formatter": "f", "formatter": "f",
"level": logging.DEBUG, "level": logging_level,
} }
}, },
root={ root={
"handlers": ["h"], "handlers": ["h"],
"level": logging.DEBUG, "level": logging_level,
}, },
) )
dictConfig(logging_config) dictConfig(logging_config)
@click.group()
def main():
pass
@main.group() @main.group()
def extract(): def extract():
pass pass
@@ -64,5 +68,31 @@ def all(src, dest):
@main.command() @main.command()
@click.option("--src", help="Tous les fichiers dans src", default="./") @click.option("--src", help="Tous les fichiers dans src", default="./")
@click.option("--dest", help="Où mettre les fichiers produits", default="") @click.option("--dest", help="Où mettre les fichiers produits", default="")
def join(src, dest): @click.option(
join_excel(src, dest, df_names=["charge", "locataire"]) "--force",
help="Ecraser si le ficher destination existe.",
default=False,
is_flag=True,
)
def join(src, dest, force):
"""Join tous les fichiers excel charge (resp locataire) de src dans un seul fichier charge.xlsx dans dist.
Exemple:
pdf-oralia join --src <dossier_source> --dest <dossier_destination>
"""
dest_charge = f"{dest}/charge.xlsx"
if not force and Path(dest_charge).exists():
raise ValueError(f"The file {dest_charge} already exists")
dest_locataire = f"{dest}/locataire.xlsx"
if not force and Path(dest_locataire).exists():
raise ValueError(f"The file {dest_locataire} already exists")
if not Path(src).exists():
raise ValueError(f"The source directory ({src}) does not exists.")
join_excel(src, dest_charge, "*_charge.xlsx")
logging.info(f"Les données charges ont été concaténées dans {dest_charge}")
join_excel(src, dest_locataire, "*_locataire.xlsx")
logging.info(f"Les données locataires ont été concaténées dans {dest_locataire}")

View File

@@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "pdf-oralia" name = "pdf-oralia"
version = "dev" version = "0"
description = "" description = ""
authors = ["Bertrand Benjamin <benjamin.bertrand@opytex.org>"] authors = ["Bertrand Benjamin <benjamin.bertrand@opytex.org>"]
readme = "README.md" readme = "README.md"

2
renovate.json Normal file
View File

@@ -0,0 +1,2 @@
{
}