def _SearchableText(obj): """ Index XML """ if not util.is_xml_content(obj): return # Throw all XML content of all fields into the huge SearchableText bag result = [] for xml_field in [ field for field in get_all_fields(obj).values() if isinstance(field, XMLText) ]: adapter = XMLFieldDataManager(context=obj, field=xml_field) xml = adapter.get() if xml: root = lxml.etree.fromstring(xml) for node in root.iter(): if node.text: text = node.text.strip() if text: if not isinstance(text, unicode): text = unicode(text, 'utf8') result.append(text) if result: return u' '.join(result)
def test_xmldocument(self): fields = get_all_fields(self.doc) self.assertEqual('xml_content' in fields, True) self.assertEqual('xml_xpath' in fields, True) self.assertEqual('xml_binary' in fields, True) self.assertEqual('xml_image' in fields, True) xml_fields = get_all_xml_fields(self.doc) field_names = set(f.getName() for f in xml_fields) self.assertEqual('xml_binary' in field_names, True) self.assertEqual('xml_content' in field_names, True) self.assertEqual('xml_image' in field_names, True)
def datamanager_for_field(context, fieldname, value=_marker): fields = get_all_fields(context) field = fields.get(fieldname) if not field: raise ValueError('No such field "{}"'.format(fieldname)) if value is not _marker: field.validate(value) if isinstance(field, XMLText): dm_cls = XMLFieldDataManager elif isinstance(field, XMLBinary): dm_cls = XMLBinaryDataManager elif isinstance(field, XMLImage): dm_cls = XMLImageDataManager return dm_cls(context=context, field=field)
def SearchableText(obj): """ Index XML """ if not util.is_xml_content(obj): return # Throw all XML content of all fields into the huge SearchableText bag for xml_field in [field for field in get_all_fields(obj).values() if isinstance(field, XMLText)]: adapter = XMLFieldDataManager(context=obj, field=xml_field) xml = adapter.get() if xml: root = lxml.etree.fromstring(xml) result = [] for node in root.iter(): text = node.text.strip() if text: result.append(text) return unicode(' '.join(result), 'utf-8')
def datamanager_for_field(context, fieldname, value=_marker): fields = get_all_fields(context) field = fields.get(fieldname) if not field: raise ValueError('No such field "{}"'.format(fieldname)) if value is not _marker: field.validate(value) if isinstance(field, XMLText): dm_cls = XMLFieldDataManager elif isinstance(field, XMLBinary): dm_cls = XMLBinaryDataManager elif isinstance(field, XMLImage): dm_cls = XMLImageDataManager elif isinstance(field, XMLXPath): dm_cls = XMLXPathDataManager else: raise ValueError('No datamanager found ({})'.format(fieldname)) return dm_cls(context=context, field=field)
def test_xmldocument(self): fields = get_all_fields(self.doc) self.assertEqual('xml_content' in fields, True) self.assertEqual('xml_xpath' in fields, True) self.assertEqual('xml_binary' in fields, True) self.assertEqual('xml_image' in fields, True)