| 10 | |
| 11 | |
| 12 | class ScrapyJSONEncoder(json.JSONEncoder): |
| 13 | DATE_FORMAT = "%Y-%m-%d" |
| 14 | TIME_FORMAT = "%H:%M:%S" |
| 15 | |
| 16 | def default(self, o: Any) -> Any: |
| 17 | if isinstance(o, set): |
| 18 | return list(o) |
| 19 | if isinstance(o, datetime.datetime): |
| 20 | return o.strftime(f"{self.DATE_FORMAT} {self.TIME_FORMAT}") |
| 21 | if isinstance(o, datetime.date): |
| 22 | return o.strftime(self.DATE_FORMAT) |
| 23 | if isinstance(o, datetime.time): |
| 24 | return o.strftime(self.TIME_FORMAT) |
| 25 | if isinstance(o, decimal.Decimal): |
| 26 | return str(o) |
| 27 | if isinstance(o, defer.Deferred): |
| 28 | return str(o) |
| 29 | if isinstance(o, Request): |
| 30 | return f"<{type(o).__name__} {o.method} {o.url}>" |
| 31 | if isinstance(o, Response): |
| 32 | return f"<{type(o).__name__} {o.status} {o.url}>" |
| 33 | if is_item(o): |
| 34 | return ItemAdapter(o).asdict() |
| 35 | return super().default(o) |