Warning
This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.tool_util.biotools.interface
import re
from typing import (
Any,
Dict,
List,
Optional,
)
TERM_PATTERN = re.compile(r"https?://edamontology.org/(.*)")
[docs]class ParsedBiotoolsEntry:
"""Provide XML wrapper relevant entities from a bio.tool entry - topics and operations."""
biotoolsID: str
edam_topics: List[str]
edam_operations: List[str]
[docs]class BiotoolsEntry:
"""Parse the RAW entries of interest for Galaxy from a bio.tools entry."""
biotoolsID: str
topic: List[dict]
function: List[dict]
[docs] @staticmethod
def from_json(from_json: Dict[str, Any]) -> "BiotoolsEntry":
entry = BiotoolsEntry()
entry.biotoolsID = from_json["biotoolsID"]
entry.topic = from_json.get("topic", [])
entry.function = from_json.get("function", [])
return entry
@property
def edam_info(self) -> ParsedBiotoolsEntry:
parsed = ParsedBiotoolsEntry()
parsed.biotoolsID = self.biotoolsID
parsed.edam_topics = list(set(simplify_edam_dicts(self.topic)))
operations = []
for function in self.function:
if "operation" in function:
operations.extend(simplify_edam_dicts(function["operation"]))
parsed.edam_operations = list(set(operations))
return parsed
[docs]def simplify_edam_dicts(a_list: List[Dict[str, str]]):
terms = []
for term in map(simplify_edam_dict, a_list):
if term:
terms.append(term)
return terms
[docs]def simplify_edam_dict(as_dict: Dict[str, str]) -> Optional[str]:
uri = as_dict["uri"]
match = TERM_PATTERN.match(uri)
if match:
return match.group(1)
else:
# TODO: log problem...
return None