[Scodoc-devel] [SVN] Scolar : [1298] - Fix gestion majsucules/ minuscules des caracteres accentues

eviennet at lipn.univ-paris13.fr eviennet at lipn.univ-paris13.fr
Mer 27 Nov 14:38:22 CET 2013


Une pièce jointe HTML a été nettoyée...
URL: <https://www-rt.iutv.univ-paris13.fr/pipermail/scodoc-devel/attachments/20131127/cabe248c/attachment-0001.html>
-------------- section suivante --------------
Modified: branches/ScoDoc7/ImportScolars.py
===================================================================
--- branches/ScoDoc7/ImportScolars.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/ImportScolars.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -91,10 +91,10 @@
     titles = []
     titlesStyles = []
     for l in format:
-        name = l[0].lower()
+        name = strlower(l[0])
         if (not with_codesemestre) and name == 'codesemestre':
             continue # pas de colonne codesemestre
-        if only_tables is not None and l[2].lower() not in only_tables:
+        if only_tables is not None and strlower(l[2]) not in only_tables:
             continue # table non demandée
         if name in exclude_cols:
             continue # colonne exclue
@@ -117,7 +117,7 @@
             etud = context.getEtudInfo(etudid=i['etudid'], filled=True)[0]
             l = []
             for field in titles:
-                key = field.lower().split()[0]
+                key = strlower(field).split()[0]
                 l.append(etud.get(key, ''))
             lines.append(l)
     else:
@@ -176,14 +176,14 @@
     titles = {}
     fmt = sco_import_format()
     for l in fmt:
-        tit = l[0].lower().split()[0] # titles in lowercase, and take 1st word
+        tit = strlower(l[0]).split()[0] # titles in lowercase, and take 1st word
         if ((not formsemestre_id) or (tit != 'codesemestre')) and tit not in exclude_cols:
             titles[tit] = l[1:] # title : (Type, Table, AllowNulls, Description)
 
     #log("titles=%s" % titles)
     # remove quotes, downcase and keep only 1st word
     try:
-        fs = [ stripquotes(s).lower().split()[0] for s in data[0] ]
+        fs = [ strlower(stripquotes(s)).split()[0] for s in data[0] ]
     except:
         raise ScoValueError("Titres de colonnes invalides (ou vides ?)")
     #log("excel: fs='%s'\ndata=%s" % (str(fs), str(data)))
@@ -252,18 +252,18 @@
                                 "valeur nombre entier invalide (%s) sur ligne %d, colonne %s"
                                 % (val, linenum, titleslist[i]))
                 # xxx Ad-hoc checks (should be in format description)
-                if  titleslist[i].lower() == 'sexe':
+                if  strlower(titleslist[i]) == 'sexe':
                     try:
                         val = scolars.normalize_sexe(val)
                     except:
                         raise ScoValueError("valeur invalide pour 'SEXE' (doit etre 'M' ou 'MME' ou 'H' ou 'F', pas '%s') ligne %d, colonne %s" % (val, linenum, titleslist[i]))
                 # Excel date conversion:
-                if titleslist[i].lower() == 'date_naissance':
+                if strlower(titleslist[i]) == 'date_naissance':
                     if val:
                         if re.match('^[0-9]*\.?[0-9]*$', str(val)):
                             val = sco_excel.xldate_as_datetime(float(val))                        
                 # INE
-                if titleslist[i].lower() == 'code_ine' and always_require_ine and  not val:
+                if strlower(titleslist[i]) == 'code_ine' and always_require_ine and  not val:
                     raise ScoValueError('Code INE manquant sur ligne %d, colonne %s' % (linenum, titleslist[i]))
 
                 # --
@@ -410,7 +410,7 @@
             if tit in modifiable_fields:
                 val = line[i]
                 # Excel date conversion:
-                if val and tit.lower() == 'date_naissance':
+                if val and strlower(tit) == 'date_naissance':
                     if re.match('^[0-9]*\.?[0-9]*$', str(val)):
                         val = sco_excel.xldate_as_datetime(float(val)) 
                 args[tit] = val

Modified: branches/ScoDoc7/ZEntreprises.py
===================================================================
--- branches/ScoDoc7/ZEntreprises.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/ZEntreprises.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -61,7 +61,8 @@
     "formatte nom (filtre en entree db) d'une entreprise"
     if not nom:
         return nom
-    return nom[0].upper() + nom[1:]
+    nom = nom.decode(SCO_ENCODING)
+    return (nom[0].upper() + nom[1:]).encode(SCO_ENCODING)
 
 
 class EntreprisesEditor(EditableTable):
@@ -423,7 +424,7 @@
         elif len(r) > 1:
             e = [ '<ul class="entreprise_etud_list">' ]
             for x in r:
-                e.append( '<li>%s %s (code %s)</li>' % (x[1].upper(),x[2] or '',x[0].strip()) )
+                e.append( '<li>%s %s (code %s)</li>' % (strupper(x[1]), x[2] or '', x[0].strip()) )
             e.append('</ul>')
             return 0, 'Les étudiants suivants correspondent: préciser le nom complet ou le code\n' + '\n'.join(e) 
         else: # une seule reponse !
@@ -562,11 +563,11 @@
                 for c in Cl:
                     H.append("""<li><a href="entreprise_correspondant_edit?entreprise_corresp_id=%s">""" % c['entreprise_corresp_id'])
                     if c['nom']:
-                        nom = c['nom'].lower().capitalize()
+                        nom = c['nom'].decode(SCO_ENCODING).lower().capitalize().encode(SCO_ENCODING)
                     else:
                         nom = ''
                     if c['prenom']:
-                        prenom = c['prenom'].lower().capitalize()
+                        prenom = c['prenom'].decode(SCO_ENCODING).lower().capitalize().encode(SCO_ENCODING)
                     else:
                         prenom = ''
                     H.append("""%s %s</a> (%s)</li>""" % (nom,prenom,c['fonction']))

Modified: branches/ScoDoc7/ZScoUsers.py
===================================================================
--- branches/ScoDoc7/ZScoUsers.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/ZScoUsers.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -287,7 +287,7 @@
             else:
                 p = ''
             if info['nom']:
-                n = info['nom'].lower().capitalize()
+                n = strcapitalize(strlower(info['nom']))
             else:
                 n = user_name
             prenom_abbrv = abbrev_prenom(p)
@@ -299,9 +299,9 @@
             info['nomcomplet'] = scolars.format_prenom(p) + ' ' + scolars.format_nom(n)
             # nomplogin est le nom en majuscules suivi du prénom et du login
             # e.g. Dupont Pierre (dupont)
-            info['nomplogin'] = '%s %s (%s)' % (n.upper(), p, info['user_name'])
+            info['nomplogin'] = '%s %s (%s)' % (strupper(n), p, info['user_name'])
             # nomnoacc est le nom en minuscules sans accents
-            info['nomnoacc'] = suppress_accents(info['nom'].lower())
+            info['nomnoacc'] = suppress_accents(strlower(info['nom']))
             return info
 
     def _can_handle_passwd(self, authuser, user_name, allow_admindepts=False):
@@ -956,7 +956,7 @@
         Used for forms auto-completion."""
         userlist = self.get_userlist(dept=dept)
         start = suppression_diacritics(unicode(start, 'utf-8'))
-        start = str(start).lower()
+        start = strlower(str(start))
         
         userlist = [ user for user in userlist if user['nomnoacc'].startswith(start) ]
         if REQUEST:

Modified: branches/ScoDoc7/ZScolar.py
===================================================================
--- branches/ScoDoc7/ZScolar.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/ZScolar.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -1133,7 +1133,7 @@
         et ramene liste de mappings utilisables en DTML.        
         """
         cnx = self.GetDBConnexion()
-        expnom = expnom.upper() # les noms dans la BD sont en uppercase
+        expnom = strupper(expnom) # les noms dans la BD sont en uppercase
         etuds = scolars.etudident_list(cnx, args={'nom':expnom}, test='~' )        
         self.fillEtudsInfo(etuds)
         return etuds
@@ -1702,7 +1702,7 @@
         H = [ '<h2><font color="#FF0000">%(operation_name)s de</font> %(nomprenom)s (semestre %(semtitre)s)</h2><p>' % etud ]
         H.append("""<form action="%s" method="GET">
         <b>Date de la %s (J/M/AAAA): </b>
-        """ % (operation_method, operation_name.lower()))
+        """ % (operation_method, strlower(operation_name)))
         H.append("""
 <input type="text" name="event_date" width=20 value="%(nowdmy)s">
 <input type="hidden" name="etudid" value="%(etudid)s">

Modified: branches/ScoDoc7/config/restore_scodoc_data.sh
===================================================================
--- branches/ScoDoc7/config/restore_scodoc_data.sh	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/config/restore_scodoc_data.sh	2013-11-27 13:38:22 UTC (rev 1298)
@@ -109,7 +109,6 @@
 # Remove tmp directory
 if [ $IS_TMP = "1" ]
 then
-  cd /
   rm -rf $tmp
 fi
 

Modified: branches/ScoDoc7/csv2rules.py
===================================================================
--- branches/ScoDoc7/csv2rules.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/csv2rules.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -56,9 +56,9 @@
 def _fmt(s):
     if not s:
         return None
-    if s.lower() in ('ok', 'oui', 'o', 'y', 'yes'):
+    if strlower(s) in ('ok', 'oui', 'o', 'y', 'yes'):
         return True
-    if s.lower() in ('no', 'non'):
+    if strlower(s) in ('no', 'non'):
         return False
     if s == '*':
         return ALL

Modified: branches/ScoDoc7/notes_table.py
===================================================================
--- branches/ScoDoc7/notes_table.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/notes_table.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -277,12 +277,13 @@
     def get_sexnom(self,etudid):
         "M. DUPONT"
         etud =  self.identdict[etudid]
-        return etud['sexe'] + ' ' + (etud['nom_usuel'] or etud['nom']).upper()
+        return etud['sexe'] + ' ' + strupper(etud['nom_usuel'] or etud['nom'])
     
     def get_nom_short(self, etudid):
         "formatte nom d'un etud (pour table recap)"
         etud =  self.identdict[etudid]
-        return (etud['nom_usuel'] or etud['nom']).upper() + ' ' + etud['prenom'][:2].capitalize() + '.'
+        # Attention aux caracteres multibytes pour decouper les 2 premiers:
+        return strupper(etud['nom_usuel'] or etud['nom']) + ' ' + etud['prenom'].decode(SCO_ENCODING).capitalize()[:2].encode(SCO_ENCODING) + '.'
     
     def get_nom_long(self, etudid):
         "formatte nom d'un etud:  M. Pierre DUPONT"

Modified: branches/ScoDoc7/sco_archives.py
===================================================================
--- branches/ScoDoc7/sco_archives.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/sco_archives.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -205,7 +205,7 @@
         # XXX très incomplet: devrait inférer et assigner un type MIME
         archive_id = self.get_id_from_name(context, oid, archive_name)
         data = self.get(archive_id, filename)
-        ext = os.path.splitext(filename)[1].lower()
+        ext = os.path.splitext(strlower(filename))[1]
         if ext == '.html' or ext == '.htm':
             return data
         elif ext == '.xml':

Modified: branches/ScoDoc7/sco_edit_module.py
===================================================================
--- branches/ScoDoc7/sco_edit_module.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/sco_edit_module.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -89,7 +89,7 @@
         ('matiere_id', { 'default' : M['matiere_id'], 'input_type' : 'hidden' }),
         
         ('semestre_id', { 'input_type' : 'menu',  'type' : 'int',
-                          'title' : parcours.SESSION_NAME.capitalize(), 
+                          'title' : strcapitalize(parcours.SESSION_NAME), 
                           'explanation' : '%s de début du module dans la formation standard' % parcours.SESSION_NAME,
                           'labels' : [ str(x) for x in semestres_indices ], 'allowed_values' : semestres_indices }),
         ('numero',    { 'size' : 2, 'explanation' : 'numéro (1,2,3,4...) pour ordre d\'affichage',

Modified: branches/ScoDoc7/sco_excel.py
===================================================================
--- branches/ScoDoc7/sco_excel.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/sco_excel.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -34,7 +34,7 @@
 from notes_log import log
 from scolog import logdb
 from sco_exceptions import *
-from sco_utils import SCO_ENCODING, XLS_MIMETYPE, unescape_html, suppress_accents
+from sco_utils import *
 import notesdb
 
 import time, datetime
@@ -230,9 +230,9 @@
             # safety net: allow only str, int and float
             if type(it) == LongType:
                 it = int(it) # assume all ScoDoc longs fits in int !
-            elif type(it) not in (StringType, IntType, FloatType):
-                it = str(it)
-            ws0.write(li, col, it.decode(SCO_ENCODING), style)
+            elif type(it) not in (IntType, FloatType):
+                it = str(it).decode(SCO_ENCODING)
+            ws0.write(li, col, it, style)
             col += 1
         li += 1
     #
@@ -540,7 +540,7 @@
         n += 1
         li += 1
         ws0.write(li, 0, n, style1b)
-        nomprenom = t['sexe'] + ' ' + t['nom'] + ' ' + t['prenom'].lower().capitalize()
+        nomprenom = t['sexe'] + ' ' + t['nom'] + ' ' + strcapitalize(strlower(t['prenom']))
         style_nom = style2t3
         if with_paiement:
             paie = t.get('paiementinscription', None)

Modified: branches/ScoDoc7/sco_formsemestre_status.py
===================================================================
--- branches/ScoDoc7/sco_formsemestre_status.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/sco_formsemestre_status.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -450,7 +450,7 @@
     titles['jour'] = 'Evaluation'
     titles['description'] = ''
     titles['coefficient'] = 'Coef. éval.'
-    title = '%s %s' % (parcours.SESSION_NAME.capitalize(), sem['titremois'])
+    title = '%s %s' % (strcapitalize(parcours.SESSION_NAME), sem['titremois'])
     
     return GenTable(
         columns_ids=columns_ids, rows=R, titles=titles,

Modified: branches/ScoDoc7/sco_import_users.py
===================================================================
--- branches/ScoDoc7/sco_import_users.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/sco_import_users.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -69,7 +69,7 @@
     if not data: # probably a bug
         raise FormatError('import_excel_file: empty file !')
     # 1-  --- check title line
-    fs = [ stripquotes(s).lower() for s in data[0] ]
+    fs = [ strlower(stripquotes(s)) for s in data[0] ]
     log("excel: fs='%s'\ndata=%s" % (str(fs), str(data)))
     # check cols
     cols = {}.fromkeys(TITLES)

Modified: branches/ScoDoc7/sco_liste_notes.py
===================================================================
--- branches/ScoDoc7/sco_liste_notes.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/sco_liste_notes.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -213,9 +213,9 @@
         rows.append( { 'code' : etud['code_nip'] or etudid,
                        '_code_td_attrs' : 'style="padding-left: 1em; padding-right: 2em;"',
                        'etudid' : etudid,
-                       'nom' : etud['nom'].upper(),
+                       'nom' : strupper(etud['nom']),
                        '_nomprenom_target' : 'formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s' % (M['formsemestre_id'], etudid),
-                       'prenom' : etud['prenom'].lower().capitalize(),
+                       'prenom' : strcapitalize(strlower(etud['prenom'])),
                        'nomprenom' : etud['nomprenom'],
                        'group' : grc,
                        

Modified: branches/ScoDoc7/sco_portal_apogee.py
===================================================================
--- branches/ScoDoc7/sco_portal_apogee.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/sco_portal_apogee.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -286,7 +286,7 @@
         else:
             infos = get_etud_apogee(context, etud['code_nip'])
             if infos and infos.has_key('paiementinscription'):
-                etud['paiementinscription'] = (infos['paiementinscription'].lower() == 'true')
+                etud['paiementinscription'] = (strlower(infos['paiementinscription']) == 'true')
                 if etud['paiementinscription']:
                     etud['paiementinscription_str'] = 'ok'
                 else:

Modified: branches/ScoDoc7/sco_report.py
===================================================================
--- branches/ScoDoc7/sco_report.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/sco_report.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -201,7 +201,7 @@
     Tableau comptage avec choix des categories
     """
     sem = context.get_formsemestre(formsemestre_id)
-    category_name = category.capitalize()
+    category_name = strcapitalize(category)
     title = "Comptages " + category_name
     etuds = formsemestre_etuds_stats(context, sem, only_primo=only_primo)
     tab = formsemestre_report(context, formsemestre_id, etuds, REQUEST=REQUEST,

Modified: branches/ScoDoc7/sco_saisie_notes.py
===================================================================
--- branches/ScoDoc7/sco_saisie_notes.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/sco_saisie_notes.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -202,7 +202,7 @@
         evaltitre = '%s du %s' % (E['description'],E['jour'])
     else:
         evaltitre = 'évaluation du %s' % E['jour']
-    description = '%s: %s en %s (%s) resp. %s' % (sem['titreannee'], evaltitre, Mod['abbrev'], Mod['code'], M['responsable_id'].capitalize())
+    description = '%s: %s en %s (%s) resp. %s' % (sem['titreannee'], evaltitre, Mod['abbrev'], Mod['code'], strcapitalize(M['responsable_id']))
 
     head = """
     <h4>Codes spéciaux:</h4>
@@ -254,8 +254,8 @@
         # infos inscription
         inscr = context.do_formsemestre_inscription_list(
             {'etudid':etudid, 'formsemestre_id' : M['formsemestre_id']})[0]
-        nom = ident['nom'].upper()
-        label = '%s %s' % (nom, ident['prenom'].lower().capitalize())
+        nom = strupper(ident['nom'])
+        label = '%s %s' % (nom, strcapitalize(strlower(ident['prenom'])))
         if NotesDB.has_key(etudid):
             val = context._displayNote(NotesDB[etudid]['value'])
             comment = NotesDB[etudid]['comment']
@@ -294,7 +294,7 @@
                                          } ) )
         groups = sco_groups.get_etud_groups(context, ident['etudid'], sem)
         grc = sco_groups.listgroups_abbrev(groups)
-        CSV.append( [ '%s' % etudid, ident['nom'].upper(), ident['prenom'].lower().capitalize(),
+        CSV.append( [ '%s' % etudid, strupper(ident['nom']), strcapitalize(strlower(ident['prenom'])),
                       inscr['etat'],
                       grc, val, explanation ] )
     if note_method == 'csv':

Modified: branches/ScoDoc7/sco_trombino.py
===================================================================
--- branches/ScoDoc7/sco_trombino.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/sco_trombino.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -466,7 +466,7 @@
         fn = fn.replace('\\','/') # not sure if this is necessary ?
         fn = fn.strip()
         if lowercase:
-            fn = fn.lower()
+            fn = strlower(fn)
         fn = fn.split('/')[-1] # use only last component, not directories
         return fn
 

Modified: branches/ScoDoc7/sco_utils.py
===================================================================
--- branches/ScoDoc7/sco_utils.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/sco_utils.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -447,16 +447,29 @@
     else:
         return 'non disponible'
 
+
+# Simple string manipulmations
+# on utf-8 encoded python strings
+# (yes, we should only use unicode strings, but... we use only strings)
+def strupper(s):
+    return s.decode(SCO_ENCODING).upper().encode(SCO_ENCODING)
+
+def strlower(s):
+    return s.decode(SCO_ENCODING).lower().encode(SCO_ENCODING)
+
+def strcapitalize(s):
+    return s.decode(SCO_ENCODING).capitalize().encode(SCO_ENCODING)
+
 def abbrev_prenom(prenom):
     "Donne l'abreviation d'un prenom"
     # un peu lent, mais espère traiter tous les cas
     # Jean -> J.
     # Charles -> Ch.
     # Jean-Christophe -> J.-C.
-    # Marie Odile -> M. O.
-    prenom = prenom.replace('.', ' ').strip()
+    # Marie Odile -> M. O.    
+    prenom = prenom.decode(SCO_ENCODING).replace('.', ' ').strip()
     if not prenom:
-        return prenom
+        return ''
     d = prenom[:3].upper()
     if d == 'CHA':
         abrv = 'Ch.' # 'Charles' donne 'Ch.'
@@ -478,7 +491,7 @@
             if i < n:
                 abrv += sep + prenom[i].upper() + '.'
         i += 1
-    return abrv
+    return abrv.encode(SCO_ENCODING)
 
 #
 def timedate_human_repr():

Modified: branches/ScoDoc7/scolars.py
===================================================================
--- branches/ScoDoc7/scolars.py	2013-11-25 13:10:43 UTC (rev 1297)
+++ branches/ScoDoc7/scolars.py	2013-11-27 13:38:22 UTC (rev 1298)
@@ -87,7 +87,7 @@
 
 def force_uppercase(s):
     if s:
-        s = s.upper()
+        s = strupper(s)
     return s
 
 def format_nomprenom(etud):
@@ -96,28 +96,22 @@
 
 def format_prenom(s):
     "formatte prenom etudiant pour affichage"
-    # XXX locale.setlocale(locale.LC_ALL, ('en_US', 'ISO8859-15') )
     if not s:
         return ''
     frags = s.split()
     r = []
     for frag in frags:
         fs = frag.split('-')
-        r.append( '-'.join( [ x.lower().capitalize() for x in fs ] ) )
+        r.append( '-'.join( [ x.decode(SCO_ENCODING).lower().capitalize().encode(SCO_ENCODING) for x in fs ] ) )
     return ' '.join(r)
 
-
-#    s = ' '.join( [ x.lower().capitalize() for x in frags ] )
-#    frags = s.split('-')
-#    return '-'.join( [ x.lower().capitalize() for x in frags ] )
-
 def format_nom(s):
     if not s:
         return ''
-    return s.upper()
+    return strupper(s)
 
 def format_sexe(sexe):
-    sexe = sexe.lower()
+    sexe = strlower(sexe)
     if sexe == 'mr' or sexe == 'm.':
         return 'M.'
     else:
@@ -125,7 +119,7 @@
 
 def normalize_sexe(sexe):
     "returns 'MR' ou 'MME'"
-    sexe = sexe.upper().strip()
+    sexe = strupper(sexe).strip()
     if sexe in ('M.', 'M', 'MR', 'H'):
         return 'MR'
     elif sexe in ('MLLE', 'MLLE.', 'MELLE', 'MME', 'F'):
@@ -134,7 +128,7 @@
     
 def format_lycee(nomlycee):
     nomlycee = nomlycee.strip()
-    s = nomlycee.lower()
+    s = strlower(nomlycee)
     if s[:5] == 'lycee' or s[:5] == 'lycée':
         return nomlycee[5:]
     else:
@@ -162,7 +156,7 @@
 
 def format_pays(s):
     "laisse le pays seulement si != FRANCE"
-    if s.upper() != 'FRANCE':
+    if strupper(s) != 'FRANCE':
         return s
     else:
         return ''
@@ -226,8 +220,9 @@
     """
     if not nom or (not prenom and not CONFIG.ALLOW_NULL_PRENOM):
         return False, 0
+    nom = nom.decode(SCO_ENCODING).lower().strip().encode(SCO_ENCODING)
     if prenom:
-        prenom = prenom.lower().strip()
+        prenom = prenom.decode(SCO_ENCODING).lower().strip().encode(SCO_ENCODING)        
     # Don't allow some special cars (eg used in sql regexps)
     if FORBIDDEN_CHARS_EXP.search(nom) or FORBIDDEN_CHARS_EXP.search(prenom):
         return False, 0
@@ -236,7 +231,7 @@
     req = 'select etudid from identite where lower(nom) ~ %(nom)s and lower(prenom) ~ %(prenom)s'
     if etudid:
         req += '  and etudid <> %(etudid)s'
-    cursor.execute(req, { 'nom' : nom.lower().strip(), 'prenom' : prenom, 'etudid' : etudid } )
+    cursor.execute(req, { 'nom' : nom, 'prenom' : prenom, 'etudid' : etudid } )
     res = cursor.dictfetchall()
     return True, len(res)
 
@@ -607,9 +602,9 @@
 o.write( f.readline() )
 for l in f:
     fs = l.split(';')
-    nom = ' '.join( [ x.capitalize() for x in fs[1].split() ] )
-    adr = ' '.join( [ x.capitalize() for x in fs[2].split() ] )
-    ville=' '.join( [ x.capitalize() for x in fs[4].split() ] )
+    nom = ' '.join( [ strcapitalize(x) for x in fs[1].split() ] )
+    adr = ' '.join( [ strcapitalize(x) for x in fs[2].split() ] )
+    ville=' '.join( [ strcapitalize(x) for x in fs[4].split() ] )
     o.write( '%s;%s;%s;%s;%s\n' % (fs[0], nom, adr, fs[3], ville))
 
 o.close()


Plus d'informations sur la liste de diffusion Scodoc-devel