dv-flow-mgr 0.0.1.12968982426a1__tar.gz → 0.0.1.12981364130a1__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.
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/PKG-INFO +1 -1
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/pyproject.toml +1 -1
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/__main__.py +13 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/cmds/cmd_run.py +4 -1
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/package.py +4 -1
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/package_def.py +149 -106
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/std/fileset.py +7 -4
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/std/task_null.py +1 -0
- dv_flow_mgr-0.0.1.12981364130a1/src/dv_flow/mgr/task.py +292 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/task_data.py +11 -8
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/task_graph_builder.py +36 -60
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/task_graph_runner_local.py +5 -4
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow_mgr.egg-info/PKG-INFO +1 -1
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow_mgr.egg-info/SOURCES.txt +0 -2
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/system/test_depends.py +6 -3
- dv_flow_mgr-0.0.1.12968982426a1/src/dv_flow/mgr/task.py +0 -163
- dv_flow_mgr-0.0.1.12968982426a1/tests/sys/test_depends.py +0 -143
- dv_flow_mgr-0.0.1.12968982426a1/tests/sys/test_pkg_discovery.py +0 -127
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/.github/workflows/ci.yml +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/.gitignore +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/.vscode/settings.json +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/LICENSE +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/README.md +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/docs/Makefile +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/docs/Notes.md +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/docs/Roadmap.md +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/docs/Stages.md +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/docs/TypesAndDefs.md +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/docs/conf.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/docs/index.rst +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/docs/intro.rst +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/docs/quickstart.rst +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/docs/reference.rst +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/ivpm.yaml +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/setup.cfg +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/__init__.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/fileset.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/fragment_def.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/package_import_spec.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/pkg_rgy.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/share/flow.json +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/std/flow.dv +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/std/message.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/task_def.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/task_graph_runner.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/task_memento.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/util.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow_mgr.egg-info/dependency_links.txt +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow_mgr.egg-info/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow_mgr.egg-info/requires.txt +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow_mgr.egg-info/top_level.txt +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/examples/example1/example1.flow +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/system/test_pkg_discovery.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/system/test_stdlib.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/__init__.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/data/fileset/test1/files1/file1_1.sv +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/data/fileset/test1/files1/file1_2.sv +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/data/fileset/test1/files2/file2_1.sv +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/data/fileset/test1/files2/file2_2.sv +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/data/fileset/test1/flow.dv +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/data/fileset/test1 copy/files1/file1_1.sv +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/data/fileset/test1 copy/files1/file1_2.sv +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/data/fileset/test1 copy/files2/file2_1.sv +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/data/fileset/test1 copy/files2/file2_2.sv +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/data/fileset/test1 copy/test1.dfs +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/data/proj1/proj1.dfs +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/data/proj2/proj2.dfs +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/data/proj3/proj3.dfs +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/test_data_merge.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/test_fileset.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/test_pyclass.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/test_smoke copy.sav +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/test_smoke.py +0 -0
- {dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/tests/unit/test_stdlib.py +0 -0
{dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/__main__.py
RENAMED
@@ -20,10 +20,17 @@
|
|
20
20
|
#*
|
21
21
|
#****************************************************************************
|
22
22
|
import argparse
|
23
|
+
import logging
|
23
24
|
from .cmds.cmd_run import CmdRun
|
24
25
|
|
25
26
|
def get_parser():
|
26
27
|
parser = argparse.ArgumentParser(description='dv_flow_mgr')
|
28
|
+
parser.add_argument("-d", "--debug",
|
29
|
+
help="Enable debug",
|
30
|
+
action="store_true")
|
31
|
+
parser.add_argument("-v", "--verbose",
|
32
|
+
help="Enable verbose output",
|
33
|
+
action="store_true")
|
27
34
|
subparsers = parser.add_subparsers(required=True)
|
28
35
|
|
29
36
|
run_parser = subparsers.add_parser('run', help='run a flow')
|
@@ -35,6 +42,12 @@ def get_parser():
|
|
35
42
|
def main():
|
36
43
|
parser = get_parser()
|
37
44
|
args = parser.parse_args()
|
45
|
+
|
46
|
+
if args.debug:
|
47
|
+
logging.basicConfig(level=logging.DEBUG)
|
48
|
+
elif args.verbose:
|
49
|
+
logging.basicConfig(level=logging.INFO)
|
50
|
+
|
38
51
|
args.func(args)
|
39
52
|
|
40
53
|
if __name__ == "__main__":
|
{dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/cmds/cmd_run.py
RENAMED
@@ -1,5 +1,7 @@
|
|
1
1
|
import asyncio
|
2
2
|
import os
|
3
|
+
import logging
|
4
|
+
from typing import ClassVar
|
3
5
|
from ..task_graph_runner import TaskGraphRunner
|
4
6
|
from ..util import loadProjPkgDef
|
5
7
|
from ..task_graph_builder import TaskGraphBuilder
|
@@ -8,6 +10,7 @@ from ..pkg_rgy import PkgRgy
|
|
8
10
|
|
9
11
|
|
10
12
|
class CmdRun(object):
|
13
|
+
_log : ClassVar = logging.getLogger("CmdRun")
|
11
14
|
|
12
15
|
def __call__(self, args):
|
13
16
|
|
@@ -17,7 +20,7 @@ class CmdRun(object):
|
|
17
20
|
if pkg is None:
|
18
21
|
raise Exception("Failed to find a 'flow.dv' file that defines a package in %s or its parent directories" % os.getcwd())
|
19
22
|
|
20
|
-
|
23
|
+
self._log.debug("Root flow file defines package: %s" % pkg.name)
|
21
24
|
|
22
25
|
if len(args.tasks) > 0:
|
23
26
|
pass
|
{dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/package.py
RENAMED
@@ -20,7 +20,8 @@
|
|
20
20
|
#*
|
21
21
|
#****************************************************************************
|
22
22
|
import dataclasses as dc
|
23
|
-
|
23
|
+
import logging
|
24
|
+
from typing import Any, ClassVar, Dict
|
24
25
|
from .task import TaskCtor
|
25
26
|
|
26
27
|
@dc.dataclass
|
@@ -30,8 +31,10 @@ class Package(object):
|
|
30
31
|
# Package holds constructors for tasks
|
31
32
|
# - Dict holds the default parameters for the task
|
32
33
|
tasks : Dict[str,TaskCtor] = dc.field(default_factory=dict)
|
34
|
+
_log : ClassVar = logging.getLogger("Package")
|
33
35
|
|
34
36
|
def getTaskCtor(self, name : str) -> TaskCtor:
|
37
|
+
self._log.debug("-- %s::getTaskCtor: %s" % (self.name, name))
|
35
38
|
if name not in self.tasks.keys():
|
36
39
|
raise Exception("Task %s not present in package %s" % (name, self.name))
|
37
40
|
return self.tasks[name]
|
{dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/package_def.py
RENAMED
@@ -32,7 +32,7 @@ from typing import Any, Dict, List, Callable, Tuple, ClassVar
|
|
32
32
|
from .fragment_def import FragmentDef
|
33
33
|
from .package import Package
|
34
34
|
from .package_import_spec import PackageImportSpec, PackageSpec
|
35
|
-
from .task import TaskCtor,
|
35
|
+
from .task import TaskCtor, TaskCtorProxy, TaskCtorCls, TaskCtorParam, TaskCtorParamCls
|
36
36
|
from .task_def import TaskDef, TaskSpec
|
37
37
|
from .std.task_null import TaskNull
|
38
38
|
|
@@ -90,53 +90,132 @@ class PackageDef(BaseModel):
|
|
90
90
|
self._log.debug("<-- mkPackage %s" % self.name)
|
91
91
|
return ret
|
92
92
|
|
93
|
-
def
|
94
|
-
|
93
|
+
def getTaskCtor(self, session, task_name, tasks_m):
|
94
|
+
self._log.debug("--> getTaskCtor")
|
95
|
+
# Find package (not package_def) that implements this task
|
96
|
+
# Insert an indirect reference to that tasks's constructor
|
97
|
+
last_dot = task_name.rfind('.')
|
98
|
+
|
99
|
+
if last_dot != -1:
|
100
|
+
pkg_name = task_name[:last_dot]
|
101
|
+
task_name = task_name[last_dot+1:]
|
102
|
+
else:
|
103
|
+
pkg_name = None
|
104
|
+
|
105
|
+
if pkg_name is not None:
|
106
|
+
self._log.debug("Package-qualified 'uses'")
|
107
|
+
pkg = session.getPackage(PackageSpec(pkg_name))
|
108
|
+
if pkg is None:
|
109
|
+
raise Exception("Failed to find package %s" % pkg_name)
|
110
|
+
ctor_t = pkg.getTaskCtor(task_name)
|
111
|
+
else:
|
112
|
+
self._log.debug("Unqualified 'uses'")
|
113
|
+
if task_name not in tasks_m.keys():
|
114
|
+
raise Exception("Failed to find task %s" % task_name)
|
115
|
+
if len(tasks_m[task_name]) != 3:
|
116
|
+
raise Exception("Task %s not fully defined" % task_name)
|
95
117
|
|
96
|
-
|
97
|
-
|
98
|
-
# Insert an indirect reference to that tasks's constructor
|
99
|
-
last_dot = task.uses.rfind('.')
|
118
|
+
ctor_t = tasks_m[task_name][2]
|
119
|
+
return ctor_t
|
100
120
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
121
|
+
def handleParams(self, task, ctor_t):
|
122
|
+
|
123
|
+
if task.params is not None and len(task.params) > 0:
|
124
|
+
decl_params = False
|
125
|
+
|
126
|
+
# First, add in a parameter-setting stage
|
127
|
+
ctor_t = TaskCtorParam(
|
128
|
+
name=ctor_t.name,
|
129
|
+
uses=ctor_t,
|
130
|
+
srcdir=ctor_t.srcdir)
|
131
|
+
# ctor_t.params.update(task.params)
|
132
|
+
|
133
|
+
for value in task.params.values():
|
134
|
+
if "type" in value:
|
135
|
+
decl_params = True
|
136
|
+
break
|
137
|
+
|
138
|
+
field_m = {}
|
139
|
+
# First, add parameters from the base class
|
140
|
+
base_o = ctor_t.mkParams()
|
141
|
+
for fname,info in base_o.model_fields.items():
|
142
|
+
self._log.debug("Field: %s (%s)" % (fname, info.default))
|
143
|
+
field_m[fname] = (info.annotation, info.default)
|
144
|
+
|
145
|
+
if decl_params:
|
146
|
+
# We need to combine base parameters with new parameters
|
147
|
+
ptype_m = {
|
148
|
+
"str" : str,
|
149
|
+
"int" : int,
|
150
|
+
"float" : float,
|
151
|
+
"bool" : bool,
|
152
|
+
"list" : List
|
153
|
+
}
|
154
|
+
pdflt_m = {
|
155
|
+
"str" : "",
|
156
|
+
"int" : 0,
|
157
|
+
"float" : 0.0,
|
158
|
+
"bool" : False,
|
159
|
+
"list" : []
|
160
|
+
}
|
161
|
+
for p in task.params.keys():
|
162
|
+
param = task.params[p]
|
163
|
+
if type(param) == dict and "type" in param.keys():
|
164
|
+
ptype_s = param["type"]
|
165
|
+
if ptype_s not in ptype_m.keys():
|
166
|
+
raise Exception("Unknown type %s" % ptype_s)
|
167
|
+
ptype = ptype_m[ptype_s]
|
168
|
+
|
169
|
+
if p in field_m.keys():
|
170
|
+
raise Exception("Duplicate field %s" % p)
|
171
|
+
if "value" in param.keys():
|
172
|
+
field_m[p] = (ptype, param["value"])
|
173
|
+
else:
|
174
|
+
field_m[p] = (ptype, pdflt_m[ptype_s])
|
175
|
+
else:
|
176
|
+
if p not in field_m.keys():
|
177
|
+
raise Exception("Field %s not found" % p)
|
178
|
+
if type(param) != dict:
|
179
|
+
value = param
|
180
|
+
elif "value" in param.keys():
|
181
|
+
value = param["value"]
|
182
|
+
else:
|
183
|
+
raise Exception("No value specified for param %s: %s" % (
|
184
|
+
p, str(param)))
|
185
|
+
field_m[p] = (field_m[p][0], value)
|
186
|
+
self._log.debug("field_m: %s" % str(field_m))
|
187
|
+
param_t = pydantic.create_model(
|
188
|
+
"Task%sParams" % task.name, **field_m)
|
189
|
+
ctor_t = TaskCtorParamCls(
|
190
|
+
name=ctor_t.name,
|
191
|
+
uses=ctor_t,
|
192
|
+
params_ctor=param_t)
|
193
|
+
else: # no new parameters declared
|
194
|
+
for p in task.params.keys():
|
195
|
+
param = task.params[p]
|
196
|
+
if p not in field_m.keys():
|
197
|
+
raise Exception("Field %s not found" % p)
|
198
|
+
if type(param) != dict:
|
199
|
+
value = param
|
200
|
+
elif "value" in param.keys():
|
201
|
+
value = param["value"]
|
202
|
+
else:
|
203
|
+
raise Exception("No value specified for param %s: %s" % (
|
204
|
+
p, str(param)))
|
205
|
+
field_m[p] = (field_m[p][0], value)
|
206
|
+
ctor_t.params[p] = value
|
136
207
|
|
208
|
+
return ctor_t
|
209
|
+
|
210
|
+
def mkTaskCtor(self, session, task, srcdir, tasks_m) -> TaskCtor:
|
211
|
+
self._log.debug("--> %s::mkTaskCtor %s" % (self.name, task.name))
|
212
|
+
ctor_t : TaskCtor = None
|
213
|
+
|
214
|
+
# Determine the implementation constructor first
|
137
215
|
if task.pyclass is not None:
|
138
216
|
# Built-in impl
|
139
217
|
# Now, lookup the class
|
218
|
+
self._log.debug("Use PyClass implementation")
|
140
219
|
last_dot = task.pyclass.rfind('.')
|
141
220
|
clsname = task.pyclass[last_dot+1:]
|
142
221
|
modname = task.pyclass[:last_dot]
|
@@ -154,72 +233,36 @@ class PackageDef(BaseModel):
|
|
154
233
|
|
155
234
|
if not hasattr(mod, clsname):
|
156
235
|
raise Exception("Class %s not found in module %s" % (clsname, modname))
|
157
|
-
|
158
|
-
|
159
|
-
if
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
"int" : int,
|
178
|
-
"float" : float,
|
179
|
-
"bool" : bool,
|
180
|
-
"list" : List
|
181
|
-
}
|
182
|
-
pdflt_m = {
|
183
|
-
"str" : "",
|
184
|
-
"int" : 0,
|
185
|
-
"float" : 0.0,
|
186
|
-
"bool" : False,
|
187
|
-
"list" : []
|
188
|
-
}
|
189
|
-
for p in task.params.keys():
|
190
|
-
param = task.params[p]
|
191
|
-
if type(param) == dict and "type" in param.keys():
|
192
|
-
ptype_s = param["type"]
|
193
|
-
if ptype_s not in ptype_m.keys():
|
194
|
-
raise Exception("Unknown type %s" % ptype_s)
|
195
|
-
ptype = ptype_m[ptype_s]
|
196
|
-
|
197
|
-
if p in field_m.keys():
|
198
|
-
raise Exception("Duplicate field %s" % p)
|
199
|
-
if "value" in param.keys():
|
200
|
-
field_m[p] = (ptype, param["value"])
|
201
|
-
else:
|
202
|
-
field_m[p] = (ptype, pdflt_m[ptype_s])
|
203
|
-
else:
|
204
|
-
if p not in field_m.keys():
|
205
|
-
raise Exception("Field %s not found" % p)
|
206
|
-
if type(param) != dict:
|
207
|
-
value = param
|
208
|
-
elif "value" in param.keys():
|
209
|
-
value = param["value"]
|
210
|
-
else:
|
211
|
-
raise Exception("No value specified for param %s: %s" % (
|
212
|
-
p, str(param)))
|
213
|
-
field_m[p] = (field_m[p][0], value)
|
214
|
-
self._log.debug("field_m: %s" % str(field_m))
|
215
|
-
ctor_t.param_ctor = pydantic.create_model(
|
216
|
-
"Task%sParams" % task.name, **field_m)
|
236
|
+
task_ctor = getattr(mod, clsname)
|
237
|
+
|
238
|
+
# Determine if we need to use a new
|
239
|
+
|
240
|
+
if task.uses is not None:
|
241
|
+
uses = self.getTaskCtor(session, task.uses, tasks_m)
|
242
|
+
else:
|
243
|
+
uses = None
|
244
|
+
|
245
|
+
ctor_t = TaskCtorCls(
|
246
|
+
name=task.name,
|
247
|
+
uses=uses,
|
248
|
+
task_ctor=task_ctor,
|
249
|
+
srcdir=srcdir)
|
250
|
+
elif task.uses is not None:
|
251
|
+
# Use the existing (base) to create the implementation
|
252
|
+
ctor_t = TaskCtor(
|
253
|
+
name=task.name,
|
254
|
+
uses=self.getTaskCtor(session, task.uses, tasks_m),
|
255
|
+
srcdir=srcdir)
|
217
256
|
else:
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
257
|
+
self._log.debug("Use 'Null' as the class implementation")
|
258
|
+
ctor_t = TaskCtorCls(
|
259
|
+
name=task.name,
|
260
|
+
task_ctor=TaskNull,
|
261
|
+
srcdir=srcdir)
|
262
|
+
|
263
|
+
ctor_t = self.handleParams(task, ctor_t)
|
222
264
|
|
265
|
+
self._log.debug("<-- %s::mkTaskCtor %s" % (self.name, task.name))
|
223
266
|
return ctor_t
|
224
267
|
|
225
268
|
@staticmethod
|
{dv_flow_mgr-0.0.1.12968982426a1 → dv_flow_mgr-0.0.1.12981364130a1}/src/dv_flow/mgr/std/fileset.py
RENAMED
@@ -2,8 +2,9 @@
|
|
2
2
|
import os
|
3
3
|
import fnmatch
|
4
4
|
import glob
|
5
|
+
import logging
|
5
6
|
import pydantic.dataclasses as dc
|
6
|
-
from typing import List, Tuple
|
7
|
+
from typing import ClassVar, List, Tuple
|
7
8
|
from dv_flow.mgr import Task, TaskData, TaskMemento
|
8
9
|
from dv_flow.mgr import FileSet as _FileSet
|
9
10
|
|
@@ -12,8 +13,10 @@ class TaskFileSetMemento(TaskMemento):
|
|
12
13
|
|
13
14
|
class FileSet(Task):
|
14
15
|
|
16
|
+
_log : ClassVar = logging.getLogger("FileSet")
|
17
|
+
|
15
18
|
async def run(self, input : TaskData) -> TaskData:
|
16
|
-
|
19
|
+
self._log.debug("TaskFileSet run: %s: basedir=%s, base=%s type=%s include=%s" % (
|
17
20
|
self.name,
|
18
21
|
self.srcdir,
|
19
22
|
self.params.base, self.params.type, str(self.params.include)
|
@@ -52,8 +55,8 @@ class FileSet(Task):
|
|
52
55
|
if ex_memento is not None and not input.changed:
|
53
56
|
ex_memento.files.sort(key=lambda x: x[0])
|
54
57
|
memento.files.sort(key=lambda x: x[0])
|
55
|
-
|
56
|
-
|
58
|
+
self._log.debug("ex_memento.files: %s" % str(ex_memento.files))
|
59
|
+
self._log.debug("memento.files: %s" % str(memento.files))
|
57
60
|
input.changed = ex_memento != memento
|
58
61
|
else:
|
59
62
|
input.changed = True
|