Skip to content

Commit 4538e3c

Browse files
committed
Add type_name property to reflection types..
1 parent 5151fdb commit 4538e3c

File tree

3 files changed

+78
-52
lines changed

3 files changed

+78
-52
lines changed

gel/_internal/_edgeql/_schema.py

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,13 @@
55

66
from __future__ import annotations
77

8-
from typing import TYPE_CHECKING, final
8+
from typing import final
99

1010
import re
1111
import uuid
1212

1313
from gel._internal._polyfills._strenum import StrEnum
14-
from gel._internal._schemapath import SchemaPath, TypeName
15-
16-
17-
if TYPE_CHECKING:
18-
from collections.abc import Iterable
14+
from gel._internal._schemapath import ParametricTypeName, SchemaPath, TypeName
1915

2016

2117
@final
@@ -75,44 +71,54 @@ def _get_type_id(name: str, cls: str) -> uuid.UUID:
7571

7672

7773
def get_array_type_id_and_name(
78-
element: str,
79-
) -> tuple[uuid.UUID, TypeName]:
80-
type_id = _get_type_id(f"array<{_mangle_name(element)}>", "Array")
81-
type_name = f"array<{element}>"
82-
return type_id, SchemaPath(type_name)
74+
element: TypeName,
75+
) -> tuple[uuid.UUID, ParametricTypeName]:
76+
type_id = _get_type_id(
77+
f"array<{_mangle_name(element.as_schema_name())}>", "Array"
78+
)
79+
type_name = ParametricTypeName(SchemaPath("std", "array"), [element])
80+
return type_id, type_name
8381

8482

8583
def get_range_type_id_and_name(
86-
element: str,
84+
element: TypeName,
8785
) -> tuple[uuid.UUID, TypeName]:
88-
type_id = _get_type_id(f"range<{_mangle_name(element)}>", "Range")
89-
type_name = f"range<{element}>"
90-
return type_id, SchemaPath(type_name)
86+
type_id = _get_type_id(
87+
f"range<{_mangle_name(element.as_schema_name())}>", "Range"
88+
)
89+
type_name = ParametricTypeName(
90+
SchemaPath("std", "range"),
91+
[element],
92+
)
93+
return type_id, type_name
9194

9295

9396
def get_multirange_type_id_and_name(
94-
element: str,
97+
element: TypeName,
9598
) -> tuple[uuid.UUID, TypeName]:
9699
type_id = _get_type_id(
97-
f"multirange<{_mangle_name(element)}>", "MultiRange"
100+
f"multirange<{_mangle_name(element.as_schema_name())}>", "MultiRange"
98101
)
99-
type_name = f"multirange<{element}>"
100-
return type_id, SchemaPath(type_name)
102+
type_name = ParametricTypeName(
103+
SchemaPath("std", "range"),
104+
[element],
105+
)
106+
return type_id, type_name
101107

102108

103109
def get_tuple_type_id_and_name(
104-
elements: Iterable[str],
105-
) -> tuple[uuid.UUID, TypeName]:
106-
body = ", ".join(elements)
110+
elements: list[TypeName],
111+
) -> tuple[uuid.UUID, ParametricTypeName]:
112+
body = ", ".join(element.as_schema_name() for element in elements)
107113
type_id = _get_type_id(f"tuple<{_mangle_name(body)}>", "Tuple")
108-
type_name = f"tuple<{body}>"
109-
return type_id, SchemaPath(type_name)
114+
type_name = ParametricTypeName(SchemaPath("std", "tuple"), elements)
115+
return type_id, type_name
110116

111117

112118
def get_named_tuple_type_id_and_name(
113-
elements: dict[str, str],
119+
elements: dict[str, TypeName],
114120
) -> tuple[uuid.UUID, TypeName]:
115-
body = ", ".join(f"{n}:{t}" for n, t in elements.items())
121+
body = ", ".join(f"{n}:{t.as_schema_name()}" for n, t in elements.items())
116122
type_id = _get_type_id(f"tuple<{_mangle_name(body)}>", "Tuple")
117123
type_name = f"tuple<{body}>"
118124
return type_id, SchemaPath(type_name)

gel/_internal/_qbmodel/_abstract/_primitive.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ def __set__(
232232
@classmethod
233233
def __gel_reflection__(cls) -> type[GelPrimitiveType.__gel_reflection__]: # pyright: ignore [reportIncompatibleVariableOverride]
234234
tid, tname = _edgeql.get_array_type_id_and_name(
235-
str(cls.__element_type__.__gel_reflection__.name)
235+
cls.__element_type__.__gel_reflection__.name
236236
)
237237

238238
class __gel_reflection__(GelPrimitiveType.__gel_reflection__): # noqa: N801
@@ -320,7 +320,7 @@ def __set__(
320320
@classmethod
321321
def __gel_reflection__(cls) -> type[GelPrimitiveType.__gel_reflection__]: # pyright: ignore [reportIncompatibleVariableOverride]
322322
tid, tname = _edgeql.get_tuple_type_id_and_name(
323-
str(el.__gel_reflection__.name) for el in cls.__element_types__
323+
[el.__gel_reflection__.name for el in cls.__element_types__]
324324
)
325325

326326
class __gel_reflection__(GelPrimitiveType.__gel_reflection__): # noqa: N801
@@ -362,7 +362,7 @@ def __set__(
362362
@classmethod
363363
def __gel_reflection__(cls) -> type[GelPrimitiveType.__gel_reflection__]: # pyright: ignore [reportIncompatibleVariableOverride]
364364
tid, tname = _edgeql.get_range_type_id_and_name(
365-
str(cls.__element_type__.__gel_reflection__.name)
365+
cls.__element_type__.__gel_reflection__.name
366366
)
367367

368368
class __gel_reflection__(GelPrimitiveType.__gel_reflection__): # noqa: N801

gel/_internal/_reflection/_types.py

Lines changed: 43 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
from gel._internal import _dataclass_extras
2525
from gel._internal import _edgeql
26-
from gel._internal._schemapath import SchemaPath
26+
from gel._internal._schemapath import ParametricTypeName, TypeName
2727

2828
from . import _query
2929
from ._base import struct, sobject, SchemaObject
@@ -69,7 +69,7 @@ def __str__(self) -> str:
6969

7070
@functools.cached_property
7171
def edgeql(self) -> str:
72-
return self.schemapath.as_quoted_schema_name()
72+
return self.type_name.as_quoted_schema_name()
7373

7474
@functools.cached_property
7575
def generic(self) -> bool:
@@ -80,6 +80,10 @@ def generic(self) -> bool:
8080
and sp.name.startswith("any")
8181
)
8282

83+
@functools.cached_property
84+
def type_name(self) -> TypeName:
85+
return self.schemapath
86+
8387
def assignable_from(
8488
self,
8589
other: Type,
@@ -182,10 +186,6 @@ class InheritingType(Type):
182186
bases: tuple[TypeRef, ...]
183187
ancestors: tuple[TypeRef, ...]
184188

185-
@functools.cached_property
186-
def edgeql(self) -> str:
187-
return self.schemapath.as_quoted_schema_name()
188-
189189
def _assignable_from(
190190
self,
191191
other: Type,
@@ -330,11 +330,7 @@ def __post_init__(self) -> None:
330330

331331
@functools.cached_property
332332
def edgeql(self) -> str:
333-
return str(self.schemapath)
334-
335-
@functools.cached_property
336-
def schemapath(self) -> SchemaPath:
337-
return SchemaPath.from_segments(self.name)
333+
return str(self.type_name)
338334

339335

340336
@struct
@@ -361,6 +357,15 @@ def get_element_type(self, schema: Schema) -> Type:
361357
else:
362358
return schema[self._element_type_id]
363359

360+
@functools.cached_property
361+
def type_name(self) -> TypeName:
362+
if self.element_type is None:
363+
return self.schemapath
364+
else:
365+
return ParametricTypeName(
366+
self.schemapath, [self.element_type.type_name]
367+
)
368+
364369
@functools.cached_property
365370
def _element_type_id(self) -> str:
366371
raise NotImplementedError("_element_type_id")
@@ -457,6 +462,19 @@ def get_element_types(self, schema: Schema) -> tuple[Type, ...]:
457462
else:
458463
return tuple(schema[el_tid] for el_tid in self._element_type_ids)
459464

465+
@functools.cached_property
466+
def type_name(self) -> TypeName:
467+
if self.element_types is None:
468+
return self.schemapath
469+
else:
470+
return ParametricTypeName(
471+
self.schemapath,
472+
[
473+
element_type.type_name
474+
for element_type in self.element_types
475+
],
476+
)
477+
460478
@functools.cached_property
461479
def _element_type_ids(self) -> list[str]:
462480
raise NotImplementedError("_element_type_ids")
@@ -573,8 +591,8 @@ def _element_type_id(self) -> str:
573591
return self.array_element_id
574592

575593
def get_id_and_name(self, element_type: Type) -> tuple[str, str]:
576-
id_, name = _edgeql.get_array_type_id_and_name(element_type.name)
577-
return str(id_), name.as_schema_name()
594+
id_, _ = _edgeql.get_array_type_id_and_name(element_type.type_name)
595+
return str(id_), "std::array"
578596

579597

580598
@struct
@@ -599,8 +617,8 @@ def _element_type_id(self) -> str:
599617
return self.range_element_id
600618

601619
def get_id_and_name(self, element_type: Type) -> tuple[str, str]:
602-
id_, name = _edgeql.get_range_type_id_and_name(element_type.name)
603-
return str(id_), name.as_schema_name()
620+
id_, _ = _edgeql.get_range_type_id_and_name(element_type.type_name)
621+
return str(id_), "std::range"
604622

605623

606624
@struct
@@ -625,8 +643,10 @@ def _element_type_id(self) -> str:
625643
return self.multirange_element_id
626644

627645
def get_id_and_name(self, element_type: Type) -> tuple[str, str]:
628-
id_, name = _edgeql.get_multirange_type_id_and_name(element_type.name)
629-
return str(id_), name.as_schema_name()
646+
id_, _ = _edgeql.get_multirange_type_id_and_name(
647+
element_type.type_name
648+
)
649+
return str(id_), "std::multirange"
630650

631651

632652
@struct
@@ -662,10 +682,10 @@ def kind(self) -> Literal[TypeKind.Tuple]:
662682
def get_id_and_name(
663683
self, element_types: tuple[Type, ...]
664684
) -> tuple[str, str]:
665-
id_, name = _edgeql.get_tuple_type_id_and_name(
666-
el.name for el in element_types
685+
id_, _ = _edgeql.get_tuple_type_id_and_name(
686+
[el.type_name for el in element_types]
667687
)
668-
return str(id_), name.as_schema_name()
688+
return str(id_), "std::tuple"
669689

670690

671691
@struct
@@ -686,15 +706,15 @@ def kind(self) -> Literal[TypeKind.NamedTuple]:
686706
def get_id_and_name(
687707
self, element_types: tuple[Type, ...]
688708
) -> tuple[str, str]:
689-
id_, name = _edgeql.get_named_tuple_type_id_and_name(
709+
id_, _ = _edgeql.get_named_tuple_type_id_and_name(
690710
{
691-
el.name: el_type.name
711+
el.name: el_type.type_name
692712
for el, el_type in zip(
693713
self.tuple_elements, element_types, strict=True
694714
)
695715
}
696716
)
697-
return str(id_), name.as_schema_name()
717+
return str(id_), "std::tuple"
698718

699719

700720
def compare_type_generality(a: Type, b: Type, *, schema: Schema) -> int:

0 commit comments

Comments
 (0)