Пример #1
0
    def test_transform_html(self):
        base = self.datadir+os.sep
        with open(base+"teststyle.xslt","w") as fp:
            fp.write("""<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="value"/>
    <xsl:param name="file"/>
    <xsl:variable name="content" select="document($file)/root/*"/>
    <xsl:template match="/">
        <output>
            <paramvalue><xsl:value-of select="$value"/></paramvalue>
            <paramfile><xsl:copy-of select="$content"/></paramfile>
            <infile><xsl:value-of select="/doc/title"/></infile>
        </output>
    </xsl:template>
</xsl:stylesheet>
""")
        with open(base+"paramfile.xml","w") as fp:
            fp.write("""<root><node key='value'><subnode>textnode</subnode></node></root>""")

        with open(base+"infile.xml","w") as fp:
            fp.write("""<doc><title>Document title</title></doc>""")
        t = Transformer("XSLT", base+"teststyle.xslt", ["res/xsl"], "")
        t.transform_file(base+"infile.xml", base+"outfile.xml",
                         {'value':'blahonga',
                          'file':base+'paramfile.xml'})
        self.assertEqualXML(util.readfile(base+"outfile.xml"),"""
        <output>
            <paramvalue>blahonga</paramvalue>
            <paramfile><node key='value'><subnode>textnode</subnode></node></paramfile>
            <infile>Document title</infile>
        </output>""")
Пример #2
0
 def test_depth(self):
     xsltfile = self.datadir+os.sep+"notused.xslt"
     util.writefile(xsltfile, '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>')
     t = Transformer("XSLT", xsltfile, ["res/xsl"], "data")
     self.assertEqual(0, t._depth("data", "data/index.html"))
     self.assertEqual(1, t._depth("data/repo", "data/index.html"))
     self.assertEqual(3, t._depth("data/repo/toc/title", "data/index.html"))
Пример #3
0
    def render_template(self, jinja_template, page_title, **context):
        from ferenda import DocumentRepository
        repo = DocumentRepository(config=self.repo.config)
        jinja_template = """
<html xmlns="http://www.w3.org/1999/xhtml">
  <head><title>%(page_title)s</title></head>
  <body>
    <div>
      %(jinja_template)s
    </div>
  </body>
</html>
""" % (locals())
        t = Template(jinja_template, autoescape=True)
        text = t.render(context).encode("utf-8")
        try:
            xhtml = etree.parse(BytesIO(text))
        except XMLSyntaxError as e:
            raise ValueError("invalid xhtml from template: %s\n%s" %
                             (e, text.decode("utf-8")))
        conffile = os.sep.join([repo.config.datadir, 'rsrc', 'resources.xml'])
        transformer = Transformer('XSLT',
                                  "xsl/generic.xsl",
                                  "xsl",
                                  resourceloader=repo.resourceloader,
                                  config=conffile)
        urltransform = None
        if 'develurl' in repo.config and repo.config.develurl:
            urltransform = repo.get_url_transform_func(
                develurl=repo.config.develurl)
        depth = 2  # len(doc.uri.split("/")) - 3
        tree = transformer.transform(xhtml, depth, uritransform=urltransform)
        data = etree.tostring(tree, encoding="utf-8")
        return Response(data, mimetype="text/html")
Пример #4
0
    def test_doctype(self):
        base = self.datadir+os.sep
        util.ensure_dir(base+"teststyle-doctype.xslt")
        with open(base+"teststyle-doctype.xslt","w") as fp:
            fp.write("""<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html"
	        doctype-system="about:legacy-compat"
	        omit-xml-declaration="yes"
	        encoding='utf-8'
	        indent="yes"/>
    <xsl:template match="/">
      <html>
        <head>
          <title><xsl:value-of select="/doc/title"/></title>
        </head>
        <body>
          <h1>hello world</h1>
        </body>
      </html>
    </xsl:template>
</xsl:stylesheet>
""")
        with open(base+"infile.xml","w") as fp:
            fp.write("""<doc><title>Document title</title></doc>""")
        t = Transformer("XSLT", base+"teststyle-doctype.xslt", "xsl", None, "")
        t.transform_file(base+"infile.xml", base+"outfile.xml")
        self.assertTrue(util.readfile(base+"outfile.xml").startswith('<!DOCTYPE html SYSTEM "about:legacy-compat">'))
Пример #5
0
 def test_depth(self):
     xsltfile = self.datadir+os.sep+"notused.xslt"
     util.writefile(xsltfile, '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>')
     t = Transformer("XSLT", xsltfile, "xsl", None, "data")
     self.assertEqual(0, t._depth("data", "data/index.html"))
     self.assertEqual(1, t._depth("data/repo", "data/index.html"))
     self.assertEqual(3, t._depth("data/repo/toc/title", "data/index.html"))
Пример #6
0
 def _transform(self, title, body, environ, template="xsl/error.xsl"):
     fakerepo = self.repos[0]
     doc = fakerepo.make_document()
     doc.uri = request_uri(environ)
     doc.meta.add((URIRef(doc.uri), DCTERMS.title, Literal(title,
                                                           lang="sv")))
     doc.body = body
     xhtml = fakerepo.render_xhtml_tree(doc)
     conffile = os.sep.join([self.config.datadir, 'rsrc', 'resources.xml'])
     transformer = Transformer('XSLT',
                               template,
                               "xsl",
                               resourceloader=fakerepo.resourceloader,
                               config=conffile)
     urltransform = None
     if 'develurl' in self.config:
         urltransform = fakerepo.get_url_transform_func(
             repos=self.repos, develurl=self.config.develurl, wsgiapp=self)
     depth = len(doc.uri.split("/")) - 3
     tree = transformer.transform(xhtml, depth, uritransform=urltransform)
     return etree.tostring(tree, encoding="utf-8")
Пример #7
0
 def _transform(self, title, body, environ, template="xsl/error.xsl"):
     fakerepo = self.repos[0]
     doc = fakerepo.make_document()
     doc.uri = request_uri(environ)
     doc.meta.add((URIRef(doc.uri),
                   DCTERMS.title,
                   Literal(title, lang="sv")))
     doc.body = body
     xhtml = fakerepo.render_xhtml_tree(doc)
     conffile = os.sep.join([self.config.documentroot, 'rsrc',
                             'resources.xml'])
     transformer = Transformer('XSLT', template, "xsl",
                               resourceloader=fakerepo.resourceloader,
                               config=conffile)
     urltransform = None
     if 'develurl' in self.config:
         urltransform = fakerepo.get_url_transform_func(
             develurl=self.config.develurl)
     depth = len(doc.uri.split("/")) - 3
     tree = transformer.transform(xhtml, depth,
                                  uritransform=urltransform)
     return etree.tostring(tree, encoding="utf-8")
Пример #8
0
    def _setup_files(self, paramfile):
        base = self.datadir+os.sep
        util.ensure_dir(base+"teststyle.xslt")
        with open(base+"teststyle.xslt","w") as fp:
            fp.write("""<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="value"/>
    <xsl:param name="file"/>
    <xsl:variable name="content" select="document($file)/root/*"/>
    <xsl:template match="/">
        <output>
            <paramvalue><xsl:value-of select="$value"/></paramvalue>
            <paramfile><xsl:copy-of select="$content"/></paramfile>
            <infile><xsl:value-of select="/doc/title"/></infile>
        </output>
    </xsl:template>
</xsl:stylesheet>
""")
        with open(base+paramfile,"w") as fp:
            fp.write("""<root><node key='value'><subnode>textnode</subnode></node></root>""")

        with open(base+"infile.xml","w") as fp:
            fp.write("""<doc><title>Document title</title></doc>""")
        return Transformer("XSLT", base+"teststyle.xslt", "xsl", None, "")