Commit c014625f authored by Yakubov, Sergey's avatar Yakubov, Sergey
Browse files

add tool runner, move common classes to nova-common

parent 586fe193
Loading
Loading
Loading
Loading
+54 −11
Original line number Diff line number Diff line
# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand.
# This file is automatically @generated by Poetry 2.1.2 and should not be changed by hand.

[[package]]
name = "aiohappyeyeballs"
@@ -162,7 +162,7 @@ description = "Timeout context manager for asyncio programs"
optional = false
python-versions = ">=3.8"
groups = ["main"]
markers = "python_version < \"3.11\""
markers = "python_version == \"3.10\""
files = [
    {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"},
    {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"},
@@ -224,6 +224,18 @@ tuspy = "*"
[package.extras]
testing = ["pytest"]

[[package]]
name = "blinker"
version = "1.9.0"
description = "Fast, simple object-to-object and broadcast signaling"
optional = false
python-versions = ">=3.9"
groups = ["main"]
files = [
    {file = "blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"},
    {file = "blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf"},
]

[[package]]
name = "certifi"
version = "2025.1.31"
@@ -356,11 +368,12 @@ version = "0.4.6"
description = "Cross-platform colored terminal text."
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
groups = ["dev"]
groups = ["main", "dev"]
files = [
    {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
    {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
]
markers = {main = "sys_platform == \"win32\""}

[[package]]
name = "copier"
@@ -528,8 +541,8 @@ version = "1.2.2"
description = "Backport of PEP 654 (exception groups)"
optional = false
python-versions = ">=3.7"
groups = ["dev"]
markers = "python_version < \"3.11\""
groups = ["main", "dev"]
markers = "python_version == \"3.10\""
files = [
    {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
    {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
@@ -717,7 +730,7 @@ version = "2.1.0"
description = "brain-dead simple config-ini parsing"
optional = false
python-versions = ">=3.8"
groups = ["dev"]
groups = ["main", "dev"]
files = [
    {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"},
    {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"},
@@ -1026,13 +1039,24 @@ files = [
    {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"},
]

[[package]]
name = "nova-common"
version = "0.1.0"
description = "NOVA Common Project"
optional = false
python-versions = "<4.0,>=3.10"
groups = ["main"]
files = [
    {file = "nova_common-0.1.0-py3-none-any.whl", hash = "sha256:c4d7ceed76fde35e7b8ecba0dd078d62c0e523ba857fbeafc71e1b1ce2f63cf0"},
]

[[package]]
name = "packaging"
version = "24.2"
description = "Core utilities for Python packages"
optional = false
python-versions = ">=3.8"
groups = ["dev"]
groups = ["main", "dev"]
files = [
    {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"},
    {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"},
@@ -1073,7 +1097,7 @@ version = "1.5.0"
description = "plugin and hook calling mechanisms for python"
optional = false
python-versions = ">=3.8"
groups = ["dev"]
groups = ["main", "dev"]
files = [
    {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
    {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
@@ -1416,7 +1440,7 @@ version = "8.3.5"
description = "pytest: simple powerful testing with Python"
optional = false
python-versions = ">=3.8"
groups = ["dev"]
groups = ["main", "dev"]
files = [
    {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"},
    {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"},
@@ -1433,6 +1457,25 @@ tomli = {version = ">=1", markers = "python_version < \"3.11\""}
[package.extras]
dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]

[[package]]
name = "pytest-asyncio"
version = "0.26.0"
description = "Pytest support for asyncio"
optional = false
python-versions = ">=3.9"
groups = ["main"]
files = [
    {file = "pytest_asyncio-0.26.0-py3-none-any.whl", hash = "sha256:7b51ed894f4fbea1340262bdae5135797ebbe21d8638978e35d31c6d19f72fb0"},
    {file = "pytest_asyncio-0.26.0.tar.gz", hash = "sha256:c4df2a697648241ff39e7f0e4a73050b03f123f760673956cf0d72a4990e312f"},
]

[package.dependencies]
pytest = ">=8.2,<9"

[package.extras]
docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1)"]
testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"]

[[package]]
name = "pywin32"
version = "310"
@@ -1900,7 +1943,7 @@ files = [
    {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"},
    {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"},
]
markers = {main = "python_version < \"3.11\""}
markers = {main = "python_version == \"3.10\""}

[[package]]
name = "typing-inspection"
@@ -2162,4 +2205,4 @@ propcache = ">=0.2.1"
[metadata]
lock-version = "2.1"
python-versions = "^3.10"
content-hash = "cbbefe36ce00706e4ba5096520c409dab594c54f42dd395b26c989ac1592eb5b"
content-hash = "417344aa65dba1c33c5457bbda0ae7f4f1393491263ffab53c9ce4f07b42d260"
+5 −2
Original line number Diff line number Diff line
[tool.poetry]
name = "nova-galaxy"
version = "0.9.1"
version = "0.10.0"
description = "Utilties for accessing the ORNL Galaxy instance"
authors = ["Greg Watson <watsongr@ornl.gov>", "Gregory Cage <cagege@ornl.gov>"]
authors = ["Greg Watson <watsongr@ornl.gov>", "Gregory Cage <cagege@ornl.gov>", "Sergey Yakubov <yakubovs@ornl.gov>"]
readme = "README.md"
license = "MIT"
keywords = ["NOVA", "Galaxy", "python"]
@@ -16,6 +16,9 @@ python = "^3.10"
bioblend = "^1.5.0"
tomli = "^2.0.2"
deprecated = "^1.2.18"
nova-common = ">=0.1.0"
blinker = "^1.9.0"
pytest-asyncio = "^0.26.0"

[build-system]
requires = ["poetry-core"]
+1 −0
Original line number Diff line number Diff line
__path__ = __import__("pkgutil").extend_path(__path__, __name__)
+0 −2
Original line number Diff line number Diff line
@@ -6,7 +6,6 @@ from .dataset import Dataset, DatasetCollection
from .outputs import Outputs
from .parameters import Parameters
from .tool import Tool
from .util import WorkState

__all__ = [
    "Connection",
@@ -16,7 +15,6 @@ __all__ = [
    "Outputs",
    "Parameters",
    "Tool",
    "WorkState",
]

__version__ = importlib.metadata.version("nova-galaxy")
+40 −0
Original line number Diff line number Diff line
"""Abstract interfaces and type definitions."""

from abc import ABC, abstractmethod
from typing import Tuple

from nova.galaxy import Datastore, Parameters, Tool


class BasicTool(ABC):
    """Base tool class.

    Provides methods required for tool runner to handle the tool execution.
    """

    def __init__(self) -> None:
        self.store: Datastore

    def set_store(self, store: Datastore) -> None:
        """Set datastore for the tool."""
        self.store = store

    @abstractmethod
    def prepare_data(self) -> None:
        """Prepare data a tool needs to run."""
        raise Exception("Please implement in a concrete class")

    @abstractmethod
    def prepare_tool(self) -> Tuple[Tool, Parameters]:
        """Prepare tool to run."""
        raise Exception("Please implement in a concrete class")

    @abstractmethod
    def get_results(self, tool: Tool) -> bytes:
        """Get tool results as bytes."""
        raise Exception("Please implement in a concrete class")

    @abstractmethod
    def validate_for_run(self) -> None:
        """Validate tool inputs."""
        raise Exception("Please implement in a concrete class")
Loading