Loading src/nova/galaxy/dataset.py +6 −3 Original line number Diff line number Diff line Loading @@ -6,7 +6,8 @@ as well as output data from Galaxy tools. from abc import ABC, abstractmethod from enum import Enum from typing import Any, Dict, Union from pathlib import Path from typing import Any, Dict, Optional, Union from bioblend.galaxy.dataset_collections import DatasetCollectionClient from bioblend.galaxy.datasets import DatasetClient Loading Loading @@ -62,8 +63,9 @@ class AbstractData(ABC): class Dataset(AbstractData): """Singular file that can be uploaded and used in a Galaxy tool.""" def __init__(self, path: str): def __init__(self, path: str, name: Optional[str] = None): self.path = path self.name = name or Path(path).name self.id: str self.store: Datastore Loading @@ -88,8 +90,9 @@ class Dataset(AbstractData): class DatasetCollection(AbstractData): """A group of files that can be uploaded as a collection and collectively be used in a Galaxy tool.""" def __init__(self, path: str): def __init__(self, path: str, name: Optional[str] = None): self.path = path self.name = name or Path(path).name self.id: str self.store: Datastore Loading src/nova/galaxy/outputs.py 0 → 100644 +34 −0 Original line number Diff line number Diff line """Encapsulates the output datasets and collections for a Tool.""" from typing import Any, List from .dataset import AbstractData, Dataset, DatasetCollection class Outputs: """Contains the output datasets and collections for a Tool.""" def __init__(self) -> None: self.data: List[AbstractData] = [] def __iter__(self) -> Any: """Iterator.""" self._iterator = 0 return self def __next__(self) -> AbstractData: """Get next element for iterator.""" if self._iterator >= len(self.data): raise StopIteration d = self.data[self._iterator] self._iterator += 1 return d def add_output(self, data: AbstractData) -> None: self.data.append(data) def get_dataset(self, name: str) -> AbstractData: return next(filter(lambda x: isinstance(x, Dataset) and x.name == name, self.data)) def get_collection(self, name: str) -> AbstractData: return next(filter(lambda x: isinstance(x, DatasetCollection) and x.name == name, self.data)) src/nova/galaxy/tool.py +8 −7 Original line number Diff line number Diff line """Contains classes to run tools in Galaxy via Nova.""" from typing import Any, Dict, List from typing import List, Union from bioblend import galaxy from .data_store import Datastore from .dataset import AbstractData, Dataset, DatasetCollection, upload_datasets from .outputs import Outputs from .parameters import Parameters Loading @@ -21,8 +22,8 @@ class AbstractWork: def get_inputs(self) -> List[Parameters]: return [] def run(self, data_store: Datastore, params: Parameters) -> Dict[str, AbstractData]: return {} def run(self, data_store: Datastore, params: Parameters) -> Union[Outputs, None]: return None class Tool(AbstractWork): Loading @@ -31,9 +32,9 @@ class Tool(AbstractWork): def __init__(self, id: str): super().__init__(id) def run(self, data_store: Datastore, params: Parameters) -> Dict[Any, AbstractData]: def run(self, data_store: Datastore, params: Parameters) -> Outputs: """Runs this tool in a blocking manner and returns a map of the output datasets and collections.""" outputs: Dict[Any, AbstractData] = {} outputs = Outputs() galaxy_instance = data_store.nova.galaxy_instance datasets_to_upload = {} Loading Loading @@ -65,12 +66,12 @@ class Tool(AbstractWork): d = Dataset(dataset["output_name"]) d.id = dataset["id"] d.store = data_store outputs[dataset["output_name"]] = d outputs.add_output(d) if result_collections: for collection in result_collections: dc = DatasetCollection(collection["output_name"]) dc.id = collection["id"] dc.store = data_store outputs[collection["output_name"]] = dc outputs.add_output(dc) return outputs Loading
src/nova/galaxy/dataset.py +6 −3 Original line number Diff line number Diff line Loading @@ -6,7 +6,8 @@ as well as output data from Galaxy tools. from abc import ABC, abstractmethod from enum import Enum from typing import Any, Dict, Union from pathlib import Path from typing import Any, Dict, Optional, Union from bioblend.galaxy.dataset_collections import DatasetCollectionClient from bioblend.galaxy.datasets import DatasetClient Loading Loading @@ -62,8 +63,9 @@ class AbstractData(ABC): class Dataset(AbstractData): """Singular file that can be uploaded and used in a Galaxy tool.""" def __init__(self, path: str): def __init__(self, path: str, name: Optional[str] = None): self.path = path self.name = name or Path(path).name self.id: str self.store: Datastore Loading @@ -88,8 +90,9 @@ class Dataset(AbstractData): class DatasetCollection(AbstractData): """A group of files that can be uploaded as a collection and collectively be used in a Galaxy tool.""" def __init__(self, path: str): def __init__(self, path: str, name: Optional[str] = None): self.path = path self.name = name or Path(path).name self.id: str self.store: Datastore Loading
src/nova/galaxy/outputs.py 0 → 100644 +34 −0 Original line number Diff line number Diff line """Encapsulates the output datasets and collections for a Tool.""" from typing import Any, List from .dataset import AbstractData, Dataset, DatasetCollection class Outputs: """Contains the output datasets and collections for a Tool.""" def __init__(self) -> None: self.data: List[AbstractData] = [] def __iter__(self) -> Any: """Iterator.""" self._iterator = 0 return self def __next__(self) -> AbstractData: """Get next element for iterator.""" if self._iterator >= len(self.data): raise StopIteration d = self.data[self._iterator] self._iterator += 1 return d def add_output(self, data: AbstractData) -> None: self.data.append(data) def get_dataset(self, name: str) -> AbstractData: return next(filter(lambda x: isinstance(x, Dataset) and x.name == name, self.data)) def get_collection(self, name: str) -> AbstractData: return next(filter(lambda x: isinstance(x, DatasetCollection) and x.name == name, self.data))
src/nova/galaxy/tool.py +8 −7 Original line number Diff line number Diff line """Contains classes to run tools in Galaxy via Nova.""" from typing import Any, Dict, List from typing import List, Union from bioblend import galaxy from .data_store import Datastore from .dataset import AbstractData, Dataset, DatasetCollection, upload_datasets from .outputs import Outputs from .parameters import Parameters Loading @@ -21,8 +22,8 @@ class AbstractWork: def get_inputs(self) -> List[Parameters]: return [] def run(self, data_store: Datastore, params: Parameters) -> Dict[str, AbstractData]: return {} def run(self, data_store: Datastore, params: Parameters) -> Union[Outputs, None]: return None class Tool(AbstractWork): Loading @@ -31,9 +32,9 @@ class Tool(AbstractWork): def __init__(self, id: str): super().__init__(id) def run(self, data_store: Datastore, params: Parameters) -> Dict[Any, AbstractData]: def run(self, data_store: Datastore, params: Parameters) -> Outputs: """Runs this tool in a blocking manner and returns a map of the output datasets and collections.""" outputs: Dict[Any, AbstractData] = {} outputs = Outputs() galaxy_instance = data_store.nova.galaxy_instance datasets_to_upload = {} Loading Loading @@ -65,12 +66,12 @@ class Tool(AbstractWork): d = Dataset(dataset["output_name"]) d.id = dataset["id"] d.store = data_store outputs[dataset["output_name"]] = d outputs.add_output(d) if result_collections: for collection in result_collections: dc = DatasetCollection(collection["output_name"]) dc.id = collection["id"] dc.store = data_store outputs[collection["output_name"]] = dc outputs.add_output(dc) return outputs