diff --git a/README.md b/README.md index a573dd1..884067c 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/osm_vc63/utils.py b/osm_vc63/utils.py index 6912173..b06fafb 100644 --- a/osm_vc63/utils.py +++ b/osm_vc63/utils.py @@ -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) ] diff --git a/rdoo.py b/rdoo.py index 1e412ab..98762e8 100644 --- a/rdoo.py +++ b/rdoo.py @@ -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)