-
Notifications
You must be signed in to change notification settings - Fork 17
/
archeo-lex
executable file
·161 lines (129 loc) · 7.7 KB
/
archeo-lex
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Archéo Lex – Pure Histoire de la Loi française
# – crée un dépôt Git des lois françaises écrites en syntaxe Markdown
#
# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The Fuck You Want
# To Public License, Version 2, as published by Sam Hocevar. See
# the LICENSE file for more details.
# Imports nécessaires immédiatement
from __future__ import unicode_literals
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from docopt import docopt
# Manuel d’aide
aide = ('''Usage: archeo-lex [--aide] [--debug] [--help] [--version] [--textes=<TEXTES>] [--base=<BASE>] [--livraison=<DATE>] [--exporterlegi] [--mise-a-jour | --nouveau] [--dialecte=<DIALECTE>] [--historique=<HISTORIQUE>] [--metadonnees] [--organisation=<TYPE>] [--dates-git] [--dates-git-pre-1970] [--dates-git-post-2100] [--bddlegi=<fichier>] [--dossier=<dossier>] [--production] [--gitlab-host=<GITHOST>] [--gitlab-token=<GITTOKEN>] [--gitlab-group=<GITGROUP>] [--git-server=<GITSERVER>] [--git-key=<GITKEY>] [--calcules=<FICHIER>]
-t --textes=<TEXTES> Types de textes à télécharger :
- "constitution-de-1958",
- "codes",
- nom du code ("code-pénal"…),
- identifiant Légifrance (paramètre « cidTexte »)
- fichier comportant un texte par ligne
- "tout"
- "tout-obsolete"
- "aleatoire-NOMBRE"
-b --base=<BASE> Base de données DILA ("LEGI"…)
-l --livraison=<DATE> Date et heure de la livraison souhaitée
- "AAAAMMJJ-HHMMSS ("20140718-113010"…)
- "fondation"
- "tout"
--exporterlegi Exporter les textes (legi.py)
--mise-a-jour Effectuer seulement une mise à jour
--nouveau Effacer et repartir du début, sauf le téléchargement
--dialecte=<DIALECTE> Dialecte de structuration des textes :
- "markdown" (défaut)
--historique=<HIST> Fabrique l’historique avec le système :
- "git" (défaut)
- "fichiers" : plusieurs fichiers avec les dates [inactif]
--metadonnees Afficher les métadonnées dans le texte
--organisation=<TYPE> Organisation de l’arborescence des fichiers :
- "texte" (défaut) : tout le texte dans un unique fichier
- "sections" : un répertoire par section, chaque article dans un fichier
- "articles" : chaque article dans un fichier
--dates-git Forcer les dates de Git avant 1970 et après 2100, cela peut rendre
le dépôt créé non-compatible avec certaines plateformes
--dates-git-pre-1970 Forcer les dates de Git avant 1970, voir avertissement ci-dessus
--dates-git-post-2100 Forcer les dates de Git après 2100, voir avertissement ci-dessus
--bddlegi=<fichier> Nom de la base de données de legi.py, par défaut "cache/sql/legi.sqlite"
--dossier=<dossier> Dossier de sortie, par défaut "textes"
--production Production en masse, active les options de performance
--gitlab-host=GITHOST Gitlab où doit être poussé les dépôts
--gitlab-token=GITTOKEN Token d’authentification Gitlab
--gitlab-group=GITGROUP Groupe Gitlab où pousser les textes
--git-server=GITSERVER Serveur et utilisateur pouvant pousser en SSH (ssh://[email protected]:2222 or [email protected])
--git-key=GITKEY Fichier de la clé SSH pour pousser les textes
--calcules=<FICHIER> Fichier contenant la liste des textes calculés
-a --aide Afficher ce message d’aide
-h --help Afficher ce message d’aide
-d --debug Données de DEBUG affichées
-v --version Version d’Archéo Lex
''')
def principal(arguments):
# Action "aide"
if arguments.get('--aide') or arguments.get('--help') \
or set(arguments.values()) == set([None, False]):
print(aide)
return
# Action "version"
from marcheolex import version_archeolex
if arguments.get('--version') or arguments.get('-v'):
print('Archéo Lex – pure Histoire de Loi française – version '+version_archeolex)
return
# Suite des imports
import os
import os.path
from marcheolex import logging, logger
from marcheolex.exporterlegi import creer_historique_legi
from marcheolex.pousserlestextes import pousser_les_textes_sur_gitlab
if arguments.get('--debug') or arguments.get('-d'):
logger.setLevel(logging.DEBUG)
else:
logger.setLevel(logging.INFO)
# Actions à considérer
action_exporterlegi = arguments.get('--exporterlegi') or True
action_gitlab = False
if arguments.get('--gitlab-host') and arguments.get('--gitlab-token') and arguments.get('--gitlab-group') and arguments.get('--git-server') and arguments.get('--git-key'):
action_gitlab = True
if not(action_exporterlegi):
action_exporterlegi = True
# Lecture des données de format
data = {}
data['textes'] = ((arguments.get('--textes') or '') or 'LEGITEXT000006069414')
data['base'] = arguments.get('--base') or 'LEGI'
data['livraison'] = arguments.get('--livraison') or 'tout'
data['format'] = {}
data['format']['dialecte'] = arguments.get('--format') or 'markdown'
data['format']['historique'] = arguments.get('--historique') or 'git'
data['format']['metadonnees'] = arguments.get('--metadonnees') or False
data['format']['organisation'] = arguments.get('--organisation') or 'texte'
data['format']['dates-git-pre-1970'] = arguments.get('--dates-git-pre-1970') or arguments.get('--dates-git') or False
data['format']['dates-git-post-2100'] = arguments.get('--dates-git-post-2100') or arguments.get('--dates-git') or False
# Lecture des autres paramètres
data['bddlegi'] = (arguments.get('--bddlegi') or '') or 'cache/sql/legi.sqlite'
data['dossier'] = (arguments.get('--dossier') or '') or 'textes'
data['production'] = arguments.get('--production') or False
data['effacer'] = not arguments.get('--mise-a-jour') or arguments.get('--nouveau') or False
#data['effacer'] = arguments.get('--nouveau') or not arguments.get('--mise-à-jour') or False
data['gitlab-host'] = arguments.get('--gitlab-host') or ''
data['gitlab-token'] = arguments.get('--gitlab-token') or ''
data['gitlab-group'] = arguments.get('--gitlab-group') or ''
data['git-server'] = arguments.get('--git-server') or ''
data['git-key'] = arguments.get('--git-key') or ''
data['calcules'] = arguments.get('--calcules') or ''
# Création du dossiers des textes
if not os.path.exists(data['dossier']):
os.makedirs(data['dossier'])
textes = []
if action_exporterlegi:
logger.info('Création de l’historique (legi.py)')
textes = creer_historique_legi(data['textes'], data['format'], data['dossier'], data['bddlegi'], data['production'])
if action_gitlab:
logger.info('Envoi sur Gitlab')
pousser_les_textes_sur_gitlab(textes, data['dossier'], data['gitlab-host'], data['gitlab-token'], data['gitlab-group'], data['git-server'], data['git-key'], data['calcules'])
if __name__ == "__main__":
principal(docopt(aide, help=False))
# vim: set ts=4 sw=4 sts=4 et: