Merge pull request #722 from Digenis/loader-iteration

[MRG +1]ItemLoader.load_item: iterate over copy of fields
This commit is contained in:
Mikhail Korobov 2015-04-21 12:34:59 +05:00
commit c8ccb7c5b9
2 changed files with 22 additions and 1 deletions

View File

@ -80,7 +80,7 @@ class ItemLoader(object):
def load_item(self):
item = self.item
for field_name in self._values:
for field_name in tuple(self._values):
value = self.get_output_value(field_name)
if value is not None:
item[field_name] = value

View File

@ -85,6 +85,27 @@ class BasicItemLoaderTest(unittest.TestCase):
il.replace_value('sku', [valid_fragment], re=sku_re)
self.assertEqual(il.load_item()['sku'], u'1234')
def test_self_referencing_loader(self):
class MyLoader(ItemLoader):
url_out = TakeFirst()
def img_url_out(self, values):
return (self.get_output_value('url') or '') + values[0]
il = MyLoader(item={})
il.add_value('url', 'http://example.com/')
il.add_value('img_url', '1234.png')
self.assertEqual(il.load_item(), {
'url': 'http://example.com/',
'img_url': 'http://example.com/1234.png',
})
il = MyLoader(item={})
il.add_value('img_url', '1234.png')
self.assertEqual(il.load_item(), {
'img_url': '1234.png',
})
def test_add_value(self):
il = TestItemLoader()
il.add_value('name', u'marta')