{add,replace,get}_value: accept keyword args, now only 're'

if re given, extract data from the given value by this regex

Signed-off-by: Ping Yin <pkufranky@gmail.com>
This commit is contained in:
Ping Yin 2010-04-23 01:45:01 +08:00
parent ddfaf6049f
commit 913b5db242
1 changed files with 13 additions and 6 deletions

View File

@ -5,10 +5,12 @@ See documentation in docs/topics/loaders.rst
"""
from collections import defaultdict
import re
from scrapy.item import Item
from scrapy.selector import HtmlXPathSelector
from scrapy.utils.misc import arg_to_iter
from scrapy.utils.misc import arg_to_iter, extract_regex
from scrapy.utils.python import flatten
from .common import wrap_loader_context
from .processor import Identity
@ -25,8 +27,8 @@ class ItemLoader(object):
self.context = context
self._values = defaultdict(list)
def add_value(self, field_name, value, *processors):
value = self.get_value(value, *processors)
def add_value(self, field_name, value, *processors, **kw):
value = self.get_value(value, *processors, **kw)
if not value:
return
if not field_name:
@ -35,8 +37,8 @@ class ItemLoader(object):
else:
self._add_value(field_name, value)
def replace_value(self, field_name, value, *processors):
value = self.get_value(value, *processors)
def replace_value(self, field_name, value, *processors, **kw):
value = self.get_value(value, *processors, **kw)
if not value:
return
if not field_name:
@ -55,7 +57,12 @@ class ItemLoader(object):
self._values.pop(field_name, None)
self._add_value(field_name, value)
def get_value(self, value, *processors):
def get_value(self, value, *processors, **kw):
regex = kw.get('re', None)
if regex:
value = arg_to_iter(value)
value = flatten([extract_regex(regex, x) for x in value])
for proc in processors:
if value is None:
break