added TreeExpander example

This commit is contained in:
Pablo Hoffman 2009-08-09 20:54:22 -03:00
parent 38f82e3993
commit 5be0cee577
3 changed files with 20 additions and 1 deletions

View File

@ -404,6 +404,17 @@ one, as the other is just an identity expander.
Loader arguments passed to on each expander call. This arguments can be
overriden with specific noader arguments passed on each expander call.
Example::
>>> def filter_world(x):
... return None if x == 'world' else x
...
>>> from scrapy.newitem.loader.expanders import TreeExpander
>>> expander = TreeExpander(filter_world, str.upper)
>>> expander(['hello', 'world', 'this', 'is', 'scrapy'])
['HELLO, 'THIS', 'IS', 'SCRAPY']
IdentityExpander
----------------

View File

@ -26,7 +26,7 @@ class TreeExpander(object):
def wrap_with_args(self, f):
return lambda x, y: f(x, loader_args=y)
def __call__(self, value, loader_args):
def __call__(self, value, loader_args=None):
values = arg_to_iter(value)
largs = self.default_loader_args
if loader_args:

View File

@ -70,6 +70,14 @@ class LoaderTest(unittest.TestCase):
self.assertEqual(il.get_expanded_value('name'), [u'Pepe'])
self.assertEqual(il.get_reduced_value('name'), u'Pepe')
def test_tree_expander_filter(self):
def filter_world(x):
return None if x == 'world' else x
expander = TreeExpander(filter_world, str.upper)
self.assertEqual(expander(['hello', 'world', 'this', 'is', 'scrapy']),
['HELLO', 'THIS', 'IS', 'SCRAPY'])
def test_tree_expander_multiple_functions(self):
class TestLoader(NameLoader):
name_exp = TreeExpander(lambda v: v.title(), lambda v: v[:-1])