Exemplo n.º 1
0
    def test_transform_fromstring(self):
        xslt_src = u"""
        <xsl:stylesheet 
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:pyext="http://www.opikanoba.org/ns/etree-extensions"
            exclude-result-prefixes="pyext"
            extension-element-prefixes="pyext"
            version="1.0">
        
            <xsl:template match="/test">
                <pubDate>
                    <xsl:apply-templates select="isodate" mode="RFC822"/>
                </pubDate>
            </xsl:template>

            <xsl:template match="isodate" mode="RFC822">
                <pyext:formatdt></pyext:formatdt>
            </xsl:template>
        </xsl:stylesheet>
        """

        xml_src = u"""<?xml version="1.0" ?><test><isodate>2017-11-03T16:55:03.198512+00:00</isodate></test>"""
        expected_result = u"""<?xml version="1.0" ?><pubDate>Fri, 03 Nov 2017 16:55:03 +0000</pubDate>"""

        # Process
        proc = xslt_ext.DateFormatterProcessor(etree.fromstring(xslt_src))
        result_xml = proc.transform(etree.fromstring(xml_src))

        # Check result
        xml2 = etree.fromstring(expected_result)
        self.assertEqual(etree.tostring(result_xml), etree.tostring(xml2))
Exemplo n.º 2
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--atom", help="Atom filename (input)")
    parser.add_argument("--rss2", help="RSS2 filename (output)")
    parser.add_argument(
        "--xslt",
        help="XSLT stylesheet (optionnal), default = {}".format(
            DEFAULT_XSLT_FILE),
        default=DEFAULT_XSLT_FILE)

    args = parser.parse_args()

    filedir = os.path.dirname(os.path.abspath(__file__))
    xslt_filename = os.path.join(filedir, args.xslt)

    print("XSLT : {}".format(xslt_filename))

    proc = xslt_ext.DateFormatterProcessor()
    proc.load_xslt(xslt_filename)

    if args.atom is not None and os.path.exists(args.atom):
        result_xml = proc.transform(etree.parse(args.atom))
        data = etree.tostring(result_xml,
                              encoding=ENCODING,
                              xml_declaration=True,
                              pretty_print=True)

        if args.rss2 is not None:
            with codecs.open(args.rss2, "w", ENCODING) as fout:
                fout.write(data.decode(ENCODING))
        else:
            print(data)
Exemplo n.º 3
0
    def test_transform_none(self):
        filedir = os.path.dirname(os.path.abspath(__file__))
        xml1_fn = os.path.join(filedir, 'simple_instance.xml')

        # Process
        proc = xslt_ext.DateFormatterProcessor()

        result_xml = proc.transform(etree.parse(xml1_fn))

        # Check result
        self.assertIsNone(result_xml)
Exemplo n.º 4
0
    def test_transform_fromfile(self):
        filedir = os.path.dirname(os.path.abspath(__file__))
        xml1_fn = os.path.join(filedir, 'simple_instance.xml')

        # Process
        xslt = etree.parse(os.path.join(filedir, 'simple_ext.xsl'))
        proc = xslt_ext.DateFormatterProcessor(xslt)

        result_xml = proc.transform(etree.parse(xml1_fn))

        # Check result
        expected_result = u"""<?xml version="1.0" ?><pubDate>Fri, 03 Nov 2017 16:55:03 +0000</pubDate>"""

        xml2 = etree.fromstring(expected_result)
        self.assertEqual(etree.tostring(result_xml), etree.tostring(xml2))
Exemplo n.º 5
0
    def test_transform_atom_include_sample(self):
        filedir = os.path.dirname(os.path.abspath(__file__))
        xml1_fn = os.path.join(filedir, 'atom_instance.xml')

        # Process
        xslt_filename = os.path.abspath(os.path.join(filedir, '../atom1_to_rss2_pyext.xsl'))
        proc = xslt_ext.DateFormatterProcessor()
        proc.load_xslt(xslt_filename)
        result_xml = proc.transform(etree.parse(xml1_fn))

        # check
        xmlexpected_fn = os.path.join(filedir, 'rss2_from_xslt1_expected.xml')
        xml2 = etree.parse(xmlexpected_fn)

        self.assertEqual(etree.tostring(result_xml, encoding='UTF-8', pretty_print=True, xml_declaration=True),
                         etree.tostring(xml2, encoding='UTF-8', pretty_print=True, xml_declaration=True))
Exemplo n.º 6
0
    def test_transform_atom_include_resolver(self):
        filedir = os.path.dirname(os.path.abspath(__file__))
        filedirxsl = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..'))

        xml1_fn = os.path.join(filedir, 'atom_instance.xml')

        # Process
        _parser = etree.XMLParser()
        _parser.resolvers.add(PrefixResolver(filedirxsl))

        xslt = etree.parse(os.path.join(filedirxsl, 'atom1_to_rss2_pyext.xsl'), _parser)
        proc = xslt_ext.DateFormatterProcessor(xslt)
        result_xml = proc.transform(etree.parse(xml1_fn))

        # check
        xmlexpected_fn = os.path.join(filedir, 'rss2_from_xslt1_expected.xml')
        xml2 = etree.parse(xmlexpected_fn)

        self.assertEqual(etree.tostring(result_xml, encoding='UTF-8', pretty_print=True, xml_declaration=True),
                         etree.tostring(xml2, encoding='UTF-8', pretty_print=True, xml_declaration=True))
Exemplo n.º 7
0
    def test_transform_fromfile_ns(self):
        filedir = os.path.dirname(os.path.abspath(__file__))
        xml1_fn = os.path.join(filedir, 'simple_instance2.xml')

        # Process
        _parser = etree.XMLParser()
        _parser.resolvers.add(PrefixResolver(filedir))

        xslt = etree.parse(os.path.join(filedir, 'simple_ext_3.xsl'), _parser)
        proc = xslt_ext.DateFormatterProcessor(xslt)

        result_xml = proc.transform(etree.parse(xml1_fn))
        print(
            etree.tostring(result_xml, pretty_print=True,
                           xml_declaration=True))

        # Check result
        expected_result = u"""<?xml version="1.0" ?><pubDate>Fri, 03 Nov 2017 16:55:03 +0000</pubDate>"""

        xml2 = etree.fromstring(expected_result)
        self.assertEqual(etree.tostring(result_xml), etree.tostring(xml2))