def testMemberData(self, memberdata, criteria, exact_match=False): """Patch the method that test if a memberdata matches the search criteria for making it normalization of unicode strings aware. """ for (key, value) in criteria.items(): testvalue = memberdata.get(key, None) if testvalue is None: return False if isStringType(testvalue): testvalue = safe_unicode(testvalue.lower()) if isStringType(value): value = safe_unicode(value.lower()) if exact_match: if value != testvalue: return False else: try: if value not in testvalue and \ unicodedata.normalize('NFKD', value).encode('ASCII', 'ignore') not in unicodedata.normalize('NFKD', testvalue).encode('ASCII', 'ignore'): return False except TypeError: # Fall back to exact match if we can check for # sub-component if value != testvalue: return False return True
def testMemberData(self, memberdata, criteria, exact_match=False): """Test if a memberdata matches the search criteria. """ for (key, value) in criteria.items(): testvalue = memberdata.get(key, None) if testvalue is None: return False if isStringType(testvalue): testvalue = safe_unicode(testvalue.lower()) if isStringType(value): value = safe_unicode(value.lower()) if exact_match: if value != testvalue: return False else: try: if value not in testvalue: return False except TypeError: # Fall back to exact match if we can check for # sub-component if value != testvalue: return False return True
def _unicodify_structure(value, charset=_marker): """ Convert value to unicode. """ if charset is _marker: ptool = getUtility(IPropertiesTool) charset = ptool.getProperty('default_charset', None) if isinstance(value, str): return charset and safe_unicode(value, charset) or safe_unicode(value) if isinstance(value, list): return [_unicodify_structure(val, charset) for val in value] if isinstance(value, tuple): return tuple([_unicodify_structure(entry, charset) for entry in value]) if isinstance(value, dict): for key, val in value.items(): value[key] = _unicodify_structure(val, charset) return value return value
def SearchableText(obj, text=False): subjList = [] creatorList = [] for sub in obj.subject: subjList.append(sub) subjects = ','.join(subjList) for creator in obj.creators: creatorList.append(creator) creators = ','.join(creatorList) return u' '.join(( safe_unicode(obj.id), safe_unicode(obj.title) or u'', safe_unicode(obj.description) or u'', safe_unicode(subjects) or u'', safe_unicode(creators) or u'', ))