Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env python3
import argparse
import datetime
import json
import os
import pytz
import sys
import re
tz_paris = pytz.timezone('Europe/Paris')
def fix_raa_date_v0(raa_json):
try:
raa_json['date'] = tz_paris.localize(datetime.datetime.strptime(raa_json['date'], '%d/%m/%Y')).strftime('%Y-%m-%d')
return raa_json
except Exception:
print(f"\033[91m{exc=}, {type(exc)=}\033[0m")
sys.exit(1)
return raa_json
def fix_pdf_date_v0(raa_json, json_key):
if not raa_json[json_key]:
return raa_json
try:
# On tente de parser avec fuseau horaire
raa_json[json_key] = datetime.datetime.strptime(raa_json[json_key], '%d/%m/%Y %H:%M:%S%z').astimezone(pytz.utc).isoformat(timespec="seconds")
return raa_json
except Exception:
try:
# Sinon on tente de parser sans fuseau horaire et on retourne une date avec le fuseau de Paris
raa_json[json_key] = tz_paris.localize(datetime.datetime.strptime(raa_json[json_key], '%d/%m/%Y %H:%M:%S')).astimezone(pytz.utc).isoformat(timespec="seconds")
return raa_json
except Exception as exc:
print(f"\033[91m{exc=}, {type(exc)=}\033[0m")
sys.exit(1)
return raa_json
parser = argparse.ArgumentParser(
prog='./misc/repair_date_format_in_data.py',
description='Met à jour le format des fichiers de métadonnées'
)
parser.add_argument(
'--data-dir',
action='store',
help='dossier de données (par défaut: data/)'
)
parser.add_argument(
'--dry-run',
action='store_true',
help='ne modifie aucun fichier, affiche seulement les modifications nécessaires (par défaut: false)'
)
args = parser.parse_args()
if args.data_dir:
data_dir = args.data_dir
else:
data_dir = 'data/'
dry_run = args.dry_run
if data_dir.startswith('/'):
data_dir = os.path.abspath(data_dir)
else:
data_dir = os.path.abspath(os.path.dirname(os.path.abspath(__file__)) + '/../' + data_dir)
for administration in os.listdir(data_dir):
# On ne cherche que les dossiers ppparis et pref*
if administration.startswith('pref') or administration == 'ppparis':
administration_path = os.path.abspath(data_dir + '/' + administration + '/raa/')
for raa in os.listdir(administration_path):
if raa.endswith('.json'):
raa_id = re.sub('\\.json$', '', raa)
fixed = False
raa_path = os.path.abspath(administration_path + '/' + raa)
raa_file_read = open(raa_path, 'r')
raa_json = json.load(raa_file_read)
raa_file_read.close()
fixed_raa_json = None
# Si le fichier de métadonnées n'a pas de version, il a été généré avant le 14/11/2024 et doit être corrigé
# v0 -> v1 : les dates sont au format YYYY-MM-DD et heure locale
# les heures sont au format YYYY-MM-DD HH:mm:ss±ZZ:ZZ et heure UTC
if not raa_json.get('version') or not raa_json['version']:
fixed = True
date = raa_json['date']
first_seen_on = raa_json['first_seen_on']
pdf_creation_date = raa_json['pdf_creation_date']
pdf_modification_date = raa_json['pdf_modification_date']
print(f"{administration}: {raa_json['name']} ({raa_id}):")
fixed_raa_json = fix_raa_date_v0(raa_json)
if not date == fixed_raa_json['date']:
print(f" date: {date} -> {fixed_raa_json['date']}")
fixed_raa_json = fix_pdf_date_v0(fixed_raa_json, 'first_seen_on')
if not raa_json == fixed_raa_json:
print(f" first_seen_on: {first_seen_on} -> {fixed_raa_json['first_seen_on']}")
fixed_raa_json = fix_pdf_date_v0(fixed_raa_json, 'pdf_creation_date')
if not pdf_creation_date == fixed_raa_json['pdf_creation_date']:
print(f" pdf_creation_date: {pdf_creation_date} -> {fixed_raa_json['pdf_creation_date']}")
fixed_raa_json = fix_pdf_date_v0(fixed_raa_json, 'pdf_modification_date')
if not pdf_modification_date == fixed_raa_json['pdf_modification_date']:
print(f" pdf_modification_date: {pdf_modification_date} -> {fixed_raa_json['pdf_modification_date']}")
ordered_fixed_raa_json = {'version': 1}
for key in fixed_raa_json:
ordered_fixed_raa_json[key] = fixed_raa_json[key]
fixed_raa_json = ordered_fixed_raa_json
if fixed and not dry_run and fixed_raa_json:
raa_file_write = open(raa_path, 'w')
raa_file_write.write(json.dumps(fixed_raa_json))
raa_file_write.close()
else:
print(f'On ignore {administration}...')