wcs : bogue sur struct_time + gestion plus générique des accents
authorProgfou <jean-christophe.andre@auf.org>
Mon, 16 Apr 2012 20:05:25 +0000 (03:05 +0700)
committerProgfou <jean-christophe.andre@auf.org>
Mon, 16 Apr 2012 20:05:25 +0000 (03:05 +0700)
wcs/wcs-extract

index 51dee77..2aef970 100755 (executable)
@@ -14,10 +14,11 @@ import os
 import os.path
 import shutil
 import logging
-from time import gmtime, strftime
+from time import gmtime, strftime, struct_time
 import simplejson as json
 import magic
 import mimetypes
+import unicodedata
 
 from wcs import publisher
 from wcs.formdef import FormDef
@@ -29,26 +30,18 @@ from wcs.fields import TitleField, CommentField, TextField, \
 def reduce_to_alnum(s, replacement_char='-'):
     """réduction d'une chaîne de caractères à de l'alpha-numérique"""
 
-    avec_accent = u'çÇáàâÁÀÂéèêëÉÈÊËíìîïÍÌÎÏóòôöÓÒÔÖúùûüÚÙÛÜýỳyÿÝỲYŸ'
-    sans_accent = u'cCaaaAAAeeeeEEEEiiiiIIIIooooOOOOuuuuUUUUyyyyYYYY'
     if type(s) is not unicode:
         s = unicode(s, 'utf-8')
-        u  = False
+    s = unicodedata.normalize('NFKD', s).encode('ASCII', 'ignore')
     r = ''
     for c in s:
-        index = avec_accent.find(c)
-        if index >= 0:
-            r += sans_accent[index]
-        elif ('a' <= c.lower() <= 'z') or ('0' <= c <= '9'):
+        if ('a' <= c.lower() <= 'z') or ('0' <= c <= '9'):
             r += c
         elif len(r) > 0 and r[-1] != replacement_char:
             r += replacement_char
         else: # r == '' or r[-1] == replacement_char
             pass
-    r = r.strip(replacement_char)
-    if not u:
-        r = r.encode('utf-8')
-    return r
+    return r.strip(replacement_char)
 
 
 def extract_fields(formdef, output_directory):
@@ -140,7 +133,7 @@ def extract_data(formdef, output_directory):
             elif isinstance(field, BoolField):
                 result[field_name] = (data == 'True')
             elif isinstance(field, DateField):
-                if isinstance(data, time.struct_time):
+                if isinstance(data, struct_time):
                     result[field_name] = '%04d-%02d-%02d' % (data.tm_year,
                                                     data.tm_mon, data.tm_mday)
                 else: