wcs-dynexport : intégration du basculement vers PostgreSQL
authorProgfou <jean-christophe.andre@auf.org>
Fri, 27 Mar 2015 23:29:18 +0000 (19:29 -0400)
committerProgfou <jean-christophe.andre@auf.org>
Fri, 27 Mar 2015 23:29:18 +0000 (19:29 -0400)
wcs/wcs-dynexport

index 7e2d5db..8792247 100755 (executable)
@@ -44,10 +44,15 @@ TIME_FORMAT = '%a, %d %b %Y %H:%M:%S GMT' # format date pour HTTP
 
 WCS_ROOT_DIR = '/var/lib/wcs'
 WCS_DOMAIN_SUFFIX = '.auf.org'
-WCS_FORM_PREFIX = 'form-'
 WCS_CACHE_DIR = '/var/tmp'
 
 #--------------------------------------------------------------------------
+# variables globales
+#--------------------------------------------------------------------------
+
+pub = None
+
+#--------------------------------------------------------------------------
 # fonctions de traitement
 #--------------------------------------------------------------------------
 
@@ -149,6 +154,14 @@ def clear_wcs_cache(domain, form):
         if f.startswith(cache_filename):
             os.unlink(os.path.join(WCS_CACHE_DIR, f))
 
+def set_wcs_publisher(domain):
+    global pub
+    if pub is None:
+        from wcs import publisher
+        pub = publisher.WcsPublisher.create_publisher()
+        pub.app_dir = os.path.join(pub.app_dir, domain)
+        pub.set_config()
+
 def get_wcs_domains():
     root = WCS_ROOT_DIR
     suffix = WCS_DOMAIN_SUFFIX
@@ -159,14 +172,9 @@ def get_wcs_domains():
     return [x for x in l if os.path.isdir(os.path.join(root, x)) and x.endswith(suffix)]
 
 def get_wcs_forms(domain):
-    root = os.path.join(WCS_ROOT_DIR, domain)
-    prefix = WCS_FORM_PREFIX
-    try:
-        l = os.listdir(root)
-    except OSError:
-        return None
-    return [x[len(prefix):] for x in l if os.path.isdir(os.path.join(root, x)) and x.startswith(prefix)]
-
+    set_wcs_publisher(domain)
+    from wcs.formdef import FormDef
+    return [f.url_name for i,f in FormDef.items()]
 
 def get_wcs_form_data(domain, form):
     """extraction des données du formulaire"""
@@ -185,14 +193,11 @@ def get_wcs_form_data(domain, form):
 
     logging.info('Début.')
 
-    from wcs import publisher
+    set_wcs_publisher(domain)
     from wcs.formdef import FormDef
     from wcs.fields import TitleField, CommentField, TextField, \
                            StringField, ItemField, ItemsField, EmailField, \
                            DateField, FileField, BoolField, TableField
-
-    pub = publisher.WcsPublisher.create_publisher()
-    pub.app_dir = os.path.join(pub.app_dir, domain)
     formdef = FormDef.get_by_urlname(form)
 
     # nommage des champs de façon unique