dv-flow-mgr 0.0.2.14149347362a1__py3-none-any.whl → 0.0.2.14163613545a1__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,10 @@
1
+ import dataclasses as dc
2
+ from typing import List, Callable
3
+
4
+ @dc.dataclass
5
+ class ListenerList(object):
6
+ listeners : List[Callable] = dc.field(default_factory=list)
7
+
8
+ def __call__(self, *args, **kwargs):
9
+ for l in self.listeners:
10
+ l(*args, **kwargs)
@@ -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=yaml.FullLoader)
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
@@ -100,9 +101,12 @@ class TaskDef(BaseModel):
100
101
  consumes : Union[ConsumesE, List[Any], None] = dc.Field(
101
102
  default=None,
102
103
  description="Specifies matching patterns for parameter sets that this task consumes")
103
-
104
- # out: List[TaskOutput] = dc.Field(default_factory=list)
105
-
104
+
105
+ def __init__(self, **data):
106
+ # print("--> task_def %s" % str(data))
107
+ super().__init__(**data)
108
+ # print("<-- task_def %s" % str(data))
109
+
106
110
  def copy(self) -> 'TaskDef':
107
111
  ret = TaskDef(
108
112
  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))
@@ -23,6 +23,19 @@ class TaskRunCtxt(object):
23
23
  logfilter=None,
24
24
  cwd=None,
25
25
  env=None):
26
+ """
27
+ Executes a command as part of the task's implementation.
28
+ Output from the command will be saved to the specified logfile,
29
+ or to a default logfile if not specified. If the command
30
+ fails, an error marker will be added.
31
+
32
+ Example:
33
+
34
+ .. code-block:: python
35
+
36
+ status |= await runner.exec(['ls', '-l'], logfile='ls.log')
37
+
38
+ """
26
39
  if logfile is None:
27
40
  logfile = "cmd_%d.log" % (self._exec_info.__len__() + 1)
28
41
 
@@ -45,6 +58,7 @@ class TaskRunCtxt(object):
45
58
  return status
46
59
 
47
60
  def create(self, path, content):
61
+ """Create a file in the task's rundir"""
48
62
  if not os.path.isabs(path):
49
63
  path = os.path.join(self.rundir, path)
50
64
 
@@ -56,10 +70,12 @@ class TaskRunCtxt(object):
56
70
 
57
71
 
58
72
  def marker(self, msg : str, severity : SeverityE, loc : TaskMarkerLoc=None):
73
+ """Add a marker related to the task's execution"""
59
74
  if loc is not None:
60
75
  self._markers.append(TaskMarker(msg=msg, severity=severity, loc=loc))
61
76
  else:
62
77
  self._markers.append(TaskMarker(msg=msg, severity=severity))
63
78
 
64
79
  def error(self, msg : str, loc : TaskMarkerLoc=None):
80
+ """Add an error marker related to the task's execution"""
65
81
  self.marker(msg=msg, severity=SeverityE.Error, loc=loc)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.2.14149347362a1
3
+ Version: 0.0.2.14163613545a1
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
@@ -5,9 +5,10 @@ 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=iilJPa1zJoF5OkjdtBVro_fFImEbiJqPijFkYltut-o,20881
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,8 +16,8 @@ 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=Yf9bkWqSETeFUSbddbpvl2Cu3pyssvhdz0X2jxabniA,3751
19
- dv_flow/mgr/task_graph_builder.py,sha256=Z14ySv1SFanFovR8HePwKglyFSzc6JsS8Z4RLmggM6c,15316
19
+ dv_flow/mgr/task_def.py,sha256=TcTTIwre2aQg4OdCicqCOIDTkOeV3qIdITpXBP4yTTU,3872
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
@@ -31,7 +32,7 @@ dv_flow/mgr/task_node_ctor_wrapper.py,sha256=Nb1CVcPHZofnb-iLWDHQWAxlTOdbRrnR9Dd
31
32
  dv_flow/mgr/task_node_leaf.py,sha256=IXPYnjDJvfXEKWfmiyIMdS9DKcUU-PxGNPwyJBiOXyw,7584
32
33
  dv_flow/mgr/task_output.py,sha256=ZwyvwnYj_gHOEFAEOH3m24Xfc4Cn77hb1j7LkX8_3C4,1086
33
34
  dv_flow/mgr/task_params_ctor.py,sha256=BPkbnoCtzhCxc1g8CJ6VimCcm5UAu92PXeDMhQ4lYsQ,1957
34
- dv_flow/mgr/task_run_ctxt.py,sha256=aMc9Gs-jmy3JYo4uVL5EM8qESnPOb4PvNzJ2mMffaxs,2046
35
+ dv_flow/mgr/task_run_ctxt.py,sha256=t2kGR-GbUC3s5YTYLxYmP43LRUvGKjqdGK5clRpAkzw,2624
35
36
  dv_flow/mgr/task_runner.py,sha256=-919VntXAe2XSuFW2dFpgvUre-NkILBnDBbAKBZYn5w,9594
36
37
  dv_flow/mgr/type.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
38
  dv_flow/mgr/type_def.py,sha256=NDeyplKrPnWwEv4yHkhXEMK9d9j39b5MOeLB-1Mchqo,1095
@@ -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.14149347362a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
54
- dv_flow_mgr-0.0.2.14149347362a1.dist-info/METADATA,sha256=Mg43r4Ns0KbrU9KatpLHgLPC1oYpX12Pf9rG0jjSQ-o,13336
55
- dv_flow_mgr-0.0.2.14149347362a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
56
- dv_flow_mgr-0.0.2.14149347362a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
57
- dv_flow_mgr-0.0.2.14149347362a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
58
- dv_flow_mgr-0.0.2.14149347362a1.dist-info/RECORD,,
54
+ dv_flow_mgr-0.0.2.14163613545a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
55
+ dv_flow_mgr-0.0.2.14163613545a1.dist-info/METADATA,sha256=ZxnOXBZzPttzd2GvJB1091pyZ0wDrBxpbtWd6HnazYw,13336
56
+ dv_flow_mgr-0.0.2.14163613545a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
57
+ dv_flow_mgr-0.0.2.14163613545a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
58
+ dv_flow_mgr-0.0.2.14163613545a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
59
+ dv_flow_mgr-0.0.2.14163613545a1.dist-info/RECORD,,