diff --git a/pygeoapi/util.py b/pygeoapi/util.py index 7e1f64e..4a1ddfd 100644 --- a/pygeoapi/util.py +++ b/pygeoapi/util.py @@ -32,22 +32,23 @@ import base64 from copy import deepcopy from filelock import FileLock -import json -import logging -import mimetypes -import os -import re import functools from functools import partial from dataclasses import dataclass from datetime import date, datetime, time from decimal import Decimal from enum import Enum +import json +import logging +import mimetypes +import os import pathlib from pathlib import Path +import re from typing import Any, IO, Union, List, Optional, Callable from urllib.parse import urlparse from urllib.request import urlopen +import uuid import dateutil.parser from shapely import ops @@ -400,6 +401,8 @@ def json_serial(obj: Any) -> str: return l10n.locale2str(obj) elif isinstance(obj, (pathlib.PurePath, Path)): return str(obj) + elif isinstance(obj, uuid.UUID): + return str(obj) else: msg = f'{obj} type {type(obj)} not serializable' LOGGER.error(msg) diff --git a/tests/test_util.py b/tests/test_util.py index 262cfcd..c71ce80 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -33,6 +33,7 @@ from contextlib import nullcontext as does_not_raise from copy import deepcopy from io import StringIO from unittest import mock +import uuid import pytest from pyproj.exceptions import CRSError @@ -142,6 +143,9 @@ def test_json_serial(): d = Decimal(1.0) assert util.json_serial(d) == 1.0 + d = uuid.UUID('12345678-1234-5678-1234-567812345678') + assert util.json_serial(d) == '12345678-1234-5678-1234-567812345678' + with pytest.raises(TypeError): util.json_serial('foo')