Allow filter parameters to be passed "URI style"
This commit is contained in:
parent
9f69ac1c30
commit
0a5015d657
@ -32,12 +32,19 @@ types of advertisements that you may find in feeds.</p>
|
||||
the form of a <code>planet:excerpt</code> element) to the feed itself. You
|
||||
can see examples of how parameters are passed to this program in either
|
||||
<a href="../tests/data/filter/excerpt-images.ini">excerpt-images</a> or
|
||||
<a href="../examples/opml-top100.ini">opml-top100.ini</a>.</p>
|
||||
<a href="../examples/opml-top100.ini">opml-top100.ini</a>.
|
||||
Alternately parameters may be passed
|
||||
<abbr title="Uniform Resource Identifier">URI</abbr> style, for example:
|
||||
<a href="../tests/data/filter/excerpt-images2.ini">excerpt-images2</a>.
|
||||
</p>
|
||||
|
||||
<p>The <a href="../filters/xpath_sifter.py">xpath sifter</a> is a variation of
|
||||
the above, including or excluding feeds based on the presence (or absence) of
|
||||
data specified by <a href="http://www.w3.org/TR/xpath20/">xpath</a>
|
||||
expressions.</p>
|
||||
expressions. Again, parameters can be passed as
|
||||
<a href="../tests/data/filter/xpath-sifter.ini">config options</a> or
|
||||
<a href="../tests/data/filter/xpath-sifter2.ini">URI style</a>.
|
||||
</p>
|
||||
|
||||
<h3>Notes</h3>
|
||||
|
||||
|
@ -13,6 +13,14 @@ def run(template_file, doc, mode='template'):
|
||||
else:
|
||||
dirs = planet.config.filter_directories()
|
||||
|
||||
# parse out "extra" options
|
||||
if template_file.find('?') < 0:
|
||||
extra_options = {}
|
||||
else:
|
||||
import cgi
|
||||
template_file, extra_options = template_file.split('?',1)
|
||||
extra_options = dict(cgi.parse_qsl(extra_options))
|
||||
|
||||
# see if the template can be located
|
||||
for template_dir in dirs:
|
||||
template_resolved = os.path.join(template_dir, template_file)
|
||||
@ -43,6 +51,7 @@ def run(template_file, doc, mode='template'):
|
||||
|
||||
# Execute the shell module
|
||||
options = planet.config.template_options(template_file)
|
||||
options.update(extra_options)
|
||||
log.debug("Processing %s %s using %s", mode,
|
||||
os.path.realpath(template_resolved), module_name)
|
||||
if mode == 'filter':
|
||||
|
2
tests/data/filter/excerpt-images2.ini
Normal file
2
tests/data/filter/excerpt-images2.ini
Normal file
@ -0,0 +1,2 @@
|
||||
[Planet]
|
||||
filters = excerpt.py?omit=img
|
2
tests/data/filter/xpath-sifter2.ini
Normal file
2
tests/data/filter/xpath-sifter2.ini
Normal file
@ -0,0 +1,2 @@
|
||||
[Planet]
|
||||
filters = xpath_sifter.py?require=//atom%3Acategory%5B%40term%3D%27two%27%5D
|
@ -14,10 +14,16 @@ class FilterTests(unittest.TestCase):
|
||||
imgsrc = dom.getElementsByTagName('img')[0].getAttribute('src')
|
||||
self.assertEqual('http://example.com.nyud.net:8080/foo.png', imgsrc)
|
||||
|
||||
def test_excerpt_images(self):
|
||||
testfile = 'tests/data/filter/excerpt-images.xml'
|
||||
def test_excerpt_images1(self):
|
||||
config.load('tests/data/filter/excerpt-images.ini')
|
||||
self.verify_images()
|
||||
|
||||
def test_excerpt_images2(self):
|
||||
config.load('tests/data/filter/excerpt-images2.ini')
|
||||
self.verify_images()
|
||||
|
||||
def verify_images(self):
|
||||
testfile = 'tests/data/filter/excerpt-images.xml'
|
||||
output = open(testfile).read()
|
||||
for filter in config.filters():
|
||||
output = shell.run(filter, output, mode="filter")
|
||||
@ -58,8 +64,15 @@ class FilterTests(unittest.TestCase):
|
||||
self.assertEqual(u'before--after',
|
||||
excerpt.firstChild.firstChild.nodeValue)
|
||||
|
||||
def test_xpath_filter(self):
|
||||
def test_xpath_filter1(self):
|
||||
config.load('tests/data/filter/xpath-sifter.ini')
|
||||
self.verify_xpath()
|
||||
|
||||
def test_xpath_filter2(self):
|
||||
config.load('tests/data/filter/xpath-sifter2.ini')
|
||||
self.verify_xpath()
|
||||
|
||||
def verify_xpath(self):
|
||||
testfile = 'tests/data/filter/category-one.xml'
|
||||
|
||||
output = open(testfile).read()
|
||||
@ -89,7 +102,8 @@ try:
|
||||
import libxml2
|
||||
except:
|
||||
logger.warn("libxml2 is not available => can't test xpath_sifter")
|
||||
del FilterTests.test_xpath_filter
|
||||
del FilterTests.test_xpath_filter1
|
||||
del FilterTests.test_xpath_filter2
|
||||
|
||||
except ImportError:
|
||||
logger.warn("Popen is not available => can't test standard filters")
|
||||
|
Loading…
Reference in New Issue
Block a user