Allow filters to "tee"
This commit is contained in:
parent
0f65d3e123
commit
c7bc9702d8
@ -77,8 +77,18 @@ python. <code>.xslt</code> involkes XSLT. <code>.sed</code> and
|
|||||||
perl or ruby or class/jar (java), aren't supported at the moment, but these
|
perl or ruby or class/jar (java), aren't supported at the moment, but these
|
||||||
would be easy to add.</li>
|
would be easy to add.</li>
|
||||||
|
|
||||||
<li>Templates written using htmltmpl currently only have access to a fixed set
|
<li>If the filter name contains a redirection character (<code>></code>),
|
||||||
of fields, whereas XSLT templates have access to everything.</li>
|
then the output stream is
|
||||||
|
<a href="http://en.wikipedia.org/wiki/Tee_(Unix)">tee</a>d; one branch flows
|
||||||
|
through the specified filter and the output is planced into the named file; the
|
||||||
|
other unmodified branch continues onto the next filter, if any.
|
||||||
|
One use case for this function is to use
|
||||||
|
<a href="../filters/xhtml2html.py">xhtml2html</a> to produce both an XHTML and
|
||||||
|
an HTML output stream from one source.</li>
|
||||||
|
|
||||||
|
<li>Templates written using htmltmpl or django currently only have access to a
|
||||||
|
fixed set of fields, whereas XSLT and genshi templates have access to
|
||||||
|
everything.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -122,10 +122,22 @@ def apply(doc):
|
|||||||
output = open(output_file).read()
|
output = open(output_file).read()
|
||||||
for filter in config.filters(template_file):
|
for filter in config.filters(template_file):
|
||||||
if filter in planet_filters: continue
|
if filter in planet_filters: continue
|
||||||
output = shell.run(filter, output, mode="filter")
|
if filter.find('>')>0:
|
||||||
if not output:
|
# tee'd output
|
||||||
os.unlink(output_file)
|
filter,dest = filter.split('>',1)
|
||||||
break
|
tee = shell.run(filter.strip(), output, mode="filter")
|
||||||
|
if tee:
|
||||||
|
output_dir = planet.config.output_dir()
|
||||||
|
dest_file = os.path.join(output_dir, dest.strip())
|
||||||
|
dest_file = open(dest_file,'w')
|
||||||
|
dest_file.write(tee)
|
||||||
|
dest_file.close()
|
||||||
|
else:
|
||||||
|
# pipe'd output
|
||||||
|
output = shell.run(filter, output, mode="filter")
|
||||||
|
if not output:
|
||||||
|
os.unlink(output_file)
|
||||||
|
break
|
||||||
else:
|
else:
|
||||||
handle = open(output_file,'w')
|
handle = open(output_file,'w')
|
||||||
handle.write(output)
|
handle.write(output)
|
||||||
|
25
tests/data/apply/config-html.ini
Normal file
25
tests/data/apply/config-html.ini
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
[Planet]
|
||||||
|
output_theme = genshi_fancy
|
||||||
|
output_dir = tests/work/apply
|
||||||
|
name = test planet
|
||||||
|
cache_directory = tests/work/spider/cache
|
||||||
|
|
||||||
|
bill_of_materials:
|
||||||
|
images/#{face}
|
||||||
|
|
||||||
|
[index.html.genshi]
|
||||||
|
filters:
|
||||||
|
xhtml2html.py>index.html4
|
||||||
|
|
||||||
|
[tests/data/spider/testfeed0.atom]
|
||||||
|
name = not found
|
||||||
|
|
||||||
|
[tests/data/spider/testfeed1b.atom]
|
||||||
|
name = one
|
||||||
|
face = jdub.png
|
||||||
|
|
||||||
|
[tests/data/spider/testfeed2.atom]
|
||||||
|
name = two
|
||||||
|
|
||||||
|
[tests/data/spider/testfeed3.rss]
|
||||||
|
name = three
|
@ -55,6 +55,16 @@ class ApplyTest(unittest.TestCase):
|
|||||||
config.load(configfile % 'genshi')
|
config.load(configfile % 'genshi')
|
||||||
self.apply_fancy()
|
self.apply_fancy()
|
||||||
|
|
||||||
|
def test_apply_filter_html(self):
|
||||||
|
config.load(configfile % 'html')
|
||||||
|
self.apply_fancy()
|
||||||
|
|
||||||
|
output = open(os.path.join(workdir, 'index.html')).read()
|
||||||
|
self.assertTrue(output.find('/>')>=0)
|
||||||
|
|
||||||
|
output = open(os.path.join(workdir, 'index.html4')).read()
|
||||||
|
self.assertTrue(output.find('/>')<0)
|
||||||
|
|
||||||
def apply_fancy(self):
|
def apply_fancy(self):
|
||||||
splice.apply(self.feeddata)
|
splice.apply(self.feeddata)
|
||||||
|
|
||||||
@ -106,3 +116,4 @@ for method in dir(test_filter_genshi.GenshiFilterTests):
|
|||||||
if method.startswith('test_'): break
|
if method.startswith('test_'): break
|
||||||
else:
|
else:
|
||||||
delattr(ApplyTest,'test_apply_genshi_fancy')
|
delattr(ApplyTest,'test_apply_genshi_fancy')
|
||||||
|
delattr(ApplyTest,'test_apply_filter_html')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user