Skip to content

Commit c889cf2

Browse files
tetronmr-c
authored andcommitted
Update from schema salad PR
1 parent f411b47 commit c889cf2

File tree

4 files changed

+69
-44
lines changed

4 files changed

+69
-44
lines changed

cwl_utils/expression_refactor.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,8 @@
4444
)
4545
from cwl_utils.parser import cwl_v1_0, cwl_v1_1, cwl_v1_2
4646

47-
save_type = Union[
48-
MutableMapping[str, Any],
49-
MutableSequence[Union[MutableMapping[str, Any], MutableSequence[Any], None]],
50-
None,
47+
save_type = Optional[
48+
Union[MutableMapping[str, Any], MutableSequence[Any], int, float, bool, str]
5149
]
5250

5351

@@ -56,7 +54,7 @@ class saveCWL(Protocol):
5654

5755
def __call__(
5856
self,
59-
val: Optional[Union[Any, MutableSequence[Any]]],
57+
val: Any,
6058
top: bool = True,
6159
base_url: str = "",
6260
relative_uris: bool = True,

cwl_utils/parser/cwl_v1_0.py

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,11 @@
4545

4646
IdxType = MutableMapping[str, Tuple[Any, "LoadingOptions"]]
4747

48+
4849
class LoadingOptions:
4950

5051
idx: IdxType
51-
fileuri: str
52+
fileuri: Optional[str]
5253
baseuri: str
5354
namespaces: MutableMapping[str, str]
5455
schemas: MutableSequence[str]
@@ -81,7 +82,7 @@ def __init__(
8182
if fileuri is not None:
8283
self.fileuri = fileuri
8384
else:
84-
self.fileuri = copyfrom.fileuri if copyfrom is not None else ""
85+
self.fileuri = copyfrom.fileuri if copyfrom is not None else None
8586

8687
if baseuri is not None:
8788
self.baseuri = baseuri
@@ -212,9 +213,8 @@ def load_field(val, fieldtype, baseuri, loadingOptions):
212213
return fieldtype.load(val, baseuri, loadingOptions)
213214

214215

215-
save_type = Union[
216-
MutableMapping[str, Any],
217-
MutableSequence[Union[MutableMapping[str, Any], MutableSequence[Any], None]],
216+
save_type = Optional[
217+
Union[MutableMapping[str, Any], MutableSequence[Any], int, float, bool, str]
218218
]
219219

220220

@@ -238,7 +238,9 @@ def save(
238238
val[key], top=False, base_url=base_url, relative_uris=relative_uris
239239
)
240240
return newdict
241-
raise Exception("Not a Saveable")
241+
if val is None or isinstance(val, (int, float, bool, str)):
242+
return val
243+
raise Exception("Not Saveable: %s" % type(val))
242244

243245

244246
def save_with_metadata(
@@ -248,6 +250,7 @@ def save_with_metadata(
248250
base_url: str = "",
249251
relative_uris: bool = True,
250252
) -> save_type:
253+
"""Save and set $namespaces, $schemas, $base and any other metadata fields at the top level."""
251254
saved_val = save(val, top, base_url, relative_uris)
252255
newdict: MutableMapping[str, Any] = {}
253256
if isinstance(saved_val, MutableSequence):
@@ -672,7 +675,7 @@ def _document_load(
672675
doc: Union[str, MutableMapping[str, Any], MutableSequence[Any]],
673676
baseuri: str,
674677
loadingOptions: LoadingOptions,
675-
addl_metadata_fields: MutableSequence[str] = [],
678+
addl_metadata_fields: Optional[MutableSequence[str]] = None,
676679
) -> Tuple[Any, LoadingOptions]:
677680
if isinstance(doc, str):
678681
return _document_load_by_url(
@@ -684,10 +687,12 @@ def _document_load(
684687

685688
if isinstance(doc, MutableMapping):
686689
addl_metadata = {}
687-
for mf in addl_metadata_fields:
688-
if mf in doc:
689-
addl_metadata[mf] = doc[mf]
690+
if addl_metadata_fields is not None:
691+
for mf in addl_metadata_fields:
692+
if mf in doc:
693+
addl_metadata[mf] = doc[mf]
690694

695+
docuri = baseuri
691696
if "$base" in doc:
692697
baseuri = doc["$base"]
693698

@@ -716,6 +721,9 @@ def _document_load(
716721
loadingOptions,
717722
)
718723

724+
if docuri != baseuri:
725+
loadingOptions.idx[docuri] = loadingOptions.idx[baseuri]
726+
719727
return loadingOptions.idx[baseuri]
720728

721729
if isinstance(doc, MutableSequence):
@@ -734,7 +742,7 @@ def _document_load_by_url(
734742
loader: _Loader,
735743
url: str,
736744
loadingOptions: LoadingOptions,
737-
addl_metadata_fields: MutableSequence[str] = [],
745+
addl_metadata_fields: Optional[MutableSequence[str]] = None,
738746
) -> Tuple[Any, LoadingOptions]:
739747
if url in loadingOptions.idx:
740748
return loadingOptions.idx[url]
@@ -12665,11 +12673,12 @@ def load_document(
1266512673
)
1266612674
return result
1266712675

12676+
1266812677
def load_document_with_metadata(
1266912678
doc: Any,
1267012679
baseuri: Optional[str] = None,
1267112680
loadingOptions: Optional[LoadingOptions] = None,
12672-
addl_metadata_fields: MutableSequence[str] = []
12681+
addl_metadata_fields: Optional[MutableSequence[str]] = None,
1267312682
) -> Any:
1267412683
if baseuri is None:
1267512684
baseuri = file_uri(os.getcwd()) + "/"
@@ -12680,7 +12689,7 @@ def load_document_with_metadata(
1268012689
doc,
1268112690
baseuri,
1268212691
loadingOptions,
12683-
addl_metadata_fields=addl_metadata_fields
12692+
addl_metadata_fields=addl_metadata_fields,
1268412693
)
1268512694

1268612695

cwl_utils/parser/cwl_v1_1.py

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,11 @@
4545

4646
IdxType = MutableMapping[str, Tuple[Any, "LoadingOptions"]]
4747

48+
4849
class LoadingOptions:
4950

5051
idx: IdxType
51-
fileuri: str
52+
fileuri: Optional[str]
5253
baseuri: str
5354
namespaces: MutableMapping[str, str]
5455
schemas: MutableSequence[str]
@@ -81,7 +82,7 @@ def __init__(
8182
if fileuri is not None:
8283
self.fileuri = fileuri
8384
else:
84-
self.fileuri = copyfrom.fileuri if copyfrom is not None else ""
85+
self.fileuri = copyfrom.fileuri if copyfrom is not None else None
8586

8687
if baseuri is not None:
8788
self.baseuri = baseuri
@@ -212,9 +213,8 @@ def load_field(val, fieldtype, baseuri, loadingOptions):
212213
return fieldtype.load(val, baseuri, loadingOptions)
213214

214215

215-
save_type = Union[
216-
MutableMapping[str, Any],
217-
MutableSequence[Union[MutableMapping[str, Any], MutableSequence[Any], None]],
216+
save_type = Optional[
217+
Union[MutableMapping[str, Any], MutableSequence[Any], int, float, bool, str]
218218
]
219219

220220

@@ -238,7 +238,9 @@ def save(
238238
val[key], top=False, base_url=base_url, relative_uris=relative_uris
239239
)
240240
return newdict
241-
raise Exception("Not a Saveable")
241+
if val is None or isinstance(val, (int, float, bool, str)):
242+
return val
243+
raise Exception("Not Saveable: %s" % type(val))
242244

243245

244246
def save_with_metadata(
@@ -248,6 +250,7 @@ def save_with_metadata(
248250
base_url: str = "",
249251
relative_uris: bool = True,
250252
) -> save_type:
253+
"""Save and set $namespaces, $schemas, $base and any other metadata fields at the top level."""
251254
saved_val = save(val, top, base_url, relative_uris)
252255
newdict: MutableMapping[str, Any] = {}
253256
if isinstance(saved_val, MutableSequence):
@@ -672,7 +675,7 @@ def _document_load(
672675
doc: Union[str, MutableMapping[str, Any], MutableSequence[Any]],
673676
baseuri: str,
674677
loadingOptions: LoadingOptions,
675-
addl_metadata_fields: MutableSequence[str] = [],
678+
addl_metadata_fields: Optional[MutableSequence[str]] = None,
676679
) -> Tuple[Any, LoadingOptions]:
677680
if isinstance(doc, str):
678681
return _document_load_by_url(
@@ -684,10 +687,12 @@ def _document_load(
684687

685688
if isinstance(doc, MutableMapping):
686689
addl_metadata = {}
687-
for mf in addl_metadata_fields:
688-
if mf in doc:
689-
addl_metadata[mf] = doc[mf]
690+
if addl_metadata_fields is not None:
691+
for mf in addl_metadata_fields:
692+
if mf in doc:
693+
addl_metadata[mf] = doc[mf]
690694

695+
docuri = baseuri
691696
if "$base" in doc:
692697
baseuri = doc["$base"]
693698

@@ -716,6 +721,9 @@ def _document_load(
716721
loadingOptions,
717722
)
718723

724+
if docuri != baseuri:
725+
loadingOptions.idx[docuri] = loadingOptions.idx[baseuri]
726+
719727
return loadingOptions.idx[baseuri]
720728

721729
if isinstance(doc, MutableSequence):
@@ -734,7 +742,7 @@ def _document_load_by_url(
734742
loader: _Loader,
735743
url: str,
736744
loadingOptions: LoadingOptions,
737-
addl_metadata_fields: MutableSequence[str] = [],
745+
addl_metadata_fields: Optional[MutableSequence[str]] = None,
738746
) -> Tuple[Any, LoadingOptions]:
739747
if url in loadingOptions.idx:
740748
return loadingOptions.idx[url]
@@ -14569,11 +14577,12 @@ def load_document(
1456914577
)
1457014578
return result
1457114579

14580+
1457214581
def load_document_with_metadata(
1457314582
doc: Any,
1457414583
baseuri: Optional[str] = None,
1457514584
loadingOptions: Optional[LoadingOptions] = None,
14576-
addl_metadata_fields: MutableSequence[str] = []
14585+
addl_metadata_fields: Optional[MutableSequence[str]] = None,
1457714586
) -> Any:
1457814587
if baseuri is None:
1457914588
baseuri = file_uri(os.getcwd()) + "/"
@@ -14584,7 +14593,7 @@ def load_document_with_metadata(
1458414593
doc,
1458514594
baseuri,
1458614595
loadingOptions,
14587-
addl_metadata_fields=addl_metadata_fields
14596+
addl_metadata_fields=addl_metadata_fields,
1458814597
)
1458914598

1459014599

cwl_utils/parser/cwl_v1_2.py

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,11 @@
4545

4646
IdxType = MutableMapping[str, Tuple[Any, "LoadingOptions"]]
4747

48+
4849
class LoadingOptions:
4950

5051
idx: IdxType
51-
fileuri: str
52+
fileuri: Optional[str]
5253
baseuri: str
5354
namespaces: MutableMapping[str, str]
5455
schemas: MutableSequence[str]
@@ -81,7 +82,7 @@ def __init__(
8182
if fileuri is not None:
8283
self.fileuri = fileuri
8384
else:
84-
self.fileuri = copyfrom.fileuri if copyfrom is not None else ""
85+
self.fileuri = copyfrom.fileuri if copyfrom is not None else None
8586

8687
if baseuri is not None:
8788
self.baseuri = baseuri
@@ -212,9 +213,8 @@ def load_field(val, fieldtype, baseuri, loadingOptions):
212213
return fieldtype.load(val, baseuri, loadingOptions)
213214

214215

215-
save_type = Union[
216-
MutableMapping[str, Any],
217-
MutableSequence[Union[MutableMapping[str, Any], MutableSequence[Any], None]],
216+
save_type = Optional[
217+
Union[MutableMapping[str, Any], MutableSequence[Any], int, float, bool, str]
218218
]
219219

220220

@@ -238,7 +238,9 @@ def save(
238238
val[key], top=False, base_url=base_url, relative_uris=relative_uris
239239
)
240240
return newdict
241-
raise Exception("Not a Saveable")
241+
if val is None or isinstance(val, (int, float, bool, str)):
242+
return val
243+
raise Exception("Not Saveable: %s" % type(val))
242244

243245

244246
def save_with_metadata(
@@ -248,6 +250,7 @@ def save_with_metadata(
248250
base_url: str = "",
249251
relative_uris: bool = True,
250252
) -> save_type:
253+
"""Save and set $namespaces, $schemas, $base and any other metadata fields at the top level."""
251254
saved_val = save(val, top, base_url, relative_uris)
252255
newdict: MutableMapping[str, Any] = {}
253256
if isinstance(saved_val, MutableSequence):
@@ -672,7 +675,7 @@ def _document_load(
672675
doc: Union[str, MutableMapping[str, Any], MutableSequence[Any]],
673676
baseuri: str,
674677
loadingOptions: LoadingOptions,
675-
addl_metadata_fields: MutableSequence[str] = [],
678+
addl_metadata_fields: Optional[MutableSequence[str]] = None,
676679
) -> Tuple[Any, LoadingOptions]:
677680
if isinstance(doc, str):
678681
return _document_load_by_url(
@@ -684,10 +687,12 @@ def _document_load(
684687

685688
if isinstance(doc, MutableMapping):
686689
addl_metadata = {}
687-
for mf in addl_metadata_fields:
688-
if mf in doc:
689-
addl_metadata[mf] = doc[mf]
690+
if addl_metadata_fields is not None:
691+
for mf in addl_metadata_fields:
692+
if mf in doc:
693+
addl_metadata[mf] = doc[mf]
690694

695+
docuri = baseuri
691696
if "$base" in doc:
692697
baseuri = doc["$base"]
693698

@@ -716,6 +721,9 @@ def _document_load(
716721
loadingOptions,
717722
)
718723

724+
if docuri != baseuri:
725+
loadingOptions.idx[docuri] = loadingOptions.idx[baseuri]
726+
719727
return loadingOptions.idx[baseuri]
720728

721729
if isinstance(doc, MutableSequence):
@@ -734,7 +742,7 @@ def _document_load_by_url(
734742
loader: _Loader,
735743
url: str,
736744
loadingOptions: LoadingOptions,
737-
addl_metadata_fields: MutableSequence[str] = [],
745+
addl_metadata_fields: Optional[MutableSequence[str]] = None,
738746
) -> Tuple[Any, LoadingOptions]:
739747
if url in loadingOptions.idx:
740748
return loadingOptions.idx[url]
@@ -16030,11 +16038,12 @@ def load_document(
1603016038
)
1603116039
return result
1603216040

16041+
1603316042
def load_document_with_metadata(
1603416043
doc: Any,
1603516044
baseuri: Optional[str] = None,
1603616045
loadingOptions: Optional[LoadingOptions] = None,
16037-
addl_metadata_fields: MutableSequence[str] = []
16046+
addl_metadata_fields: Optional[MutableSequence[str]] = None,
1603816047
) -> Any:
1603916048
if baseuri is None:
1604016049
baseuri = file_uri(os.getcwd()) + "/"
@@ -16045,7 +16054,7 @@ def load_document_with_metadata(
1604516054
doc,
1604616055
baseuri,
1604716056
loadingOptions,
16048-
addl_metadata_fields=addl_metadata_fields
16057+
addl_metadata_fields=addl_metadata_fields,
1604916058
)
1605016059

1605116060

0 commit comments

Comments
 (0)