Source code for project_composer.utils.encoding

import datetime
import json
from pathlib import Path

from ..app_storage import AppNode


[docs]class ExtendedJsonEncoder(json.JSONEncoder): """ Extended JSON encoder to support more basic and internal object types. Sample usage: :: import json json.dumps({}, indent=4, cls=ExtendedJsonEncoder) """
[docs] def default(self, obj): # Support for pathlib.Path to a string if isinstance(obj, Path): return str(obj) # Support for set to a list if isinstance(obj, set): return list(obj) # Support for AppNode to a dict if isinstance(obj, AppNode): return obj.to_payload() if isinstance(obj, (datetime.datetime, datetime.date, datetime.time)): return obj.isoformat() # Let the base class default method raise the TypeError return json.JSONEncoder.default(self, obj)