From c529520491a9baa5fce25daca6dc9086f12ba6bf Mon Sep 17 00:00:00 2001 From: Alexander Olekhnovich Date: Tue, 14 Jun 2022 14:40:54 +0200 Subject: [PATCH] Fix JSON serialization for pathlib.Path --- pghoard/common.py | 2 ++ test/test_common.py | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/pghoard/common.py b/pghoard/common.py index 5cbb202a..8ca0957c 100644 --- a/pghoard/common.py +++ b/pghoard/common.py @@ -246,6 +246,8 @@ def default_json_serialization(obj): return obj.isoformat().replace("+00:00", "Z") # assume UTC for datetime objects without a timezone return obj.isoformat() + "Z" + elif isinstance(obj, Path): + return str(obj) return None diff --git a/test/test_common.py b/test/test_common.py index 7948488b..26eea447 100644 --- a/test/test_common.py +++ b/test/test_common.py @@ -7,6 +7,8 @@ import datetime import json import os +from pathlib import Path +from typing import Any, Dict import pytest from rohmu.errors import Error @@ -50,7 +52,7 @@ def get_pgpass_contents(): os.environ["HOME"] = original_home def test_json_serialization(self, tmpdir): - ob = { + ob: Dict[str, Any] = { "foo": [ "bar", "baz", @@ -58,9 +60,10 @@ def test_json_serialization(self, tmpdir): ], "t": datetime.datetime(2015, 9, 1, 4, 0, 0), "f": 0.42, + "path": Path("/some/path") } res = json.dumps(ob, default=default_json_serialization, separators=(",", ":"), sort_keys=True) - assert res == '{"f":0.42,"foo":["bar","baz",42],"t":"2015-09-01T04:00:00Z"}' + assert res == '{"f":0.42,"foo":["bar","baz",42],"path":"/some/path","t":"2015-09-01T04:00:00Z"}' assert isinstance(json_encode(ob), str) assert isinstance(json_encode(ob, binary=True), bytes) @@ -71,7 +74,7 @@ def test_json_serialization(self, tmpdir): write_json_file(output_file, ob) with open(output_file, "r") as fp: ob2 = json.load(fp) - ob_ = dict(ob, t=ob["t"].isoformat() + "Z") + ob_ = dict(ob, t=ob["t"].isoformat() + "Z", path=str(ob["path"])) assert ob2 == ob_ write_json_file(output_file, ob, compact=True)