serialize.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import json
  2. import datetime
  3. import decimal
  4. from twisted.internet import defer
  5. from scrapy.http import Request, Response
  6. from scrapy.item import BaseItem
  7. class ScrapyJSONEncoder(json.JSONEncoder):
  8. DATE_FORMAT = "%Y-%m-%d"
  9. TIME_FORMAT = "%H:%M:%S"
  10. def default(self, o):
  11. if isinstance(o, set):
  12. return list(o)
  13. elif isinstance(o, datetime.datetime):
  14. return o.strftime("%s %s" % (self.DATE_FORMAT, self.TIME_FORMAT))
  15. elif isinstance(o, datetime.date):
  16. return o.strftime(self.DATE_FORMAT)
  17. elif isinstance(o, datetime.time):
  18. return o.strftime(self.TIME_FORMAT)
  19. elif isinstance(o, decimal.Decimal):
  20. return str(o)
  21. elif isinstance(o, defer.Deferred):
  22. return str(o)
  23. elif isinstance(o, BaseItem):
  24. return dict(o)
  25. elif isinstance(o, Request):
  26. return "<%s %s %s>" % (type(o).__name__, o.method, o.url)
  27. elif isinstance(o, Response):
  28. return "<%s %s %s>" % (type(o).__name__, o.status, o.url)
  29. else:
  30. return super(ScrapyJSONEncoder, self).default(o)
  31. class ScrapyJSONDecoder(json.JSONDecoder):
  32. pass