Skip to content

Commit d378567

Browse files
chore(types): rebuild Pydantic models after all types are defined
1 parent f182d0c commit d378567

3 files changed

Lines changed: 13 additions & 15 deletions

File tree

src/runloop_api_client/types/__init__.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from __future__ import annotations
44

5+
from . import devboxes
6+
from .. import _compat
57
from .shared import (
68
AfterIdle as AfterIdle,
79
LaunchParameters as LaunchParameters,
@@ -81,3 +83,14 @@
8183
from .devbox_write_file_contents_params import DevboxWriteFileContentsParams as DevboxWriteFileContentsParams
8284
from .devbox_async_execution_detail_view import DevboxAsyncExecutionDetailView as DevboxAsyncExecutionDetailView
8385
from .devbox_read_file_contents_response import DevboxReadFileContentsResponse as DevboxReadFileContentsResponse
86+
87+
# Rebuild cyclical models only after all modules are imported.
88+
# This ensures that, when building the deferred (due to cyclical references) model schema,
89+
# Pydantic can resolve the necessary references.
90+
# See: https://github.com/pydantic/pydantic/issues/11250 for more context.
91+
if _compat.PYDANTIC_V2:
92+
devboxes.code_segment_info_response.CodeSegmentInfoResponse.model_rebuild(_parent_namespace_depth=0)
93+
devboxes.document_symbol.DocumentSymbol.model_rebuild(_parent_namespace_depth=0)
94+
else:
95+
devboxes.code_segment_info_response.CodeSegmentInfoResponse.update_forward_refs() # type: ignore
96+
devboxes.document_symbol.DocumentSymbol.update_forward_refs() # type: ignore

src/runloop_api_client/types/devboxes/code_segment_info_response.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from typing import List, Optional
66

77
from .file_uri import FileUri
8-
from ..._compat import PYDANTIC_V2
98
from ..._models import BaseModel
109
from .base_range import BaseRange
1110
from .base_location import BaseLocation
@@ -45,10 +44,3 @@ class CodeSegmentInfoResponse(BaseModel):
4544

4645

4746
from .document_symbol import DocumentSymbol
48-
49-
if PYDANTIC_V2:
50-
CodeSegmentInfoResponse.model_rebuild()
51-
Hover.model_rebuild()
52-
else:
53-
CodeSegmentInfoResponse.update_forward_refs() # type: ignore
54-
Hover.update_forward_refs() # type: ignore

src/runloop_api_client/types/devboxes/document_symbol.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from pydantic import Field as FieldInfo
88

99
from .range import Range
10-
from ..._compat import PYDANTIC_V2
1110
from ..._models import BaseModel
1211
from .symbol_tag import SymbolTag
1312
from .symbol_kind import SymbolKind
@@ -56,9 +55,3 @@ class DocumentSymbol(BaseModel):
5655
# To access properties that are not valid identifiers you can use `getattr`, e.g.
5756
# `getattr(obj, '$type')`
5857
def __getattr__(self, attr: str) -> object: ...
59-
60-
61-
if PYDANTIC_V2:
62-
DocumentSymbol.model_rebuild()
63-
else:
64-
DocumentSymbol.update_forward_refs() # type: ignore

0 commit comments

Comments
 (0)