#!/usr/bin/env python
# -*- coding: utf-8 -*-
+"""
+Outil d'export de données w.c.s.
+Copyright : Agence universitaire de la Francophonie — www.auf.org
+Licence : GNU General Public Licence, version 2
+Auteur : Jean Christophe André
+Date de création : 15 octobre 2009
+
+Depends: wcs, python-simplejson, python-magic
+"""
import os
import os.path
import shutil
import logging
from time import gmtime, strftime
import simplejson as json
+import magic
+import mimetypes
from wcs import publisher
from wcs.formdef import FormDef
f.close()
f = open(os.path.join(output_directory, 'field-names.json'), 'wb')
- f.write(json.dumps(field_names, ensure_ascii=False))
+ f.write(json.dumps(field_names, ensure_ascii=False, sort_keys=True))
f.close()
# XXX: hack temporaire… :-/
global pub
+ # on charge la base des types MIME une fois pour toutes
+ #magicmime = magic.Magic(mime=True) => ce sera pour plus tard…
+ magicmime = magic.open(magic.MAGIC_MIME_TYPE)
+
liste_dossiers = []
for object in formdef.data_class().select():
result = {
elif isinstance(field, DateField):
result[field_name] = strftime('%Y-%m-%d', data)
elif isinstance(field, FileField):
- extension = data.orig_filename.rpartition('.')[2].lower()
+ if '.' in data.orig_filename:
+ extension = data.orig_filename.rpartition('.')[2].lower()
+ else: # il n'y a pas d'extension dans le nom de fichier
+ p = os.path.join(pub.app_dir, 'uploads', data.qfilename)
+ #m = magicmime.from_file(p) => ce sera pour plus tard…
+ m = magicmime.file(p)
+ extension = mimetypes.guess_extension(m)
+ if extension is not None:
+ extension = extension[1:]
+ else:
+ extension = 'unknown'
result[field_name] = "%s.%s" % (field_name, extension)
qfiles[field_name] = data.qfilename
else:
# génération du fichier JSON
jsonname = os.path.join(output_directory, 'data', filename + '.json')
f = open(jsonname, 'wb')
- f.write(json.dumps(result, ensure_ascii=False))
+ f.write(json.dumps(result, ensure_ascii=False, sort_keys=True))
f.close()
logging.info("Dossier '%s' : %s.",
filename, result['wcs_workflow_status'])
f = open(os.path.join(output_directory, 'liste-dossiers.json'), 'wb')
- f.write(json.dumps(liste_dossiers, ensure_ascii=False))
+ f.write(json.dumps(liste_dossiers, ensure_ascii=False, sort_keys=True))
f.close()
#!/bin/sh
-OUTPUT_DIR="/srv/wcs"
+WCS_USER="wcs"
+WCS_DIR="`getent passwd "$WCS_USER" | cut -d: -f6`"
+OUTPUT_USER="wcs-export"
+OUTPUT_DIR="`getent passwd "$OUTPUT_USER" | cut -d: -f6`"
SITE="formulaires.auf.org"
FORMS="\
horizons-francophones-2010-bureau-ocean-indien \
demande-de-bourse-de-doctorat-2011-2012-afrique-centrale-et-des-grands-lacs \
"
-# XXX: hack en attendant de corriger le umask de wcs…
-sudo chmod -R g+rX /var/lib/wcs/
+if [ "`id -un`" != "root" ] ; then
+ echo "Ce script nécessite d'être lancé depuis l'utilisateur root."
+ exit 1
+fi
+
+# XXX: hack en attendant de savoir corriger le umask de wcs…
+expr match "$WCS_DIR" '^/var/lib/' > /dev/null && chmod -R g+rX "$WCS_DIR"
echo "Traitement des formulaires de '$SITE'…"
for f in $FORMS
do
echo " $f"
- python wcs-extract.py $OUTPUT_DIR $SITE $f
+ sudo -u "$OUTPUT_USER" -H wcs-extract "$OUTPUT_DIR" "$SITE" "$f"
done
echo "Terminé."