phase 1
This commit is contained in:
@@ -5,6 +5,7 @@ Type mappings for each output format.
|
||||
Used by generators to convert Python types to target framework types.
|
||||
"""
|
||||
|
||||
import dataclasses as dc
|
||||
from typing import Any, Callable, get_args
|
||||
|
||||
# =============================================================================
|
||||
@@ -39,8 +40,12 @@ DJANGO_SPECIAL: dict[str, str] = {
|
||||
def _get_list_inner(type_hint: Any) -> str:
|
||||
"""Get inner type of List[T] for Pydantic."""
|
||||
args = get_args(type_hint)
|
||||
if args and args[0] in (str, int, float, bool):
|
||||
return {str: "str", int: "int", float: "float", bool: "bool"}[args[0]]
|
||||
if args:
|
||||
inner = args[0]
|
||||
if inner in (str, int, float, bool):
|
||||
return {str: "str", int: "int", float: "float", bool: "bool"}[inner]
|
||||
if isinstance(inner, type) and dc.is_dataclass(inner):
|
||||
return inner.__name__
|
||||
return "str"
|
||||
|
||||
|
||||
@@ -54,6 +59,7 @@ PYDANTIC_RESOLVERS: dict[Any, Callable[[Any], str]] = {
|
||||
"dict": lambda _: "Dict[str, Any]",
|
||||
"list": lambda base: f"List[{_get_list_inner(base)}]",
|
||||
"enum": lambda base: base.__name__,
|
||||
"dataclass": lambda base: base.__name__,
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
@@ -72,6 +78,8 @@ def _resolve_ts_list(base: Any) -> str:
|
||||
return "number[]"
|
||||
elif inner is bool:
|
||||
return "boolean[]"
|
||||
elif isinstance(inner, type) and dc.is_dataclass(inner):
|
||||
return f"{inner.__name__}[]"
|
||||
return "string[]"
|
||||
|
||||
|
||||
@@ -85,6 +93,7 @@ TS_RESOLVERS: dict[Any, Callable[[Any], str]] = {
|
||||
"dict": lambda _: "Record<string, unknown>",
|
||||
"list": _resolve_ts_list,
|
||||
"enum": lambda base: base.__name__,
|
||||
"dataclass": lambda base: base.__name__,
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
|
||||
Reference in New Issue
Block a user