Cette page présente une « sale bidouille totalement inacceptable™ » pour importer des données depuis un fichier CSV vers W.C.S.
Pré-requis : avoir créé un formulaire avec un unique champ de type "liste" (c'est ce formulaire qu'identifie le numéro 9 dans le script ci-dessous).
Vu que je suis un peu pressé… je n'y vais pas par 4 chemins : démonstration par l'exemple !
Encore une fois, cette méthode est absolument déconseillée et n'est présentée ici qu'à titre de mauvais exemple (mais qui marche, pour l'instant…), la bonne méthode, qui sera à étudier dès que possible pour remplacer celle-ci, serait d'accéder au champ du formulaire via l'API de W.C.S., voir même idéalement de développer (et publier) la fonctionnalité d'import depuis un fichier directement dans l'interface web de W.C.S.
1 # à lancer sous l'utilisateur "wcs"
2 import csv
3 import wcs
4 import pickle
5
6 FORM_PATH = '/var/lib/wcs/%s/formdefs/%s'
7 FORM_SITE = 'test-formulaires.auf.org'
8 FORM_NUM = '9'
9
10 f_etab = file('/tmp/etablissements_bacgl.csv')
11 l_etab = []
12 for l in csv.reader(f_etab):
13 # format : "Établissement","Code CODA","Région","Pays"
14 etab = '%s - %s (Sud/BACGL/%s)' % (l[3], l[0], l[1][4:])
15 l_etab.append(etab)
16
17 f_etab.close()
18 del(l_etab[0])
19 l_etab.sort()
20
21 f_form = file(FORM_PATH % (FORM_SITE, FORM_NUM), 'r+b')
22 form = pickle.reads(f_form.read())
23 form.fields[0].items = l_etab
24 f_form.seek(0)
25 f_form.truncate()
26 f_form.write(pickle.dumps(form))
27 f_form.close()
Après lancement de ce script le champ unique du formulaire contient alors les données du fichier CSV.
Ce champ pré-rempli peut ensuite être importé dans un autre formulaire en utilisant la fonction « importation des champs d'un formulaire » (dans l'édition des champs du formulaire).