fix #10 options pour les répertoires de résultats et d'archive

This commit is contained in:
SebF 2021-10-24 08:24:41 +02:00
parent 55d61164b2
commit 4431913f6e
3 changed files with 50 additions and 17 deletions

View File

@ -11,7 +11,7 @@ Un géocodage inverse permet de transformer latitude et longitude en adresses.
## Options ## Options
### Zone géographique ### Zone géographique
`-z, --zone,` définit la zone cible du script, par défaut le Puy-de-Dôme. `-z, --zone`, définit la zone cible du script, par défaut le Puy-de-Dôme.
L'identifiant des objets s'obtient depuis la carte openstreetmap.org : L'identifiant des objets s'obtient depuis la carte openstreetmap.org :
- clic-droit dans la zone concernée - clic-droit dans la zone concernée
- interroger les objets - interroger les objets
@ -30,6 +30,15 @@ Examples :
### Log ### Log
`-l, --log-level`, choisir le niveau de log (INFO par défaut) `-l, --log-level`, choisir le niveau de log (INFO par défaut)
### Dossiers de résultats et d'archivage
`-r, --dossier-resultats`, pour indiquer le dossier d'enregistrement des JSON et ods (par défaut `resultats/`)
`-a, --dossier-archive`, pour indiquer le dossier d'archivage des JSON et ods (par défaut `resultats/archives/`). L'archivage crée un sous-dossier daté de la date des fichiers à archiver.
Ces chemins sont relatifs à `rdoo.py`, il est possible de passer des chemins absolus comme `/home/user/rdoo/archives/`. Attention à ne pas oublier le `/` final !
Il est possible de ne pas archiver en passant l'argument `-na, --no-archive`.
## Inspirations / ressources : ## Inspirations / ressources :
### urls ressources ### urls ressources
- https://towardsdatascience.com/loading-data-from-openstreetmap-with-python-and-the-overpass-api-513882a27fd0 - https://towardsdatascience.com/loading-data-from-openstreetmap-with-python-and-the-overpass-api-513882a27fd0

View File

@ -36,12 +36,12 @@ class Utils:
overpass_url: str overpass_url: str
geo_api_url: str geo_api_url: str
dossier_sauvegarde: str dossier_resultats: str
def __init__(self, overpass_url, geo_api_url, dossier_sauvegarde): def __init__(self, overpass_url, geo_api_url, dossier_resultats):
self.overpass_url = overpass_url self.overpass_url = overpass_url
self.geo_api_url = geo_api_url self.geo_api_url = geo_api_url
self.dossier_sauvegarde = dossier_sauvegarde self.dossier_resultats = dossier_resultats
def save_as_ods(self, fields, data, nom_req, ods_data_sheet=OrderedDict()): def save_as_ods(self, fields, data, nom_req, ods_data_sheet=OrderedDict()):
"""Sauvegarde de data dans un classeur ods""" """Sauvegarde de data dans un classeur ods"""
@ -71,14 +71,14 @@ class Utils:
ods_data_sheet.update({f"{nom_req}": ods_data}) ods_data_sheet.update({f"{nom_req}": ods_data})
save_data(self.dossier_sauvegarde + "resultats.ods", ods_data_sheet) save_data(self.dossier_resultats + "resultats.ods", ods_data_sheet)
logging.info("Sauvegarde résultats format ODS") logging.info("Sauvegarde résultats format ODS")
def save_as_json(self, export_json, nom_req): def save_as_json(self, export_json, nom_req):
"""Enregistrement du JSON""" """Enregistrement du JSON"""
json_file = open(self.dossier_sauvegarde + nom_req + ".json", "w") json_file = open(self.dossier_resultats + nom_req + ".json", "w")
json_file.write(json.dumps(export_json)) json_file.write(json.dumps(export_json))
json_file.close() json_file.close()
@ -233,23 +233,22 @@ class Utils:
return data return data
def archivage(self): def archivage(self, dossier_archive):
"""Archivage des données précédentes""" """Archivage des données précédentes"""
fichier = pathlib.Path(self.dossier_sauvegarde + "resultats.ods") fichier = pathlib.Path(self.dossier_resultats + "resultats.ods")
if not fichier.exists(): if not fichier.exists():
return return
date_fichier = datetime.date.fromtimestamp(fichier.stat().st_ctime) date_fichier = datetime.date.fromtimestamp(fichier.stat().st_ctime)
os.makedirs(self.dossier_sauvegarde + str(date_fichier), exist_ok=True) os.makedirs(dossier_archive + str(date_fichier), exist_ok=True)
# pylint: disable=W0106 # pylint: disable=W0106
[ [
shutil.move( shutil.move(
self.dossier_sauvegarde + file, self.dossier_resultats + file, dossier_archive + str(date_fichier)
self.dossier_sauvegarde + str(datetime.date.today()),
) )
for file in os.listdir(self.dossier_sauvegarde) for file in os.listdir(self.dossier_resultats)
if not os.path.isdir(self.dossier_sauvegarde + file) if not os.path.isdir(self.dossier_resultats + file)
] ]

33
rdoo.py
View File

@ -37,7 +37,6 @@ from osm_vc63.utils import Utils
OVERPASS_URL = "http://overpass-api.de/api/interpreter" OVERPASS_URL = "http://overpass-api.de/api/interpreter"
GEO_API_URL = "https://api-adresse.data.gouv.fr" GEO_API_URL = "https://api-adresse.data.gouv.fr"
DOSSIER_SAUVEGARDE = "resultats/"
# nombre maxi de retries quand echec API # nombre maxi de retries quand echec API
MAX_RETRY = 4 MAX_RETRY = 4
@ -106,6 +105,31 @@ def init_argparse() -> argparse.ArgumentParser:
"-l", "--log-level", type=str, help="Définir le niveau de log.", default="INFO" "-l", "--log-level", type=str, help="Définir le niveau de log.", default="INFO"
) )
parser.add_argument(
"-r",
"--dossier-resultats",
type=str,
help="Définir le dossier d'archive",
default="resultats/",
)
parser.add_argument(
"-a",
"--dossier-archive",
type=str,
help="Définir le dossier d'archive",
default="resultats/archives/",
)
parser.add_argument(
"-na",
"--no-archivage",
dest="archivage",
action="store_false",
help="Désactiver l'archivage'",
)
parser.set_defaults(archivage=True)
return parser return parser
@ -121,9 +145,10 @@ def main():
handlers=[logging.FileHandler("rdoo.log"), logging.StreamHandler(sys.stdout)], handlers=[logging.FileHandler("rdoo.log"), logging.StreamHandler(sys.stdout)],
) )
utils = Utils(OVERPASS_URL, GEO_API_URL, DOSSIER_SAUVEGARDE) utils = Utils(OVERPASS_URL, GEO_API_URL, args.dossier_resultats)
utils.archivage() if args.archivage:
utils.archivage(args.dossier_archive)
logging.info("##### Nouvelle récupération ######") logging.info("##### Nouvelle récupération ######")
@ -152,7 +177,7 @@ def main():
) )
# Sauvegarde # Sauvegarde
os.makedirs(DOSSIER_SAUVEGARDE, exist_ok=True) os.makedirs(args.dossier_resultats, exist_ok=True)
export_json = utils.nettoyage_json_pour_umap(data, req.champs) export_json = utils.nettoyage_json_pour_umap(data, req.champs)
utils.save_as_json(export_json, req.nom) utils.save_as_json(export_json, req.nom)