Skip to content
GitLab
Explorer
Connexion
Navigation principale
Rechercher ou aller à…
Projet
Attrap
Gestion
Activité
Membres
Labels
Programmation
Tickets
Tableaux des tickets
Jalons
Wiki
Code
Requêtes de fusion
Dépôt
Branches
Validations
Étiquettes
Graphe du dépôt
Comparer les révisions
Compilation
Pipelines
Jobs
Planifications de pipeline
Artéfacts
Déploiement
Releases
Registre de conteneur
Aide
Aide
Support
Documentation de GitLab
Comparer les forfaits GitLab
Forum de la communauté
Contribuer à GitLab
Donner votre avis
Conditions générales et politique de confidentialité
Raccourcis clavier
?
Extraits de code
Groupes
Projets
Afficher davantage de fils d'Ariane
La Quadrature du Net
Attrap
Comparer les révisions
edb38feb49ed1b733fc9cb4dc7a2855e395a5d79 to main
Comparer les révisions
Les modifications sont affichées comme si la révision
source
était fusionnée avec la révision
cible
.
En savoir plus sur la comparaison des révisions.
Source
la-quadrature-du-net/Attrap
Sélectionner le projet cible
No results found
main
Sélectionner une révision Git
Branches
main
pref19
Échanger
Cible
Guinness/Attrap
Sélectionner le projet cible
la-quadrature-du-net/Attrap
foggyfrog/Attrap
skhwiz/Attrap
precambrien/Attrap
ketsapiwiq/Attrap
Joseki/Attrap
kr1p/attrap-pref-12
kr1p/attrap-pref-46
kr1p/attrap-pi
Guinness/Attrap
astroidgritty/attrap-pref-84
davinov/Attrap
maettellite/attrap-pref-01
m242/Attrap
multi/Attrap
mverdeil/Attrap
olpo/Attrap
17 résultats
edb38feb49ed1b733fc9cb4dc7a2855e395a5d79
Sélectionner une révision Git
Branches
feat/pref-88-vosges
main
Afficher les modifications
Uniquement les modifications entrantes de la source
Inclure les modifications apportées à la cible depuis la création de la source
Comparer
Masquer les modifications d'espaces
En ligne
Côte à côte
Affichage de
2 fichiers modifiés
misc/fix-pref75-prefidf-url.py
+76
-0
76 ajouts, 0 suppression
misc/fix-pref75-prefidf-url.py
misc/update_metadata_format.py
+93
-40
93 ajouts, 40 suppressions
misc/update_metadata_format.py
avec
169 ajouts
et
40 suppressions
misc/fix-pref75-prefidf-url.py
0 → 100755
Voir le fichier @
f1d8eaac
#!/usr/bin/env python3
import
argparse
import
json
import
os
import
re
from
urllib.parse
import
unquote
import
hashlib
parser
=
argparse
.
ArgumentParser
(
prog
=
'
./misc/fix-pref75-prefidf-url.py
'
,
description
=
'
Met à jour les URL des RAA de Paris et d
\'
Idf
'
)
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 prefidf et pref75
if
administration
==
'
prefidf
'
or
administration
==
'
pref75
'
:
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
)
txt_path
=
re
.
sub
(
'
\\
.json$
'
,
'
.txt
'
,
raa_path
)
raa_file_read
=
open
(
raa_path
,
'
r
'
)
raa_json
=
json
.
load
(
raa_file_read
)
raa_file_read
.
close
()
url
=
raa_json
.
get
(
'
url
'
)
if
url
.
startswith
(
'
https://www.prefectures-regions.gouv.fr/ile-de-france/ile-de-france/ile-de-france/irecontenu/telechargement/
'
):
raa_json
[
'
url
'
]
=
url
.
replace
(
'
https://www.prefectures-regions.gouv.fr/ile-de-france/ile-de-france/ile-de-france/irecontenu/telechargement/
'
,
'
https://www.prefectures-regions.gouv.fr/ile-de-france/irecontenu/telechargement/
'
)
fixed_raa_json
=
{}
for
key
in
raa_json
:
fixed_raa_json
[
key
]
=
raa_json
[
key
]
fixed_raa_id
=
hashlib
.
sha256
(
unquote
(
raa_json
[
'
url
'
]).
encode
(
'
utf-8
'
)).
hexdigest
()
fixed_raa_path
=
raa_path
.
replace
(
raa_id
,
fixed_raa_id
)
fixed_txt_path
=
txt_path
.
replace
(
raa_id
,
fixed_raa_id
)
print
(
f
'
{
raa_id
}
->
{
fixed_raa_id
}
:
'
)
print
(
f
"
{
raa_json
[
'
url
'
]
}
"
)
print
(
''
)
if
not
dry_run
:
raa_file_write
=
open
(
fixed_raa_path
,
'
w
'
)
raa_file_write
.
write
(
json
.
dumps
(
fixed_raa_json
))
raa_file_write
.
close
()
os
.
remove
(
raa_path
)
os
.
rename
(
txt_path
,
fixed_txt_path
)
Ce diff est replié.
Cliquez pour l'agrandir.
misc/update_metadata_format.py
Voir le fichier @
f1d8eaac
...
...
@@ -2,13 +2,22 @@
import
argparse
import
datetime
import
io
import
json
import
os
import
pytz
import
sys
import
re
import
requests
sys
.
path
.
append
(
os
.
path
.
dirname
(
__file__
)
+
'
/../
'
)
from
Attrap_pref976
import
Attrap_pref976
from
Attrap
import
Attrap
from
pypdf
import
PdfReader
tz_paris
=
pytz
.
timezone
(
'
Europe/Paris
'
)
session
=
requests
.
Session
()
def
fix_raa_date_v0
(
raa_json
):
...
...
@@ -40,8 +49,84 @@ def fix_pdf_date_v0(raa_json, json_key):
return
raa_json
def
fix_json
(
raa_json
,
raa_id
,
administration
):
version
=
raa_json
.
get
(
'
version
'
)
match
version
:
# 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
case
None
:
print
(
f
"
{
raa_id
}
: v0 -> v1
"
)
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
return
fix_json
(
fixed_raa_json
,
raa_id
,
administration
)
# Si le fichier de métadonnées est en version 1, il ne contient pas le fuseau horaire de l'administration.
# v1 -> v2: ajout du fuseau horaire (Europe/Paris sauf Mayotte Indian/Mayotte)
case
1
:
print
(
f
"
{
raa_id
}
: v1 -> v2
"
)
if
administration
==
'
pref976
'
:
print
(
'
Téléchargement du RAA pour recalculer les dates avec le fuseau horaire de Mayotte
'
)
# Il faut retélécharger le RAA pour vérifier que les heures sont dans le bon fuseau
session
.
headers
.
update
({
'
User-Agent
'
:
Attrap_pref976
.
user_agent
})
pdf_resource
=
session
.
get
(
raa_json
[
'
url
'
],
timeout
=
(
10
,
120
),
stream
=
True
)
pdf
=
io
.
BytesIO
(
pdf_resource
.
content
)
reader
=
PdfReader
(
pdf
)
pdf_metadata
=
reader
.
metadata
if
pdf_metadata
:
if
pdf_metadata
.
creation_date
:
pdf_creation_date
=
Attrap
.
get_aware_datetime
(
pdf_metadata
.
creation_date
,
timezone
=
Attrap_pref976
.
timezone
)
raa_json
[
'
pdf_creation_date
'
]
=
pdf_creation_date
.
astimezone
(
pytz
.
utc
).
isoformat
(
timespec
=
"
seconds
"
)
if
pdf_metadata
.
modification_date
:
pdf_modification_date
=
Attrap
.
get_aware_datetime
(
pdf_metadata
.
modification_date
,
timezone
=
Attrap_pref976
.
timezone
)
raa_json
[
'
pdf_modification_date
'
]
=
pdf_modification_date
.
astimezone
(
pytz
.
utc
).
isoformat
(
timespec
=
"
seconds
"
)
print
(
'
Ajout du fuseau horaire
'
)
if
administration
==
'
pref976
'
:
raa_json
[
'
timezone
'
]
=
Attrap_pref976
.
timezone
else
:
raa_json
[
'
timezone
'
]
=
'
Europe/Paris
'
raa_json
[
'
version
'
]
=
2
return
fix_json
(
raa_json
,
raa_id
,
administration
)
case
2
:
return
raa_json
case
_
:
print
(
f
'
Version inconnue :
{
version
}
'
)
sys
.
exit
(
1
)
parser
=
argparse
.
ArgumentParser
(
prog
=
'
./misc/
repair_
dat
e
_format
_in_data
.py
'
,
prog
=
'
./misc/
update_meta
dat
a
_format.py
'
,
description
=
'
Met à jour le format des fichiers de métadonnées
'
)
...
...
@@ -84,45 +169,13 @@ for administration in os.listdir(data_dir):
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
version
=
raa_json
.
get
(
'
version
'
)
if
version
!=
2
:
fixed_raa_json
=
fix_json
(
raa_json
,
raa_id
,
administration
)
if
fixed
and
not
dry_run
and
fixed_raa_jso
n
:
raa_file_write
=
open
(
raa_path
,
'
w
'
)
raa_file_write
.
write
(
json
.
dumps
(
fixed_raa_json
))
raa_file_write
.
close
()
if
not
dry_ru
n
:
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
}
...
'
)
Ce diff est replié.
Cliquez pour l'agrandir.
Précédent
1
2
3
4
Suivant