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
### 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 :
- clic-droit dans la zone concernée
- interroger les objets
@ -30,6 +30,15 @@ Examples :
### Log
`-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 :
### urls ressources
- 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
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.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()):
"""Sauvegarde de data dans un classeur ods"""
@ -71,14 +71,14 @@ class Utils:
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")
def save_as_json(self, export_json, nom_req):
"""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.close()
@ -233,23 +233,22 @@ class Utils:
return data
def archivage(self):
def archivage(self, dossier_archive):
"""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():
return
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
[
shutil.move(
self.dossier_sauvegarde + file,
self.dossier_sauvegarde + str(datetime.date.today()),
self.dossier_resultats + file, dossier_archive + str(date_fichier)
)
for file in os.listdir(self.dossier_sauvegarde)
if not os.path.isdir(self.dossier_sauvegarde + file)
for file in os.listdir(self.dossier_resultats)
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"
GEO_API_URL = "https://api-adresse.data.gouv.fr"
DOSSIER_SAUVEGARDE = "resultats/"
# nombre maxi de retries quand echec API
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"
)
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
@ -121,9 +145,10 @@ def main():
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 ######")
@ -152,7 +177,7 @@ def main():
)
# 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)
utils.save_as_json(export_json, req.nom)