From 57a8ff0d23138d87f816f6dc3536bb797239887a Mon Sep 17 00:00:00 2001 From: Aarik Ghosh Date: Thu, 30 Jul 2026 14:53:12 -0400 Subject: [PATCH] feat(json): support pathlib.PurePath and enum.Enum serialization in DefaultJSONProvider --- src/flask/json/provider.py | 7 ++++++- tests/test_json.py | 13 +++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/flask/json/provider.py b/src/flask/json/provider.py index f37cb7b209..1cc12ee822 100644 --- a/src/flask/json/provider.py +++ b/src/flask/json/provider.py @@ -2,7 +2,9 @@ import dataclasses import decimal +import enum import json +import pathlib import typing as t import uuid import weakref @@ -109,9 +111,12 @@ def _default(o: t.Any) -> t.Any: if isinstance(o, date): return http_date(o) - if isinstance(o, (decimal.Decimal, uuid.UUID)): + if isinstance(o, (decimal.Decimal, uuid.UUID, pathlib.PurePath)): return str(o) + if isinstance(o, enum.Enum): + return o.value + if dataclasses and dataclasses.is_dataclass(o): return dataclasses.asdict(o) # type: ignore[arg-type] diff --git a/tests/test_json.py b/tests/test_json.py index 1e2b27dc9c..9a0f319eec 100644 --- a/tests/test_json.py +++ b/tests/test_json.py @@ -344,3 +344,16 @@ def __html__(self): result = json.dumps(ObjectWithHTML()) assert result == '"

test

"' + + +def test_pathlib_and_enum_serialization(): + import enum + import pathlib + + class Status(enum.Enum): + PENDING = "pending" + ACTIVE = "active" + + path = pathlib.Path("test.txt") + assert json.dumps(path) == '"test.txt"' + assert json.dumps(Status.ACTIVE) == '"active"'