Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
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__
Exemplo n.º 12
0
        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)
Exemplo n.º 13
0
"""
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):
    """
Exemplo n.º 14
0
 def __init__(self):
     self._parser = etree.XMLParser()
     lookup = SelectiveClassLookup()
     lookup.set_fallback(objectify.ObjectifyElementClassLookup())
     self._parser.set_element_class_lookup(lookup)