Projet

Général

Profil

Demande #552 » synthese.py

Script qui parse la configuration des listes de Sympa et en fait la synthèse en csv. - François Poulain, 07/06/2011 19:36

 
1
import re, csv
2

    
3
dir_list = ['april.org/accessibilite', 'april.org/admins', 'april.org/admins-auto', 'april.org/ag2008', 'april.org/ag2009', 'april.org/ag2010', 'april.org/all-april', 'april.org/amellie', 'april.org/animation', 'april.org/april', 'april.org/april-actu', 'april.org/atelier', 'april.org/atf', 'april.org/bureau', 'april.org/ca', 'april.org/ca-interne', 'april.org/calendrier', 'april.org/campagne-adhesion', 'april.org/candidatsbe', 'april.org/candidatsbe-pacte', 'april.org/candidatsfr-actu', 'april.org/candidatsfr-locaux', 'april.org/comite-sgl', 'april.org/comm-externe', 'april.org/communique', 'april.org/comptabilite', 'april.org/contact', 'april.org/copinedegeek', 'april.org/copyleft_attitude', 'april.org/cstic', 'april.org/debats', 'april.org/diversite', 'april.org/educ', 'april.org/entreprises', 'april.org/fdi', 'april.org/freesw-eu', 'april.org/gdtc-devel', 'april.org/gte', 'april.org/informatique-deloyale', 'april.org/intervenants-sgl', 'april.org/juridique', 'april.org/libreassociation', 'april.org/liste-infos', 'april.org/liste-infos-moderateurs', 'april.org/mdl', 'april.org/orga', 'april.org/owf-ged', 'april.org/patrimoine-mondial', 'april.org/persmorales', 'april.org/prez', 'april.org/resp-tous', 'april.org/rp', 'april.org/rtfm', 'april.org/secretaire', 'april.org/sensibilisation', 'april.org/sgl', 'april.org/sir', 'april.org/siteweb', 'april.org/synceduc', 'april.org/syncrgi', 'april.org/technique', 'april.org/template', 'april.org/terminologie', 'april.org/trad-gnu', 'april.org/trad-gpl', 'april.org/traductions', 'april.org/transcriptions', 'april.org/tresorier', 'april.org/turing', 'april.org/webmasters', 'april.org/webmasters-auto', 'candidats.fr/candidatsfr', 'candidats.fr/signature-organisation', 'informatiquedeloyale.info/contact', 'libre-en-fete.net/contact-lef', 'libre-en-fete.net/lef']
4

    
5
keyword_list = r'(status|visibility|review|subscribe|add|send|digest|rfc2369_header_fields)'
6

    
7
keyword_detect_multilines = r'(available_user_options|web_archive|reply_to_header)'
8

    
9
keyword_list_multilines = r'(apply|value|other_email|reception|access)'
10

    
11
# Parsing
12

    
13
global configurations, keywords
14

    
15
configurations = {}
16
keywords = ['mailling_list']
17

    
18
def store(directory, line, master_key = ''):
19
	if master_key == '':
20
		key = line.split()[0]
21
	else:
22
		key = master_key + ':' + line.split()[0]
23
	if key not in keywords: keywords.append(key)
24
	content = line.split()[1:]
25
	configurations[directory][key] = content[0]
26

    
27
for directory in dir_list:
28

    
29
	configurations[directory] = {'mailling_list':directory}
30

    
31
	config = open(directory + '/config', 'r')
32

    
33
	old_line = '\n'
34
	line = '\n'
35

    
36
	while line != '':
37
		line = config.readline()
38

    
39
		if re.match(keyword_list, line) and old_line == '\n':
40
			store(directory,line)
41

    
42
		if re.match(keyword_detect_multilines, line) and old_line == '\n':
43
			master = line.split()[0]
44
			while line != '\n':
45
				line = config.readline()
46
				if re.match(keyword_list_multilines, line):
47
					store(directory, line, master_key = master)
48

    
49
		old_line = line
50

    
51
	config.close()
52

    
53
# print configurations, keywords
54

    
55
# CSV export
56

    
57
############## DictWriter.writeheader() indisponible pour python < 2.7
58

    
59
out = open('config.csv', 'wb')
60
for key in keywords:
61
	out.write(key + ',')
62
out.write('\n')
63
out.close()
64

    
65
##############
66

    
67
out = open('config.csv', 'a')
68

    
69
data = csv.DictWriter(out,keywords)
70

    
71
for mailling_list in configurations:
72
	data.writerow(configurations[mailling_list])
(1-1/6)