-
Notifications
You must be signed in to change notification settings - Fork 0
/
genHTML.py
359 lines (296 loc) · 13.7 KB
/
genHTML.py
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
# -*- coding: utf-8 -*-
"""
*********************************************************
Module : genHTML.py
Auteur : Thierry Maillard (TMD)
Date : 15/7/2015 - 30/12/2021
Role : Routines de génération du code HTML de déploiement.
------------------------------------------------------------
Licence : GPLv3 (en français dans le fichier gpl-3.0.fr.txt)
Copyright (c) 2015 - 2020 - Thierry Maillard
------------------------------------------------------------
This file is part of FinancesLocales project.
FinancesLocales project is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
FinancesLocales project is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with FinancesLocales project.
If not, see <http://www.gnu.org/licenses/gpl-3.0.html>.
*********************************************************
"""
import os
import os.path
import time
import utilitaires
def genIndexHTML(config, repertoireDepBase, listVilles, verbose):
"""
Génération de l'index des viles d'un département
listVilles : liste des villes traitées
Format d'une ville :
[codeCommune, nom, nomWkpFr, article, nomDepartement,
typeGroupement, nomStrate, score, population, numDepartement]
"""
assert len(listVilles) > 0, "genIndexHTML : Aucune ville à traiter !"
if verbose:
print("Entree dans genIndexHTML")
print("repertoireDepBase=", repertoireDepBase)
print("listVilles =", listVilles)
# Lecture du modèle
ficModelHTML = config.get('EntreesSorties', 'io.nomModeleIndexHTML')
htmlText = litModeleHTML(ficModelHTML, verbose)
# Remplacement des variables texte
nomDepStr = listVilles[0][3]
if not listVilles[0][3].endswith("'"):
nomDepStr += ' '
nomDepStr += listVilles[0][4]
htmlText = replaceTags(config, htmlText, nomDepStr, verbose)
# Insertion des lignes de tableau les villes traitées
htmlText = insertVillesTableau(config, htmlText, listVilles, verbose)
# Enregistrement du fichier
enregistreIndexHTML(config, repertoireDepBase,
listVilles[0][9], htmlText, verbose)
if verbose:
print("Sortie de genIndexHTML")
def litModeleHTML(ficModelHTML, verbose):
"""Lecture du fichier modèle HTML"""
if verbose:
print("Entree dans litModeleHTML")
htmlText = ""
with open(ficModelHTML, 'r', encoding='utf-8') as hFic:
htmlText = hFic.read()
if verbose:
print(len(htmlText), "caractères lus dans", ficModelHTML)
print("Sortie de litModeleHTML")
return htmlText
def replaceTags(config, htmlText, nomDepStr, verbose):
""" Remplace les tags ++XXXX++ dans le texte passé en paramètre """
if verbose:
print("Entree dans replaceTags")
print("nomDepStr :", nomDepStr)
htmlText = htmlText.replace("++NOM_DEP_STR++", nomDepStr)
version = config.get('Version', 'version.number') + " (" + \
config.get('Version', 'version.nom') + ")"
htmlText = htmlText.replace("++VERSION++", version)
versionDate = config.get('Version', 'version.date')
htmlText = htmlText.replace("++VERSION_DATE++", versionDate)
htmlText = htmlText.replace("++DATE++", time.strftime("%d %B %G"))
if verbose:
print("Sortie de replaceTags")
return htmlText
# V1.0.5 : Pas de selection de ville ici :
# c'est lors de l'extraction de la base du MinFi que se fait la sélectio
def insertVillesTableau(config, htmlText, listVilles, verbose):
"""
Insere les villes dans le texte passé en paramètre
listVilles : liste des villes traitées
Format d'une ville :
[codeCommune, nom, nomWkpFr, article, nomDepartement,
typeGroupement, nomStrate, score, population]
"""
if verbose:
print("Entree dans InsertVillesTableau")
print("Nombre de ville :", len(listVilles))
lignes = ""
for ville in listVilles:
dictNomsVille = utilitaires.getNomsVille(config, ville[1],
"", verbose)
lignes += '<tr>\n'
# Lien article Finances locales
lignes += '<td><a href="' + dictNomsVille['villeHtml'] + \
'" target="_blank">'
lignes += ville[1] + ' (HTML)</a></td>\n'
# Lien Wikicode
lignes += '<td><a href="' + dictNomsVille['villeWikicode'] + \
'" target="_blank">Wiki</a></td>\n'
# Info score Wikipédia
lignes += '<td>' + str(ville[7]) + '</td>\n'
lignes += '<td>' + ville[8] + '</td>\n'
lignes += '</tr>\n'
htmlText = htmlText.replace("++LIGNES_VILLES++", lignes)
if verbose:
print("lignes :", lignes)
print("Sortie de InsertVillesTableau")
return htmlText
def enregistreIndexHTML(config, repertoireDepBase, numDep,
htmlText, verbose):
""" Enregistre la notice HTML """
if verbose:
print("Entree dans enregistreIndexHTML")
print("repertoireDepBase =", repertoireDepBase)
print("numDep =", numDep)
# Le répertoire qui accueillera les fichiers du département doit exister
repertoire = repertoireDepBase
assert os.path.isdir(os.path.normcase(repertoire)),\
"Le répertoire " + repertoire + " n'existe pas !"
nomFicIndexHTML = config.get('EntreesSorties', 'io.nomFicIndexHTML')
pathFileHTML = os.path.normcase(os.path.join(repertoire, nomFicIndexHTML))
enregistreFicHTML(pathFileHTML, htmlText, verbose)
if verbose:
print("Fichier index écrit dans : ", pathFileHTML)
print("Sortie de enregistreIndexHTML")
def enregistreFicHTML(pathFileHTML, htmlText, verbose):
""" Enregistre un fichier HTML à l'endroit spécifé """
if verbose:
print("Entree dans enregistreFicHTML")
print("pathFileHTML :", pathFileHTML)
if verbose:
print("Ouverture de :", pathFileHTML)
with open(pathFileHTML, 'w', encoding='utf-8') as ficNotice:
print("Ecriture de :", pathFileHTML)
ficNotice.write(htmlText)
if verbose:
print("Sortie de enregistreFicHTML")
def convertWikicode2Html(config, pathVille, verbose):
"""Conversion d'un fichier wikicode en HTML"""
if verbose:
print("Entree dans convertWikicode2Html")
print("pathVille =", pathVille)
# Lecture du wikicode produit en utf8
if verbose:
print("Lecture du wikicode dans :", pathVille)
wikicode = ""
with open(pathVille, 'r', encoding='utf-8') as hFic:
wikicode = hFic.read()
wikicode = wikicode.replace('&', '&').replace('<', '<').replace('>', '>')
# Lecture du modèle
ficModelHTML = config.get('EntreesSorties', 'io.nomModeleCodeHTML')
if verbose:
print("Lecture du modèle dans :", ficModelHTML)
htmlText = litModeleHTML(ficModelHTML, verbose)
# Insertion dans le modèle HTML du wikicode
titrePage = ("Pour " +
os.path.basename(pathVille).replace('.txt', '').replace('_', ' '))
htmlText = htmlText.replace("++TITRE++", titrePage)
htmlText = htmlText.replace("++CODE++", wikicode)
# Sauvegarde du html et suppresion fichier texte
pathFicResu = pathVille.replace('.txt', '.html')
if verbose:
print("Ecriture de :", pathFicResu)
enregistreFicHTML(pathFicResu, htmlText, verbose)
os.remove(pathVille)
if verbose:
print("Sortie de convertWikicode2Html")
def genIndexDepartement(config, repTransfertWeb, verbose):
"""
Genere l'index des départements disponibles
repTransfertWeb : repertoire où écrire les résultats
"""
# Récupère la liste des departements disponibles + tri
repertoireBase = config.get('EntreesSorties', 'io.repertoireBase')
assert os.path.isdir(repTransfertWeb)
listeDept = [dept for dept in os.listdir(repTransfertWeb)
if os.path.isdir(os.path.join(repTransfertWeb, dept)) and
dept.startswith(repertoireBase + '_')]
listeDept.sort()
assert len(listeDept) > 0
# Lecture modèle de la Notice de Deploiement
ficModelHTML = config.get('EntreesSorties', 'io.nomModeleNoticeDeploiement')
if verbose:
print("Lecture du modèle dans :", ficModelHTML)
htmlText = litModeleHTML(ficModelHTML, verbose)
# Remplacement des tags
htmlText = htmlText.replace("++OUTIL_NOM++",
config.get('Version', 'version.appName'))
version = config.get('Version', 'version.number') + " : " + \
config.get('Version', 'version.nom')
htmlText = htmlText.replace("++VERSION++", version)
htmlText = htmlText.replace("++URL_BASE++",
'<a href="' + \
config.get('GenCode', 'gen.siteAlize2') + \
'" target="_blank">Alize2</a>')
htmlText = htmlText.replace("++DATE++", time.strftime("%d %B %G - %H:%M:%S"))
# Construction des lignes de departements du tableau
lignesDept = ""
for dept in listeDept:
lignesDept += '<tr>\n'
# Numéro et lien département
lignesDept += '<td><a href="' + dept + '/index.html" target="_blank">' + \
dept.replace(repertoireBase + '_', '') + \
'</a></td>\n'
# Récupération de la date de modification du paquet
timeSecEpoch = os.path.getmtime(os.path.join(repTransfertWeb, dept))
tDeniereModif = time.strftime("%d %B %G - %H:%M:%S", time.localtime(timeSecEpoch))
lignesDept += '<td>' + tDeniereModif + '</td>\n'
lignesDept += '</tr>\n'
htmlText = htmlText.replace("++LIGNES_DEPARTEMENTS++", lignesDept)
# Sauvegarde
nomNoticeDeploiement = config.get('EntreesSorties', 'io.nomNoticeDeploiement')
pathFicResu = os.path.join(repTransfertWeb, nomNoticeDeploiement)
if verbose:
print("Ecriture de :", pathFicResu)
enregistreFicHTML(pathFicResu, htmlText, verbose)
def genIndexGroupementHTML(config, repertoireGroupements,
listGroupements, verbose):
"""
Génération de l'index des viles d'un département
repertoireGroupements : path du répertoire dans lequel sera produit l'index
listGroupements : liste des groupements de communes traités traitées
Format d'un enregistrement :
[sirenGroupement, nomArticleCC, nom,
région, département, forme, siège,
logo, siteWeb]
"""
assert listGroupements, "genIndexGroupementHTML : Aucune ville à traiter !"
if verbose:
print("Entree dans genIndexGroupementHTML")
print("repertoireGroupements=", repertoireGroupements)
print("listGroupements =", listGroupements)
# Lecture du modèle
ficModelHTML = config.get('EntreesSorties', 'io.nomModeleIndexGroupementHTML')
htmlText = litModeleHTML(ficModelHTML, verbose)
# Remplacement des variables texte
htmlText = replaceTags(config, htmlText, "", verbose)
# Insertion des lignes de tableau les Groupements traitées
htmlText = insertGroupementTableau(htmlText, listGroupements, verbose)
# Enregistrement du fichier
nomFicIndexHTML = config.get('EntreesSorties', 'io.nomFicGroupementHTML')
pathFileHTML = os.path.normcase(os.path.join(repertoireGroupements, nomFicIndexHTML))
enregistreFicHTML(pathFileHTML, htmlText, verbose)
if verbose:
print("Sortie de genIndexGroupementHTML")
def insertGroupementTableau(htmlText, listGroupements, verbose):
"""
Insere les groupements de communes dans le texte passé en paramètre
listGroupements : liste des groupements de communes traités traitées
Format d'un enregistrement :
[sirenGroupement, nomArticleCC, nom,
région, département, forme, siège,
logo, siteWeb]
"""
if verbose:
print("Entree dans insertGroupementTableau")
print("Nombre de groupents de communes :", len(listGroupements))
if listGroupements:
print(listGroupements[0])
lignes = ""
for groupement in listGroupements:
dictNomsGroupement = utilitaires.getNomsGroupement(groupement[2],
"",
verbose)
lignes += '<tr>\n'
# Lien article Finances locales
nomFic = utilitaires.construitNomFic(dictNomsGroupement['repGroupement'],
dictNomsGroupement['groupementNomDisque'],
"HTML", '.html')
lignes += '<td><a href="' + nomFic + '" target="_blank">'
lignes += groupement[1] + ' (HTML)</a></td>\n'
# Lien Wikicode
nomFic = utilitaires.construitNomFic(dictNomsGroupement['repGroupement'],
dictNomsGroupement['groupementNomDisque'],
"wikicode", '.html')
lignes += '<td><a href="' + nomFic + '" target="_blank">Wiki</a></td>\n'
# Info score Wikipédia
lignes += '<td>' + groupement[3] + '</td>\n'
lignes += '<td>' + groupement[4] + '</td>\n'
lignes += '<td>' + groupement[0] + '</td>\n'
lignes += '</tr>\n'
htmlText = htmlText.replace("++LIGNES_GROUPEMENTS++", lignes)
if verbose:
print("lignes :", lignes)
print("Sortie de insertGroupementTableau")
return htmlText