Etude / WCS / ImportCSV

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


Etude/WCS/ImportCSV (dernière édition le 2010-10-27 19:10:32 par JeanChristopheAndré)