virtool-workflow 7.1.1__py3-none-any.whl → 7.1.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- virtool_workflow/analysis/skewer.py +15 -7
- virtool_workflow/analysis/trimming.py +5 -2
- virtool_workflow/api/acquire.py +1 -1
- virtool_workflow/data/analyses.py +8 -7
- virtool_workflow/data/hmms.py +3 -2
- virtool_workflow/data/indexes.py +5 -5
- virtool_workflow/data/jobs.py +1 -1
- virtool_workflow/data/ml.py +2 -1
- virtool_workflow/data/samples.py +5 -4
- virtool_workflow/data/subtractions.py +3 -3
- virtool_workflow/pytest_plugin/data.py +12 -18
- virtool_workflow/runtime/redis.py +6 -5
- virtool_workflow/runtime/run.py +14 -29
- virtool_workflow/runtime/run_subprocess.py +3 -2
- virtool_workflow/utils.py +49 -0
- {virtool_workflow-7.1.1.dist-info → virtool_workflow-7.1.5.dist-info}/METADATA +6 -9
- {virtool_workflow-7.1.1.dist-info → virtool_workflow-7.1.5.dist-info}/RECORD +20 -20
- {virtool_workflow-7.1.1.dist-info → virtool_workflow-7.1.5.dist-info}/WHEEL +1 -1
- {virtool_workflow-7.1.1.dist-info → virtool_workflow-7.1.5.dist-info}/LICENSE +0 -0
- {virtool_workflow-7.1.1.dist-info → virtool_workflow-7.1.5.dist-info}/entry_points.txt +0 -0
@@ -1,6 +1,7 @@
|
|
1
1
|
"""Utilities and a fixture for using `Skewer <https://github.com/relipmoc/skewer>`_ to
|
2
2
|
trim reads.
|
3
3
|
"""
|
4
|
+
|
4
5
|
import asyncio
|
5
6
|
import os
|
6
7
|
import shutil
|
@@ -12,7 +13,7 @@ from tempfile import mkdtemp
|
|
12
13
|
from typing import Protocol
|
13
14
|
|
14
15
|
from pyfixtures import fixture
|
15
|
-
from
|
16
|
+
from virtool.models.enums import LibraryType
|
16
17
|
|
17
18
|
from virtool_workflow import RunSubprocess
|
18
19
|
from virtool_workflow.analysis.utils import ReadPaths
|
@@ -108,7 +109,8 @@ class SkewerResult:
|
|
108
109
|
|
109
110
|
|
110
111
|
def calculate_skewer_trimming_parameters(
|
111
|
-
sample: WFSample,
|
112
|
+
sample: WFSample,
|
113
|
+
min_read_length: int,
|
112
114
|
) -> SkewerConfiguration:
|
113
115
|
"""Calculates trimming parameters based on the library type, and minimum allowed trim length.
|
114
116
|
|
@@ -141,9 +143,11 @@ class SkewerRunner(Protocol):
|
|
141
143
|
"""A protocol describing callables that can be used to run Skewer."""
|
142
144
|
|
143
145
|
async def __call__(
|
144
|
-
self,
|
145
|
-
|
146
|
-
|
146
|
+
self,
|
147
|
+
config: SkewerConfiguration,
|
148
|
+
paths: ReadPaths,
|
149
|
+
output_path: Path,
|
150
|
+
) -> SkewerResult: ...
|
147
151
|
|
148
152
|
|
149
153
|
@fixture
|
@@ -178,7 +182,9 @@ def skewer(proc: int, run_subprocess: RunSubprocess) -> SkewerRunner:
|
|
178
182
|
raise RuntimeError("skewer is not installed.")
|
179
183
|
|
180
184
|
async def func(
|
181
|
-
config: SkewerConfiguration,
|
185
|
+
config: SkewerConfiguration,
|
186
|
+
read_paths: ReadPaths,
|
187
|
+
output_path: Path,
|
182
188
|
):
|
183
189
|
temp_path = Path(await asyncio.to_thread(mkdtemp, suffix="_virtool_skewer"))
|
184
190
|
|
@@ -219,7 +225,9 @@ def skewer(proc: int, run_subprocess: RunSubprocess) -> SkewerRunner:
|
|
219
225
|
)
|
220
226
|
|
221
227
|
read_paths = await asyncio.to_thread(
|
222
|
-
_rename_trimming_results,
|
228
|
+
_rename_trimming_results,
|
229
|
+
temp_path,
|
230
|
+
output_path,
|
223
231
|
)
|
224
232
|
|
225
233
|
return SkewerResult(command, output_path, process, read_paths)
|
@@ -1,14 +1,17 @@
|
|
1
1
|
"""Calculate trimming parameters which are passed the Skewer read trimming tool."""
|
2
|
+
|
2
3
|
import hashlib
|
3
4
|
import json
|
4
5
|
|
5
|
-
from
|
6
|
+
from virtool.models.enums import LibraryType
|
6
7
|
|
7
8
|
from virtool_workflow.data.samples import WFSample
|
8
9
|
|
9
10
|
|
10
11
|
def calculate_trimming_cache_key(
|
11
|
-
sample_id: str,
|
12
|
+
sample_id: str,
|
13
|
+
trimming_parameters: dict,
|
14
|
+
program: str = "skewer",
|
12
15
|
):
|
13
16
|
"""Compute a unique cache key.
|
14
17
|
|
virtool_workflow/api/acquire.py
CHANGED
@@ -2,7 +2,7 @@ import asyncio
|
|
2
2
|
|
3
3
|
from aiohttp import ClientConnectionError, ClientSession, TCPConnector
|
4
4
|
from structlog import get_logger
|
5
|
-
from
|
5
|
+
from virtool.jobs.models import JobAcquired
|
6
6
|
|
7
7
|
from virtool_workflow.errors import (
|
8
8
|
JobAlreadyAcquiredError,
|
@@ -1,14 +1,15 @@
|
|
1
1
|
"""A fixture and class for representing the analysis associated with a workflow run."""
|
2
|
+
|
2
3
|
from pathlib import Path
|
3
4
|
from typing import Any
|
4
5
|
|
5
6
|
from pyfixtures import fixture
|
6
|
-
from
|
7
|
-
from
|
8
|
-
from
|
9
|
-
from
|
10
|
-
from
|
11
|
-
from
|
7
|
+
from virtool.analyses.models import Analysis, AnalysisSample
|
8
|
+
from virtool.indexes.models import IndexNested
|
9
|
+
from virtool.jobs.models import JobNested
|
10
|
+
from virtool.ml.models import MLModelRelease
|
11
|
+
from virtool.references.models import ReferenceNested
|
12
|
+
from virtool.subtractions.models import SubtractionNested
|
12
13
|
|
13
14
|
from virtool_workflow.api.client import APIClient
|
14
15
|
from virtool_workflow.files import VirtoolFileFormat
|
@@ -83,7 +84,7 @@ class WFAnalysis:
|
|
83
84
|
@fixture
|
84
85
|
async def analysis(
|
85
86
|
_api: APIClient,
|
86
|
-
job:
|
87
|
+
job: JobNested,
|
87
88
|
) -> WFAnalysis:
|
88
89
|
"""A :class:`.WFAnalysis` object that represents the analysis associated with the running
|
89
90
|
workflow.
|
virtool_workflow/data/hmms.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
"""A class and fixture for accessing Virtool HMM data for use in analysis workflows."""
|
2
|
+
|
2
3
|
import asyncio
|
3
4
|
import json
|
4
5
|
from dataclasses import dataclass
|
@@ -8,8 +9,8 @@ from shutil import which
|
|
8
9
|
|
9
10
|
import aiofiles
|
10
11
|
from pyfixtures import fixture
|
11
|
-
from
|
12
|
-
from
|
12
|
+
from virtool.hmm.models import HMM
|
13
|
+
from virtool.utils import decompress_file
|
13
14
|
|
14
15
|
from virtool_workflow.api.client import APIClient
|
15
16
|
from virtool_workflow.runtime.run_subprocess import RunSubprocess
|
virtool_workflow/data/indexes.py
CHANGED
@@ -6,11 +6,11 @@ from pathlib import Path
|
|
6
6
|
import aiofiles
|
7
7
|
from pyfixtures import fixture
|
8
8
|
from structlog import get_logger
|
9
|
-
from
|
10
|
-
from
|
11
|
-
from
|
12
|
-
from
|
13
|
-
from
|
9
|
+
from virtool.analyses.models import Analysis
|
10
|
+
from virtool.indexes.models import Index
|
11
|
+
from virtool.jobs.models import Job
|
12
|
+
from virtool.references.models import ReferenceNested
|
13
|
+
from virtool.utils import decompress_file
|
14
14
|
|
15
15
|
from virtool_workflow.api.client import APIClient
|
16
16
|
from virtool_workflow.errors import MissingJobArgumentError
|
virtool_workflow/data/jobs.py
CHANGED
@@ -2,7 +2,7 @@ import traceback
|
|
2
2
|
|
3
3
|
from pyfixtures import fixture
|
4
4
|
from structlog import get_logger
|
5
|
-
from
|
5
|
+
from virtool.jobs.models import JobAcquired, Job, JobState
|
6
6
|
|
7
7
|
from virtool_workflow import Workflow, WorkflowStep
|
8
8
|
from virtool_workflow.api.client import APIClient
|
virtool_workflow/data/ml.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
"""A fixture and dataclass for working with machine learning models in workflows."""
|
2
|
+
|
2
3
|
import asyncio
|
3
4
|
import shutil
|
4
5
|
from dataclasses import dataclass
|
@@ -6,7 +7,7 @@ from pathlib import Path
|
|
6
7
|
|
7
8
|
from pyfixtures import fixture
|
8
9
|
from structlog import get_logger
|
9
|
-
from
|
10
|
+
from virtool.ml.models import MLModelRelease
|
10
11
|
|
11
12
|
from virtool_workflow.api.client import APIClient
|
12
13
|
from virtool_workflow.data.analyses import WFAnalysis
|
virtool_workflow/data/samples.py
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
import asyncio
|
2
|
+
from collections.abc import Callable, Coroutine
|
2
3
|
from dataclasses import dataclass
|
3
4
|
from pathlib import Path
|
4
|
-
from typing import Any
|
5
|
+
from typing import Any
|
5
6
|
|
6
7
|
from pyfixtures import fixture
|
7
8
|
from structlog import get_logger
|
8
|
-
from
|
9
|
-
from
|
10
|
-
from
|
9
|
+
from virtool.jobs.models import Job
|
10
|
+
from virtool.models.enums import LibraryType
|
11
|
+
from virtool.samples.models import Quality, Sample
|
11
12
|
|
12
13
|
from virtool_workflow.analysis.utils import ReadPaths
|
13
14
|
from virtool_workflow.api.client import APIClient
|
@@ -1,12 +1,12 @@
|
|
1
1
|
import asyncio
|
2
|
+
from collections.abc import Callable, Coroutine
|
2
3
|
from dataclasses import dataclass
|
3
4
|
from pathlib import Path
|
4
|
-
from typing import Callable, Coroutine
|
5
5
|
|
6
6
|
from pyfixtures import fixture
|
7
7
|
from structlog import get_logger
|
8
|
-
from
|
9
|
-
from
|
8
|
+
from virtool.jobs.models import Job
|
9
|
+
from virtool.subtractions.models import (
|
10
10
|
NucleotideComposition,
|
11
11
|
Subtraction,
|
12
12
|
SubtractionFile,
|
@@ -4,20 +4,14 @@ from pathlib import Path
|
|
4
4
|
|
5
5
|
import pytest
|
6
6
|
from pydantic_factories import ModelFactory, Use
|
7
|
-
from
|
8
|
-
from
|
9
|
-
from
|
10
|
-
from
|
11
|
-
from
|
12
|
-
from
|
13
|
-
|
14
|
-
|
15
|
-
)
|
16
|
-
from virtool_core.models.subtraction import (
|
17
|
-
Subtraction,
|
18
|
-
SubtractionFile,
|
19
|
-
SubtractionNested,
|
20
|
-
)
|
7
|
+
from virtool.analyses.models import Analysis, AnalysisSample
|
8
|
+
from virtool.indexes.models import Index, IndexNested
|
9
|
+
from virtool.jobs.models import JobAcquired, JobMinimal, JobPing
|
10
|
+
from virtool.ml.models import MLModelRelease
|
11
|
+
from virtool.references.models import Reference, ReferenceNested
|
12
|
+
from virtool.samples.models import Sample
|
13
|
+
from virtool.samples.models_base import SampleNested
|
14
|
+
from virtool.subtractions.models import Subtraction, SubtractionFile, SubtractionNested
|
21
15
|
|
22
16
|
from virtool_workflow.pytest_plugin.utils import SUBTRACTION_FILENAMES
|
23
17
|
|
@@ -150,11 +144,11 @@ def data(
|
|
150
144
|
reference.targets = []
|
151
145
|
|
152
146
|
index = IndexFactory.build()
|
153
|
-
index.reference =
|
147
|
+
index.reference = ReferenceNested.parse_obj(reference)
|
154
148
|
index.ready = True
|
155
149
|
|
156
150
|
new_index: Index = IndexFactory.build()
|
157
|
-
new_index.reference =
|
151
|
+
new_index.reference = ReferenceNested.parse_obj(reference)
|
158
152
|
new_index.files = []
|
159
153
|
new_index.ready = False
|
160
154
|
|
@@ -183,10 +177,10 @@ def data(
|
|
183
177
|
new_subtraction.ready = False
|
184
178
|
|
185
179
|
analysis: Analysis = AnalysisFactory.build()
|
186
|
-
analysis.sample =
|
180
|
+
analysis.sample = AnalysisSample.parse_obj(sample)
|
187
181
|
analysis.workflow = "pathoscope_bowtie"
|
188
182
|
analysis.index = IndexNested.parse_obj(index)
|
189
|
-
analysis.reference =
|
183
|
+
analysis.reference = ReferenceNested.parse_obj(reference)
|
190
184
|
analysis.subtractions = [SubtractionNested.parse_obj(subtraction)]
|
191
185
|
|
192
186
|
return Data(
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import asyncio
|
2
2
|
from asyncio import CancelledError
|
3
|
-
from
|
3
|
+
from collections.abc import Callable
|
4
4
|
|
5
5
|
from structlog import get_logger
|
6
|
-
from
|
6
|
+
from virtool.redis import Redis
|
7
7
|
|
8
8
|
logger = get_logger("redis")
|
9
9
|
|
@@ -15,14 +15,15 @@ async def get_next_job_with_timeout(
|
|
15
15
|
redis: Redis,
|
16
16
|
timeout: int | None = None,
|
17
17
|
) -> str:
|
18
|
-
"""Get the next job ID from a Redis list
|
19
|
-
|
18
|
+
"""Get the next job ID from a Redis list.
|
19
|
+
|
20
|
+
Raise a :class:``Timeout`` error if an ID is not found in ``timeout``
|
21
|
+
seconds.
|
20
22
|
|
21
23
|
:param list_name: the name of the list to pop from
|
22
24
|
:param redis: the Redis client
|
23
25
|
:param timeout: seconds to wait before raising :class:``Timeout``
|
24
26
|
:return: the next job ID
|
25
|
-
|
26
27
|
"""
|
27
28
|
logger.info(
|
28
29
|
"Waiting for a job",
|
virtool_workflow/runtime/run.py
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
import asyncio
|
2
|
-
import logging
|
3
2
|
import signal
|
4
3
|
import sys
|
5
4
|
from asyncio import CancelledError
|
5
|
+
from collections.abc import Callable
|
6
6
|
from pathlib import Path
|
7
|
-
from typing import Callable
|
8
7
|
|
9
|
-
import structlog
|
10
8
|
from pyfixtures import FixtureScope, runs_in_new_fixture_context
|
11
9
|
from structlog import get_logger
|
12
|
-
from
|
13
|
-
from
|
10
|
+
from virtool.jobs.models import JobState
|
11
|
+
from virtool.redis import Redis
|
14
12
|
|
15
13
|
from virtool_workflow.api.acquire import acquire_job_by_id
|
16
14
|
from virtool_workflow.api.client import api_client
|
@@ -41,7 +39,7 @@ from virtool_workflow.runtime.redis import (
|
|
41
39
|
wait_for_cancellation,
|
42
40
|
)
|
43
41
|
from virtool_workflow.runtime.sentry import configure_sentry
|
44
|
-
from virtool_workflow.utils import get_virtool_workflow_version
|
42
|
+
from virtool_workflow.utils import configure_logs, get_virtool_workflow_version
|
45
43
|
from virtool_workflow.workflow import Workflow
|
46
44
|
|
47
45
|
logger = get_logger("runtime")
|
@@ -161,11 +159,14 @@ async def run_workflow(
|
|
161
159
|
|
162
160
|
job = await acquire_job_by_id(config.jobs_api_connection_string, job_id)
|
163
161
|
|
164
|
-
async with
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
162
|
+
async with (
|
163
|
+
api_client(
|
164
|
+
config.jobs_api_connection_string,
|
165
|
+
job.id,
|
166
|
+
job.key,
|
167
|
+
) as api,
|
168
|
+
FixtureScope() as scope,
|
169
|
+
):
|
169
170
|
# These fixtures should not be used directly by the workflow. They are used
|
170
171
|
# by other built-in fixtures.
|
171
172
|
scope["_api"] = api
|
@@ -209,23 +210,7 @@ async def start_runtime(
|
|
209
210
|
|
210
211
|
When a job ID is received, the runtime acquires the job from the jobs API and
|
211
212
|
"""
|
212
|
-
|
213
|
-
|
214
|
-
logging.basicConfig(level=logging.INFO, format="%(message)s")
|
215
|
-
|
216
|
-
structlog.configure(
|
217
|
-
wrapper_class=structlog.make_filtering_bound_logger(logging.INFO),
|
218
|
-
logger_factory=structlog.stdlib.LoggerFactory(),
|
219
|
-
cache_logger_on_first_use=True,
|
220
|
-
processors=[
|
221
|
-
structlog.stdlib.filter_by_level,
|
222
|
-
structlog.stdlib.add_logger_name,
|
223
|
-
structlog.stdlib.add_log_level,
|
224
|
-
structlog.stdlib.PositionalArgumentsFormatter(),
|
225
|
-
structlog.processors.TimeStamper(fmt="%Y-%m-%d %H:%M.%S"),
|
226
|
-
structlog.dev.ConsoleRenderer(colors=True, sort_keys=True),
|
227
|
-
],
|
228
|
-
)
|
213
|
+
configure_logs(bool(sentry_dsn))
|
229
214
|
|
230
215
|
logger.info(
|
231
216
|
"found virtool-workflow",
|
@@ -242,7 +227,7 @@ async def start_runtime(
|
|
242
227
|
async with Redis(redis_connection_string) as redis:
|
243
228
|
try:
|
244
229
|
job_id = await get_next_job_with_timeout(redis_list_name, redis, timeout)
|
245
|
-
except
|
230
|
+
except TimeoutError:
|
246
231
|
# This happens due to Kubernetes scheduling issues or job cancellations. It
|
247
232
|
# is not an error.
|
248
233
|
logger.warning("timed out while waiting for job id")
|
@@ -2,12 +2,13 @@
|
|
2
2
|
|
3
3
|
import asyncio
|
4
4
|
from asyncio.subprocess import Process
|
5
|
+
from collections.abc import Callable, Coroutine
|
5
6
|
from pathlib import Path
|
6
|
-
from typing import
|
7
|
+
from typing import Protocol
|
7
8
|
|
8
9
|
from pyfixtures import fixture
|
9
10
|
from structlog import get_logger
|
10
|
-
from
|
11
|
+
from virtool.utils import timestamp
|
11
12
|
|
12
13
|
from virtool_workflow.errors import SubprocessFailedError
|
13
14
|
|
virtool_workflow/utils.py
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
import asyncio
|
2
|
+
import logging
|
3
|
+
import sys
|
2
4
|
import tarfile
|
3
5
|
from collections.abc import Callable
|
4
6
|
from functools import wraps
|
@@ -6,6 +8,10 @@ from importlib import metadata
|
|
6
8
|
from inspect import iscoroutinefunction
|
7
9
|
from pathlib import Path
|
8
10
|
|
11
|
+
import structlog
|
12
|
+
from structlog.processors import LogfmtRenderer
|
13
|
+
from structlog_sentry import SentryProcessor
|
14
|
+
|
9
15
|
|
10
16
|
def coerce_to_coroutine_function(func: Callable):
|
11
17
|
"""Wrap a non-async function in an async function."""
|
@@ -19,6 +25,49 @@ def coerce_to_coroutine_function(func: Callable):
|
|
19
25
|
return _func
|
20
26
|
|
21
27
|
|
28
|
+
def configure_logs(use_sentry: bool):
|
29
|
+
logging.basicConfig(
|
30
|
+
format="%(message)s",
|
31
|
+
stream=sys.stdout,
|
32
|
+
level=logging.INFO,
|
33
|
+
)
|
34
|
+
|
35
|
+
def normalize_log_level(logger, method_name, event_dict):
|
36
|
+
"""Map EXCEPTION level to ERROR since logging module doesn't have EXCEPTION."""
|
37
|
+
if event_dict.get("level") == "EXCEPTION":
|
38
|
+
event_dict["level"] = "ERROR"
|
39
|
+
return event_dict
|
40
|
+
|
41
|
+
processors = [
|
42
|
+
structlog.stdlib.filter_by_level,
|
43
|
+
structlog.stdlib.add_logger_name,
|
44
|
+
structlog.stdlib.add_log_level,
|
45
|
+
normalize_log_level,
|
46
|
+
structlog.stdlib.PositionalArgumentsFormatter(),
|
47
|
+
structlog.processors.TimeStamper(fmt="%Y-%m-%dT%H:%M:%SZ"),
|
48
|
+
structlog.processors.StackInfoRenderer(),
|
49
|
+
structlog.processors.UnicodeDecoder(),
|
50
|
+
]
|
51
|
+
|
52
|
+
if use_sentry:
|
53
|
+
processors.append(
|
54
|
+
SentryProcessor(event_level=logging.WARNING, level=logging.INFO),
|
55
|
+
)
|
56
|
+
|
57
|
+
processors.append(
|
58
|
+
LogfmtRenderer(
|
59
|
+
key_order=["timestamp", "level", "logger", "event"],
|
60
|
+
),
|
61
|
+
)
|
62
|
+
|
63
|
+
structlog.configure(
|
64
|
+
cache_logger_on_first_use=True,
|
65
|
+
logger_factory=structlog.stdlib.LoggerFactory(),
|
66
|
+
processors=processors,
|
67
|
+
wrapper_class=structlog.stdlib.BoundLogger,
|
68
|
+
)
|
69
|
+
|
70
|
+
|
22
71
|
def get_virtool_workflow_version() -> str:
|
23
72
|
"""Get the version of the installed virtool-workflow package."""
|
24
73
|
try:
|
@@ -1,15 +1,13 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.3
|
2
2
|
Name: virtool-workflow
|
3
|
-
Version: 7.1.
|
3
|
+
Version: 7.1.5
|
4
4
|
Summary: A framework for developing bioinformatics workflows for Virtool.
|
5
|
-
Home-page: https://github.com/virtool/virtool-workflow
|
6
5
|
License: MIT
|
7
6
|
Author: Ian Boyes
|
8
7
|
Maintainer: Ian Boyes
|
9
|
-
Requires-Python: >=3.12,<3.13
|
8
|
+
Requires-Python: >=3.12.3,<3.13.0
|
10
9
|
Classifier: License :: OSI Approved :: MIT License
|
11
10
|
Classifier: Programming Language :: Python :: 3
|
12
|
-
Classifier: Programming Language :: Python :: 3.12
|
13
11
|
Requires-Dist: aiofiles (>=0.7.0,<0.8.0)
|
14
12
|
Requires-Dist: aiohttp (>=3.8.1,<4.0.0)
|
15
13
|
Requires-Dist: biopython (>=1.81,<2.0)
|
@@ -17,9 +15,9 @@ Requires-Dist: click (>=8.1.7,<9.0.0)
|
|
17
15
|
Requires-Dist: orjson (>=3.9.9,<4.0.0)
|
18
16
|
Requires-Dist: pydantic-factories (>=1.17.3,<2.0.0)
|
19
17
|
Requires-Dist: pyfixtures (>=1.0.0,<2.0.0)
|
20
|
-
Requires-Dist: sentry-sdk (>=2.
|
21
|
-
Requires-Dist:
|
22
|
-
|
18
|
+
Requires-Dist: sentry-sdk (>=2.30.0,<3.0.0)
|
19
|
+
Requires-Dist: structlog-sentry (>=2.2.1,<3.0.0)
|
20
|
+
Requires-Dist: virtool (>=31.1.3,<32.0.0)
|
23
21
|
Description-Content-Type: text/markdown
|
24
22
|
|
25
23
|
# Virtool Workflow
|
@@ -63,7 +61,6 @@ docker compose up -d
|
|
63
61
|
|
64
62
|
# Run tests in the test container.
|
65
63
|
docker compose exec test poetry run pytest
|
66
|
-
|
67
64
|
```
|
68
65
|
|
69
66
|
Run specific tests like:
|
@@ -1,29 +1,29 @@
|
|
1
1
|
virtool_workflow/__init__.py,sha256=Tw0lAFudpsFyCaiR2Oz_RKYU6N-mSCmhXDftm1WT37M,308
|
2
2
|
virtool_workflow/analysis/__init__.py,sha256=eRMQhKOxijlFlYI78FzmHZoF1qYevBXycpIcmlrgFqI,57
|
3
3
|
virtool_workflow/analysis/fastqc.py,sha256=pNorkhNVazV30fBY3KEJ6vfEskqsBzp80a_Iai8BOn8,13149
|
4
|
-
virtool_workflow/analysis/skewer.py,sha256=
|
5
|
-
virtool_workflow/analysis/trimming.py,sha256=
|
4
|
+
virtool_workflow/analysis/skewer.py,sha256=TWUfiYeUIahHbIosNYo2sqMjS4kUkoFBTspr70eRloI,7186
|
5
|
+
virtool_workflow/analysis/trimming.py,sha256=3Dk0J322ZhBzhuplaVgxZv4l7MLu7ZhqNQHOtNi6CGM,1451
|
6
6
|
virtool_workflow/analysis/utils.py,sha256=YU1_yInZzTNl9nKQTebUz47kUEqZ__d0k-RMLX8DWOA,1108
|
7
7
|
virtool_workflow/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
|
-
virtool_workflow/api/acquire.py,sha256=
|
8
|
+
virtool_workflow/api/acquire.py,sha256=M8Wf6ck6YOPQU_0dalAYxuQbukj6c4Uat1OPhV7Gj2w,2157
|
9
9
|
virtool_workflow/api/client.py,sha256=wOAAX0Na1IrULWUTGq0wzbjquZqmZqCnc0gb2A2JvLE,4604
|
10
10
|
virtool_workflow/api/utils.py,sha256=UrOsrGMMJ6PbWcl84A4tKD6Lq7C8hVQIZ_TpQR75KHU,3123
|
11
11
|
virtool_workflow/cli.py,sha256=yEl1LziABKbjc5MCOoUGLy-iuqehOou37x9ox4LA92M,1441
|
12
12
|
virtool_workflow/data/__init__.py,sha256=L2bQ5rMpnCMuLWDMwel4-wPchfQCTHH3EEwxDqwGOsY,610
|
13
|
-
virtool_workflow/data/analyses.py,sha256=
|
14
|
-
virtool_workflow/data/hmms.py,sha256=
|
15
|
-
virtool_workflow/data/indexes.py,sha256=
|
16
|
-
virtool_workflow/data/jobs.py,sha256=
|
17
|
-
virtool_workflow/data/ml.py,sha256=
|
18
|
-
virtool_workflow/data/samples.py,sha256=
|
19
|
-
virtool_workflow/data/subtractions.py,sha256=
|
13
|
+
virtool_workflow/data/analyses.py,sha256=tGUU3gLyk_4vn1Xb7FccvBc_HQzYW_AoU7Dh1OkWhAA,3105
|
14
|
+
virtool_workflow/data/hmms.py,sha256=pntKYyWeipApMNUGYh90ReyTbJgbCPlE-cm66Eo6teA,3225
|
15
|
+
virtool_workflow/data/indexes.py,sha256=hxqxJBTt2VnclR8YjqAAEtk_Ig7OEPBx0sjxf4Puy9Y,9007
|
16
|
+
virtool_workflow/data/jobs.py,sha256=YYWxWoiVtHIBKkpOTpZl-Ute5rg-RAnMGAzBoixDNQo,1663
|
17
|
+
virtool_workflow/data/ml.py,sha256=haYHZfDbYOk0ftg6MCXbQpoDFl1VbdnQ_TuNvI9pmw0,2186
|
18
|
+
virtool_workflow/data/samples.py,sha256=fgyuQSavZiqwrqEH7Y_CoAR5gJIcO1ujrIyO5tDrXeI,4971
|
19
|
+
virtool_workflow/data/subtractions.py,sha256=LANUXM89AyFIAmG1JPR06yTniftxIkt9qqSJm7QupCU,7302
|
20
20
|
virtool_workflow/data/uploads.py,sha256=jjQ8hczvkSV-B8dioSDB_E5kA2S_4kDYDmr86TxOqbA,905
|
21
21
|
virtool_workflow/decorators.py,sha256=L9pVLCLpew-3nMdPVqKwmzk7srFEA_VT0oWrTsZsBok,1311
|
22
22
|
virtool_workflow/errors.py,sha256=VXH4FUuour9PqBE1RgC0gpZrBiQthCr3vfYCUXeHPQ4,1663
|
23
23
|
virtool_workflow/files.py,sha256=N9eo06qFNbZ0493006LMD2ezrC5fjw2KqSs-uh4qRB4,837
|
24
24
|
virtool_workflow/hooks.py,sha256=z2axwQTj3M_2tTAnBZCG6sr14GeDmxwVkEYZjmY5Nos,2673
|
25
25
|
virtool_workflow/pytest_plugin/__init__.py,sha256=y_no8N763GwZGPouTeyUQEZQWoM8eb5dPxmdRv3L0s8,740
|
26
|
-
virtool_workflow/pytest_plugin/data.py,sha256=
|
26
|
+
virtool_workflow/pytest_plugin/data.py,sha256=objP7cn_4u2MtsDaf0amG0EtBv3-jthj9l3pvUyj3-I,5618
|
27
27
|
virtool_workflow/pytest_plugin/utils.py,sha256=lxyWqHKWXGxQXBIbcYUCC6PvjSeruhSDnD-dPX1mL5Y,211
|
28
28
|
virtool_workflow/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
29
29
|
virtool_workflow/runtime/config.py,sha256=fHkprWxxqWeEWKOobxpVvSOS5Njk5Mq32sH-p5o_d8g,546
|
@@ -32,14 +32,14 @@ virtool_workflow/runtime/events.py,sha256=ZIX3veBfC_2yNTdClHJaYMPn4KAF9JZqpQ3qDq
|
|
32
32
|
virtool_workflow/runtime/hook.py,sha256=ZfmvDHoSE7Qwk4Rpcjyd-pYuwP55mzEddec2ngRZpsg,4328
|
33
33
|
virtool_workflow/runtime/path.py,sha256=J8CsNMTg4XgDtib0gVSsLNvv17q793M-ydsxN6pkHrI,562
|
34
34
|
virtool_workflow/runtime/ping.py,sha256=Xm4udRCcldHfSV1Rjpiqr-6vE7G6kaVaZgDlzNSxdao,1434
|
35
|
-
virtool_workflow/runtime/redis.py,sha256=
|
36
|
-
virtool_workflow/runtime/run.py,sha256=
|
37
|
-
virtool_workflow/runtime/run_subprocess.py,sha256=
|
35
|
+
virtool_workflow/runtime/redis.py,sha256=m-Dtdpbho-Qa9W5IYJCeEEZ7vv04hYu5yALsxOJr0FY,1813
|
36
|
+
virtool_workflow/runtime/run.py,sha256=l0HguLLdYRVKvYTnIjoUB-9h6oDxffK-xzZYqO9lSIM,7599
|
37
|
+
virtool_workflow/runtime/run_subprocess.py,sha256=OFHVQ2ao16X8I9nl6Nm_f3IL7rHnmLH8ixtlAFKlOLk,4790
|
38
38
|
virtool_workflow/runtime/sentry.py,sha256=y4mh1sT-hoijRtKr4meE7yn1E-alxRKDylzGxmN6ndU,755
|
39
|
-
virtool_workflow/utils.py,sha256=
|
39
|
+
virtool_workflow/utils.py,sha256=jLsOtwh3RP7BCdgcr_rQr3DqzK1nLP2NILFXxbgAyGk,2530
|
40
40
|
virtool_workflow/workflow.py,sha256=W8IEFzd28wjdNNlqRrPDKyX9LeQpR6Vxy7zKeYEMQEc,2655
|
41
|
-
virtool_workflow-7.1.
|
42
|
-
virtool_workflow-7.1.
|
43
|
-
virtool_workflow-7.1.
|
44
|
-
virtool_workflow-7.1.
|
45
|
-
virtool_workflow-7.1.
|
41
|
+
virtool_workflow-7.1.5.dist-info/LICENSE,sha256=nkoVQw9W4aoQM9zgtNzHDmztap5TuXZ1L2-87vNr3w8,1097
|
42
|
+
virtool_workflow-7.1.5.dist-info/METADATA,sha256=2noOApATUCmR9G0i7FCgHWjzATEaC1KkV_90p9Aso_A,1757
|
43
|
+
virtool_workflow-7.1.5.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
44
|
+
virtool_workflow-7.1.5.dist-info/entry_points.txt,sha256=d4MA8ZDTJOU0jKZ3ymtHZbfLVoRPgItEIN5U4uIqay8,62
|
45
|
+
virtool_workflow-7.1.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|