w.c.s. : nouvelle mouture des outils suite à discussions avec Davin
[progfou.git] / wcs / wcs-extract.py
index 85cb54c..cd0ade5 100755 (executable)
@@ -3,6 +3,8 @@
 
 import os
 import os.path
+import shutil
+import logging
 from time import gmtime, strftime
 import simplejson as json
 
@@ -12,9 +14,6 @@ from wcs.fields import TitleField, CommentField, TextField, \
                        StringField, ItemField, EmailField, \
                        DateField, FileField, BoolField
 
-COPY_COMMAND = '/bin/cp'
-COPY_ARGS = '-af'
-
 
 def reduce_to_alnum(s, replacement_char='-'):
     """réduction d'une chaîne de caractères à de l'alpha-numérique"""
@@ -103,8 +102,8 @@ def extract_data(formdef, output_directory):
                 result[field_name] = "%s.%s" % (field_name, extension)
                 qfiles[field_name] = data.qfilename
             else:
-                print "WARNING: unknown field type '%s' for '%s'" % \
-                                        (field.__class__.__name__, field.label)
+                logging.error("Type de champ inconnu '%s' pour '%s'.",
+                                    field.__class__.__name__, field.label)
                 raise RuntimeError
 
         num_dossier = result['num_dossier']
@@ -114,23 +113,23 @@ def extract_data(formdef, output_directory):
 
         filename = "%04d-%s-%s-%s" % (num_dossier, nom, prenom, adel)
 
-        print "Dossier '%s'..." % filename,
-
         # copie des fichiers joints
         for f in qfiles:
             result[f] = filename + '_' + result[f]
             src = os.path.join(pub.app_dir, 'uploads', qfiles[f])
-            dst = os.path.join(output_directory, result[f])
+            dst = os.path.join(output_directory, 'data', result[f])
             if not os.path.exists(dst) or os.path.getmtime(src) > os.path.getmtime(dst):
-                os.spawnl(os.P_WAIT, COPY_COMMAND, COPY_ARGS, src, dst)
+                shutil.copy2(src, dst)
                 os.chmod(dst, 0644)
 
         # génération du fichier JSON
-        f = open(os.path.join(output_directory, filename + '.json'), 'wb')
+        jsonname = os.path.join(output_directory, 'data', filename + '.json')
+        f = open(jsonname, 'wb')
         f.write(json.dumps(result, ensure_ascii=False))
         f.close()
 
-        print "%s." % result['wcs_workflow_status']
+        logging.info("Dossier '%s' : %s.",
+                                    filename, result['wcs_workflow_status'])
 
 
 if __name__ == '__main__':
@@ -149,6 +148,13 @@ if __name__ == '__main__':
     if not os.path.isdir(OUTPUT_DIRECTORY):
         os.makedirs(OUTPUT_DIRECTORY, 0755)
 
+    logging.basicConfig(level=logging.DEBUG,
+        format='%(asctime)s %(levelname)s %(message)s',
+        filename=os.path.join(OUTPUT_DIRECTORY, 'last-run.log'),
+        filemode='w')
+
+    logging.info('Début.')
+
     pub = publisher.WcsPublisher.create_publisher()
     pub.app_dir = os.path.join(pub.app_dir, VHOST)
 
@@ -158,7 +164,5 @@ if __name__ == '__main__':
 
     extract_data(formdef, OUTPUT_DIRECTORY)
 
-    f = open(os.path.join(OUTPUT_DIRECTORY, 'last-run.txt'), 'w')
-    f.write(strftime('%Y-%m-%d %H:%M:%S GMT', gmtime()))
-    f.close()
+    logging.info('Fin.')