dv-flow-mgr 0.0.1.12992722023a1__py3-none-any.whl → 0.0.1.13335470340a1__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/expr_parser.py +38 -0
- dv_flow/mgr/fragment_def.py +2 -0
- dv_flow/mgr/out +12 -0
- dv_flow/mgr/package.py +1 -0
- dv_flow/mgr/package_def.py +29 -0
- dv_flow/mgr/param_def.py +25 -0
- dv_flow/mgr/std/flow.dv +49 -1
- dv_flow/mgr/task_data.py +12 -14
- dv_flow/mgr/task_def.py +4 -1
- dv_flow/mgr/task_impl_data.py +17 -0
- dv_flow/mgr/task_output.py +6 -0
- dv_flow/mgr/type.py +0 -0
- dv_flow/mgr/type_def.py +10 -0
- {dv_flow_mgr-0.0.1.12992722023a1.dist-info → dv_flow_mgr-0.0.1.13335470340a1.dist-info}/METADATA +1 -1
- {dv_flow_mgr-0.0.1.12992722023a1.dist-info → dv_flow_mgr-0.0.1.13335470340a1.dist-info}/RECORD +19 -12
- {dv_flow_mgr-0.0.1.12992722023a1.dist-info → dv_flow_mgr-0.0.1.13335470340a1.dist-info}/LICENSE +0 -0
- {dv_flow_mgr-0.0.1.12992722023a1.dist-info → dv_flow_mgr-0.0.1.13335470340a1.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-0.0.1.12992722023a1.dist-info → dv_flow_mgr-0.0.1.13335470340a1.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.1.12992722023a1.dist-info → dv_flow_mgr-0.0.1.13335470340a1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
import dataclasses as dc
|
2
|
+
import enum
|
3
|
+
|
4
|
+
class TokenKind(enum.Enum):
|
5
|
+
ID = enum.auto()
|
6
|
+
|
7
|
+
@dc.dataclass
|
8
|
+
class Expr(object):
|
9
|
+
kind : TokenKind = TokenKind.ID
|
10
|
+
|
11
|
+
class ExprId(Expr):
|
12
|
+
id : str
|
13
|
+
|
14
|
+
def __post_init__(self):
|
15
|
+
self.kind = TokenKind.ID
|
16
|
+
|
17
|
+
class ExprPipe(Expr):
|
18
|
+
lhs : Expr
|
19
|
+
rhs : Expr
|
20
|
+
|
21
|
+
def __post_init__(self):
|
22
|
+
self.kind = TokenKind.ID
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
class ExprParser(object):
|
27
|
+
|
28
|
+
def __init__(self, input):
|
29
|
+
self.input = input
|
30
|
+
|
31
|
+
def __iter__(self):
|
32
|
+
return self
|
33
|
+
|
34
|
+
def __next__(self):
|
35
|
+
|
36
|
+
self.expr = expr
|
37
|
+
self.tokens = []
|
38
|
+
self.pos = 0
|
dv_flow/mgr/fragment_def.py
CHANGED
@@ -26,11 +26,13 @@ from typing import Any, Dict, List, Union
|
|
26
26
|
from .package import Package
|
27
27
|
from .package_import_spec import PackageImportSpec
|
28
28
|
from .task_def import TaskDef
|
29
|
+
from .type_def import TypeDef
|
29
30
|
|
30
31
|
class FragmentDef(BaseModel):
|
31
32
|
tasks : List[TaskDef] = dc.Field(default_factory=list)
|
32
33
|
imports : List[Union[str,PackageImportSpec]] = dc.Field(default_factory=list, alias="imports")
|
33
34
|
fragments: List[str] = dc.Field(default_factory=list)
|
35
|
+
types : List[TypeDef] = dc.Field(default_factory=list)
|
34
36
|
|
35
37
|
basedir : str = None
|
36
38
|
|
dv_flow/mgr/out
ADDED
dv_flow/mgr/package.py
CHANGED
@@ -31,6 +31,7 @@ class Package(object):
|
|
31
31
|
# Package holds constructors for tasks
|
32
32
|
# - Dict holds the default parameters for the task
|
33
33
|
tasks : Dict[str,TaskCtor] = dc.field(default_factory=dict)
|
34
|
+
types : Dict[str,Any] = dc.field(default_factory=dict)
|
34
35
|
_log : ClassVar = logging.getLogger("Package")
|
35
36
|
|
36
37
|
def getTaskCtor(self, name : str) -> TaskCtor:
|
dv_flow/mgr/package_def.py
CHANGED
@@ -19,6 +19,7 @@
|
|
19
19
|
#* Author:
|
20
20
|
#*
|
21
21
|
#****************************************************************************
|
22
|
+
import io
|
22
23
|
import os
|
23
24
|
import json
|
24
25
|
import yaml
|
@@ -35,6 +36,7 @@ from .package_import_spec import PackageImportSpec, PackageSpec
|
|
35
36
|
from .task import TaskCtor, TaskCtorProxy, TaskCtorCls, TaskCtorParam, TaskCtorParamCls
|
36
37
|
from .task_def import TaskDef, TaskSpec
|
37
38
|
from .std.task_null import TaskNull
|
39
|
+
from .type_def import TypeDef
|
38
40
|
|
39
41
|
|
40
42
|
class PackageDef(BaseModel):
|
@@ -44,6 +46,7 @@ class PackageDef(BaseModel):
|
|
44
46
|
tasks : List[TaskDef] = dc.Field(default_factory=list)
|
45
47
|
imports : List[PackageImportSpec] = dc.Field(default_factory=list)
|
46
48
|
fragments: List[str] = dc.Field(default_factory=list)
|
49
|
+
types : List[TypeDef] = dc.Field(default_factory=list)
|
47
50
|
|
48
51
|
fragment_l : List['FragmentDef'] = dc.Field(default_factory=list, exclude=True)
|
49
52
|
|
@@ -314,6 +317,32 @@ class PackageDef(BaseModel):
|
|
314
317
|
file_s.pop()
|
315
318
|
|
316
319
|
return pkg
|
320
|
+
|
321
|
+
@staticmethod
|
322
|
+
def loads(data, exp_pkg_name=None):
|
323
|
+
return PackageDef._loadPkgDefS(data, exp_pkg_name)
|
324
|
+
pass
|
325
|
+
|
326
|
+
@staticmethod
|
327
|
+
def _loadPkgDefS(data, exp_pkg_name):
|
328
|
+
ret = None
|
329
|
+
doc = yaml.load(io.StringIO(data), Loader=yaml.FullLoader)
|
330
|
+
if "package" not in doc.keys():
|
331
|
+
raise Exception("Missing 'package' key in %s" % root)
|
332
|
+
pkg = PackageDef(**(doc["package"]))
|
333
|
+
pkg.basedir = None
|
334
|
+
|
335
|
+
# for t in pkg.tasks:
|
336
|
+
# t.basedir = os.path.dirname(root)
|
337
|
+
|
338
|
+
if exp_pkg_name is not None:
|
339
|
+
if exp_pkg_name != pkg.name:
|
340
|
+
raise Exception("Package name mismatch: %s != %s" % (exp_pkg_name, pkg.name))
|
341
|
+
|
342
|
+
if len(pkg.fragments) > 0:
|
343
|
+
raise Exception("Cannot load a package-def with fragments from a string")
|
344
|
+
|
345
|
+
return pkg
|
317
346
|
|
318
347
|
@staticmethod
|
319
348
|
def _loadFragmentSpec(pkg, spec, file_s):
|
dv_flow/mgr/param_def.py
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
from typing import Any, List, Union
|
3
|
+
from pydantic import BaseModel, Field
|
4
|
+
|
5
|
+
class ListType(BaseModel):
|
6
|
+
item : Union[str, 'ComplexType']
|
7
|
+
|
8
|
+
class MapType(BaseModel):
|
9
|
+
key : Union[str, 'ComplexType']
|
10
|
+
item : Union[str, 'ComplexType']
|
11
|
+
|
12
|
+
class ComplexType(BaseModel):
|
13
|
+
list : Union[ListType, None] = None
|
14
|
+
map : Union[MapType, None] = None
|
15
|
+
|
16
|
+
class ParamDef(BaseModel):
|
17
|
+
name : str
|
18
|
+
doc : str = None
|
19
|
+
type : Union[str, 'ComplexType'] = None
|
20
|
+
value : Union[Any, None] = None
|
21
|
+
append : Union[Any, None] = None
|
22
|
+
prepend : Union[Any, None] = None
|
23
|
+
path_append : Union[Any, None] = Field(alias="path-append", default=None)
|
24
|
+
path_prepend : Union[Any, None] = Field(alias="path-prepend", default=None)
|
25
|
+
|
dv_flow/mgr/std/flow.dv
CHANGED
@@ -27,4 +27,52 @@ package:
|
|
27
27
|
# - name: Exec
|
28
28
|
# pyclass: dv_flow.mgr.std.exec.Exec
|
29
29
|
# with: {}
|
30
|
-
|
30
|
+
types:
|
31
|
+
# - name: TaskDataItem
|
32
|
+
# doc: |
|
33
|
+
# Base type for a data element produced by a task.
|
34
|
+
# TaskDataItem is never used directly
|
35
|
+
# with:
|
36
|
+
# - name: kind
|
37
|
+
# type: str
|
38
|
+
# kind: metadata
|
39
|
+
# doc: |
|
40
|
+
# Kind of data item
|
41
|
+
# - name: src
|
42
|
+
# type: str
|
43
|
+
# kind: metadata
|
44
|
+
# doc: |
|
45
|
+
# Name of the task that produced this item
|
46
|
+
# - name: id
|
47
|
+
# type: str
|
48
|
+
# kind: metadata
|
49
|
+
# doc: |
|
50
|
+
# Unique identiifer
|
51
|
+
|
52
|
+
- name: Env
|
53
|
+
doc: |
|
54
|
+
Environment variables
|
55
|
+
with:
|
56
|
+
- name: doc
|
57
|
+
|
58
|
+
- name: FileSet
|
59
|
+
uses: TaskDataItem
|
60
|
+
with:
|
61
|
+
- name: kind
|
62
|
+
value: "FileSet"
|
63
|
+
- name: base
|
64
|
+
type: str
|
65
|
+
- name: fileType
|
66
|
+
type: str
|
67
|
+
- name: files
|
68
|
+
type:
|
69
|
+
list:
|
70
|
+
item:
|
71
|
+
type: str
|
72
|
+
|
73
|
+
# type:
|
74
|
+
# list: (str,int)
|
75
|
+
# - complex type
|
76
|
+
# type:
|
77
|
+
# object:
|
78
|
+
#
|
dv_flow/mgr/task_data.py
CHANGED
@@ -48,26 +48,22 @@ class TaskDataParam(BaseModel):
|
|
48
48
|
kind : TaskDataParamKindE
|
49
49
|
ops : List[TaskDataParamOp] = dc.Field(default_factory=list)
|
50
50
|
|
51
|
+
class TaskDataItem(BaseModel):
|
52
|
+
type : str
|
53
|
+
src : str
|
54
|
+
id : str
|
55
|
+
|
51
56
|
class TaskData(BaseModel):
|
52
57
|
src : str = None
|
53
|
-
params : Dict[str,TaskDataParam] = dc.Field(default_factory=dict)
|
54
58
|
deps : Dict[str,Set[str]] = dc.Field(default_factory=dict)
|
55
|
-
filesets : List[FileSet] = dc.Field(default_factory=list)
|
56
59
|
changed : bool = False
|
60
|
+
data : List[TaskDataItem] = dc.Field(default_factory=list)
|
57
61
|
|
58
62
|
_log : ClassVar = logging.getLogger("TaskData")
|
59
63
|
|
60
|
-
def
|
61
|
-
|
62
|
-
|
63
|
-
def getParam(self, name: str) -> Any:
|
64
|
-
return self.params[name]
|
65
|
-
|
66
|
-
def setParam(self, name: str, value: Any):
|
67
|
-
self.params[name] = value
|
68
|
-
|
69
|
-
def addFileSet(self, fs : FileSet):
|
70
|
-
self.filesets.append(fs)
|
64
|
+
def addData(self, item : TaskDataItem):
|
65
|
+
item.src = self.src
|
66
|
+
self.data.append(item)
|
71
67
|
|
72
68
|
def getFileSets(self, type=None, order=True) -> List[FileSet]:
|
73
69
|
ret = []
|
@@ -77,8 +73,10 @@ class TaskData(BaseModel):
|
|
77
73
|
if order:
|
78
74
|
# The deps map specifies task dependencies
|
79
75
|
|
76
|
+
filesets = filter(lambda x: x.type == "std.FileSet", self.data)
|
77
|
+
|
80
78
|
candidate_fs = []
|
81
|
-
for fs in
|
79
|
+
for fs in filesets:
|
82
80
|
self._log.debug("fs: %s" % str(fs))
|
83
81
|
if type is None or fs.type in type:
|
84
82
|
candidate_fs.append(fs)
|
dv_flow/mgr/task_def.py
CHANGED
@@ -22,7 +22,9 @@
|
|
22
22
|
import pydantic.dataclasses as dc
|
23
23
|
from pydantic import BaseModel
|
24
24
|
from typing import Any, Dict, List, Union, Tuple
|
25
|
+
from .param_def import ParamDef
|
25
26
|
from .task import Task
|
27
|
+
from .task_output import TaskOutput
|
26
28
|
|
27
29
|
@dc.dataclass
|
28
30
|
class TaskSpec(object):
|
@@ -37,7 +39,8 @@ class TaskDef(BaseModel):
|
|
37
39
|
desc : str = dc.Field(default="")
|
38
40
|
doc : str = dc.Field(default="")
|
39
41
|
depends : List[Union[str,TaskSpec]] = dc.Field(default_factory=list, alias="needs")
|
40
|
-
params:
|
42
|
+
params: List[ParamDef] = dc.Field(default_factory=list, alias="with")
|
43
|
+
out: List[TaskOutput] = dc.Field(default_factory=list)
|
41
44
|
|
42
45
|
def copy(self) -> 'TaskDef':
|
43
46
|
ret = TaskDef(
|
@@ -0,0 +1,17 @@
|
|
1
|
+
|
2
|
+
from pydantic import BaseModel
|
3
|
+
from typing import Any, ClassVar, Dict, Set, List, Tuple
|
4
|
+
|
5
|
+
class TaskImplParams(BaseModel):
|
6
|
+
pass
|
7
|
+
|
8
|
+
class TaskImplSourceData(BaseModel):
|
9
|
+
params : Any
|
10
|
+
changed : bool
|
11
|
+
memento : Any
|
12
|
+
|
13
|
+
class TaskImplResultData(BaseModel):
|
14
|
+
data : List[Any]
|
15
|
+
changed : bool
|
16
|
+
memento : Any
|
17
|
+
|
dv_flow/mgr/type.py
ADDED
File without changes
|
dv_flow/mgr/type_def.py
ADDED
{dv_flow_mgr-0.0.1.12992722023a1.dist-info → dv_flow_mgr-0.0.1.13335470340a1.dist-info}/RECORD
RENAMED
@@ -1,28 +1,35 @@
|
|
1
1
|
dv_flow/mgr/__init__.py,sha256=IZA7I1u7RH34DrJXSkETxWFpK5Jn_A2zXfnCAzJ8XxA,289
|
2
2
|
dv_flow/mgr/__main__.py,sha256=uik6gDAvtZNG0yyDKYc4FTl6R1QHAR543jNG2lCAa6E,1771
|
3
|
+
dv_flow/mgr/expr_parser.py,sha256=4gVpWvBWkI6KfTN2PAXhZtAgKIRLxfFs5Gc5IAa27Dg,605
|
3
4
|
dv_flow/mgr/fileset.py,sha256=FNvC5sU2ArxJ0OO3v8dXTv8zX-bZ5t0a0ljne0fQQ1o,1150
|
4
|
-
dv_flow/mgr/fragment_def.py,sha256=
|
5
|
-
dv_flow/mgr/
|
6
|
-
dv_flow/mgr/
|
5
|
+
dv_flow/mgr/fragment_def.py,sha256=cyzp1XeWtNOaagScmeS-BPsoXj9j2LTBbKq5ZUioz8I,1641
|
6
|
+
dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
|
7
|
+
dv_flow/mgr/package.py,sha256=MDnt9q4pD_Aex_hSK_EUQ38IiaxOihgxbMmk5dH1deQ,1674
|
8
|
+
dv_flow/mgr/package_def.py,sha256=Sv3KS5pDysUrtPBWElCvmWt2pnkTipZcZGYwKr5N7Mc,14967
|
7
9
|
dv_flow/mgr/package_import_spec.py,sha256=ah3r15v5Jdub2poc3sgi6Uar1L3oGoYsCPPNiOHV-a4,1760
|
10
|
+
dv_flow/mgr/param_def.py,sha256=e2WvRCMArbgcsKC4TKQqZTscZmCdo3WvVR6w3LN0VK8,727
|
8
11
|
dv_flow/mgr/pkg_rgy.py,sha256=2R_EaeBDJn5qUq9DzSnLc37wUP36MWSv-p0LgUjJRAg,4471
|
9
12
|
dv_flow/mgr/task.py,sha256=giy5elwIS_fab6wGnA8JCeZIEeX0nG5zpcq5ifGYSOs,9087
|
10
|
-
dv_flow/mgr/task_data.py,sha256=
|
11
|
-
dv_flow/mgr/task_def.py,sha256=
|
13
|
+
dv_flow/mgr/task_data.py,sha256=ZKoYUhXGyLXXm4GvpS-UDwJ_lZH72lgpzOdHm1XDObY,10386
|
14
|
+
dv_flow/mgr/task_def.py,sha256=6qDDgge5RXssL5TAZR01dGb_Vjvbj72tJirg66O-Yt4,1818
|
12
15
|
dv_flow/mgr/task_graph_builder.py,sha256=4dfy_T26MYI7ls2xiofr4V0ItZHDehU2iw6UBPt-SZQ,7074
|
13
16
|
dv_flow/mgr/task_graph_runner.py,sha256=NwNYcOJ952lPMLwIIlYE9CoDdedqvcw2fWHYUsKFXuU,2164
|
14
17
|
dv_flow/mgr/task_graph_runner_local.py,sha256=66JYJcu-W60LjfuT9UkbcKslNqDcD5q4UR7ZAWrSaGM,4707
|
18
|
+
dv_flow/mgr/task_impl_data.py,sha256=bFPijoKrh9x7fZN2DsvRJp0UHo-gGM0VjtDQISyfhFk,321
|
15
19
|
dv_flow/mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
|
20
|
+
dv_flow/mgr/task_output.py,sha256=l-W-FvVo6YDah1RQS-I9N0KUtB3vp-kl7lxIdmNz0l4,178
|
21
|
+
dv_flow/mgr/type.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
|
+
dv_flow/mgr/type_def.py,sha256=KdhuNlfw-NKU-4VZFCnMPyj775yEB7cpr5tz73a9yuQ,259
|
16
23
|
dv_flow/mgr/util.py,sha256=06eVyURF4ga-s8C9Sd3ZSDebwO4QS0XXaB8xADVbWRc,1437
|
17
24
|
dv_flow/mgr/cmds/cmd_run.py,sha256=eths8kT7mBmpZqwOuMtpKAaux4rg-f7hPBxxTHbpKT4,2903
|
18
25
|
dv_flow/mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5096
|
19
26
|
dv_flow/mgr/std/fileset.py,sha256=uP7bGntRq-Tn5_GEFnt0_J_OAmfvep3GlCwCuE8by4o,2710
|
20
|
-
dv_flow/mgr/std/flow.dv,sha256=
|
27
|
+
dv_flow/mgr/std/flow.dv,sha256=j9wLrF3Ghh1ZLbJxmk7WiNiRYUYEer-8CCUA5hsgtfk,1409
|
21
28
|
dv_flow/mgr/std/message.py,sha256=BPTHnEMD4tBufQ9LvsS9Sa_0xjaJATbBpwqosWslvVA,193
|
22
29
|
dv_flow/mgr/std/task_null.py,sha256=KObmjG_4D08GJ1k6neqKIQrFY72Sj0jLnwXxEkq5HA0,321
|
23
|
-
dv_flow_mgr-0.0.1.
|
24
|
-
dv_flow_mgr-0.0.1.
|
25
|
-
dv_flow_mgr-0.0.1.
|
26
|
-
dv_flow_mgr-0.0.1.
|
27
|
-
dv_flow_mgr-0.0.1.
|
28
|
-
dv_flow_mgr-0.0.1.
|
30
|
+
dv_flow_mgr-0.0.1.13335470340a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
31
|
+
dv_flow_mgr-0.0.1.13335470340a1.dist-info/METADATA,sha256=NP0fraxF2IX1pTGM8-F-suzwkkbWU09BFex8ktZSVc8,13276
|
32
|
+
dv_flow_mgr-0.0.1.13335470340a1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
33
|
+
dv_flow_mgr-0.0.1.13335470340a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
|
34
|
+
dv_flow_mgr-0.0.1.13335470340a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
|
35
|
+
dv_flow_mgr-0.0.1.13335470340a1.dist-info/RECORD,,
|
{dv_flow_mgr-0.0.1.12992722023a1.dist-info → dv_flow_mgr-0.0.1.13335470340a1.dist-info}/LICENSE
RENAMED
File without changes
|
{dv_flow_mgr-0.0.1.12992722023a1.dist-info → dv_flow_mgr-0.0.1.13335470340a1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|