Skip to content

Commit 456dab0

Browse files
committed
refactor: Move camel_to_snake to util.py to fix cyclic import
1 parent df192e5 commit 456dab0

3 files changed

Lines changed: 17 additions & 13 deletions

File tree

src/datamodel_code_generator/parser/base.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,9 @@
6767
from datamodel_code_generator.parser import DefaultPutDict, LiteralType
6868
from datamodel_code_generator.parser._graph import stable_toposort
6969
from datamodel_code_generator.parser._scc import find_circular_sccs, strongly_connected_components
70-
from datamodel_code_generator.reference import ModelResolver, ModelType, Reference, camel_to_snake
70+
from datamodel_code_generator.reference import ModelResolver, ModelType, Reference
7171
from datamodel_code_generator.types import DataType, DataTypeManager, StrictTypes
72+
from datamodel_code_generator.util import camel_to_snake
7273

7374
if TYPE_CHECKING:
7475
from collections.abc import Iterable, Iterator, Mapping, Sequence

src/datamodel_code_generator/reference.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
from typing_extensions import TypeIs
3737

3838
from datamodel_code_generator import Error
39-
from datamodel_code_generator.util import PYDANTIC_V2, ConfigDict, model_validator
39+
from datamodel_code_generator.util import PYDANTIC_V2, ConfigDict, camel_to_snake, model_validator
4040

4141
if TYPE_CHECKING:
4242
from collections.abc import Generator, Iterator, Mapping, Sequence
@@ -221,17 +221,6 @@ def context_variable(setter: Callable[[T], None], current_value: T, new_value: T
221221
setter(previous_value)
222222

223223

224-
_UNDER_SCORE_1: Pattern[str] = re.compile(r"([^_])([A-Z][a-z]+)")
225-
_UNDER_SCORE_2: Pattern[str] = re.compile(r"([a-z0-9])([A-Z])")
226-
227-
228-
@lru_cache
229-
def camel_to_snake(string: str) -> str:
230-
"""Convert camelCase or PascalCase to snake_case."""
231-
subbed = _UNDER_SCORE_1.sub(r"\1_\2", string)
232-
return _UNDER_SCORE_2.sub(r"\1_\2", subbed).lower()
233-
234-
235224
class FieldNameResolver:
236225
"""Converts schema field names to valid Python identifiers."""
237226

src/datamodel_code_generator/util.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
from __future__ import annotations
88

99
import copy
10+
import re
11+
from functools import lru_cache
12+
from re import Pattern
1013
from typing import TYPE_CHECKING, Any, Callable, Literal, TypeVar, overload
1114

1215
import pydantic
@@ -140,3 +143,14 @@ class BaseModel(_BaseModel):
140143

141144
if PYDANTIC_V2:
142145
model_config = ConfigDict(strict=False) # pyright: ignore[reportAssignmentType]
146+
147+
148+
_UNDER_SCORE_1: Pattern[str] = re.compile(r"([^_])([A-Z][a-z]+)")
149+
_UNDER_SCORE_2: Pattern[str] = re.compile(r"([a-z0-9])([A-Z])")
150+
151+
152+
@lru_cache
153+
def camel_to_snake(string: str) -> str:
154+
"""Convert camelCase or PascalCase to snake_case."""
155+
subbed = _UNDER_SCORE_1.sub(r"\1_\2", string)
156+
return _UNDER_SCORE_2.sub(r"\1_\2", subbed).lower()

0 commit comments

Comments
 (0)