From e17fdd72766eea6bc81fcfb9e3c24a9929eeeba5 Mon Sep 17 00:00:00 2001 From: Diego Allen Date: Thu, 16 Jun 2016 21:56:24 -0400 Subject: [PATCH] Add set serialization to ScrapyJSONEncoder --- scrapy/utils/serialize.py | 4 +++- tests/test_utils_serialize.py | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/scrapy/utils/serialize.py b/scrapy/utils/serialize.py index 8320be095..9dd72ea71 100644 --- a/scrapy/utils/serialize.py +++ b/scrapy/utils/serialize.py @@ -14,7 +14,9 @@ class ScrapyJSONEncoder(json.JSONEncoder): TIME_FORMAT = "%H:%M:%S" def default(self, o): - if isinstance(o, datetime.datetime): + if isinstance(o, set): + return list(o) + elif 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) diff --git a/tests/test_utils_serialize.py b/tests/test_utils_serialize.py index 278cf91e3..6dc117779 100644 --- a/tests/test_utils_serialize.py +++ b/tests/test_utils_serialize.py @@ -23,9 +23,14 @@ class JsonEncoderTestCase(unittest.TestCase): ts = "10:11:12" dec = Decimal("1000.12") decs = "1000.12" + s = {'foo'} + ss = ['foo'] + dt_set = {dt} + dt_sets = [dts] for input, output in [('foo', 'foo'), (d, ds), (t, ts), (dt, dts), - (dec, decs), (['foo', d], ['foo', ds])]: + (dec, decs), (['foo', d], ['foo', ds]), (s, ss), + (dt_set, dt_sets)]: self.assertEqual(self.encoder.encode(input), json.dumps(output)) def test_encode_deferred(self):