Skip to content

Commit

Permalink
Fixing typedef schema, adding test for softwareVersion and adding con…
Browse files Browse the repository at this point in the history
…tent type parsing for codeRepository
  • Loading branch information
Nazim-crim committed Sep 10, 2024
1 parent e635e9c commit ea2d487
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 11 deletions.
32 changes: 26 additions & 6 deletions tests/processes/test_wps_package.py
Original file line number Diff line number Diff line change
Expand Up @@ -678,11 +678,13 @@ def test_format_extension_validator_basic(data_input, mode, expect):
"s:author": [
{"class": "s:Person", "s:name": "John Doe", "s:affiliation": "Example Inc."}
],
},
"wps_package_metadata": {}
},
{
"abstract": "",
"title": "",
"version": "",
"metadata": [
{
"role": "author",
Expand All @@ -704,8 +706,12 @@ def test_format_extension_validator_basic(data_input, mode, expect):
"wps_package_metadata": {}
},
{
"abstract": "",
"title": "",
"version": "",
"metadata": [
{
"type": "text/html",
"rel": "codeRepository",
"href": "https://gitlab.com/"
}
Expand All @@ -717,35 +723,49 @@ def test_format_extension_validator_basic(data_input, mode, expect):
{
"cwl_package_package": {
"s:version": "1.0"
},
"wps_package_metadata": {
"metadata": [
{
"type": "text/html",
"rel": "codeRepository",
"href": "https://gitlab.com/"
}
]
}
},
{
"abstract": "",
"title": "",
"metadata": [
{
"type": "text/html",
"rel": "codeRepository",
"href": "https://gitlab.com/"
},
],
"version": "1.0"
}
),
(
# Test softwareVersion
{
"cwl_package_package": {
"s:softwareVersion": "1.0.0"
},
"wps_package_metadata": {}
},
{
"abstract": "",
"title": "",
"version": "1.0.0"
}
),
])
def test_process_metadata(original, expected):
# type: (CWL, CWL) -> None
cwl_package_package = original["cwl_package_package"]
wps_package_metadata = original["wps_package_metadata"]
_update_package_metadata(wps_package_metadata, cwl_package_package)
# Assertions
for key in expected:
assert key in wps_package_metadata
assert sorted(wps_package_metadata[key]) == sorted(expected[key])
assert wps_package_metadata == expected
21 changes: 17 additions & 4 deletions weaver/processes/wps_package.py
Original file line number Diff line number Diff line change
Expand Up @@ -719,17 +719,30 @@ def _update_package_metadata(wps_package_metadata, cwl_package_package):
)

# specific use case with a different mapping
if "s:version" in cwl_package_package:
# https://docs.ogc.org/bp/20-089r1.html#toc31
if "s:version" in cwl_package_package or "s:softwareVersion" in cwl_package_package:
wps_package_metadata["version"] = str(
str(cwl_package_package.get("s:version", "")) or str(wps_package_metadata.get("version"))
str(wps_package_metadata.get("version", ""))
or cwl_package_package.get("s:version")
or cwl_package_package.get("s:softwareVersion")
)
else:
wps_package_metadata["version"] = str(wps_package_metadata.get("version", ""))

for metadata_mapping in SUPPORTED_METADATA_MAPPING:
if metadata_mapping in cwl_package_package:
metadata = wps_package_metadata.get("metadata", [])
if (isinstance((cwl_package_package[metadata_mapping]), str)
and urlparse(cwl_package_package[metadata_mapping]) != ""):
if (
isinstance((cwl_package_package[metadata_mapping]), str)
and urlparse(cwl_package_package[metadata_mapping]).scheme != ""
):
url = cwl_package_package[metadata_mapping]
if metadata_mapping == "s:codeRepository":
type = "text/html"
else:
type = get_content_type(os.path.splitext(url)[-1], default=ContentType.TEXT_PLAIN)
metadata.append({
"type": type,
"rel": metadata_mapping.strip("s:"),
"href": cwl_package_package[metadata_mapping]
})
Expand Down
3 changes: 2 additions & 1 deletion weaver/typedefs.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,13 +221,14 @@ class CWL_SchemaName(Protocol):
"$schemas": NotRequired[Dict[str, str]],
"$graph": NotRequired[CWL_Graph],
"s:author": NotRequired[List[Dict[str, JSON]]],
"s:citation": NotRequired[List[Dict[str, str]]],
"s:citation": NotRequired[List[Union[str, JSON]]],
"s:codeRepository": NotRequired[Link],
"s:contributor": NotRequired[List[Dict[str, JSON]]],
"s:dateCreated": NotRequired[datetime],
"s:license": NotRequired[Optional[Union[Dict[str, JSON], Link]]],
"s:releaseNotes": NotRequired[Optional[Union[str, Link]]],
"s:version": NotRequired[Optional[Union[str, Number]]],
"s:softwareVersion": NotRequired[Optional[Union[str, Number]]],
}, total=False)
CWL_WorkflowStepPackage = TypedDict("CWL_WorkflowStepPackage", {
"id": str, # reference ID of the package
Expand Down

0 comments on commit ea2d487

Please sign in to comment.