From 73512988493bde3f2a276a33c4cbcdbbd6043546 Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Fri, 3 Apr 2026 12:00:11 -0400 Subject: [PATCH] Fix Pydantic v2 + Sphinx autodoc incompatibility for Daily utils Patch Pydantic's DICT_TYPES check in conf.py to accept Union-wrapped dict types, fixing the autodoc import failure for models using ConfigDict(extra="allow"). --- docs/api/conf.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/api/conf.py b/docs/api/conf.py index cb2153c73..1350c029f 100644 --- a/docs/api/conf.py +++ b/docs/api/conf.py @@ -4,6 +4,19 @@ import sys from datetime import datetime from pathlib import Path +# Fix Pydantic v2 + Sphinx autodoc incompatibility: ConfigDict(extra="allow") fails +# during Sphinx's import because __pydantic_extra__ annotation on BaseModel resolves to +# `Dict[str, Any] | None` whose get_origin() is Union, not dict. Patch the check to +# accept Union-wrapped dict types (i.e., Optional[Dict[str, Any]]). +import pydantic._internal._generate_schema as _pydantic_gs + +_ORIG_DICT_TYPES = _pydantic_gs.DICT_TYPES +# Expand the accepted types to include Union (Optional[Dict[str, Any]]) +import types +import typing + +_pydantic_gs.DICT_TYPES = [*_ORIG_DICT_TYPES, typing.Union, types.UnionType] + # Configure logging logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") logger = logging.getLogger("sphinx-build")