Changeset 47426

Show
Ignore:
Timestamp:
07/25/06 17:38:36 (2 years ago)
Author:
fguillaume
Message:

ELHGED-115: need to deal with unicode values in SQL.
We encode them into utf-8.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • CPS4/products/CPSDirectory/trunk/SQLDirectory.py

    r47378 r47426  
    130130    def getSQLValue(self, value, quoter=None): 
    131131        """Get a quoted SQL value.""" 
    132         # XXX deal with unicode and latin1 
    133         if isinstance(value, str): 
     132        if isinstance(value, basestring): 
    134133            if quoter is None: 
    135134                quoter = self._getSQLQuoter() 
     135            if isinstance(value, str): 
     136                value = unicode(value, 'latin-1') 
     137            value = value.encode('utf-8') 
    136138            return quoter(value) 
    137139        elif isinstance(value, (int, long, float)): 
     
    145147            logger.debug("getSQLValue: Unknown conversion for %r", value) 
    146148            raise ValueError(value) 
     149 
     150    security.declarePrivate('valueFromSQL') 
     151    def valueFromSQL(self, value): 
     152        """Get a python value from a SQL one. 
     153        """ 
     154        if isinstance(value, str): 
     155            v = unicode(value, 'utf-8') 
     156            try: 
     157                v.encode('ascii') 
     158            except UnicodeEncodeError: 
     159                # If we don't have ascii, keep the unicode value 
     160                value = v 
     161        return value 
    147162 
    148163    security.declarePublic('debugTest') # XXX 
     
    269284                entry = {} 
    270285                for field_id in field_ids: 
    271                     entry[field_id] = result.pop(0) 
    272                     # XXX conversions ! 
     286                    value = result.pop(0) 
     287                    entry[field_id] = self.valueFromSQL(value) 
    273288                res.append((id, entry)) 
    274289 
     
    396411        entry = {} 
    397412        for field_id in field_ids: 
    398             entry[field_id] = result.pop(0) 
    399             # XXX conversions ! 
     413            value = result.pop(0) 
     414            entry[field_id] = self.valueFromSQL(value) 
    400415        return entry 
    401416