virtool-workflow 7.1.2__py3-none-any.whl → 7.2.0__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",
@@ -7,8 +7,8 @@ from pathlib import Path
7
7
 
8
8
  from pyfixtures import FixtureScope, runs_in_new_fixture_context
9
9
  from structlog import get_logger
10
- from virtool_core.models.job import JobState
11
- from virtool_core.redis import Redis
10
+ from virtool.jobs.models import JobState
11
+ from virtool.redis import Redis
12
12
 
13
13
  from virtool_workflow.api.acquire import acquire_job_by_id
14
14
  from virtool_workflow.api.client import api_client
@@ -38,7 +38,7 @@ from virtool_workflow.runtime.redis import (
38
38
  get_next_job_with_timeout,
39
39
  wait_for_cancellation,
40
40
  )
41
- from virtool_workflow.runtime.sentry import configure_sentry
41
+ from virtool_workflow.runtime.sentry import configure_sentry, set_workflow_context
42
42
  from virtool_workflow.utils import configure_logs, get_virtool_workflow_version
43
43
  from virtool_workflow.workflow import Workflow
44
44
 
@@ -182,6 +182,9 @@ async def run_workflow(
182
182
  scope["proc"] = config.proc
183
183
  scope["results"] = {}
184
184
 
185
+ # Set Sentry context with workflow metadata
186
+ set_workflow_context(job.workflow, job.id)
187
+
185
188
  async with create_work_path(config) as work_path:
186
189
  scope["work_path"] = work_path
187
190
 
@@ -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
 
@@ -9,7 +9,7 @@ from virtool_workflow.utils import get_virtool_workflow_version
9
9
  logger = get_logger("runtime")
10
10
 
11
11
 
12
- def configure_sentry(dsn: str):
12
+ def configure_sentry(dsn: str | None) -> None:
13
13
  """Initialize Sentry for log aggregation."""
14
14
  if dsn:
15
15
  logger.info("initializing sentry", dsn=f"{dsn[:15]}...")
@@ -26,3 +26,25 @@ def configure_sentry(dsn: str):
26
26
  )
27
27
  else:
28
28
  logger.info("sentry disabled because no dsn was provided")
29
+
30
+
31
+ def set_workflow_context(
32
+ workflow_name: str,
33
+ job_id: str,
34
+ ):
35
+ """Set workflow context for Sentry reporting."""
36
+ try:
37
+ with open("VERSION") as f:
38
+ workflow_version = f.read().strip()
39
+ except FileNotFoundError:
40
+ workflow_version = "UNKNOWN"
41
+
42
+ sentry_sdk.set_context(
43
+ "workflow",
44
+ {
45
+ "workflow_name": workflow_name,
46
+ "workflow_version": workflow_version,
47
+ "virtool_workflow_version": get_virtool_workflow_version(),
48
+ "job_id": job_id,
49
+ },
50
+ )
virtool_workflow/utils.py CHANGED
@@ -32,10 +32,17 @@ def configure_logs(use_sentry: bool):
32
32
  level=logging.INFO,
33
33
  )
34
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
+
35
41
  processors = [
36
42
  structlog.stdlib.filter_by_level,
37
43
  structlog.stdlib.add_logger_name,
38
44
  structlog.stdlib.add_log_level,
45
+ normalize_log_level,
39
46
  structlog.stdlib.PositionalArgumentsFormatter(),
40
47
  structlog.processors.TimeStamper(fmt="%Y-%m-%dT%H:%M:%SZ"),
41
48
  structlog.processors.StackInfoRenderer(),
@@ -75,7 +82,7 @@ async def make_directory(path: Path):
75
82
 
76
83
  def untar(path: Path, target_path: Path):
77
84
  with tarfile.open(path, "r:gz") as tar:
78
- tar.extractall(target_path)
85
+ tar.extractall(target_path, filter="data")
79
86
 
80
87
 
81
88
  def move_all_model_files(source_path: Path, target_path: Path):
@@ -1,15 +1,13 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: virtool-workflow
3
- Version: 7.1.2
3
+ Version: 7.2.0
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,10 +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)
18
+ Requires-Dist: sentry-sdk (>=2.30.0,<3.0.0)
21
19
  Requires-Dist: structlog-sentry (>=2.2.1,<3.0.0)
22
- Requires-Dist: virtool-core (>=14.0.4,<15.0.0)
23
- Project-URL: Repository, https://github.com/virtool/virtool-workflow
20
+ Requires-Dist: virtool (>=31.1.3,<32.0.0)
24
21
  Description-Content-Type: text/markdown
25
22
 
26
23
  # Virtool Workflow
@@ -64,7 +61,6 @@ docker compose up -d
64
61
 
65
62
  # Run tests in the test container.
66
63
  docker compose exec test poetry run pytest
67
-
68
64
  ```
69
65
 
70
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=rN8dzojKmDZK7Y5uKcO81Ka8H_uG_3tckmQLQQYFA7w,7608
37
- virtool_workflow/runtime/run_subprocess.py,sha256=hUeziLbDn3yenmVPlywAn_9FsRpYXgCIVPB1dJQzKfI,4768
38
- virtool_workflow/runtime/sentry.py,sha256=y4mh1sT-hoijRtKr4meE7yn1E-alxRKDylzGxmN6ndU,755
39
- virtool_workflow/utils.py,sha256=l3C8XE7DjcEVeTZqlelmAHo3GWG1lQZFzGHvOV9QUSE,2231
35
+ virtool_workflow/runtime/redis.py,sha256=m-Dtdpbho-Qa9W5IYJCeEEZ7vv04hYu5yALsxOJr0FY,1813
36
+ virtool_workflow/runtime/run.py,sha256=pkfNyjaDBsVHrEGqmz5Ah5FkHJN4SkCHKkEmfDO1QRU,7725
37
+ virtool_workflow/runtime/run_subprocess.py,sha256=OFHVQ2ao16X8I9nl6Nm_f3IL7rHnmLH8ixtlAFKlOLk,4790
38
+ virtool_workflow/runtime/sentry.py,sha256=WJ9CI2fshJD5As6s3umUtJrUq4Z-hQRrSxAgbjceXrk,1326
39
+ virtool_workflow/utils.py,sha256=9rHSlcvZsV2qE1Wo-cUDqESIATswr1zR_P8V-wP6jdk,2545
40
40
  virtool_workflow/workflow.py,sha256=W8IEFzd28wjdNNlqRrPDKyX9LeQpR6Vxy7zKeYEMQEc,2655
41
- virtool_workflow-7.1.2.dist-info/LICENSE,sha256=nkoVQw9W4aoQM9zgtNzHDmztap5TuXZ1L2-87vNr3w8,1097
42
- virtool_workflow-7.1.2.dist-info/METADATA,sha256=SGEUgsFrLqlun0RR1If7gEGVt2hTKlbDGO_rFaT6aCQ,1933
43
- virtool_workflow-7.1.2.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
44
- virtool_workflow-7.1.2.dist-info/entry_points.txt,sha256=d4MA8ZDTJOU0jKZ3ymtHZbfLVoRPgItEIN5U4uIqay8,62
45
- virtool_workflow-7.1.2.dist-info/RECORD,,
41
+ virtool_workflow-7.2.0.dist-info/LICENSE,sha256=nkoVQw9W4aoQM9zgtNzHDmztap5TuXZ1L2-87vNr3w8,1097
42
+ virtool_workflow-7.2.0.dist-info/METADATA,sha256=vD14kwwt5OFViEIoJuz-fZ870H-hJ0i2i3oNBLPQXmQ,1757
43
+ virtool_workflow-7.2.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
44
+ virtool_workflow-7.2.0.dist-info/entry_points.txt,sha256=d4MA8ZDTJOU0jKZ3ymtHZbfLVoRPgItEIN5U4uIqay8,62
45
+ virtool_workflow-7.2.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.9.1
2
+ Generator: poetry-core 2.1.3
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any