cli.py 5.19 KB
Newer Older
Nicolas Joyard's avatar
Nicolas Joyard committed
1 2
# -*- coding: utf-8 -*-

3
import os
Nicolas Joyard's avatar
Nicolas Joyard committed
4
from getpass import getpass
Nicolas Joyard's avatar
Nicolas Joyard committed
5

Nicolas Joyard's avatar
Nicolas Joyard committed
6
from flask_migrate import Migrate, MigrateCommand
Nicolas Joyard's avatar
Nicolas Joyard committed
7

Nicolas Joyard's avatar
Nicolas Joyard committed
8 9
from flask_script import Manager

10
from .importers.adresses import AdressesImporter
11
from .importers.emails import EmailImporter
12
from .importers.laposte import LaPosteImporter
13
from .importers.nosdeputes import NosDeputesImporter
Nicolas Joyard's avatar
Nicolas Joyard committed
14

Nicolas Joyard's avatar
Nicolas Joyard committed
15
from .irfm import app
16

Nicolas Joyard's avatar
Nicolas Joyard committed
17
from .models import db
18

Nicolas Joyard's avatar
Nicolas Joyard committed
19
from .tools.files import generer_demandes as generer_demandes_
Nicolas Joyard's avatar
Nicolas Joyard committed
20
from .tools.mails import (envoyer_emails as envoyer_emails_,
21
                          envoyer_relances as envoyer_relances_,
Nicolas Joyard's avatar
Nicolas Joyard committed
22
                          mailing_lists as mailing_lists_,
23 24
                          erratum_cada as erratum_cada_,
                          extraire_mails_cada as extraire_mails_cada_)
25
from .tools.procedure import (fix_procedure as fix_procedure_,
Nicolas Joyard's avatar
Nicolas Joyard committed
26
                              avance_procedure as avance_procedure_,
27 28
                              export_pour_ta as export_pour_ta_,
                              send_alerte as send_alerte_)
Nicolas Joyard's avatar
Nicolas Joyard committed
29
from .tools.text import hash_password
Nicolas Joyard's avatar
Nicolas Joyard committed
30 31 32 33 34 35 36 37 38


manager = Manager(app)
migrate = Migrate(app, db)

manager.add_command('db', MigrateCommand)


@manager.command
Nicolas Joyard's avatar
Nicolas Joyard committed
39 40 41 42 43 44 45
def clear_cache():
    """Vide le cache des fichiers générés"""
    files_root = os.path.join(app.config['DATA_DIR'], 'files')
    if os.path.exists(files_root):
        for item in os.listdir(files_root):
            print('Suppression %s' % item)
            os.unlink(os.path.join(files_root, item))
Nicolas Joyard's avatar
Nicolas Joyard committed
46 47


48 49
@manager.command
@manager.option('--envoyer', action='store_true')
Nicolas Joyard's avatar
Nicolas Joyard committed
50 51
@manager.option('--modele', dest='modele', default=None)
def envoyer_emails(envoyer=False, modele=None):
52 53
    """Envoie des e-mails pour tous les parlementaires"""
    app.config.update(SQLALCHEMY_ECHO=False)
Nicolas Joyard's avatar
Nicolas Joyard committed
54
    missed_addr, missed_email = envoyer_emails_(app, envoyer, modele)
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

    print('')
    if len(missed_addr):
        print('Parlementaires sans adresse postale :\n')
        print('\n'.join(missed_addr))
    else:
        print('Aucun parlementaire sans adresse postale :)')

    print('')
    if len(missed_email):
        print('Parlementaires sans adresse mail:\n')
        print('\n'.join(missed_email))
    else:
        print('Aucun parlementaire sans adresse mail :)')


71 72 73 74 75 76 77 78
@manager.command
@manager.option('--envoyer', action='store_true')
def envoyer_relances(envoyer=False):
    """Envoie des e-mails de relance"""
    app.config.update(SQLALCHEMY_ECHO=False)
    envoyer_relances_(app, envoyer)


Nicolas Joyard's avatar
Nicolas Joyard committed
79 80 81 82 83 84 85 86
@manager.command
def mailing_lists():
    """Affiche les abonnés aux mailing lists"""
    app.config.update(SQLALCHEMY_ECHO=False)
    for nom, emails in mailing_lists_().items():
        print('%s :\n\t%s' % (nom, '\n\t'.join(emails)))


87 88 89 90 91 92 93
@manager.command
def fix_procedure():
    """Génère les étapes manquantes pour tous les parlementaires"""
    app.config.update(SQLALCHEMY_ECHO=False)
    fix_procedure_(app)


Nicolas Joyard's avatar
Nicolas Joyard committed
94 95 96 97 98 99 100
@manager.command
def export_pour_ta():
    """Génère un export CSV pour les requêtes TA"""
    app.config.update(SQLALCHEMY_ECHO=False)
    export_pour_ta_(app)


101 102 103 104 105 106 107 108
@manager.command
@manager.option('-e', '--etape', dest='etape', default=None)
def avance_procedure(etape):
    """
    Avance la procédure pour tous les parlementaire, et envoie les alertes
    correspondantes.
    """
    app.config.update(SQLALCHEMY_ECHO=False)
109
    avance_procedure_(app, int(etape))
110 111


112 113 114 115 116 117 118 119 120 121
@manager.command
@manager.option('-e', '--etape', dest='etape', default=None)
def send_alerte(etape):
    """
    Envoi les alertes pour une étape données
    """
    app.config.update(SQLALCHEMY_ECHO=False)
    send_alerte_(app, int(etape))


Nicolas Joyard's avatar
Nicolas Joyard committed
122 123 124 125 126 127 128 129 130
@manager.command
def erratum_cada():
    """
    Envoi les e-mails d'erratum CADA
    """
    app.config.update(SQLALCHEMY_ECHO=False)
    erratum_cada_(app)


131 132 133 134 135 136 137 138 139
@manager.command
def extraire_mails_cada():
    """
    Extraire les e-mails de réponse CADA
    """
    app.config.update(SQLALCHEMY_ECHO=False)
    extraire_mails_cada_(app)


140 141 142 143
@manager.command
def generer_demandes():
    """Génère les demandes pour tous les parlementaires"""
    app.config.update(SQLALCHEMY_ECHO=False)
Nicolas Joyard's avatar
Nicolas Joyard committed
144
    missed = generer_demandes_(app)
145

146 147 148 149 150 151 152
    print('')
    if len(missed):
        print('Parlementaires sans adresse:\n')
        print('\n'.join(missed))
    else:
        print('Aucun parlementaire sans adresse :)')

153

154 155 156
@manager.command
def import_nd():
    """Importe les députés depuis NosDéputés.fr"""
157
    app.config.update(SQLALCHEMY_ECHO=False)
158
    NosDeputesImporter(app).run()
159

Nicolas Joyard's avatar
Nicolas Joyard committed
160

161 162 163 164 165
@manager.command
def import_adresses():
    """Importe adresses postales des parlementaires"""
    app.config.update(SQLALCHEMY_ECHO=False)
    AdressesImporter(app).run()
166 167


168 169 170 171 172 173 174
@manager.command
def import_laposte():
    """Importe l'état des courriers suivi depuis La Poste"""
    app.config.update(SQLALCHEMY_ECHO=False)
    LaPosteImporter(app).run()


175 176 177 178 179 180 181 182 183 184
@manager.command
def import_emails():
    """
    Importe les emails des députés depuis un fichier DATA_DIR/emails.csv au
    format "nom complet;email1,email2,..."
    """
    app.config.update(SQLALCHEMY_ECHO=False)
    EmailImporter(app).run()


185
@manager.command
Nicolas Joyard's avatar
Nicolas Joyard committed
186 187
def password():
    """Chiffre un mot de passe admin"""
Nicolas Joyard's avatar
Nicolas Joyard committed
188
    print(hash_password(getpass(), app.config['SECRET_KEY']))
Nicolas Joyard's avatar
Nicolas Joyard committed
189 190 191 192 193 194


@manager.command
def runserver():
    """Exécute le serveur web flask intégré"""
    app.run()