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 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='
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="