From 16ada1d5dcb812d2deb449d1163732a64f8c6810 Mon Sep 17 00:00:00 2001 From: Ismael Carnales Date: Tue, 29 Sep 2009 16:05:32 -0300 Subject: [PATCH 1/2] fixed ItemLoader replace_value --- scrapy/contrib/loader/__init__.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scrapy/contrib/loader/__init__.py b/scrapy/contrib/loader/__init__.py index 8de50923c..175862901 100644 --- a/scrapy/contrib/loader/__init__.py +++ b/scrapy/contrib/loader/__init__.py @@ -31,9 +31,8 @@ class ItemLoader(object): self._values[field_name] += arg_to_iter(processed_value) def replace_value(self, field_name, value): - value = arg_to_iter(value) - processed_value = self._process_input_value(field_name, value) - self._values[field_name] = arg_to_iter(processed_value) + self._values.pop(field_name, None) + self.add_value(field_name, value) def load_item(self): item = self.item From bb4871b7a74465e4ff41d52e16b38d7bef5b9230 Mon Sep 17 00:00:00 2001 From: Ismael Carnales Date: Tue, 29 Sep 2009 16:05:34 -0300 Subject: [PATCH 2/2] added xpathitemloader tests --- scrapy/tests/test_contrib_loader.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/scrapy/tests/test_contrib_loader.py b/scrapy/tests/test_contrib_loader.py index f05cb438a..40960f16a 100644 --- a/scrapy/tests/test_contrib_loader.py +++ b/scrapy/tests/test_contrib_loader.py @@ -311,6 +311,7 @@ class TestXPathItemLoader(XPathItemLoader): name_in = MapCompose(lambda v: v.title()) class XPathItemLoaderTest(unittest.TestCase): + response = HtmlResponse(url="", body='
marta

paragraph

') def test_constructor_errors(self): self.assertRaises(RuntimeError, XPathItemLoader) @@ -323,18 +324,32 @@ class XPathItemLoaderTest(unittest.TestCase): self.assertEqual(l.get_output_value('name'), [u'Marta']) def test_constructor_with_response(self): - response = HtmlResponse(url="", body="
marta
") - l = TestXPathItemLoader(response=response) + l = TestXPathItemLoader(response=self.response) self.assert_(l.selector) l.add_xpath('name', '//div/text()') self.assertEqual(l.get_output_value('name'), [u'Marta']) def test_add_xpath_re(self): - response = HtmlResponse(url="", body="
marta
") - l = TestXPathItemLoader(response=response) + l = TestXPathItemLoader(response=self.response) l.add_xpath('name', '//div/text()', re='ma') self.assertEqual(l.get_output_value('name'), [u'Ma']) + def test_replace_xpath(self): + l = TestXPathItemLoader(response=self.response) + self.assert_(l.selector) + l.add_xpath('name', '//div/text()') + self.assertEqual(l.get_output_value('name'), [u'Marta']) + l.replace_xpath('name', '//p/text()') + self.assertEqual(l.get_output_value('name'), [u'Paragraph']) + + def test_replace_xpath_re(self): + l = TestXPathItemLoader(response=self.response) + self.assert_(l.selector) + l.add_xpath('name', '//div/text()') + self.assertEqual(l.get_output_value('name'), [u'Marta']) + l.replace_xpath('name', '//div/text()', re='ma') + self.assertEqual(l.get_output_value('name'), [u'Ma']) + if __name__ == "__main__": unittest.main()