virtool-workflow 7.1.1__py3-none-any.whl → 7.1.2__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/runtime/run.py +12 -27
- virtool_workflow/utils.py +42 -0
- {virtool_workflow-7.1.1.dist-info → virtool_workflow-7.1.2.dist-info}/METADATA +3 -2
- {virtool_workflow-7.1.1.dist-info → virtool_workflow-7.1.2.dist-info}/RECORD +7 -7
- {virtool_workflow-7.1.1.dist-info → virtool_workflow-7.1.2.dist-info}/WHEEL +1 -1
- {virtool_workflow-7.1.1.dist-info → virtool_workflow-7.1.2.dist-info}/LICENSE +0 -0
- {virtool_workflow-7.1.1.dist-info → virtool_workflow-7.1.2.dist-info}/entry_points.txt +0 -0
virtool_workflow/runtime/run.py
CHANGED
@@ -1,12 +1,10 @@
|
|
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
10
|
from virtool_core.models.job import JobState
|
@@ -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")
|
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,42 @@ 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
|
+
processors = [
|
36
|
+
structlog.stdlib.filter_by_level,
|
37
|
+
structlog.stdlib.add_logger_name,
|
38
|
+
structlog.stdlib.add_log_level,
|
39
|
+
structlog.stdlib.PositionalArgumentsFormatter(),
|
40
|
+
structlog.processors.TimeStamper(fmt="%Y-%m-%dT%H:%M:%SZ"),
|
41
|
+
structlog.processors.StackInfoRenderer(),
|
42
|
+
structlog.processors.UnicodeDecoder(),
|
43
|
+
]
|
44
|
+
|
45
|
+
if use_sentry:
|
46
|
+
processors.append(
|
47
|
+
SentryProcessor(event_level=logging.WARNING, level=logging.INFO),
|
48
|
+
)
|
49
|
+
|
50
|
+
processors.append(
|
51
|
+
LogfmtRenderer(
|
52
|
+
key_order=["timestamp", "level", "logger", "event"],
|
53
|
+
),
|
54
|
+
)
|
55
|
+
|
56
|
+
structlog.configure(
|
57
|
+
cache_logger_on_first_use=True,
|
58
|
+
logger_factory=structlog.stdlib.LoggerFactory(),
|
59
|
+
processors=processors,
|
60
|
+
wrapper_class=structlog.stdlib.BoundLogger,
|
61
|
+
)
|
62
|
+
|
63
|
+
|
22
64
|
def get_virtool_workflow_version() -> str:
|
23
65
|
"""Get the version of the installed virtool-workflow package."""
|
24
66
|
try:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: virtool-workflow
|
3
|
-
Version: 7.1.
|
3
|
+
Version: 7.1.2
|
4
4
|
Summary: A framework for developing bioinformatics workflows for Virtool.
|
5
5
|
Home-page: https://github.com/virtool/virtool-workflow
|
6
6
|
License: MIT
|
@@ -18,7 +18,8 @@ Requires-Dist: orjson (>=3.9.9,<4.0.0)
|
|
18
18
|
Requires-Dist: pydantic-factories (>=1.17.3,<2.0.0)
|
19
19
|
Requires-Dist: pyfixtures (>=1.0.0,<2.0.0)
|
20
20
|
Requires-Dist: sentry-sdk (>=2.3.1,<3.0.0)
|
21
|
-
Requires-Dist:
|
21
|
+
Requires-Dist: structlog-sentry (>=2.2.1,<3.0.0)
|
22
|
+
Requires-Dist: virtool-core (>=14.0.4,<15.0.0)
|
22
23
|
Project-URL: Repository, https://github.com/virtool/virtool-workflow
|
23
24
|
Description-Content-Type: text/markdown
|
24
25
|
|
@@ -33,13 +33,13 @@ virtool_workflow/runtime/hook.py,sha256=ZfmvDHoSE7Qwk4Rpcjyd-pYuwP55mzEddec2ngRZ
|
|
33
33
|
virtool_workflow/runtime/path.py,sha256=J8CsNMTg4XgDtib0gVSsLNvv17q793M-ydsxN6pkHrI,562
|
34
34
|
virtool_workflow/runtime/ping.py,sha256=Xm4udRCcldHfSV1Rjpiqr-6vE7G6kaVaZgDlzNSxdao,1434
|
35
35
|
virtool_workflow/runtime/redis.py,sha256=RK1u7IZCjgtc9jXiq4Va4Vde9v1_6NWPQ0tUdthSf5E,1806
|
36
|
-
virtool_workflow/runtime/run.py,sha256=
|
36
|
+
virtool_workflow/runtime/run.py,sha256=rN8dzojKmDZK7Y5uKcO81Ka8H_uG_3tckmQLQQYFA7w,7608
|
37
37
|
virtool_workflow/runtime/run_subprocess.py,sha256=hUeziLbDn3yenmVPlywAn_9FsRpYXgCIVPB1dJQzKfI,4768
|
38
38
|
virtool_workflow/runtime/sentry.py,sha256=y4mh1sT-hoijRtKr4meE7yn1E-alxRKDylzGxmN6ndU,755
|
39
|
-
virtool_workflow/utils.py,sha256=
|
39
|
+
virtool_workflow/utils.py,sha256=l3C8XE7DjcEVeTZqlelmAHo3GWG1lQZFzGHvOV9QUSE,2231
|
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.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,,
|
File without changes
|
File without changes
|