fractal-task-tools 0.0.4__tar.gz → 0.0.6__tar.gz
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.
Potentially problematic release.
This version of fractal-task-tools might be problematic. Click here for more details.
- {fractal_task_tools-0.0.4/src/fractal_task_tools.egg-info → fractal_task_tools-0.0.6}/PKG-INFO +2 -2
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/README.md +1 -1
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/pyproject.toml +2 -2
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/__init__.py +1 -1
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/task_models.py +2 -3
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/task_wrapper.py +6 -8
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6/src/fractal_task_tools.egg-info}/PKG-INFO +2 -2
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools.egg-info/SOURCES.txt +3 -0
- fractal_task_tools-0.0.6/tests/test_normalize_package_name.py +7 -0
- fractal_task_tools-0.0.6/tests/test_task_models.py +47 -0
- fractal_task_tools-0.0.6/tests/test_task_wrapper.py +88 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/LICENSE +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/setup.cfg +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/_args_schemas.py +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/_cli.py +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/_create_manifest.py +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/_descriptions.py +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/_package_name_tools.py +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/_pydantic_generatejsonschema.py +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/_signature_constraints.py +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/_task_docs.py +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/_titles.py +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools.egg-info/dependency_links.txt +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools.egg-info/entry_points.txt +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools.egg-info/requires.txt +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools.egg-info/top_level.txt +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/tests/test_create_schema_for_single_task.py +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/tests/test_extract_function.py +0 -0
- {fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/tests/test_unit_lib_descriptions.py +0 -0
{fractal_task_tools-0.0.4/src/fractal_task_tools.egg-info → fractal_task_tools-0.0.6}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: fractal-task-tools
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.6
|
|
4
4
|
Summary: Shared tools for Fractal tasks
|
|
5
5
|
Author-email: Tommaso Comparin <tommaso.comparin@exact-lab.it>
|
|
6
6
|
License: BSD-3-Clause
|
|
@@ -22,7 +22,7 @@ Requires-Dist: coverage<7.7.0,>=7.6.0; extra == "dev"
|
|
|
22
22
|
|
|
23
23
|
[](https://pypi.org/project/fractal-task-tools/)
|
|
24
24
|
[](https://opensource.org/licenses/BSD-3-Clause)
|
|
25
|
-
[](https://github.com/fractal-analytics-platform/fractal-task-tools/actions/workflows/
|
|
25
|
+
[](https://github.com/fractal-analytics-platform/fractal-task-tools/actions/workflows/ci.yml)
|
|
26
26
|
[](https://htmlpreview.github.io/?https://github.com/fractal-analytics-platform/fractal-task-tools/blob/python-coverage-comment-action-data/htmlcov/index.html)
|
|
27
27
|
|
|
28
28
|
Fractal-task-tools provides some basic tools for building tasks for the [Fractal](https://fractal-analytics-platform.github.io/) framework.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://pypi.org/project/fractal-task-tools/)
|
|
4
4
|
[](https://opensource.org/licenses/BSD-3-Clause)
|
|
5
|
-
[](https://github.com/fractal-analytics-platform/fractal-task-tools/actions/workflows/
|
|
5
|
+
[](https://github.com/fractal-analytics-platform/fractal-task-tools/actions/workflows/ci.yml)
|
|
6
6
|
[](https://htmlpreview.github.io/?https://github.com/fractal-analytics-platform/fractal-task-tools/blob/python-coverage-comment-action-data/htmlcov/index.html)
|
|
7
7
|
|
|
8
8
|
Fractal-task-tools provides some basic tools for building tasks for the [Fractal](https://fractal-analytics-platform.github.io/) framework.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fractal-task-tools"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.6"
|
|
4
4
|
description = "Shared tools for Fractal tasks"
|
|
5
5
|
authors = [
|
|
6
6
|
{name="Tommaso Comparin", email="tommaso.comparin@exact-lab.it"},
|
|
@@ -34,7 +34,7 @@ build-backend = "setuptools.build_meta"
|
|
|
34
34
|
fractal-manifest = "fractal_task_tools._cli:main"
|
|
35
35
|
|
|
36
36
|
[tool.bumpver]
|
|
37
|
-
current_version = "0.0.
|
|
37
|
+
current_version = "0.0.6"
|
|
38
38
|
version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
|
|
39
39
|
commit_message = "bump version {old_version} -> {new_version}"
|
|
40
40
|
commit = true
|
|
@@ -2,13 +2,12 @@ from typing import Any
|
|
|
2
2
|
from typing import Optional
|
|
3
3
|
|
|
4
4
|
from pydantic import BaseModel
|
|
5
|
+
from pydantic import ConfigDict
|
|
5
6
|
from pydantic import Field
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
class _BaseTask(BaseModel):
|
|
9
|
-
|
|
10
|
-
arbitrary_types_allowed = True
|
|
11
|
-
extra = "forbid"
|
|
10
|
+
model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
|
|
12
11
|
|
|
13
12
|
name: str
|
|
14
13
|
executable: str
|
{fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/task_wrapper.py
RENAMED
|
@@ -12,16 +12,14 @@ from typing import Optional
|
|
|
12
12
|
class TaskParameterEncoder(JSONEncoder):
|
|
13
13
|
"""
|
|
14
14
|
Custom JSONEncoder that transforms Path objects to strings.
|
|
15
|
+
|
|
16
|
+
Ref https://docs.python.org/3/library/json.html
|
|
15
17
|
"""
|
|
16
18
|
|
|
17
|
-
def default(self,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"""
|
|
22
|
-
if isinstance(value, Path):
|
|
23
|
-
return value.as_posix()
|
|
24
|
-
return JSONEncoder.default(self, value)
|
|
19
|
+
def default(self, obj):
|
|
20
|
+
if isinstance(obj, Path):
|
|
21
|
+
return obj.as_posix()
|
|
22
|
+
return super().default(obj)
|
|
25
23
|
|
|
26
24
|
|
|
27
25
|
def run_fractal_task(
|
{fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6/src/fractal_task_tools.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: fractal-task-tools
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.6
|
|
4
4
|
Summary: Shared tools for Fractal tasks
|
|
5
5
|
Author-email: Tommaso Comparin <tommaso.comparin@exact-lab.it>
|
|
6
6
|
License: BSD-3-Clause
|
|
@@ -22,7 +22,7 @@ Requires-Dist: coverage<7.7.0,>=7.6.0; extra == "dev"
|
|
|
22
22
|
|
|
23
23
|
[](https://pypi.org/project/fractal-task-tools/)
|
|
24
24
|
[](https://opensource.org/licenses/BSD-3-Clause)
|
|
25
|
-
[](https://github.com/fractal-analytics-platform/fractal-task-tools/actions/workflows/
|
|
25
|
+
[](https://github.com/fractal-analytics-platform/fractal-task-tools/actions/workflows/ci.yml)
|
|
26
26
|
[](https://htmlpreview.github.io/?https://github.com/fractal-analytics-platform/fractal-task-tools/blob/python-coverage-comment-action-data/htmlcov/index.html)
|
|
27
27
|
|
|
28
28
|
Fractal-task-tools provides some basic tools for building tasks for the [Fractal](https://fractal-analytics-platform.github.io/) framework.
|
{fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools.egg-info/SOURCES.txt
RENAMED
|
@@ -21,4 +21,7 @@ src/fractal_task_tools.egg-info/requires.txt
|
|
|
21
21
|
src/fractal_task_tools.egg-info/top_level.txt
|
|
22
22
|
tests/test_create_schema_for_single_task.py
|
|
23
23
|
tests/test_extract_function.py
|
|
24
|
+
tests/test_normalize_package_name.py
|
|
25
|
+
tests/test_task_models.py
|
|
26
|
+
tests/test_task_wrapper.py
|
|
24
27
|
tests/test_unit_lib_descriptions.py
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
from fractal_task_tools.task_models import CompoundTask
|
|
2
|
+
from fractal_task_tools.task_models import NonParallelTask
|
|
3
|
+
from fractal_task_tools.task_models import ParallelTask
|
|
4
|
+
|
|
5
|
+
NAME = "name"
|
|
6
|
+
EXECUTABLE = "executable"
|
|
7
|
+
EXECUTABLE_INIT = "executable_init"
|
|
8
|
+
META = {"some": "thing"}
|
|
9
|
+
META_INIT = {"some": "thing-init"}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def test_compound_task_model():
|
|
13
|
+
t = CompoundTask(
|
|
14
|
+
name=NAME,
|
|
15
|
+
executable_init=EXECUTABLE_INIT,
|
|
16
|
+
meta_init=META_INIT,
|
|
17
|
+
executable=EXECUTABLE,
|
|
18
|
+
meta=META,
|
|
19
|
+
)
|
|
20
|
+
assert t.executable_non_parallel == EXECUTABLE_INIT
|
|
21
|
+
assert t.meta_non_parallel == META_INIT
|
|
22
|
+
assert t.executable_parallel == EXECUTABLE
|
|
23
|
+
assert t.meta_parallel == META
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def test_non_parallel_task_model():
|
|
27
|
+
t = NonParallelTask(
|
|
28
|
+
name=NAME,
|
|
29
|
+
executable=EXECUTABLE_INIT,
|
|
30
|
+
meta=META_INIT,
|
|
31
|
+
)
|
|
32
|
+
assert t.executable_non_parallel == EXECUTABLE_INIT
|
|
33
|
+
assert t.meta_non_parallel == META_INIT
|
|
34
|
+
assert t.executable_parallel is None
|
|
35
|
+
assert t.meta_parallel is None
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def test_parallel_task_model():
|
|
39
|
+
t = ParallelTask(
|
|
40
|
+
name=NAME,
|
|
41
|
+
executable=EXECUTABLE,
|
|
42
|
+
meta=META,
|
|
43
|
+
)
|
|
44
|
+
assert t.executable_non_parallel is None
|
|
45
|
+
assert t.meta_non_parallel is None
|
|
46
|
+
assert t.executable_parallel == EXECUTABLE
|
|
47
|
+
assert t.meta_parallel == META
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
import pytest
|
|
6
|
+
from fractal_task_tools.task_wrapper import run_fractal_task
|
|
7
|
+
from pydantic import ValidationError
|
|
8
|
+
from pydantic.validate_call_decorator import validate_call
|
|
9
|
+
|
|
10
|
+
TASK_OUTPUT = {
|
|
11
|
+
"some": "thing",
|
|
12
|
+
"path": Path("/something"),
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
SERIALIZED_TASK_OUTPUT = {
|
|
16
|
+
"some": "thing",
|
|
17
|
+
"path": "/something",
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@validate_call
|
|
22
|
+
def fake_task(zarr_url: str, parameter: float):
|
|
23
|
+
return TASK_OUTPUT
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@validate_call
|
|
27
|
+
def fake_task_invalid_output(zarr_url: str, parameter: float):
|
|
28
|
+
return dict(non_json_serializable=datetime.now())
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_run_fractal_task(tmp_path, monkeypatch, caplog):
|
|
32
|
+
|
|
33
|
+
ARGS_PATH = tmp_path / "args.json"
|
|
34
|
+
METADIFF_PATH = tmp_path / "metadiff.json"
|
|
35
|
+
|
|
36
|
+
# Mock argparse.ArgumentParser
|
|
37
|
+
class MockArgumentParser:
|
|
38
|
+
def add_argument(self, *args, **kwargs):
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
def parse_args(self, *args, **kwargs):
|
|
42
|
+
class Args(object):
|
|
43
|
+
def __init__(self):
|
|
44
|
+
self.args_json = str(ARGS_PATH)
|
|
45
|
+
self.out_json = str(METADIFF_PATH)
|
|
46
|
+
|
|
47
|
+
return Args()
|
|
48
|
+
|
|
49
|
+
import fractal_task_tools.task_wrapper # noqa: F401
|
|
50
|
+
|
|
51
|
+
monkeypatch.setattr(
|
|
52
|
+
"fractal_task_tools.task_wrapper.ArgumentParser",
|
|
53
|
+
MockArgumentParser,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
# Success
|
|
57
|
+
args = dict(zarr_url="/somewhere", parameter=1.0)
|
|
58
|
+
with ARGS_PATH.open("w") as f:
|
|
59
|
+
json.dump(args, f, indent=2)
|
|
60
|
+
function_output = run_fractal_task(task_function=fake_task)
|
|
61
|
+
assert function_output is None
|
|
62
|
+
with METADIFF_PATH.open("r") as f:
|
|
63
|
+
task_output = json.load(f)
|
|
64
|
+
assert task_output == SERIALIZED_TASK_OUTPUT
|
|
65
|
+
|
|
66
|
+
# Failure (metadiff file already exists)
|
|
67
|
+
caplog.clear()
|
|
68
|
+
with pytest.raises(SystemExit):
|
|
69
|
+
run_fractal_task(task_function=fake_task)
|
|
70
|
+
assert "already exists" in caplog.text
|
|
71
|
+
|
|
72
|
+
# Failure (invalid output)
|
|
73
|
+
METADIFF_PATH.unlink()
|
|
74
|
+
with pytest.raises(
|
|
75
|
+
TypeError,
|
|
76
|
+
match="datetime is not JSON serializable",
|
|
77
|
+
):
|
|
78
|
+
run_fractal_task(task_function=fake_task_invalid_output)
|
|
79
|
+
|
|
80
|
+
# Failure (invalid input)
|
|
81
|
+
METADIFF_PATH.unlink()
|
|
82
|
+
args = dict(zarr_url="/somewhere", parameter=None)
|
|
83
|
+
with ARGS_PATH.open("w") as f:
|
|
84
|
+
json.dump(args, f, indent=2)
|
|
85
|
+
with pytest.raises(
|
|
86
|
+
ValidationError, match="validation error for fake_task"
|
|
87
|
+
):
|
|
88
|
+
run_fractal_task(task_function=fake_task)
|
|
File without changes
|
|
File without changes
|
{fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/_args_schemas.py
RENAMED
|
File without changes
|
|
File without changes
|
{fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/_create_manifest.py
RENAMED
|
File without changes
|
{fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/_descriptions.py
RENAMED
|
File without changes
|
{fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools/_package_name_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools.egg-info/requires.txt
RENAMED
|
File without changes
|
{fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/src/fractal_task_tools.egg-info/top_level.txt
RENAMED
|
File without changes
|
{fractal_task_tools-0.0.4 → fractal_task_tools-0.0.6}/tests/test_create_schema_for_single_task.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|