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.
@@ -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 virtool_core.models.enums import LibraryType
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, min_read_length: int,
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, config: SkewerConfiguration, paths: ReadPaths, output_path: Path,
145
- ) -> SkewerResult:
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, read_paths: ReadPaths, output_path: Path,
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, temp_path, output_path,
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 virtool_core.models.enums import LibraryType
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, trimming_parameters: dict, program: str = "skewer",
12
+ sample_id: str,
13
+ trimming_parameters: dict,
14
+ program: str = "skewer",
12
15
  ):
13
16
  """Compute a unique cache key.
14
17
 
@@ -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 virtool_core.models.job import JobAcquired
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 virtool_core.models.analysis import Analysis, AnalysisSample
7
- from virtool_core.models.index import IndexNested
8
- from virtool_core.models.job import Job
9
- from virtool_core.models.ml import MLModelRelease
10
- from virtool_core.models.reference import ReferenceNested
11
- from virtool_core.models.subtraction import SubtractionNested
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: Job,
87
+ job: JobNested,
87
88
  ) -> WFAnalysis:
88
89
  """A :class:`.WFAnalysis` object that represents the analysis associated with the running
89
90
  workflow.
@@ -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 virtool_core.models.hmm import HMM
12
- from virtool_core.utils import decompress_file
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
@@ -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 virtool_core.models.analysis import Analysis
10
- from virtool_core.models.index import Index
11
- from virtool_core.models.job import Job
12
- from virtool_core.models.reference import ReferenceNested
13
- from virtool_core.utils import decompress_file
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
@@ -2,7 +2,7 @@ import traceback
2
2
 
3
3
  from pyfixtures import fixture
4
4
  from structlog import get_logger
5
- from virtool_core.models.job import Job, JobAcquired, JobState
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
@@ -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 virtool_core.models.ml import MLModelRelease
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
@@ -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, Callable, Coroutine
5
+ from typing import Any
5
6
 
6
7
  from pyfixtures import fixture
7
8
  from structlog import get_logger
8
- from virtool_core.models.enums import LibraryType
9
- from virtool_core.models.job import Job
10
- from virtool_core.models.samples import Quality, Sample
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 virtool_core.models.job import Job
9
- from virtool_core.models.subtraction import (
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 virtool_core.models.analysis import Analysis
8
- from virtool_core.models.index import Index, IndexNested
9
- from virtool_core.models.job import JobAcquired, JobMinimal, JobPing
10
- from virtool_core.models.ml import MLModelRelease
11
- from virtool_core.models.reference import Reference
12
- from virtool_core.models.samples import (
13
- Sample,
14
- SampleNested,
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 = Reference.parse_obj(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 = Reference.parse_obj(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 = SampleNested.parse_obj(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 = Reference.parse_obj(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 typing import Callable
3
+ from collections.abc import Callable
4
4
 
5
5
  from structlog import get_logger
6
- from virtool_core.redis import Redis
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 and raise a :class:``Timeout`` error if one
19
- is not found in ``timeout`` seconds.
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",
@@ -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 virtool_core.models.job import JobState
13
- from virtool_core.redis import Redis
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 api_client(
165
- config.jobs_api_connection_string,
166
- job.id,
167
- job.key,
168
- ) as api, FixtureScope() as scope:
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
- # configure_logs(dev)
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 asyncio.TimeoutError:
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 Callable, Coroutine, Protocol
7
+ from typing import Protocol
7
8
 
8
9
  from pyfixtures import fixture
9
10
  from structlog import get_logger
10
- from virtool_core.utils import timestamp
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
1
+ Metadata-Version: 2.3
2
2
  Name: virtool-workflow
3
- Version: 7.1.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.3.1,<3.0.0)
21
- Requires-Dist: virtool-core (>=14.0.0,<15.0.0)
22
- Project-URL: Repository, https://github.com/virtool/virtool-workflow
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=_kTCLd6XUUscgMgPVc50Xcwy1QZzxCwxbEmYgm6PQwc,7130
5
- virtool_workflow/analysis/trimming.py,sha256=rJG9f1mDMkivN-YcxU-_IubTUkn-oyG3NUUrhGuHWzs,1447
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=5SOlNfyXOdTR3yjMOpq5sCj6kXeuih96YjsnQuzpG9k,2161
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=EzXfidKizEV_KjvaWrMLZpUMo0H2KCE_EI3IQPAFjT4,3117
14
- virtool_workflow/data/hmms.py,sha256=h9ahtprzhEsHNscsr_--2vkkKFNWgZu49ojkHRw9Ars,3234
15
- virtool_workflow/data/indexes.py,sha256=qTSqWJqRq-0WKmHQNeBa80vG3qMRvi4i8eVnd0AQqOc,9028
16
- virtool_workflow/data/jobs.py,sha256=LXIsEjgJx_bRa19_3gx5kxfdCmNez-xlAT7e-4bOcLo,1667
17
- virtool_workflow/data/ml.py,sha256=E19USVcXWjCU2NH1QVR74PLBnVY66NKJG00DSxnn1yY,2190
18
- virtool_workflow/data/samples.py,sha256=u7ce7oXB-yGbn2rRQYvs8Km9VKknifK5MHY29P5HQLg,4958
19
- virtool_workflow/data/subtractions.py,sha256=4jOmyxPtFuUAkgEbUKTOY3lsDIvlIsL623U5AK0P2mo,7301
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=d59oyigNq-yBGsDPIJf5pJr3daT3VpNSGATOU-tIwTw,5586
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=RK1u7IZCjgtc9jXiq4Va4Vde9v1_6NWPQ0tUdthSf5E,1806
36
- virtool_workflow/runtime/run.py,sha256=dJ1u2dzwAsDKG8uomEcJwHPqx5bZbNj849stoCVoc7c,8214
37
- virtool_workflow/runtime/run_subprocess.py,sha256=hUeziLbDn3yenmVPlywAn_9FsRpYXgCIVPB1dJQzKfI,4768
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=mc3i8whQC-2zU07v8gaR9GeumKSUic0OpFrv4X63r8o,1089
39
+ virtool_workflow/utils.py,sha256=jLsOtwh3RP7BCdgcr_rQr3DqzK1nLP2NILFXxbgAyGk,2530
40
40
  virtool_workflow/workflow.py,sha256=W8IEFzd28wjdNNlqRrPDKyX9LeQpR6Vxy7zKeYEMQEc,2655
41
- virtool_workflow-7.1.1.dist-info/LICENSE,sha256=nkoVQw9W4aoQM9zgtNzHDmztap5TuXZ1L2-87vNr3w8,1097
42
- virtool_workflow-7.1.1.dist-info/METADATA,sha256=auGjhsbUFyYurv0ClJN5w1egnfxHjogoHRkDwdvvhsQ,1884
43
- virtool_workflow-7.1.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
44
- virtool_workflow-7.1.1.dist-info/entry_points.txt,sha256=d4MA8ZDTJOU0jKZ3ymtHZbfLVoRPgItEIN5U4uIqay8,62
45
- virtool_workflow-7.1.1.dist-info/RECORD,,
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,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.9.0
2
+ Generator: poetry-core 2.1.3
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any