This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
tabellioOOo/create-cache-data-files.py

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()