diff --git a/scrapy/tests/test_serialization.py b/scrapy/tests/test_serialization.py deleted file mode 100644 index db60f8673..000000000 --- a/scrapy/tests/test_serialization.py +++ /dev/null @@ -1,33 +0,0 @@ -from twisted.trial import unittest - -class SerializationTest(unittest.TestCase): - - def setUp(self): - try: - import json - except ImportError: - try: - import simplejson - except ImportError, e: - raise unittest.SkipTest(e) - - def test_string_serialization(self): - """Test simple string serialization""" - from scrapy.utils.serialization import serialize, unserialize, serialize_funcs - - s = "string to serialize" - for format in serialize_funcs.iterkeys(): - self.assertEqual(s, unserialize(serialize(s))) - - def test_dict_serialization(self): - """Test dict serialization""" - from scrapy.utils.serialization import serialize, unserialize, serialize_funcs - - # using only string keys/values since it's the only data type that - # works with all serializers - d = {'one': 'item one', 'two': 'item two'} - for format in serialize_funcs.iterkeys(): - self.assertEqual(d, unserialize(serialize(d))) - -if __name__ == "__main__": - unittest.main() diff --git a/scrapy/utils/serialization.py b/scrapy/utils/serialization.py deleted file mode 100644 index e085df360..000000000 --- a/scrapy/utils/serialization.py +++ /dev/null @@ -1,78 +0,0 @@ -""" -This module provides a universal API for different serialization formats. - -Keep in mind that not all formats support all types for serialization, and some -formats (like pprint) may be unsafe for unserialization (like pprint) but it -may still very convenient for serialization. -""" - -import datetime -import decimal -import cPickle as pickle -import pprint - -try: - import json -except ImportError: - import simplejson as json - - -class ScrapyJSONEncoder(json.JSONEncoder): - """ - JSONEncoder subclass that knows how to encode date/time and decimal types. - """ - - DATE_FORMAT = "%Y-%m-%d" - TIME_FORMAT = "%H:%M:%S" - - def default(self, o): - if isinstance(o, datetime.datetime): - return o.strftime("%s %s" % (self.DATE_FORMAT, self.TIME_FORMAT)) - elif isinstance(o, datetime.date): - return o.strftime(self.DATE_FORMAT) - elif isinstance(o, datetime.time): - return o.strftime(self.TIME_FORMAT) - elif isinstance(o, decimal.Decimal): - return str(o) - else: - return super(ScrapyJSONEncoder, self).default(o) - -serialize_funcs = { - 'json': lambda obj: json.dumps(obj, cls=ScrapyJSONEncoder), - 'pprint': lambda obj: pprint.pformat(obj), - 'pickle': lambda obj: pickle.dumps(obj), -} - -unserialize_funcs = { - 'json': lambda text: json.loads(text), - 'pprint': lambda text: eval(text), - 'pickle': lambda text: pickle.loads(text), -} - -def serialize(obj, format='pickle'): - """ - Main entrance point for serialization. - - Supported formats: pickle, json, pprint - """ - try: - func = serialize_funcs[format] - return func(obj) - except KeyError: - raise TypeError("Unknown serialization format: %s" % format) - -def unserialize(text, format='pickle'): - """ - Main entrance point for unserialization. - """ - try: - func = unserialize_funcs[format] - return func(text) - except KeyError: - raise TypeError("Unknown serialization format: %s" % format) - -def parse_jsondatetime(text): - if isinstance(text, basestring): - return datetime.datetime.strptime(text, "%s %s" % \ - (ScrapyJSONEncoder.DATE_FORMAT, ScrapyJSONEncoder.TIME_FORMAT)) -