def __init__(self, lib): from lxml import etree, objectify self.objectify = objectify parser = etree.XMLParser(remove_blank_text=True) lookup = objectify.ObjectifyElementClassLookup() parser.setElementClassLookup(lookup) super(BenchMark, self).__init__(etree, parser)
async def __aiter__( self) -> _AsyncGenerator[objectify.ObjectifiedElement, None]: if not Api.agent: raise RuntimeError("The API's user agent is not yet set.") url = self.url tag = self._category.name.upper().rstrip("S") dobj = zlib.decompressobj(16 + zlib.MAX_WBITS) async with Api.session.request("GET", url, headers={"User-Agent": Api.agent}) as response: self._last_response = response response.raise_for_status() with contextlib.suppress(etree.XMLSyntaxError), contextlib.closing( etree.XMLPullParser(["end"], base_url=url, remove_blank_text=True, tag=tag)) as parser: parser.set_element_class_lookup( objectify.ObjectifyElementClassLookup()) events = parser.read_events() async for data, _ in response.content.iter_chunks(): parser.feed(dobj.decompress(data)) for _, element in events: yield element element.clear(keep_tail=True)
def make_custom_class_lookup(): lookup = etree.ElementNamespaceClassLookup(objectify.ObjectifyElementClassLookup()) ns_lookup = lookup.get_namespace(None) # add any custom class here ns_lookup['WebApp'] = WebApp ns_lookup['WebAppAuthRecord'] = WebAppAuthRecord ns_lookup['ServiceResponse'] = ServiceResponse return lookup
def __init__(self, tree_class=None, empty_data_class=None, **tag_class): if tree_class is None: tree_class = OscElement if empty_data_class is None: empty_data_class = OscStringElement fallback = objectify.ObjectifyElementClassLookup( tree_class=tree_class, empty_data_class=empty_data_class) super(ElementClassLookup, self).__init__(fallback=fallback) self._tag_class = tag_class
async def __aiter__( self, *, clear: bool = True ) -> _AsyncGenerator[objectify.ObjectifiedElement, None]: if not Api.agent: raise RuntimeError("The API's user agent is not yet set.") if "a" in self and self["a"].lower() == "sendtg": raise RuntimeError( "This API wrapper does not support API telegrams.") if not self: # Preempt the request to conserve ratelimit raise BadRequest() url = str(self) headers = {"User-Agent": Api.agent} if self._password: headers["X-Password"] = self._password autologin = self.autologin if autologin: headers["X-Autologin"] = autologin if self.get("nation") in PINS: headers["X-Pin"] = PINS[self["nation"]] async with Api.session.request("GET", url, headers=headers) as response: self._last_response = response if "X-Autologin" in response.headers: self._password = None if "X-Pin" in response.headers: PINS[self["nation"]] = response.headers["X-Pin"] response.raise_for_status() encoding = (response.headers["Content-Type"].split("charset=") [1].split(",")[0]) with contextlib.suppress(etree.XMLSyntaxError), contextlib.closing( etree.XMLPullParser(["end"], base_url=url, remove_blank_text=True)) as parser: parser.set_element_class_lookup( objectify.ObjectifyElementClassLookup()) events = parser.read_events() async for data, _ in response.content.iter_chunks(): parser.feed(data.decode(encoding)) for _, element in events: if clear and (element.getparent() is None or element.getparent().getparent() is not None): continue yield element if clear: element.clear(keep_tail=True)
def load_atlas(self, filename): """Load atlas from a file """ if __debug__: debug('ATL_', "Loading atlas definition xml file " + filename) # Create objectify parser first parser = etree.XMLParser(remove_blank_text=True) lookup = objectify.ObjectifyElementClassLookup() parser.setElementClassLookup(lookup) try: self.__atlas = etree.parse(filename, parser).getroot() except IOError: raise XMLAtlasException("Failed to load XML file %s" % filename)
def build_parser() -> etree.XMLParser: parser = objectify.makeparser(remove_blank_text=True) lookup = etree.ElementNamespaceClassLookup(fallback=objectify.ObjectifyElementClassLookup()) parser.set_element_class_lookup(lookup) namespace = lookup.get_namespace(SYNC_AGENZIA_FAKE_NS) for element in (ApeElement, AllegatoElement, IncaricoElement, InfoElement, DatoDisponibileElement, InfoInseriteElement, DatiDisponibiliElement): namespace[element.tag_name] = element return parser
def __create_parsing_lookup(self): lookup = etree.ElementNamespaceClassLookup( objectify.ObjectifyElementClassLookup()) for mapping in self.get_mappings(): de_cls = mapping.data_element_class if issubclass(de_cls, XmlLinkedDataElement): continue xml_ns = mapping.configuration.get_option(XML_NAMESPACE_OPTION) xml_tag = bytes_(mapping.configuration.get_option(XML_TAG_OPTION)) ns_cls_map = lookup.get_namespace(xml_ns) if xml_tag in ns_cls_map: raise ValueError('Duplicate tag "%s" in namespace "%s" ' '(trying to register class %s)' % (xml_tag, xml_ns, de_cls)) ns_cls_map[xml_tag] = de_cls ns_cls_map['link'] = XmlLinkedDataElement return lookup
def parse(root, response): """ >>> parse('tests/fixtures/warranty_status.xml', 'warrantyDetailInfo').warrantyStatus 'Apple Limited Warranty' >>> parse('tests/fixtures/warranty_status.xml', 'warrantyDetailInfo').estimatedPurchaseDate datetime.date(2010, 8, 25) >>> parse('tests/fixtures/warranty_status.xml', 'warrantyDetailInfo').limitedWarranty True >>> parse('tests/fixtures/warranty_status.xml', 'warrantyDetailInfo').isPersonalized """ parser = objectify.makeparser(remove_blank_text=True) lookup = objectify.ObjectifyElementClassLookup(tree_class=GsxElement) parser.set_element_class_lookup(lookup) if isinstance(root, str) and os.path.exists(root): root = objectify.parse(root, parser) else: root = objectify.fromstring(root, parser) return root.find('*//%s' % response)
def __init__(self): from lxml import etree, objectify class SelectiveClassLookup(etree.CustomElementClassLookup): """ Lookup mechanism for XML elements to ensure that ItemIds (like ASINs) are always StringElements and evaluated as such. Thanks to Brian Browning for pointing this out. """ # pylint: disable-msg=W0613 def lookup(self, node_type, document, namespace, name): if name in ('ItemId', 'ASIN'): return objectify.StringElement parser = etree.XMLParser() lookup = SelectiveClassLookup() lookup.set_fallback(objectify.ObjectifyElementClassLookup()) parser.set_element_class_lookup(lookup) # provide a parse method to avoid importing lxml.objectify # every time this processor is called self.parse = lambda fp: objectify.parse(fp, parser)
import logging import time from lxml import objectify from lxml.etree import XMLParser from suds import WebFault, TypeNotFound from suds.client import Client as sudsClient from suds.plugin import MessagePlugin from suds.xsd.query import TypeQuery, ElementQuery parser = XMLParser(remove_blank_text=True, huge_tree=True) parser.set_element_class_lookup(objectify.ObjectifyElementClassLookup()) objectify.set_default_parser(parser) logger = logging.getLogger('suds.client.lxml') logging.getLogger('suds.client').setLevel( logging.CRITICAL) # Don't show suds messages! class SoapObject: def __init__(self, name): self.__name__ = name def __len__(self): return len(self.__dict__.items()) - 1 # ignore the __name__ property def __repr__(self): return self.__str__() def __str__(self): return self.__name__
parser = objectify.makeparser(remove_blank_text=True) lookup = MyLookup() # that doesnt work break objectify # lookup = objectify.ObjectifyElementClassLookup() # objectify still works # lookup = MyLookupObjectify() # objectify works, but not custom class parser.set_element_class_lookup(lookup) objtree = objectify.fromstring(response, parser) print(objtree) print(objtree.count) print(objtree.data.WebAppAuthRecord[0].id) print(list(objtree.data.WebAppAuthRecord)) if True: # custom class objectify simple version with namespace parser = objectify.makeparser(remove_blank_text=True) lookup = etree.ElementNamespaceClassLookup( objectify.ObjectifyElementClassLookup()) ns_lookup = lookup.get_namespace(None) ns_lookup['WebAppAuthRecord'] = api_objects.WebAppAuthRecord parser.set_element_class_lookup(lookup) objtree = objectify.fromstring(response, parser) print(objtree) print(objtree.count) print(objtree.data.WebAppAuthRecord[0].id) print(list(objtree.data.WebAppAuthRecord)) #parser = objectify.makeparser(remove_blank_text=True) #parser.set_element_class_lookup(MyLookupObjectify()) # lookup = etree.ElementNamespaceClassLookup( MyLookupObjectify() ) # parser.set_element_class_lookup(lookup) #objtree = objectify.fromstring(response)
""" Initializes lxml parser and makes available a handful of functions that wrap its typical uses. """ from __future__ import absolute_import from lxml import etree, objectify from .ns import NamespacePrefixedTag # oxml-specific constants XSD_TRUE = '1' # configure objectified XML parser _fallback_lookup = objectify.ObjectifyElementClassLookup() _element_class_lookup = etree.ElementNamespaceClassLookup(_fallback_lookup) oxml_parser = etree.XMLParser(remove_blank_text=True) oxml_parser.set_element_class_lookup(_element_class_lookup) def parse_xml_bytes(xml_bytes): """ Return root lxml element obtained by parsing XML contained in *xml_bytes*. """ root_element = objectify.fromstring(xml_bytes, oxml_parser) return root_element def register_custom_element_class(nsptag_str, cls): """
def __init__(self): self._parser = etree.XMLParser() lookup = SelectiveClassLookup() lookup.set_fallback(objectify.ObjectifyElementClassLookup()) self._parser.set_element_class_lookup(lookup)