Loading poetry.lock +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" Loading Loading @@ -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"}, Loading Loading @@ -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" Loading Loading @@ -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" Loading Loading @@ -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"}, Loading Loading @@ -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"}, Loading Loading @@ -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"}, Loading Loading @@ -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"}, Loading Loading @@ -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"}, Loading @@ -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" Loading Loading @@ -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" Loading Loading @@ -2162,4 +2205,4 @@ propcache = ">=0.2.1" [metadata] lock-version = "2.1" python-versions = "^3.10" content-hash = "cbbefe36ce00706e4ba5096520c409dab594c54f42dd395b26c989ac1592eb5b" content-hash = "417344aa65dba1c33c5457bbda0ae7f4f1393491263ffab53c9ce4f07b42d260" pyproject.toml +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"] Loading @@ -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"] Loading src/nova/__init__.py +1 −0 Original line number Diff line number Diff line __path__ = __import__("pkgutil").extend_path(__path__, __name__) src/nova/galaxy/__init__.py +0 −2 Original line number Diff line number Diff line Loading @@ -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", Loading @@ -16,7 +15,6 @@ __all__ = [ "Outputs", "Parameters", "Tool", "WorkState", ] __version__ = importlib.metadata.version("nova-galaxy") src/nova/galaxy/interfaces.py 0 → 100644 +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
poetry.lock +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" Loading Loading @@ -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"}, Loading Loading @@ -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" Loading Loading @@ -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" Loading Loading @@ -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"}, Loading Loading @@ -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"}, Loading Loading @@ -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"}, Loading Loading @@ -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"}, Loading Loading @@ -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"}, Loading @@ -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" Loading Loading @@ -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" Loading Loading @@ -2162,4 +2205,4 @@ propcache = ">=0.2.1" [metadata] lock-version = "2.1" python-versions = "^3.10" content-hash = "cbbefe36ce00706e4ba5096520c409dab594c54f42dd395b26c989ac1592eb5b" content-hash = "417344aa65dba1c33c5457bbda0ae7f4f1393491263ffab53c9ce4f07b42d260"
pyproject.toml +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"] Loading @@ -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"] Loading
src/nova/__init__.py +1 −0 Original line number Diff line number Diff line __path__ = __import__("pkgutil").extend_path(__path__, __name__)
src/nova/galaxy/__init__.py +0 −2 Original line number Diff line number Diff line Loading @@ -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", Loading @@ -16,7 +15,6 @@ __all__ = [ "Outputs", "Parameters", "Tool", "WorkState", ] __version__ = importlib.metadata.version("nova-galaxy")
src/nova/galaxy/interfaces.py 0 → 100644 +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")