152 lines
5.3 KiB
Python
Executable File
152 lines
5.3 KiB
Python
Executable File
#! /usr/bin/env python
|
|
# -*- coding: UTF-8 -*-
|
|
#
|
|
# TabellioOOo - Data cache file generation
|
|
# Copyright (C) 2010 Parlement de la Communauté française de Belgique
|
|
#
|
|
# This program 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 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program 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 this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
|
|
import sys
|
|
import os
|
|
import psycopg2
|
|
from optparse import OptionParser
|
|
|
|
try:
|
|
import xml.etree.ElementTree as ET
|
|
except ImportError:
|
|
import elementtree.ElementTree as ET
|
|
|
|
|
|
parser = OptionParser()
|
|
parser.add_option('--host', dest='host',
|
|
help='Database hostname', metavar='HOST',
|
|
default='db.tabellio.pcf.be')
|
|
parser.add_option('--dbname', dest='dbname',
|
|
help='Database name', metavar='DBNAME',
|
|
default='procedure_tabellio_pcf_be')
|
|
parser.add_option('-u', '--user', dest='user',
|
|
help='Database username', metavar='USERNAME',
|
|
default='procedure')
|
|
parser.add_option('-p', '--password', dest='password',
|
|
help='Database password', metavar='PASSWORD')
|
|
parser.add_option('--dir', dest='directory',
|
|
help='Directory to hold cache files', metavar='DIR',
|
|
default='.')
|
|
(options, args) = parser.parse_args()
|
|
|
|
if not options.password:
|
|
print 'Error: you must supply a password.'
|
|
print ''
|
|
parser.print_help()
|
|
sys.exit(1)
|
|
|
|
conn = psycopg2.connect("host=%s dbname=%s user=%s password=%s" % (
|
|
options.host, options.dbname, options.user, options.password))
|
|
|
|
cur = conn.cursor()
|
|
|
|
# Parls
|
|
cur.execute("SELECT t_pers.id, t_pers.titre, t_pers.prenom, t_pers.nom, t_pers.sexe, t_comppol.abbr "\
|
|
"FROM t_comppol, t_pershistoline, t_pers "\
|
|
"WHERE "\
|
|
"t_pershistoline.type = 'P_CMPL' AND "\
|
|
"t_pershistoline.fin IS NULL AND "\
|
|
"t_pers.id = t_pershistoline.pers AND "\
|
|
"t_comppol.id = t_pershistoline.description")
|
|
|
|
parls = ET.Element('SParlSpeaker-list')
|
|
while True:
|
|
t = cur.fetchone()
|
|
if not t:
|
|
break
|
|
parl = ET.SubElement(parls, 'SParlSpeaker')
|
|
ET.SubElement(parl, 'id').text = t[0]
|
|
ET.SubElement(parl, 'classname').text = 'PARL'
|
|
ET.SubElement(parl, 'name').text = t[3]
|
|
ET.SubElement(parl, 'firstname').text = t[2]
|
|
ET.SubElement(parl, 'title').text = t[1]
|
|
ET.SubElement(parl, 'sexe').text = t[4]
|
|
ET.SubElement(parl, 'comppol').text = t[5]
|
|
|
|
fd = file(os.path.join(options.directory, 'Parls.xml'), 'w')
|
|
ET.ElementTree(parls).write(fd)
|
|
|
|
# Commissions
|
|
cur.execute("SELECT nom FROM t_com WHERE st = 'S_ACTIVE'")
|
|
coms = ET.Element('MCOMSInfo-list')
|
|
while True:
|
|
t = cur.fetchone()
|
|
if not t:
|
|
break
|
|
com = ET.SubElement(coms, 'MCOMSInfo')
|
|
ET.SubElement(com, 'nom').text = t[0]
|
|
|
|
fd = file(os.path.join(options.directory, 'Commissions.xml'), 'w')
|
|
ET.ElementTree(coms).write(fd)
|
|
|
|
# Ministres
|
|
cur.execute("SELECT t_pers.id, t_pers.titre, t_pers.prenom, t_pers.nom, t_pers.sexe, t_pershistoline.description "\
|
|
"FROM t_pers, t_ministre, t_pershistoline "\
|
|
"WHERE "\
|
|
"t_pers.id = t_ministre.id AND "\
|
|
"t_pershistoline.pers = t_pers.id AND "\
|
|
"t_pershistoline.type = 'M_FONC' AND "\
|
|
"t_pershistoline.fin IS NULL "\
|
|
"ORDER BY t_ministre.ordre")
|
|
mins = ET.Element('SMinistreSpeaker-list')
|
|
while True:
|
|
t = cur.fetchone()
|
|
if not t:
|
|
break
|
|
min = ET.SubElement(mins, 'SMinistreSpeaker')
|
|
ET.SubElement(min, 'id').text = t[0]
|
|
ET.SubElement(min, 'classname').text = 'MINISTRE'
|
|
ET.SubElement(min, 'name').text = t[3]
|
|
ET.SubElement(min, 'firstname').text = t[2]
|
|
ET.SubElement(min, 'title').text = t[1]
|
|
ET.SubElement(min, 'sexe').text = t[4]
|
|
ET.SubElement(min, 'fonc').text = t[5]
|
|
|
|
fd = file(os.path.join(options.directory, 'Ministres.xml'), 'w')
|
|
ET.ElementTree(mins).write(fd)
|
|
|
|
# PresComs
|
|
cur.execute("SELECT t_pers.id, t_pers.titre, t_pers.prenom, t_pers.nom, t_pers.sexe, t_com.code "\
|
|
"FROM t_pershistoline, t_com, t_pers "\
|
|
"WHERE "\
|
|
"t_pershistoline.fin IS NULL AND "\
|
|
"t_pershistoline.type = 'P_COMM_PR' AND "\
|
|
"t_pershistoline.description = t_com.id AND "\
|
|
"t_pers.id = t_pershistoline.pers")
|
|
prescoms = ET.Element('SPresComSpeaker-list')
|
|
while True:
|
|
t = cur.fetchone()
|
|
if not t:
|
|
break
|
|
prescom = ET.SubElement(prescoms, 'SPresComSpeaker')
|
|
ET.SubElement(prescom, 'id').text = t[0]
|
|
ET.SubElement(prescom, 'name').text = t[3]
|
|
ET.SubElement(prescom, 'firstname').text = t[2]
|
|
ET.SubElement(prescom, 'title').text = t[1]
|
|
ET.SubElement(prescom, 'sexe').text = t[4]
|
|
ET.SubElement(prescom, 'com_code').text = t[5]
|
|
|
|
fd = file(os.path.join(options.directory, 'PresComs.xml'), 'w')
|
|
ET.ElementTree(prescoms).write(fd)
|
|
|
|
cur.close()
|
|
conn.close()
|