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.
@@ -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
@@ -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
@@ -0,0 +1,12 @@
1
+ __main__.py
2
+ flow.py
3
+ package.py
4
+ package_def.py
5
+ package_import_spec.py
6
+ parameters.py
7
+ pkg_rgy.py
8
+ task.py
9
+ task_graph_builder.py
10
+ task_graph_runner.py
11
+ util.py
12
+
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:
@@ -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):
@@ -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 hasParam(self, name: str) -> bool:
61
- return name in self.params
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 self.filesets:
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: Dict[str,Any] = dc.Field(default_factory=dict, alias="with")
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
+
@@ -0,0 +1,6 @@
1
+ from pydantic import BaseModel, Field
2
+ from typing import Any, List
3
+
4
+ class TaskOutput(BaseModel):
5
+ type : str
6
+ params : List[Any] = Field(default_factory=list, alias="with")
dv_flow/mgr/type.py ADDED
File without changes
@@ -0,0 +1,10 @@
1
+
2
+ from typing import List, Union
3
+ from pydantic import BaseModel, Field
4
+ from .param_def import ParamDef
5
+
6
+ class TypeDef(BaseModel):
7
+ name : str
8
+ uses : str = None
9
+ doc : str = None
10
+ fields : List[ParamDef] = Field(alias="with", default_factory=list)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.12992722023a1
3
+ Version: 0.0.1.13335470340a1
4
4
  Summary: DV Flow Manager is a build system for silicon design
5
5
  Author-email: Matthew Ballance <matt.ballance@gmail.com>
6
6
  License: Apache License
@@ -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=p5i6ONtBWlDHTBFsduu3Z36_76Bn8PCIylp_xoZ7jfQ,1552
5
- dv_flow/mgr/package.py,sha256=AOLEEotVQF9VNMMl13uNQ7Na2TuHPXxEvybBOX7XIps,1615
6
- dv_flow/mgr/package_def.py,sha256=iHBFV-CKyCypvrd31zm3Yjkcib9xZo1gFlFL7YMfJO8,14012
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=XBPWwvuaQ3BZ94wknvv1bqLh98iTzAg5fskv7_kk6DQ,10524
11
- dv_flow/mgr/task_def.py,sha256=96hSwqJo0MazJ1VcLhovYRmNCplsNLt47AumtyjSddU,1690
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=pSpzrPPEu_L8DHccGfArxsKYgUfyQidShZc0ShgGtsY,500
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.12992722023a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
24
- dv_flow_mgr-0.0.1.12992722023a1.dist-info/METADATA,sha256=kCTd3eqAjQmtiL2_rnfPvCERKOp4I3aRl3yusyz4xMw,13276
25
- dv_flow_mgr-0.0.1.12992722023a1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
26
- dv_flow_mgr-0.0.1.12992722023a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
27
- dv_flow_mgr-0.0.1.12992722023a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
28
- dv_flow_mgr-0.0.1.12992722023a1.dist-info/RECORD,,
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,,