Skip to content

Commit cc5d220

Browse files
Added Enum explicit types
1 parent 67cd201 commit cc5d220

File tree

2 files changed

+64
-54
lines changed

2 files changed

+64
-54
lines changed

schema_salad/metaschema.py

Lines changed: 50 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1455,7 +1455,7 @@ def save(
14551455
def __init__(
14561456
self,
14571457
name: str,
1458-
type_: ArraySchema | EnumSchema | Literal["null", "boolean", "int", "long", "float", "double", "string"] | MapSchema | RecordSchema | Sequence[ArraySchema | EnumSchema | Literal["null", "boolean", "int", "long", "float", "double", "string"] | MapSchema | RecordSchema | UnionSchema | str] | UnionSchema | str,
1458+
type_: ArraySchema | EnumSchema | MapSchema | PrimitiveType | RecordSchema | Sequence[ArraySchema | EnumSchema | MapSchema | PrimitiveType | RecordSchema | UnionSchema | str] | UnionSchema | str,
14591459
doc: None | Sequence[str] | str = None,
14601460
extension_fields: MutableMapping[str, Any] | None = None,
14611461
loadingOptions: LoadingOptions | None = None,
@@ -1656,7 +1656,7 @@ def save(
16561656

16571657
def __init__(
16581658
self,
1659-
type_: Literal["record"],
1659+
type_: Record_name,
16601660
fields: None | Sequence[RecordField] = None,
16611661
extension_fields: MutableMapping[str, Any] | None = None,
16621662
loadingOptions: LoadingOptions | None = None,
@@ -1928,7 +1928,7 @@ def save(
19281928
def __init__(
19291929
self,
19301930
symbols: Sequence[str],
1931-
type_: Literal["enum"],
1931+
type_: Enum_name,
19321932
name: None | str = None,
19331933
extension_fields: MutableMapping[str, Any] | None = None,
19341934
loadingOptions: LoadingOptions | None = None,
@@ -2129,8 +2129,8 @@ def save(
21292129

21302130
def __init__(
21312131
self,
2132-
items: ArraySchema | EnumSchema | Literal["null", "boolean", "int", "long", "float", "double", "string"] | MapSchema | RecordSchema | Sequence[ArraySchema | EnumSchema | Literal["null", "boolean", "int", "long", "float", "double", "string"] | MapSchema | RecordSchema | UnionSchema | str] | UnionSchema | str,
2133-
type_: Literal["array"],
2132+
items: ArraySchema | EnumSchema | MapSchema | PrimitiveType | RecordSchema | Sequence[ArraySchema | EnumSchema | MapSchema | PrimitiveType | RecordSchema | UnionSchema | str] | UnionSchema | str,
2133+
type_: Array_name,
21342134
extension_fields: MutableMapping[str, Any] | None = None,
21352135
loadingOptions: LoadingOptions | None = None,
21362136
) -> None:
@@ -2329,8 +2329,8 @@ def save(
23292329

23302330
def __init__(
23312331
self,
2332-
type_: Literal["map"],
2333-
values: ArraySchema | EnumSchema | Literal["null", "boolean", "int", "long", "float", "double", "string"] | MapSchema | RecordSchema | Sequence[ArraySchema | EnumSchema | Literal["null", "boolean", "int", "long", "float", "double", "string"] | MapSchema | RecordSchema | UnionSchema | str] | UnionSchema | str,
2332+
type_: Map_name,
2333+
values: ArraySchema | EnumSchema | MapSchema | PrimitiveType | RecordSchema | Sequence[ArraySchema | EnumSchema | MapSchema | PrimitiveType | RecordSchema | UnionSchema | str] | UnionSchema | str,
23342334
extension_fields: MutableMapping[str, Any] | None = None,
23352335
loadingOptions: LoadingOptions | None = None,
23362336
) -> None:
@@ -2529,8 +2529,8 @@ def save(
25292529

25302530
def __init__(
25312531
self,
2532-
names: ArraySchema | EnumSchema | Literal["null", "boolean", "int", "long", "float", "double", "string"] | MapSchema | RecordSchema | Sequence[ArraySchema | EnumSchema | Literal["null", "boolean", "int", "long", "float", "double", "string"] | MapSchema | RecordSchema | UnionSchema | str] | UnionSchema | str,
2533-
type_: Literal["union"],
2532+
names: ArraySchema | EnumSchema | MapSchema | PrimitiveType | RecordSchema | Sequence[ArraySchema | EnumSchema | MapSchema | PrimitiveType | RecordSchema | UnionSchema | str] | UnionSchema | str,
2533+
type_: Union_name,
25342534
extension_fields: MutableMapping[str, Any] | None = None,
25352535
loadingOptions: LoadingOptions | None = None,
25362536
) -> None:
@@ -3861,7 +3861,7 @@ def save(
38613861
def __init__(
38623862
self,
38633863
name: str,
3864-
type_: ArraySchema | EnumSchema | Literal["null", "boolean", "int", "long", "float", "double", "string"] | MapSchema | RecordSchema | Sequence[ArraySchema | EnumSchema | Literal["null", "boolean", "int", "long", "float", "double", "string"] | MapSchema | RecordSchema | UnionSchema | str] | UnionSchema | str,
3864+
type_: ArraySchema | EnumSchema | MapSchema | PrimitiveType | RecordSchema | Sequence[ArraySchema | EnumSchema | MapSchema | PrimitiveType | RecordSchema | UnionSchema | str] | UnionSchema | str,
38653865
doc: None | Sequence[str] | str = None,
38663866
jsonldPredicate: JsonldPredicate | None | str = None,
38673867
default: Any | None = None,
@@ -4690,7 +4690,7 @@ def save(
46904690
def __init__(
46914691
self,
46924692
name: str,
4693-
type_: Literal["record"],
4693+
type_: Record_name,
46944694
inVocab: None | bool = None,
46954695
fields: None | Sequence[SaladRecordField] = None,
46964696
doc: None | Sequence[str] | str = None,
@@ -5439,7 +5439,7 @@ def save(
54395439
def __init__(
54405440
self,
54415441
symbols: Sequence[str],
5442-
type_: Literal["enum"],
5442+
type_: Enum_name,
54435443
name: None | str = None,
54445444
inVocab: None | bool = None,
54455445
doc: None | Sequence[str] | str = None,
@@ -6130,8 +6130,8 @@ def save(
61306130
def __init__(
61316131
self,
61326132
name: str,
6133-
type_: Literal["map"],
6134-
values: ArraySchema | EnumSchema | Literal["null", "boolean", "int", "long", "float", "double", "string"] | MapSchema | RecordSchema | Sequence[ArraySchema | EnumSchema | Literal["null", "boolean", "int", "long", "float", "double", "string"] | MapSchema | RecordSchema | UnionSchema | str] | UnionSchema | str,
6133+
type_: Map_name,
6134+
values: ArraySchema | EnumSchema | MapSchema | PrimitiveType | RecordSchema | Sequence[ArraySchema | EnumSchema | MapSchema | PrimitiveType | RecordSchema | UnionSchema | str] | UnionSchema | str,
61356135
inVocab: None | bool = None,
61366136
doc: None | Sequence[str] | str = None,
61376137
docParent: None | str = None,
@@ -6761,8 +6761,8 @@ def save(
67616761
def __init__(
67626762
self,
67636763
name: str,
6764-
names: ArraySchema | EnumSchema | Literal["null", "boolean", "int", "long", "float", "double", "string"] | MapSchema | RecordSchema | Sequence[ArraySchema | EnumSchema | Literal["null", "boolean", "int", "long", "float", "double", "string"] | MapSchema | RecordSchema | UnionSchema | str] | UnionSchema | str,
6765-
type_: Literal["union"],
6764+
names: ArraySchema | EnumSchema | MapSchema | PrimitiveType | RecordSchema | Sequence[ArraySchema | EnumSchema | MapSchema | PrimitiveType | RecordSchema | UnionSchema | str] | UnionSchema | str,
6765+
type_: Union_name,
67666766
inVocab: None | bool = None,
67676767
doc: None | Sequence[str] | str = None,
67686768
docParent: None | str = None,
@@ -7279,7 +7279,7 @@ def save(
72797279
def __init__(
72807280
self,
72817281
name: str,
7282-
type_: Literal["documentation"],
7282+
type_: Documentation_name,
72837283
inVocab: None | bool = None,
72847284
doc: None | Sequence[str] | str = None,
72857285
docParent: None | str = None,
@@ -7387,9 +7387,10 @@ def __init__(
73877387
None_type: Final[_Loader[None]] = _PrimitiveLoader(type(None))
73887388
Any_type: Final[_Loader[Any]] = _AnyLoader()
73897389
longtype: Final[_Loader[i64]] = _PrimitiveLoader(i64)
7390-
PrimitiveTypeLoader: Final[
7391-
_Loader[Literal["null", "boolean", "int", "long", "float", "double", "string"]]
7392-
] = _EnumLoader(
7390+
PrimitiveType: TypeAlias = Literal[
7391+
"null", "boolean", "int", "long", "float", "double", "string"
7392+
]
7393+
PrimitiveTypeLoader: Final[_Loader[PrimitiveType]] = _EnumLoader(
73937394
(
73947395
"null",
73957396
"boolean",
@@ -7415,7 +7416,8 @@ def __init__(
74157416
double: double precision (64-bit) IEEE 754 floating-point number
74167417
string: Unicode character sequence
74177418
"""
7418-
AnyLoader: Final[_Loader[Literal["Any"]]] = _EnumLoader(("Any",), "Any")
7419+
Any_: TypeAlias = Literal["Any"]
7420+
Any_Loader: Final[_Loader[Any_]] = _EnumLoader(("Any",), "Any_")
74197421
"""
74207422
The **Any** type validates for any non-null value.
74217423
"""
@@ -7468,8 +7470,8 @@ def __init__(
74687470
_Loader[
74697471
ArraySchema
74707472
| EnumSchema
7471-
| Literal["null", "boolean", "int", "long", "float", "double", "string"]
74727473
| MapSchema
7474+
| PrimitiveType
74737475
| RecordSchema
74747476
| UnionSchema
74757477
| str
@@ -7490,8 +7492,8 @@ def __init__(
74907492
Sequence[
74917493
ArraySchema
74927494
| EnumSchema
7493-
| Literal["null", "boolean", "int", "long", "float", "double", "string"]
74947495
| MapSchema
7496+
| PrimitiveType
74957497
| RecordSchema
74967498
| UnionSchema
74977499
| str
@@ -7504,14 +7506,14 @@ def __init__(
75047506
_Loader[
75057507
ArraySchema
75067508
| EnumSchema
7507-
| Literal["null", "boolean", "int", "long", "float", "double", "string"]
75087509
| MapSchema
7510+
| PrimitiveType
75097511
| RecordSchema
75107512
| Sequence[
75117513
ArraySchema
75127514
| EnumSchema
7513-
| Literal["null", "boolean", "int", "long", "float", "double", "string"]
75147515
| MapSchema
7516+
| PrimitiveType
75157517
| RecordSchema
75167518
| UnionSchema
75177519
| str
@@ -7535,14 +7537,14 @@ def __init__(
75357537
_Loader[
75367538
ArraySchema
75377539
| EnumSchema
7538-
| Literal["null", "boolean", "int", "long", "float", "double", "string"]
75397540
| MapSchema
7541+
| PrimitiveType
75407542
| RecordSchema
75417543
| Sequence[
75427544
ArraySchema
75437545
| EnumSchema
7544-
| Literal["null", "boolean", "int", "long", "float", "double", "string"]
75457546
| MapSchema
7547+
| PrimitiveType
75467548
| RecordSchema
75477549
| UnionSchema
75487550
| str
@@ -7569,10 +7571,9 @@ def __init__(
75697571
idmap_fields_union_of_None_type_or_array_of_RecordFieldLoader: Final[
75707572
_Loader[None | Sequence[RecordField]]
75717573
] = _IdMapLoader(union_of_None_type_or_array_of_RecordFieldLoader, "name", "type")
7572-
Record_nameLoader: Final[_Loader[Literal["record"]]] = _EnumLoader(
7573-
("record",), "Record_name"
7574-
)
7575-
typedsl_Record_nameLoader_2: Final[_Loader[Literal["record"]]] = _TypeDSLLoader(
7574+
Record_name: TypeAlias = Literal["record"]
7575+
Record_nameLoader: Final[_Loader[Record_name]] = _EnumLoader(("record",), "Record_name")
7576+
typedsl_Record_nameLoader_2: Final[_Loader[Record_name]] = _TypeDSLLoader(
75767577
Record_nameLoader, 2, "v1.1"
75777578
)
75787579
union_of_None_type_or_strtype: Final[_Loader[None | str]] = _UnionLoader(
@@ -7587,22 +7588,23 @@ def __init__(
75877588
uri_array_of_strtype_True_False_None_None: Final[_Loader[Sequence[str]]] = _URILoader(
75887589
array_of_strtype, True, False, None, None
75897590
)
7590-
Enum_nameLoader: Final[_Loader[Literal["enum"]]] = _EnumLoader(("enum",), "Enum_name")
7591-
typedsl_Enum_nameLoader_2: Final[_Loader[Literal["enum"]]] = _TypeDSLLoader(
7591+
Enum_name: TypeAlias = Literal["enum"]
7592+
Enum_nameLoader: Final[_Loader[Enum_name]] = _EnumLoader(("enum",), "Enum_name")
7593+
typedsl_Enum_nameLoader_2: Final[_Loader[Enum_name]] = _TypeDSLLoader(
75927594
Enum_nameLoader, 2, "v1.1"
75937595
)
75947596
uri_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_MapSchemaLoader_or_UnionSchemaLoader_or_strtype_or_array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_MapSchemaLoader_or_UnionSchemaLoader_or_strtype_False_True_2_None: Final[
75957597
_Loader[
75967598
ArraySchema
75977599
| EnumSchema
7598-
| Literal["null", "boolean", "int", "long", "float", "double", "string"]
75997600
| MapSchema
7601+
| PrimitiveType
76007602
| RecordSchema
76017603
| Sequence[
76027604
ArraySchema
76037605
| EnumSchema
7604-
| Literal["null", "boolean", "int", "long", "float", "double", "string"]
76057606
| MapSchema
7607+
| PrimitiveType
76067608
| RecordSchema
76077609
| UnionSchema
76087610
| str
@@ -7617,20 +7619,19 @@ def __init__(
76177619
2,
76187620
None,
76197621
)
7620-
Array_nameLoader: Final[_Loader[Literal["array"]]] = _EnumLoader(
7621-
("array",), "Array_name"
7622-
)
7623-
typedsl_Array_nameLoader_2: Final[_Loader[Literal["array"]]] = _TypeDSLLoader(
7622+
Array_name: TypeAlias = Literal["array"]
7623+
Array_nameLoader: Final[_Loader[Array_name]] = _EnumLoader(("array",), "Array_name")
7624+
typedsl_Array_nameLoader_2: Final[_Loader[Array_name]] = _TypeDSLLoader(
76247625
Array_nameLoader, 2, "v1.1"
76257626
)
7626-
Map_nameLoader: Final[_Loader[Literal["map"]]] = _EnumLoader(("map",), "Map_name")
7627-
typedsl_Map_nameLoader_2: Final[_Loader[Literal["map"]]] = _TypeDSLLoader(
7627+
Map_name: TypeAlias = Literal["map"]
7628+
Map_nameLoader: Final[_Loader[Map_name]] = _EnumLoader(("map",), "Map_name")
7629+
typedsl_Map_nameLoader_2: Final[_Loader[Map_name]] = _TypeDSLLoader(
76287630
Map_nameLoader, 2, "v1.1"
76297631
)
7630-
Union_nameLoader: Final[_Loader[Literal["union"]]] = _EnumLoader(
7631-
("union",), "Union_name"
7632-
)
7633-
typedsl_Union_nameLoader_2: Final[_Loader[Literal["union"]]] = _TypeDSLLoader(
7632+
Union_name: TypeAlias = Literal["union"]
7633+
Union_nameLoader: Final[_Loader[Union_name]] = _EnumLoader(("union",), "Union_name")
7634+
typedsl_Union_nameLoader_2: Final[_Loader[Union_name]] = _TypeDSLLoader(
76347635
Union_nameLoader, 2, "v1.1"
76357636
)
76367637
union_of_None_type_or_booltype: Final[_Loader[None | bool]] = _UnionLoader(
@@ -7704,11 +7705,12 @@ def __init__(
77047705
] = _IdMapLoader(
77057706
union_of_None_type_or_array_of_SpecializeDefLoader, "specializeFrom", "specializeTo"
77067707
)
7707-
Documentation_nameLoader: Final[_Loader[Literal["documentation"]]] = _EnumLoader(
7708+
Documentation_name: TypeAlias = Literal["documentation"]
7709+
Documentation_nameLoader: Final[_Loader[Documentation_name]] = _EnumLoader(
77087710
("documentation",), "Documentation_name"
77097711
)
7710-
typedsl_Documentation_nameLoader_2: Final[_Loader[Literal["documentation"]]] = (
7711-
_TypeDSLLoader(Documentation_nameLoader, 2, "v1.1")
7712+
typedsl_Documentation_nameLoader_2: Final[_Loader[Documentation_name]] = _TypeDSLLoader(
7713+
Documentation_nameLoader, 2, "v1.1"
77127714
)
77137715
union_of_SaladRecordSchemaLoader_or_SaladEnumSchemaLoader_or_SaladMapSchemaLoader_or_SaladUnionSchemaLoader_or_DocumentationLoader: Final[
77147716
_Loader[

schema_salad/python_codegen.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def safe_name(name: str) -> str:
119119
avn = avn[5:]
120120
elif avn[0].isdigit():
121121
avn = f"_{avn}"
122-
elif avn in ("class", "in", "type"):
122+
elif avn in ("class", "in", "type", "Any"):
123123
# reserved words
124124
avn = f"{avn}_"
125125
return avn.replace(".", "_")
@@ -476,6 +476,13 @@ def type_loader(
476476
sym_names: Final = [schema.avro_field_name(sym) for sym in symbols]
477477
sym_literals: Final = [f'"{s}"' for s in sym_names]
478478
instance_type2: Final = f"Literal[{', '.join(sym_literals)}]"
479+
self.declare_type(
480+
TypeDef(
481+
name=self.safe_name(name),
482+
init=instance_type2,
483+
instance_type="TypeAlias",
484+
)
485+
)
479486
return self.declare_type(
480487
TypeDef(
481488
name=self.safe_name(name) + "Loader",
@@ -484,8 +491,8 @@ def type_loader(
484491
self.safe_name(name),
485492
docstring,
486493
),
487-
instance_type=instance_type2,
488-
loader_type=f"_Loader[{instance_type2}]",
494+
instance_type=self.safe_name(name),
495+
loader_type=f"_Loader[{self.safe_name(name)}]",
489496
)
490497
)
491498

@@ -548,6 +555,7 @@ def type_loader(
548555
name=self.safe_name(decl) + "Loader",
549556
init="_ExpressionLoader(str)",
550557
instance_type="str",
558+
loader_type="_Loader[str]"
551559
)
552560
)
553561
case str(decl):
@@ -839,12 +847,12 @@ def epilogue(self, root_loader: TypeDef) -> None:
839847
if not collected_type.abstract:
840848
self.out.write(
841849
fmt(
842-
"{0}{1} = {2}\n".format(
850+
"{0}: {1} = {2}\n".format(
843851
collected_type.name,
844852
(
845-
f": Final[{collected_type.loader_type}]"
853+
f"Final[{collected_type.loader_type}]"
846854
if collected_type.loader_type is not None
847-
else ""
855+
else collected_type.instance_type
848856
),
849857
collected_type.init,
850858
),

0 commit comments

Comments
 (0)