Example #1
0
 def load(self, xml):
     lookup = etree.ElementNamespaceClassLookup()
     parser = etree.XMLParser()
     parser.set_element_class_lookup(lookup)
     namespace = lookup.get_namespace(style_ns)
     namespace.update(dict(style=Style))
     self._data = etree.fromstring(xml, parser=parser)
Example #2
0
    def createFromExisting(cls, source):
        """
        Create a TouchOSCLayout instance from an existing TouchOSC Layout.

        @type source: filename or fileobject 
        @param source: Path to an existing .touchosc file, or 
            TouchOSC index.xml file (from unzipping .touchosc file)
        @rtype: Layout 
        @return: An instance containing the layout 
        """
        fallback = etree.ElementDefaultClassLookup()
        lookupTabpages = etree.ElementNamespaceClassLookup(fallback)
        namespace = lookupTabpages.get_namespace(None)
        namespace['tabpage'] = tabpage.Tabpage
        lookupControls = etree.AttributeBasedElementClassLookup(
            'type', controls.type_class_mapping, lookupTabpages)
        layoutParser = etree.XMLParser(remove_blank_text=True)
        layoutParser.setElementClassLookup(lookupControls)

        if type(source) is str:
            (path, fname) = os.path.split(source)
            (name, extension) = os.path.splitext(fname)
            if extension == ".touchosc":
                f = ZipFile(source, "r")
                layoutTree = etree.parse(StringIO(f.read("index.xml")),
                                         layoutParser)
                f.close()
            elif extension == ".xml":
                name = None
                layoutTree = etree.parse(source, layoutParser)
        return Layout(layoutTree, name)
Example #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
Example #4
0
    def __init__(self):
        lookup = etree.ElementNamespaceClassLookup()
        parser = etree.XMLParser(remove_blank_text=True)
        parser.set_element_class_lookup(lookup)

        namespace = lookup.get_namespace(NS_DCIF)
        namespace['dataCategory'] = self.tag_class
        self._tree = etree.parse(self.__file__, parser=parser)
 def __init__(self, element_class, namespace=None, schema=None):
     self.element_class = element_class
     lookup = etree.ElementNamespaceClassLookup()
     namespace = lookup.get_namespace(namespace)
     namespace[None] = self.element_class
     namespace.update({
         cls.__name__.lower(): cls
         for cls in all_subclasses(self.element_class)
     })
     self.parser = objectify.makeparser(remove_comments=True,
                                        no_network=True)
     self.parser.set_element_class_lookup(lookup)
     self.schema = etree.RelaxNG(etree.parse(schema))
Example #6
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
Example #7
0
def _initialize():
    global MODULE_PARSER, _Element
    #    fallback = etree.ElementDefaultClassLookup(element=etree.Element)
    #    lookup = etree.ElementNamespaceClassLookup(fallback)
    lookup = etree.ElementNamespaceClassLookup()

    #    MODULE_PARSER = etree.XMLParser()
    MODULE_PARSER = etree.XMLParser(remove_blank_text=True)
    MODULE_PARSER.setElementClassLookup(lookup)
    _Element = MODULE_PARSER.makeelement
    #    objectify.setDefaultParser(MODULE_PARSER)

    namespace = etree.Namespace(EDXLDE_NS)
    for name, klass in element_map:
        namespace[name] = klass
Example #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
Example #9
0
    def __init__(self, f):
        lookup = etree.ElementNamespaceClassLookup()
        namespace = lookup.get_namespace('http://purl.org/net/xbiblio/csl')
        namespace[None] = CitationStylesElement
        namespace.update(dict([(cls.__name__.replace('_', '-').lower(), cls)
                               for cls in CitationStylesElement.__subclasses__()]))

        self.parser = etree.XMLParser(remove_comments=True, encoding='UTF-8',
                                      no_network=True)
        self.parser.set_element_class_lookup(lookup)
        self.schema = etree.RelaxNG(etree.parse(SCHEMA_PATH))
        self.xml = etree.parse(f, self.parser)#, base_url=".")
        if not self.schema.validate(self.xml):
            err = self.schema.error_log
            #raise Exception("XML file didn't pass schema validation:\n%s" % err)
            warn("XML file didn't pass schema validation:\n%s" % err)
            # TODO: proper error reporting
        self.root = self.xml.getroot()
Example #10
0
    def make_parser(cls):
        """Create a parser with custom tag handling."""
        parser = etree.XMLParser(**config['parser_options'])
        lookup = etree.ElementNamespaceClassLookup()
        parser.set_element_class_lookup(lookup)
        namespace = lookup.get_namespace('http://www.tei-c.org/ns/1.0')
        namespace[None] = TEITag

        def _handlers(target_class):
            for subcls in target_class.__subclasses__():
                yield from _handlers(subcls)
                try:
                    for target in subcls.targets:
                        yield subcls, target
                except AttributeError:
                    pass

        for handler, target in _handlers(TEITag):
            namespace[target] = handler
        return parser
Example #11
0
    def __new__(cls, raw_xml):
        mof_json_path = _get_mof_json_path()
        if not os.path.exists(mof_json_path):
            raise RuntimeError("Must run 'make parsers'")

        ns_class_lookup = etree.ElementNamespaceClassLookup()
        _ovf_envelope_ns = ns_class_lookup.get_namespace(_OvfElement.NAMESPACE)
        _ovf_envelope_ns.update(
            cls._recurse_class_tree(_OvfElement, {None: _OvfElement}))

        ovf_class_lookup = _OvfXmlClassLookup()
        # pylint: disable=no-member
        ovf_class_lookup.set_fallback(ns_class_lookup)
        # pylint: enable=no-member
        parser = etree.XMLParser(attribute_defaults=False,
                                 dtd_validation=False,
                                 ns_clean=True,
                                 schema=None,
                                 remove_comments=True,
                                 remove_pis=True,
                                 remove_blank_text=True)
        parser.set_element_class_lookup(ovf_class_lookup)

        return etree.XML(raw_xml, parser=parser)
Example #12
0
 def __init__(self):
     self.parser = etree.XMLParser()
     fallback = etree.ElementDefaultClassLookup(PDFXML)
     lookup = etree.ElementNamespaceClassLookup(fallback)
     namespace = lookup.get_namespace(None)
     #leafs
     namespace['name'] = PDFName
     namespace['string'] = PDFString
     namespace['number'] = PDFNumber
     namespace['null'] = PDFNull
     namespace['bool'] = PDFBool
     namespace['R'] = PDFR
     namespace['header'] = PDFHeader
     namespace['startxref'] = PDFStartxref
     namespace['data'] = PDFData
     #trees
     namespace['entry'] = PDFEntry
     namespace['dictionary'] = PDFDictionary
     namespace['stream'] = PDFStream
     namespace['pdf'] = PDFPdf
     namespace['pdf_update'] = PDFUpdate
     namespace['indirect_object'] = PDFIndirect
     namespace['array'] = PDFArray
     self.parser.set_element_class_lookup(lookup)
Example #13
0
# encoding: utf-8
"""
Initializes oxml sub-package, including registering custom element classes
corresponding to Open XML elements.
"""

from __future__ import absolute_import

from lxml import etree

from .ns import NamespacePrefixedTag, nsmap

# configure XML parser
element_class_lookup = etree.ElementNamespaceClassLookup()
oxml_parser = etree.XMLParser(remove_blank_text=True, resolve_entities=False)
oxml_parser.set_element_class_lookup(element_class_lookup)


def parse_xml(xml):
    """
    Return root lxml element obtained by parsing XML character string in
    *xml*, which can be either a Python 2.x string or unicode. The custom
    parser is used, so custom element classes are produced for elements in
    *xml* that have them.
    """
    root_element = etree.fromstring(xml, oxml_parser)
    return root_element


def register_element_cls(tag, cls):
    """
Example #14
0
    def drop_tree(self):
        """
        Remove the element from the xml tree with all its decendants.
        """

        parent = self.getparent()
        assert parent is not None
        parent.remove(self)

    def getTag(self):
        """
        Returns the element tag without the namespace.
        """

        ind = self.tag.find('}')
        if ind < 0:
            tag = self.tag
        else:
            tag = self.tag[ind+1:]

        return self.nsprefix+':'+tag


### The XML parser for OOXML documents

lookup = ET.ElementNamespaceClassLookup()
OOXMLParser = ET.XMLParser()
OOXMLParser.set_element_class_lookup(lookup)

NSMAP = {}
Example #15
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):
    """
    Register the lxml custom element class *cls* with the parser to be used
Example #16
0
    if False:
        # Custom class chooser works as xmlparser
        parser = etree.XMLParser()
        parser.set_element_class_lookup(MyLookup())
        objtree = etree.fromstring(response, parser)
        print(objtree)
        print(objtree[2])
        print(objtree[3].getchildren())
        print(objtree[3][0].try_me())
        print(objtree[3][0].getchildren()[0].text)  # data.webauthrecord.id

    if False:
        # use a default namespace solution
        parser = etree.XMLParser()
        lookup = etree.ElementNamespaceClassLookup()
        parser.set_element_class_lookup(lookup)
        ns_lookup = lookup.get_namespace(None)
        ns_lookup['WebAppAuthRecord'] = api_objects.WebAppAuthRecord
        objtree = etree.fromstring(response, parser)
        print(objtree)
        print(objtree[2])
        print(objtree[3].getchildren())
        print(objtree[3][0].try_me())
        print(objtree[3][0].getchildren()[0].text)  # data.webauthrecord.id

    class MyLookupObjectify(objectify.ObjectifyElementClassLookup):
        def lookup(self, node_type, document, namespace, name):
            print(f"MyLookupObjectify {name}")
            if name == 'WebAppAuthRecord':
                return api_objects.WebAppAuthRecord  # be a bit more selective here ...
Example #17
0
def _register_mathml_classes(parser):
    lookup = _etree.ElementNamespaceClassLookup()
    parser.set_element_class_lookup(lookup)

    lxml_math_namespace = lookup.get_namespace(MATHML_NAMESPACE_URI)
    lxml_math_namespace.update(_all_mathml_classes)
Example #18
0
        return etree.fromstring(string, parser=XMLParser)

    @staticmethod
    def to_string(element):
        if callable(element):
            element = element()

        return etree.tostring(
            element,
            encoding='utf-8',
            xml_declaration=True,
            pretty_print=True,
        )


XMLParserLookup = etree.ElementNamespaceClassLookup(
    fallback=etree.ElementDefaultClassLookup(element=ElementBase))

XMLParser = etree.XMLParser(encoding='utf-8', no_network=False)
XMLParser.set_element_class_lookup(XMLParserLookup)

E = ElementMaker(
    nsmap=SOAP_NSMAP,
    makeelement=XMLParser.makeelement,
)

S = ElementMaker(
    namespace=SOAP_ENV_URI,
    nsmap=SOAP_NSMAP,
    makeelement=XMLParser.makeelement,
)