PY3 port scrapy.utils.misc.arg_to_iter; fix scrapy.utils.misc.md5sum doctest

This commit is contained in:
Mikhail Korobov 2014-08-01 22:56:03 +06:00
parent 83432184c8
commit 444052a2f9
2 changed files with 13 additions and 6 deletions

View File

@ -1,15 +1,19 @@
"""Helper functions which doesn't fit anywhere else"""
import re
import hashlib
from importlib import import_module
from pkgutil import iter_modules
import six
from w3lib.html import remove_entities
from scrapy.utils.python import flatten
from scrapy.item import BaseItem
_ITERABLE_SINGLE_VALUES = dict, BaseItem, six.text_type, bytes
def arg_to_iter(arg):
"""Convert an argument to an iterable. The argument can be a None, single
value, or an iterable.
@ -18,11 +22,12 @@ def arg_to_iter(arg):
"""
if arg is None:
return []
elif not isinstance(arg, (dict, BaseItem)) and hasattr(arg, '__iter__'):
elif not isinstance(arg, _ITERABLE_SINGLE_VALUES) and hasattr(arg, '__iter__'):
return arg
else:
return [arg]
def load_object(path):
"""Load an object given its absolute object path, and return it.
@ -48,6 +53,7 @@ def load_object(path):
return obj
def walk_modules(path, load=False):
"""Loads a module and all its submodules from a the given module path and
returns them. If *any* module throws an exception while importing, that
@ -69,6 +75,7 @@ def walk_modules(path, load=False):
mods.append(submod)
return mods
def extract_regex(regex, text, encoding='utf-8'):
"""Extract a list of unicode strings from the given text/encoding using the following policies:
@ -91,12 +98,13 @@ def extract_regex(regex, text, encoding='utf-8'):
else:
return [remove_entities(unicode(s, encoding), keep=['lt', 'amp']) for s in strings]
def md5sum(file):
"""Calculate the md5 checksum of a file-like object without reading its
whole content in memory.
>>> from StringIO import StringIO
>>> md5sum(StringIO('file content to hash'))
>>> from io import BytesIO
>>> md5sum(BytesIO(b'file content to hash'))
'784406af91dd5a54fbb9c84c2236595a'
"""
m = hashlib.md5()

View File

@ -57,7 +57,6 @@ tests/test_toplevel.py
tests/test_utils_defer.py
tests/test_utils_iterators.py
tests/test_utils_jsonrpc.py
tests/test_utils_misc/__init__.py
tests/test_utils_python.py
tests/test_utils_reqser.py
tests/test_utils_request.py