Skip to content

Commit c03995e

Browse files
authored
Merge pull request #910 from common-workflow-language/fix-save-prefix
Fixed `save` method for namespaced `class` fields
2 parents a397e42 + 8950bd0 commit c03995e

File tree

2 files changed

+27
-22
lines changed

2 files changed

+27
-22
lines changed

schema_salad/metaschema.py

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1163,7 +1163,6 @@ class RecordField(Documented):
11631163
"""
11641164

11651165
name: str
1166-
class_uri = "https://w3id.org/cwl/salad#RecordField"
11671166

11681167
def __init__(
11691168
self,
@@ -1431,8 +1430,6 @@ def save(
14311430

14321431

14331432
class RecordSchema(Saveable):
1434-
class_uri = "https://w3id.org/cwl/salad#RecordSchema"
1435-
14361433
def __init__(
14371434
self,
14381435
type_: Any,
@@ -1638,7 +1635,6 @@ class EnumSchema(Saveable):
16381635
"""
16391636

16401637
name: str
1641-
class_uri = "https://w3id.org/cwl/salad#EnumSchema"
16421638

16431639
def __init__(
16441640
self,
@@ -1906,8 +1902,6 @@ def save(
19061902

19071903

19081904
class ArraySchema(Saveable):
1909-
class_uri = "https://w3id.org/cwl/salad#ArraySchema"
1910-
19111905
def __init__(
19121906
self,
19131907
items: Any,
@@ -2107,8 +2101,6 @@ def save(
21072101

21082102

21092103
class MapSchema(Saveable):
2110-
class_uri = "https://w3id.org/cwl/salad#MapSchema"
2111-
21122104
def __init__(
21132105
self,
21142106
type_: Any,
@@ -2308,8 +2300,6 @@ def save(
23082300

23092301

23102302
class UnionSchema(Saveable):
2311-
class_uri = "https://w3id.org/cwl/salad#UnionSchema"
2312-
23132303
def __init__(
23142304
self,
23152305
names: Any,
@@ -2515,8 +2505,6 @@ class JsonldPredicate(Saveable):
25152505
25162506
"""
25172507

2518-
class_uri = "https://w3id.org/cwl/salad#JsonldPredicate"
2519-
25202508
def __init__(
25212509
self,
25222510
_id: Optional[Any] = None,
@@ -3255,8 +3243,6 @@ def save(
32553243

32563244

32573245
class SpecializeDef(Saveable):
3258-
class_uri = "https://w3id.org/cwl/salad#SpecializeDef"
3259-
32603246
def __init__(
32613247
self,
32623248
specializeFrom: Any,
@@ -3482,7 +3468,6 @@ class SaladRecordField(RecordField):
34823468
"""
34833469

34843470
name: str
3485-
class_uri = "https://w3id.org/cwl/salad#SaladRecordField"
34863471

34873472
def __init__(
34883473
self,
@@ -3866,7 +3851,6 @@ def save(
38663851

38673852
class SaladRecordSchema(NamedType, RecordSchema, SchemaDefinedType):
38683853
name: str
3869-
class_uri = "https://w3id.org/cwl/salad#SaladRecordSchema"
38703854

38713855
def __init__(
38723856
self,
@@ -4730,7 +4714,6 @@ class SaladEnumSchema(NamedType, EnumSchema, SchemaDefinedType):
47304714
"""
47314715

47324716
name: str
4733-
class_uri = "https://w3id.org/cwl/salad#SaladEnumSchema"
47344717

47354718
def __init__(
47364719
self,
@@ -5474,7 +5457,6 @@ class SaladMapSchema(NamedType, MapSchema, SchemaDefinedType):
54745457
"""
54755458

54765459
name: str
5477-
class_uri = "https://w3id.org/cwl/salad#SaladMapSchema"
54785460

54795461
def __init__(
54805462
self,
@@ -6162,7 +6144,6 @@ class SaladUnionSchema(NamedType, UnionSchema, DocType):
61626144
"""
61636145

61646146
name: str
6165-
class_uri = "https://w3id.org/cwl/salad#SaladUnionSchema"
61666147

61676148
def __init__(
61686149
self,
@@ -6791,7 +6772,6 @@ class Documentation(NamedType, DocType):
67916772
"""
67926773

67936774
name: str
6794-
class_uri = "https://w3id.org/cwl/salad#Documentation"
67956775

67966776
def __init__(
67976777
self,

schema_salad/python_codegen.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,11 @@ def begin_class(
167167
idfield_safe_name = self.safe_name(idfield) if idfield != "" else None
168168
if idfield_safe_name is not None:
169169
self.out.write(f" {idfield_safe_name}: str\n")
170-
self.out.write(f' class_uri = "{class_uri}"\n\n')
170+
if "class" not in field_names:
171+
self.out.write("\n")
172+
173+
if "class" in field_names:
174+
self.out.write(f' class_uri = "{class_uri}"\n\n')
171175

172176
required_field_names = [f for f in field_names if f not in optional_fields]
173177
optional_field_names = [f for f in field_names if f in optional_fields]
@@ -658,7 +662,28 @@ def declare_field(
658662
else:
659663
baseurl = f"self.{self.safe_name(self.idfield)}"
660664

661-
if fieldtype.is_uri:
665+
if shortname(name) == "class":
666+
self.serializer.write(
667+
fmt(
668+
"""
669+
if self.{safename} is not None:
670+
if p := self.loadingOptions.rvocab.get(self.class_uri[:-len(self.{safename})]):
671+
uri = f"{{p}}:{{self.{safename}}}"
672+
else:
673+
uri = self.{safename}
674+
u = save_relative_uri(uri, {baseurl}, {scoped_id}, {ref_scope}, relative_uris)
675+
r["{fieldname}"] = u
676+
""".format(
677+
safename=self.safe_name(name),
678+
fieldname=shortname(name).strip(),
679+
baseurl=baseurl,
680+
scoped_id=fieldtype.scoped_id,
681+
ref_scope=fieldtype.ref_scope,
682+
),
683+
8,
684+
)
685+
)
686+
elif fieldtype.is_uri:
662687
self.serializer.write(
663688
fmt(
664689
"""

0 commit comments

Comments
 (0)