dv-flow-mgr 0.0.2.14150065664a1__py3-none-any.whl → 0.0.2.14180123344a1__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.
- dv_flow/mgr/__main__.py +3 -0
- dv_flow/mgr/cmds/cmd_run.py +6 -0
- dv_flow/mgr/listener_list.py +10 -0
- dv_flow/mgr/package_def.py +12 -1
- dv_flow/mgr/task_def.py +27 -5
- dv_flow/mgr/task_graph_builder.py +3 -0
- dv_flow/mgr/task_node_ctor_compound.py +14 -4
- {dv_flow_mgr-0.0.2.14150065664a1.dist-info → dv_flow_mgr-0.0.2.14180123344a1.dist-info}/METADATA +1 -1
- {dv_flow_mgr-0.0.2.14150065664a1.dist-info → dv_flow_mgr-0.0.2.14180123344a1.dist-info}/RECORD +13 -12
- {dv_flow_mgr-0.0.2.14150065664a1.dist-info → dv_flow_mgr-0.0.2.14180123344a1.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-0.0.2.14150065664a1.dist-info → dv_flow_mgr-0.0.2.14180123344a1.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.2.14150065664a1.dist-info → dv_flow_mgr-0.0.2.14180123344a1.dist-info}/licenses/LICENSE +0 -0
- {dv_flow_mgr-0.0.2.14150065664a1.dist-info → dv_flow_mgr-0.0.2.14180123344a1.dist-info}/top_level.txt +0 -0
dv_flow/mgr/__main__.py
CHANGED
@@ -55,6 +55,9 @@ def get_parser():
|
|
55
55
|
run_parser.add_argument("-j",
|
56
56
|
help="Specifies degree of parallelism. Uses all cores by default",
|
57
57
|
type=int, default=-1)
|
58
|
+
run_parser.add_argument("-c", "--clean",
|
59
|
+
action="store_true",
|
60
|
+
help="Cleans the rundir before running")
|
58
61
|
run_parser.set_defaults(func=CmdRun())
|
59
62
|
|
60
63
|
show_parser = subparsers.add_parser('show',
|
dv_flow/mgr/cmds/cmd_run.py
CHANGED
@@ -77,6 +77,12 @@ class CmdRun(object):
|
|
77
77
|
# TODO: allow user to specify run root -- maybe relative to some fixed directory?
|
78
78
|
rundir = os.path.join(pkg._basedir, "rundir")
|
79
79
|
|
80
|
+
if args.clean:
|
81
|
+
print("Note: Cleaning rundir %s" % rundir)
|
82
|
+
if os.path.exists(rundir):
|
83
|
+
os.rmdir(rundir)
|
84
|
+
os.makedirs(rundir)
|
85
|
+
|
80
86
|
builder = TaskGraphBuilder(root_pkg=pkg, rundir=rundir)
|
81
87
|
runner = TaskSetRunner(rundir)
|
82
88
|
|
dv_flow/mgr/package_def.py
CHANGED
@@ -64,6 +64,7 @@ class PackageDef(BaseModel):
|
|
64
64
|
params : List[ParamDef] = dc.Field(
|
65
65
|
default_factory=list, alias="with",
|
66
66
|
description="List of package parameters to set")
|
67
|
+
srcinfo : Any = dc.Field(default=None)
|
67
68
|
|
68
69
|
_fragment_l : List['FragmentDef'] = []
|
69
70
|
_subpkg_m : Dict[str,'PackageDef'] = {}
|
@@ -410,13 +411,23 @@ class PackageDef(BaseModel):
|
|
410
411
|
|
411
412
|
@classmethod
|
412
413
|
def _loadPkgDef(cls, root, exp_pkg_name, file_s):
|
414
|
+
from yaml.loader import SafeLoader
|
415
|
+
|
416
|
+
class SafeLineLoader(SafeLoader):
|
417
|
+
def construct_mapping(self, node, deep=False):
|
418
|
+
# print("construct")
|
419
|
+
mapping = super(SafeLineLoader, self).construct_mapping(node, deep=deep)
|
420
|
+
# Add 1 so line numbering starts at 1
|
421
|
+
# mapping['_srcinfo'] = node.start_mark.line + 1
|
422
|
+
return mapping
|
423
|
+
|
413
424
|
if root in file_s:
|
414
425
|
raise Exception("Recursive file processing @ %s: %s" % (root, ",".join(file_s)))
|
415
426
|
file_s.append(root)
|
416
427
|
ret = None
|
417
428
|
with open(root, "r") as fp:
|
418
429
|
PackageDef._log.debug("open %s" % root)
|
419
|
-
doc = yaml.load(fp, Loader=
|
430
|
+
doc = yaml.load(fp, Loader=SafeLineLoader)
|
420
431
|
if "package" not in doc.keys():
|
421
432
|
raise Exception("Missing 'package' key in %s" % root)
|
422
433
|
try:
|
dv_flow/mgr/task_def.py
CHANGED
@@ -19,6 +19,7 @@
|
|
19
19
|
#* Author:
|
20
20
|
#*
|
21
21
|
#****************************************************************************
|
22
|
+
import pydantic
|
22
23
|
import pydantic.dataclasses as dc
|
23
24
|
import enum
|
24
25
|
from pydantic import BaseModel
|
@@ -48,13 +49,31 @@ class PassthroughE(enum.Enum):
|
|
48
49
|
All = "all"
|
49
50
|
Unused = "unused"
|
50
51
|
|
51
|
-
|
52
52
|
class StrategyDef(BaseModel):
|
53
53
|
chain: Union[bool, None] = dc.Field(default=None)
|
54
54
|
matrix : Union[Dict[str,List[Any]],None] = dc.Field(
|
55
55
|
default=None,
|
56
56
|
description="Matrix of parameter values to explore")
|
57
57
|
|
58
|
+
class TaskExecDef(BaseModel):
|
59
|
+
pytask : Union[str, None] = dc.Field(
|
60
|
+
default=None,
|
61
|
+
description="Python method to execute to implement this task")
|
62
|
+
pydep : Union[str, None] = dc.Field(
|
63
|
+
default=None,
|
64
|
+
description="Python method to check up-to-date status for this task")
|
65
|
+
|
66
|
+
class TasksBuilder(BaseModel):
|
67
|
+
# TODO: control how much data this task is provided?
|
68
|
+
pydef : Union[str, None] = dc.Field(
|
69
|
+
default=None,
|
70
|
+
description="Python method to build the subgraph")
|
71
|
+
|
72
|
+
class Tasks(BaseModel):
|
73
|
+
tasks: Union[List['TaskDef'], TasksBuilder] = dc.Field(
|
74
|
+
default_factory=list,
|
75
|
+
description="Sub-tasks")
|
76
|
+
|
58
77
|
class TaskDef(BaseModel):
|
59
78
|
"""Holds definition information (ie the YAML view) for a task"""
|
60
79
|
name : str = dc.Field(
|
@@ -72,7 +91,7 @@ class TaskDef(BaseModel):
|
|
72
91
|
description="Python method to execute to implement this task")
|
73
92
|
strategy : StrategyDef = dc.Field(
|
74
93
|
default=None)
|
75
|
-
tasks: List['TaskDef'] = dc.Field(
|
94
|
+
tasks: Union[List['TaskDef'], TasksBuilder] = dc.Field(
|
76
95
|
default_factory=list,
|
77
96
|
description="Sub-tasks")
|
78
97
|
desc : str = dc.Field(
|
@@ -100,9 +119,12 @@ class TaskDef(BaseModel):
|
|
100
119
|
consumes : Union[ConsumesE, List[Any], None] = dc.Field(
|
101
120
|
default=None,
|
102
121
|
description="Specifies matching patterns for parameter sets that this task consumes")
|
103
|
-
|
104
|
-
|
105
|
-
|
122
|
+
|
123
|
+
def __init__(self, **data):
|
124
|
+
# print("--> task_def %s" % str(data))
|
125
|
+
super().__init__(**data)
|
126
|
+
# print("<-- task_def %s" % str(data))
|
127
|
+
|
106
128
|
def copy(self) -> 'TaskDef':
|
107
129
|
ret = TaskDef(
|
108
130
|
name=self.name,
|
@@ -22,6 +22,7 @@
|
|
22
22
|
import os
|
23
23
|
import dataclasses as dc
|
24
24
|
import logging
|
25
|
+
from typing import Callable
|
25
26
|
from .package import Package
|
26
27
|
from .package_def import PackageDef, PackageSpec
|
27
28
|
from .pkg_rgy import PkgRgy
|
@@ -48,6 +49,7 @@ class TaskGraphBuilder(object):
|
|
48
49
|
root_pkg : PackageDef
|
49
50
|
rundir : str
|
50
51
|
pkg_rgy : PkgRgy = None
|
52
|
+
marker_l : Callable = lambda *args, **kwargs: None
|
51
53
|
_pkg_s : List[Package] = dc.field(default_factory=list)
|
52
54
|
_pkg_m : Dict[PackageSpec,Package] = dc.field(default_factory=dict)
|
53
55
|
_pkg_spec_s : List[PackageDef] = dc.field(default_factory=list)
|
@@ -330,6 +332,7 @@ class TaskGraphBuilder(object):
|
|
330
332
|
self._pkg_spec_s.pop()
|
331
333
|
self._pkg_m[spec] = pkg
|
332
334
|
else:
|
335
|
+
self.error("Failed to find package %s" % spec.name)
|
333
336
|
raise Exception("Failed to find definition of package %s" % spec.name)
|
334
337
|
|
335
338
|
self._logger.debug("<-- getPackage: %s" % str(pkg))
|
@@ -73,13 +73,23 @@ class TaskNodeCtorCompound(TaskNodeCtor):
|
|
73
73
|
# Need to get the parent name
|
74
74
|
needs = []
|
75
75
|
for n in t.needs:
|
76
|
-
|
77
|
-
|
78
|
-
|
76
|
+
# 'n' is the dependency as specified by the user
|
77
|
+
# Need to perform a search
|
78
|
+
# - Look locally inside the compound task (pkg.compound.name)
|
79
|
+
# - Look for the fully-qualified task name
|
80
|
+
# - Look for the task name in the package
|
81
|
+
|
82
|
+
names = []
|
83
|
+
for pref in (builder.get_name_prefix((), "", builder.package().name)):
|
84
|
+
need_name = n if pref == "" else ("%s.%s" % (pref, n))
|
85
|
+
names.append(need_name)
|
79
86
|
task = builder.findTask(need_name)
|
80
87
|
|
88
|
+
if task is not None:
|
89
|
+
break
|
90
|
+
|
81
91
|
if task is None:
|
82
|
-
raise Exception("Failed to find task %s (%s)" % (n,
|
92
|
+
raise Exception("Failed to find task %s (searched %s)" % (n, str(names)))
|
83
93
|
self._log.debug("Add %s as dependency of %s" % (
|
84
94
|
task.name, t.name
|
85
95
|
))
|
{dv_flow_mgr-0.0.2.14150065664a1.dist-info → dv_flow_mgr-0.0.2.14180123344a1.dist-info}/RECORD
RENAMED
@@ -1,13 +1,14 @@
|
|
1
1
|
dv_flow/mgr/__init__.py,sha256=hzwGMkN3t6RkfZSCHi_6mvEkCzEOd91EZBv9F2ZCa-8,1193
|
2
|
-
dv_flow/mgr/__main__.py,sha256=
|
2
|
+
dv_flow/mgr/__main__.py,sha256=4_MJIH-FxIFXrk5pvic9bBereeZxQsrxnESA4SZ5q9U,3600
|
3
3
|
dv_flow/mgr/eval_jq.py,sha256=bRsHtaN51qIOiZK1VJV52W0-vj5VH0nQ7XIFebZi5kI,1129
|
4
4
|
dv_flow/mgr/expr_eval.py,sha256=N_8hRIgzJK9JVqhRt8F9rc4S7AAdKHMMltafqk6KhJs,3113
|
5
5
|
dv_flow/mgr/expr_parser.py,sha256=P6u2FdSXeZbdamC3zpEnYKLcK2RULQJfSoev2Ol75fE,6543
|
6
6
|
dv_flow/mgr/fileset.py,sha256=4izm4-qldWLiZxWDUa5Em0iFizzS-S-O0YU6zvtbUUs,1264
|
7
7
|
dv_flow/mgr/fragment_def.py,sha256=AHx3ITbiNbGCzlDk5FM8Iimm0GJnWXDDRAoRC1b41jM,1647
|
8
|
+
dv_flow/mgr/listener_list.py,sha256=BfqvEO2AyJvyc4ClU-hPgDPqWSlqvSdG-yaFEHvUrMc,272
|
8
9
|
dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
|
9
10
|
dv_flow/mgr/package.py,sha256=9FhOu1hKYKzlD88zehwrI6KAcs1E7TbXDnq4v54dqDQ,1701
|
10
|
-
dv_flow/mgr/package_def.py,sha256=
|
11
|
+
dv_flow/mgr/package_def.py,sha256=18y29oi_vQc4Jzl7v7iHjRo22eUQbndPxa1bucrZX8E,21343
|
11
12
|
dv_flow/mgr/package_import_spec.py,sha256=aZMpnS9a5NFY76_pYXEuO3-Mkc_xFzy73fdrUe_54Dc,1760
|
12
13
|
dv_flow/mgr/param.py,sha256=kkxMRGf6mPjSZJsjgLKH2vJL62Sn0ZESvjBLkEYOp20,1386
|
13
14
|
dv_flow/mgr/param_def.py,sha256=mkAw3DanIxcVWRYeh9lUAfUMkpqDFly_Ku_iobr4ix8,1745
|
@@ -15,14 +16,14 @@ dv_flow/mgr/param_ref_eval.py,sha256=5yH37oIX6f2qmk7GfRgNT5qZx0jm3CJFgB9lLDZZ1yQ
|
|
15
16
|
dv_flow/mgr/parsetab.py,sha256=I-p3nC60t9jiNtPhKyl_sE92SiP96zJLnNdydcLy33g,3780
|
16
17
|
dv_flow/mgr/pkg_rgy.py,sha256=d1nIjRm3ymMNJT-yiMDxCS6bFisTPvLMqh5VrfsHVKM,5404
|
17
18
|
dv_flow/mgr/task_data.py,sha256=lN7Iq8YTitEMGG4rZqYQi6Ri2HuPgBQ5oGQbW-63T8c,12436
|
18
|
-
dv_flow/mgr/task_def.py,sha256=
|
19
|
-
dv_flow/mgr/task_graph_builder.py,sha256=
|
19
|
+
dv_flow/mgr/task_def.py,sha256=ClCPFLlpT70Nxcr4xxBJBtdRxwFHq5YUtEDNVCiqFtE,4559
|
20
|
+
dv_flow/mgr/task_graph_builder.py,sha256=ST8EseeO8JZUTUSU44txxaUVKlXEiTOPbvB_UVrlraU,15463
|
20
21
|
dv_flow/mgr/task_graph_dot_writer.py,sha256=GxqiYwQJbFgUQdnPCS9vpIYmYFbSXwnXCSbGmjbxC3M,2418
|
21
22
|
dv_flow/mgr/task_listener_log.py,sha256=hrJEjSRXXoovDTcD1Cmhi3Spzw7uEJ-WP6tv6JUaa6s,4060
|
22
23
|
dv_flow/mgr/task_node.py,sha256=JXq2QimCZKxfhhkdhM-HKk4JbxpIlpW65xUJ0hVlQc0,4981
|
23
24
|
dv_flow/mgr/task_node_compound.py,sha256=mNu4nf9hVqu2698ue5fpE3FeAOkvJH0Ke2W9V0G3-As,2975
|
24
25
|
dv_flow/mgr/task_node_ctor.py,sha256=COFGvm5PR2B92H3uW1yhDIUCmppo9U4IfOcv_Jrsreo,3952
|
25
|
-
dv_flow/mgr/task_node_ctor_compound.py,sha256=
|
26
|
+
dv_flow/mgr/task_node_ctor_compound.py,sha256=HI-KDmBoRlvwPQpl3WSZit8jqhJ7Zbv8NRvh45Kp6PA,4736
|
26
27
|
dv_flow/mgr/task_node_ctor_compound_proxy.py,sha256=D8x54nD8Pd-2-_mr1syhqVeSFfIVf100ldi3bdzmSfI,2073
|
27
28
|
dv_flow/mgr/task_node_ctor_def_base.py,sha256=_8QQHKDkONio_ve0Z409yxC0AMO8ocNBPDjRiNED1FI,1503
|
28
29
|
dv_flow/mgr/task_node_ctor_proxy.py,sha256=ViOFJ64JM4-CGFZNl89BghFuKSQ66kZVqSj4v2PA6VA,1906
|
@@ -36,7 +37,7 @@ dv_flow/mgr/task_runner.py,sha256=-919VntXAe2XSuFW2dFpgvUre-NkILBnDBbAKBZYn5w,95
|
|
36
37
|
dv_flow/mgr/type.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
37
38
|
dv_flow/mgr/type_def.py,sha256=NDeyplKrPnWwEv4yHkhXEMK9d9j39b5MOeLB-1Mchqo,1095
|
38
39
|
dv_flow/mgr/cmds/cmd_graph.py,sha256=Ykw__EdwamDBZZKxQZVbtMtFl7koq5dJMShTBXSM2pk,2672
|
39
|
-
dv_flow/mgr/cmds/cmd_run.py,sha256=
|
40
|
+
dv_flow/mgr/cmds/cmd_run.py,sha256=ADFBetIVk_CwMQXO3oSNdtUgrxx8FyQj9LYQ2cA8nuo,3394
|
40
41
|
dv_flow/mgr/cmds/cmd_show.py,sha256=CZlgwB3Hcu-6HS-diqnWjCcPPpO-kjIIXU3DgWXvsf4,3773
|
41
42
|
dv_flow/mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5096
|
42
43
|
dv_flow/mgr/std/create_file.py,sha256=TAUhpXlTmUDUYw4Dw0cI9FPuYI84yCVkoadnWZxi_8U,2888
|
@@ -50,9 +51,9 @@ dv_flow/mgr/util/__main__.py,sha256=F0LXpCDpYTPalSo0dc1h_qZkip5v1AZYYh-vcYbh5s0,
|
|
50
51
|
dv_flow/mgr/util/util.py,sha256=yg9oTPRiO87mkCSOQpOtlG9vyKPQzY3qp4OJkEMbWyY,1443
|
51
52
|
dv_flow/mgr/util/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
52
53
|
dv_flow/mgr/util/cmds/cmd_schema.py,sha256=lrEI-Jwb8j4I4yYOn9hq7_7NYbK8leVxLesrHyEWm-E,1879
|
53
|
-
dv_flow_mgr-0.0.2.
|
54
|
-
dv_flow_mgr-0.0.2.
|
55
|
-
dv_flow_mgr-0.0.2.
|
56
|
-
dv_flow_mgr-0.0.2.
|
57
|
-
dv_flow_mgr-0.0.2.
|
58
|
-
dv_flow_mgr-0.0.2.
|
54
|
+
dv_flow_mgr-0.0.2.14180123344a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
55
|
+
dv_flow_mgr-0.0.2.14180123344a1.dist-info/METADATA,sha256=uCchOggxk9U54veU7UCjQOyn65EEfR22ABTcYJd8P-4,13336
|
56
|
+
dv_flow_mgr-0.0.2.14180123344a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
57
|
+
dv_flow_mgr-0.0.2.14180123344a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
|
58
|
+
dv_flow_mgr-0.0.2.14180123344a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
|
59
|
+
dv_flow_mgr-0.0.2.14180123344a1.dist-info/RECORD,,
|
{dv_flow_mgr-0.0.2.14150065664a1.dist-info → dv_flow_mgr-0.0.2.14180123344a1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|