From e7050b633db24738ac1dae5036e2c225f2038046 Mon Sep 17 00:00:00 2001 From: Fredrik Bore Date: Mon, 24 Jun 2024 13:16:58 +0200 Subject: [PATCH 1/3] Support using UUID as id --- pygeoapi/util.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pygeoapi/util.py b/pygeoapi/util.py index 7e1f64e..702b27a 100644 --- a/pygeoapi/util.py +++ b/pygeoapi/util.py @@ -38,6 +38,7 @@ import mimetypes import os import re import functools +import uuid from functools import partial from dataclasses import dataclass from datetime import date, datetime, time @@ -383,6 +384,8 @@ def json_serial(obj: Any) -> str: if isinstance(obj, (datetime, date, time)): return obj.isoformat() + elif isinstance(obj, uuid.UUID): + return str(obj) elif isinstance(obj, bytes): try: LOGGER.debug('Returning as UTF-8 decoded bytes') From 5a7cf637550cc4c2ddfdb426e2b54f8014e3a67a Mon Sep 17 00:00:00 2001 From: Fredrik Bore Date: Mon, 24 Jun 2024 13:37:29 +0200 Subject: [PATCH 2/3] Tests --- tests/test_util.py | 4 ++++ 1 file changed, 4 insertions(+) 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') From b19960bdf5d359224f79799eae76a2eb60849494 Mon Sep 17 00:00:00 2001 From: Tom Kralidis Date: Mon, 24 Jun 2024 19:22:23 -0400 Subject: [PATCH 3/3] reorder imports --- pygeoapi/util.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pygeoapi/util.py b/pygeoapi/util.py index 702b27a..4a1ddfd 100644 --- a/pygeoapi/util.py +++ b/pygeoapi/util.py @@ -32,23 +32,23 @@ import base64 from copy import deepcopy from filelock import FileLock -import json -import logging -import mimetypes -import os -import re import functools -import uuid 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 @@ -384,8 +384,6 @@ def json_serial(obj: Any) -> str: if isinstance(obj, (datetime, date, time)): return obj.isoformat() - elif isinstance(obj, uuid.UUID): - return str(obj) elif isinstance(obj, bytes): try: LOGGER.debug('Returning as UTF-8 decoded bytes') @@ -403,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)