Skip to content

Commit 818ee72

Browse files
committed
metaschema: enum schemas can have names
1 parent a3aaa0a commit 818ee72

File tree

9 files changed

+203
-69
lines changed

9 files changed

+203
-69
lines changed

schema_salad/metaschema.py

Lines changed: 68 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,7 +1103,7 @@ def fromDoc(
11031103
try:
11041104
type = load_field(
11051105
_doc.get("type"),
1106-
typedsl_enum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader_2,
1106+
typedsl_Record_nameLoader_2,
11071107
baseuri,
11081108
loadingOptions,
11091109
)
@@ -1185,6 +1185,7 @@ def __init__(
11851185
self,
11861186
symbols: Any,
11871187
type: Any,
1188+
name: Optional[Any] = None,
11881189
extension_fields: Optional[Dict[str, Any]] = None,
11891190
loadingOptions: Optional[LoadingOptions] = None,
11901191
) -> None:
@@ -1197,16 +1198,21 @@ def __init__(
11971198
self.loadingOptions = loadingOptions
11981199
else:
11991200
self.loadingOptions = LoadingOptions()
1201+
self.name = name
12001202
self.symbols = symbols
12011203
self.type = type
12021204

12031205
def __eq__(self, other: Any) -> bool:
12041206
if isinstance(other, EnumSchema):
1205-
return bool(self.symbols == other.symbols and self.type == other.type)
1207+
return bool(
1208+
self.name == other.name
1209+
and self.symbols == other.symbols
1210+
and self.type == other.type
1211+
)
12061212
return False
12071213

12081214
def __hash__(self) -> int:
1209-
return hash((self.symbols, self.type))
1215+
return hash((self.name, self.symbols, self.type))
12101216

12111217
@classmethod
12121218
def fromDoc(
@@ -1221,6 +1227,33 @@ def fromDoc(
12211227
_doc.lc.data = doc.lc.data
12221228
_doc.lc.filename = doc.lc.filename
12231229
_errors__ = []
1230+
if "name" in _doc:
1231+
try:
1232+
name = load_field(
1233+
_doc.get("name"),
1234+
uri_union_of_None_type_or_strtype_True_False_None,
1235+
baseuri,
1236+
loadingOptions,
1237+
)
1238+
except ValidationException as e:
1239+
_errors__.append(
1240+
ValidationException(
1241+
"the `name` field is not valid because:",
1242+
SourceLine(_doc, "name", str),
1243+
[e],
1244+
)
1245+
)
1246+
else:
1247+
name = None
1248+
1249+
__original_name_is_none = name is None
1250+
if name is None:
1251+
if docRoot is not None:
1252+
name = docRoot
1253+
else:
1254+
name = "_:" + str(_uuid__.uuid4())
1255+
if not __original_name_is_none:
1256+
baseuri = name
12241257
try:
12251258
symbols = load_field(
12261259
_doc.get("symbols"),
@@ -1239,7 +1272,7 @@ def fromDoc(
12391272
try:
12401273
type = load_field(
12411274
_doc.get("type"),
1242-
typedsl_enum_d961d79c225752b9fadb617367615ab176b47d77Loader_2,
1275+
typedsl_Enum_nameLoader_2,
12431276
baseuri,
12441277
loadingOptions,
12451278
)
@@ -1262,7 +1295,7 @@ def fromDoc(
12621295
else:
12631296
_errors__.append(
12641297
ValidationException(
1265-
"invalid field `{}`, expected one of: `symbols`, `type`".format(
1298+
"invalid field `{}`, expected one of: `name`, `symbols`, `type`".format(
12661299
k
12671300
),
12681301
SourceLine(_doc, k, str),
@@ -1273,11 +1306,13 @@ def fromDoc(
12731306
if _errors__:
12741307
raise ValidationException("Trying 'EnumSchema'", None, _errors__)
12751308
_constructed = cls(
1309+
name=name,
12761310
symbols=symbols,
12771311
type=type,
12781312
extension_fields=extension_fields,
12791313
loadingOptions=loadingOptions,
12801314
)
1315+
loadingOptions.idx[name] = (_constructed, loadingOptions)
12811316
return _constructed
12821317

12831318
def save(
@@ -1291,12 +1326,15 @@ def save(
12911326
else:
12921327
for ef in self.extension_fields:
12931328
r[ef] = self.extension_fields[ef]
1329+
if self.name is not None:
1330+
u = save_relative_uri(self.name, base_url, True, None, relative_uris)
1331+
r["name"] = u
12941332
if self.symbols is not None:
1295-
u = save_relative_uri(self.symbols, base_url, True, None, relative_uris)
1333+
u = save_relative_uri(self.symbols, self.name, True, None, relative_uris)
12961334
r["symbols"] = u
12971335
if self.type is not None:
12981336
r["type"] = save(
1299-
self.type, top=False, base_url=base_url, relative_uris=relative_uris
1337+
self.type, top=False, base_url=self.name, relative_uris=relative_uris
13001338
)
13011339

13021340
# top refers to the directory level
@@ -1307,7 +1345,7 @@ def save(
13071345
r["$schemas"] = self.loadingOptions.schemas
13081346
return r
13091347

1310-
attrs = frozenset(["symbols", "type"])
1348+
attrs = frozenset(["name", "symbols", "type"])
13111349

13121350

13131351
class ArraySchema(Saveable):
@@ -1369,7 +1407,7 @@ def fromDoc(
13691407
try:
13701408
type = load_field(
13711409
_doc.get("type"),
1372-
typedsl_enum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader_2,
1410+
typedsl_Array_nameLoader_2,
13731411
baseuri,
13741412
loadingOptions,
13751413
)
@@ -2405,7 +2443,7 @@ def fromDoc(
24052443
try:
24062444
type = load_field(
24072445
_doc.get("type"),
2408-
typedsl_enum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader_2,
2446+
typedsl_Record_nameLoader_2,
24092447
baseuri,
24102448
loadingOptions,
24112449
)
@@ -2726,9 +2764,9 @@ class SaladEnumSchema(NamedType, EnumSchema, SchemaDefinedType):
27262764

27272765
def __init__(
27282766
self,
2729-
name: Any,
27302767
symbols: Any,
27312768
type: Any,
2769+
name: Optional[Any] = None,
27322770
inVocab: Optional[Any] = None,
27332771
doc: Optional[Any] = None,
27342772
docParent: Optional[Any] = None,
@@ -2812,7 +2850,7 @@ def fromDoc(
28122850
try:
28132851
name = load_field(
28142852
_doc.get("name"),
2815-
uri_strtype_True_False_None,
2853+
uri_union_of_None_type_or_strtype_True_False_None,
28162854
baseuri,
28172855
loadingOptions,
28182856
)
@@ -2832,7 +2870,7 @@ def fromDoc(
28322870
if docRoot is not None:
28332871
name = docRoot
28342872
else:
2835-
raise ValidationException("Missing name")
2873+
name = "_:" + str(_uuid__.uuid4())
28362874
if not __original_name_is_none:
28372875
baseuri = name
28382876
if "inVocab" in _doc:
@@ -2871,7 +2909,7 @@ def fromDoc(
28712909
try:
28722910
type = load_field(
28732911
_doc.get("type"),
2874-
typedsl_enum_d961d79c225752b9fadb617367615ab176b47d77Loader_2,
2912+
typedsl_Enum_nameLoader_2,
28752913
baseuri,
28762914
loadingOptions,
28772915
)
@@ -3324,7 +3362,7 @@ def fromDoc(
33243362
try:
33253363
type = load_field(
33263364
_doc.get("type"),
3327-
typedsl_enum_056429f0e9355680bd9b2411dc96a69c7ff2e76bLoader_2,
3365+
typedsl_Documentation_nameLoader_2,
33283366
baseuri,
33293367
loadingOptions,
33303368
)
@@ -3553,31 +3591,8 @@ def save(
35533591
idmap_fields_union_of_None_type_or_array_of_RecordFieldLoader = _IdMapLoader(
35543592
union_of_None_type_or_array_of_RecordFieldLoader, "name", "type"
35553593
)
3556-
enum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader = _EnumLoader(
3557-
("record",), "enum_d9cba076fca539106791a4f46d198c7fcfbdb779"
3558-
)
3559-
typedsl_enum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader_2 = _TypeDSLLoader(
3560-
enum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader, 2
3561-
)
3562-
uri_array_of_strtype_True_False_None = _URILoader(array_of_strtype, True, False, None)
3563-
enum_d961d79c225752b9fadb617367615ab176b47d77Loader = _EnumLoader(
3564-
("enum",), "enum_d961d79c225752b9fadb617367615ab176b47d77"
3565-
)
3566-
typedsl_enum_d961d79c225752b9fadb617367615ab176b47d77Loader_2 = _TypeDSLLoader(
3567-
enum_d961d79c225752b9fadb617367615ab176b47d77Loader, 2
3568-
)
3569-
uri_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_or_array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_False_True_2 = _URILoader(
3570-
union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_or_array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype,
3571-
False,
3572-
True,
3573-
2,
3574-
)
3575-
enum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader = _EnumLoader(
3576-
("array",), "enum_d062602be0b4b8fd33e69e29a841317b6ab665bc"
3577-
)
3578-
typedsl_enum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader_2 = _TypeDSLLoader(
3579-
enum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader, 2
3580-
)
3594+
Record_nameLoader = _EnumLoader(("record",), "Record_name")
3595+
typedsl_Record_nameLoader_2 = _TypeDSLLoader(Record_nameLoader, 2)
35813596
union_of_None_type_or_strtype = _UnionLoader(
35823597
(
35833598
None_type,
@@ -3587,6 +3602,17 @@ def save(
35873602
uri_union_of_None_type_or_strtype_True_False_None = _URILoader(
35883603
union_of_None_type_or_strtype, True, False, None
35893604
)
3605+
uri_array_of_strtype_True_False_None = _URILoader(array_of_strtype, True, False, None)
3606+
Enum_nameLoader = _EnumLoader(("enum",), "Enum_name")
3607+
typedsl_Enum_nameLoader_2 = _TypeDSLLoader(Enum_nameLoader, 2)
3608+
uri_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_or_array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_False_True_2 = _URILoader(
3609+
union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype_or_array_of_union_of_PrimitiveTypeLoader_or_RecordSchemaLoader_or_EnumSchemaLoader_or_ArraySchemaLoader_or_strtype,
3610+
False,
3611+
True,
3612+
2,
3613+
)
3614+
Array_nameLoader = _EnumLoader(("array",), "Array_name")
3615+
typedsl_Array_nameLoader_2 = _TypeDSLLoader(Array_nameLoader, 2)
35903616
union_of_None_type_or_booltype = _UnionLoader(
35913617
(
35923618
None_type,
@@ -3642,12 +3668,8 @@ def save(
36423668
idmap_specialize_union_of_None_type_or_array_of_SpecializeDefLoader = _IdMapLoader(
36433669
union_of_None_type_or_array_of_SpecializeDefLoader, "specializeFrom", "specializeTo"
36443670
)
3645-
enum_056429f0e9355680bd9b2411dc96a69c7ff2e76bLoader = _EnumLoader(
3646-
("documentation",), "enum_056429f0e9355680bd9b2411dc96a69c7ff2e76b"
3647-
)
3648-
typedsl_enum_056429f0e9355680bd9b2411dc96a69c7ff2e76bLoader_2 = _TypeDSLLoader(
3649-
enum_056429f0e9355680bd9b2411dc96a69c7ff2e76bLoader, 2
3650-
)
3671+
Documentation_nameLoader = _EnumLoader(("documentation",), "Documentation_name")
3672+
typedsl_Documentation_nameLoader_2 = _TypeDSLLoader(Documentation_nameLoader, 2)
36513673
union_of_SaladRecordSchemaLoader_or_SaladEnumSchemaLoader_or_DocumentationLoader = (
36523674
_UnionLoader(
36533675
(

schema_salad/metaschema/metaschema.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,7 @@ $graph:
369369
doc: "Must be `documentation`"
370370
type:
371371
type: enum
372+
name: Documentation_name
372373
symbols:
373374
- "sld:documentation"
374375
jsonldPredicate:

schema_salad/metaschema/metaschema_base.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ $graph:
100100
doc: "Must be `record`"
101101
type:
102102
type: enum
103+
name: Record_name
103104
symbols:
104105
- "sld:record"
105106
jsonldPredicate:
@@ -125,13 +126,17 @@ $graph:
125126
doc: "Must be `enum`"
126127
type:
127128
type: enum
129+
name: Enum_name
128130
symbols:
129131
- "sld:enum"
130132
jsonldPredicate:
131133
_id: "sld:type"
132134
_type: "@vocab"
133135
typeDSL: true
134136
refScope: 2
137+
name:
138+
type: string?
139+
jsonldPredicate: "@id"
135140
symbols:
136141
type: string[]
137142
jsonldPredicate:
@@ -148,6 +153,7 @@ $graph:
148153
doc: "Must be `array`"
149154
type:
150155
type: enum
156+
name: Array_name
151157
symbols:
152158
- "sld:array"
153159
jsonldPredicate:

0 commit comments

Comments
 (0)