Source code for air_sdk.air_json_encoder
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: MIT
from datetime import datetime
from json import JSONEncoder
from typing import Any
from uuid import UUID
from air_sdk.utils import datetime_to_iso_string
[docs]
class AirJSONEncoder(JSONEncoder):
"""`JSONEncoder` with Air-specific decoding logic."""
[docs]
def default(self, o: Any) -> Any:
"""`JSONEncoder.default` with ability to decode `datetime` and UUID objects."""
from air_sdk.air_model import AirModel
if isinstance(o, datetime):
return datetime_to_iso_string(o)
if isinstance(o, UUID):
return str(o)
if isinstance(o, AirModel):
pk = getattr(o, '__pk__', None)
if pk is None:
raise ValueError(
f'The `{o.__class__.__name__}` provided is not JSON serializable: '
'__pk__ is None'
)
return str(pk)
return super().default(o)