Turned unquote adaptor into a function, and added adaptor factory

--HG--
extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40372
This commit is contained in:
elpolilla 2008-11-13 10:13:11 +00:00
parent 36080ada86
commit 90d28badf6
2 changed files with 28 additions and 8 deletions

View File

@ -1,4 +1,26 @@
import inspect
from scrapy.contrib.adaptors.extraction import extract, extract_unquoted, ExtractImages
from scrapy.contrib.adaptors.markup import remove_tags, remove_root, Unquote
from scrapy.contrib.adaptors.misc import to_unicode, clean_spaces, strip_list, drop_empty, canonicalize_urls, Delist, Regex
from scrapy.contrib.adaptors.markup import remove_tags, remove_root, unquote
from scrapy.contrib.adaptors.misc import to_unicode, clean_spaces, strip_list, drop_empty, canonicalize_urls, delist, Regex
from scrapy.utils.python import unique, flatten
def adaptor_gen(*args):
subadaptors = []
arg_mappings = []
for subadaptor in args:
if callable(subadaptor):
if inspect.isfunction(subadaptor):
func_args, varargs, varkw, defaults = inspect.getargspec(subadaptor)
arg_mappings.append(func_args[1:])
else:
arg_mappings.append([])
subadaptors.append(subadaptor)
def _adaptor(value, **kwargs):
for index, subadaptor in enumerate(subadaptors):
adaptor_args = dict((key, val) for key, val in kwargs.items() if key in arg_mappings[index])
value = subadaptor(value, **adaptor_args)
return value
return _adaptor

View File

@ -21,7 +21,7 @@ def remove_root(value):
return value
return [ _remove_root(v) for v in value ]
class Unquote(object):
def unquote(value, keep_entities=None):
"""
Receives a list of strings, removes all of the
entities the strings may have, and returns
@ -30,10 +30,8 @@ class Unquote(object):
Input: iterable with strings
Output: list of strings
"""
def __init__(self, keep=['lt', 'amp']):
self.keep = keep
def __call__(self, value):
return [ remove_entities(v, keep=self.keep) for v in value ]
if keep_entities is None:
keep_entities = ['lt', 'amp']
return [ remove_entities(v, keep=keep_entities) for v in value ]