dv-flow-mgr 0.0.1.13525773676a1__py3-none-any.whl → 0.0.1.13577785562a1__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/eval_jq.py ADDED
@@ -0,0 +1,16 @@
1
+
2
+ import jq
3
+
4
+ def eval_jq(input, args):
5
+ if len(args) != 1:
6
+ raise Exception("jq requires a single argument")
7
+
8
+ filt = jq.compile(args[0])
9
+
10
+ if type(input) == str:
11
+ ret = filt.input_text(input).text()
12
+ else:
13
+ ret = filt.input_value(input).text()
14
+
15
+
16
+ return ret
dv_flow/mgr/expr_eval.py CHANGED
@@ -1,5 +1,6 @@
1
1
 
2
2
  import dataclasses as dc
3
+ import json
3
4
  from typing import Any, Callable, Dict, List
4
5
  from .expr_parser import ExprVisitor, Expr, ExprBin, ExprBinOp, ExprCall, ExprId, ExprString, ExprInt
5
6
 
@@ -18,15 +19,30 @@ class ExprEval(ExprVisitor):
18
19
  return val
19
20
 
20
21
  def _toString(self, val):
22
+ rval = val
23
+ if type(val) != str:
24
+ obj = self._toObject(val)
25
+ rval = json.dumps(obj)
26
+ return rval
27
+ # if isinstance(val, list):
28
+ # val = '[' + ",".join(self._toString(v) for v in val) + ']'
29
+ # elif hasattr(val, "model_dump_json"):
30
+ # val = val.model_dump_json()
31
+ # return val
32
+
33
+ def _toObject(self, val):
34
+ rval = val
21
35
  if isinstance(val, list):
22
- val = '[' + ",".join(self._toString(v) for v in val) + ']'
23
- elif hasattr(val, "model_dump_json"):
24
- val = val.model_dump_json()
25
- return val
36
+ rval = list(self._toObject(v) for v in val)
37
+ elif hasattr(val, "model_dump"):
38
+ rval = val.model_dump()
39
+
40
+ return rval
26
41
 
27
42
  def visitExprId(self, e : ExprId):
28
43
  if e.id in self.variables:
29
- self.value = self.variables[e.id]
44
+ # Always represent data as a JSON object
45
+ self.value = self._toObject(self.variables[e.id])
30
46
  else:
31
47
  raise Exception("Variable '%s' not found" % e.id)
32
48
 
dv_flow/mgr/param.py ADDED
@@ -0,0 +1,20 @@
1
+
2
+ from pydantic import BaseModel
3
+ import pydantic.dataclasses as pdc
4
+ from typing import Any, List, Union
5
+
6
+ class ParamMeta(type):
7
+ def __getitem__(self, T):
8
+ ret = Union[T, Param]
9
+ return ret
10
+
11
+ class ParamT(metaclass=ParamMeta):
12
+ pass
13
+
14
+ class Param(BaseModel):
15
+ append : Union[Any,List] = pdc.Field(default=None)
16
+ prepend : Union[Any,List] = pdc.Field(default=None)
17
+ append_path : Union[Any,List] = pdc.Field(default=None, alias="append-path")
18
+ prepend_path : Union[Any,List] = pdc.Field(default=None, alias="prepend-path")
19
+
20
+
@@ -2,6 +2,7 @@ import dataclasses as dc
2
2
  import json
3
3
  from .expr_eval import ExprEval
4
4
  from .expr_parser import ExprParser
5
+ from .eval_jq import eval_jq
5
6
 
6
7
  @dc.dataclass
7
8
  class ParamRefEval(object):
@@ -9,6 +10,9 @@ class ParamRefEval(object):
9
10
  parser : ExprParser = ExprParser()
10
11
  expr_eval : ExprEval = ExprEval()
11
12
 
13
+ def __post_init__(self):
14
+ self.expr_eval.methods["jq"] = eval_jq
15
+
12
16
  def eval(self, val : str) -> str:
13
17
  idx = 0
14
18
 
@@ -22,12 +26,9 @@ class ParamRefEval(object):
22
26
  raise Exception("unterminated variable ref")
23
27
 
24
28
  ref = val[idx+3:eidx].strip()
25
- print("ref: %s" % ref)
26
29
 
27
30
  expr_ast = self.parser.parse(ref)
28
- print("expr_ast: %s" % str(expr_ast))
29
31
  exp_val = self.expr_eval.eval(expr_ast)
30
- print("exp_val: %s" % str(exp_val))
31
32
 
32
33
  # Replacing [idx..eidx+2] with len(exp_val)
33
34
  val = val[:idx] + exp_val + val[eidx+2:]
dv_flow/mgr/task_node.py CHANGED
@@ -6,6 +6,7 @@ from typing import Any, Callable, ClassVar, Dict, List
6
6
  from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult
7
7
  from .task_params_ctor import TaskParamsCtor
8
8
  from .param_ref_eval import ParamRefEval
9
+ from .param import Param
9
10
 
10
11
  @dc.dataclass
11
12
  class TaskNode(object):
@@ -47,12 +48,17 @@ class TaskNode(object):
47
48
 
48
49
  for name,field in self.params.model_fields.items():
49
50
  value = getattr(self.params, name)
50
- if value.find("${{") != -1:
51
- new_val = eval.eval(value)
52
- setattr(self.params, name, new_val)
53
- print("TODO: expand")
54
- print("Field: %s %s" % (name, str(value)))
55
- pass
51
+ if type(value) == str:
52
+ if value.find("${{") != -1:
53
+ new_val = eval.eval(value)
54
+ setattr(self.params, name, new_val)
55
+ elif isinstance(value, list):
56
+ for i,elem in enumerate(value):
57
+ if elem.find("${{") != -1:
58
+ new_val = eval.eval(elem)
59
+ value[i] = new_val
60
+ else:
61
+ raise Exception("Unhandled param type: %s" % str(value))
56
62
 
57
63
  input = TaskDataInput(
58
64
  changed=changed,
@@ -81,12 +87,6 @@ class TaskNode(object):
81
87
  def __hash__(self):
82
88
  return id(self)
83
89
 
84
- @staticmethod
85
- def task(paramT):
86
- def wrapper(T):
87
- ctor = TaskNodeCtorWrapper(T.__name__, T, paramT)
88
- return ctor
89
- return wrapper
90
90
 
91
91
  @dc.dataclass
92
92
  class TaskNodeCtor(object):
@@ -97,7 +97,6 @@ class TaskNodeCtor(object):
97
97
  """
98
98
  name : str
99
99
 
100
-
101
100
  def mkTaskNode(self, srcdir, params, name=None) -> TaskNode:
102
101
  raise NotImplementedError("mkTaskNode in type %s" % str(type(self)))
103
102
 
@@ -138,5 +137,25 @@ class TaskNodeCtorWrapper(TaskNodeCtor):
138
137
  str(type(obj)),
139
138
  key))
140
139
  else:
141
- setattr(obj, key, value)
140
+ if isinstance(value, Param):
141
+ if value.append is not None:
142
+ ex_value = getattr(obj, key, [])
143
+ ex_value.extend(value.append)
144
+ setattr(obj, key, ex_value)
145
+ elif value.prepend is not None:
146
+ ex_value = getattr(obj, key, [])
147
+ value = value.copy()
148
+ value.extend(ex_value)
149
+ setattr(obj, key, value)
150
+ pass
151
+ else:
152
+ raise Exception("Unhandled value spec: %s" % str(value))
153
+ else:
154
+ setattr(obj, key, value)
142
155
  return obj
156
+
157
+ def task(paramT):
158
+ def wrapper(T):
159
+ ctor = TaskNodeCtorWrapper(T.__name__, T, paramT)
160
+ return ctor
161
+ return wrapper
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.13525773676a1
3
+ Version: 0.0.1.13577785562a1
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,6 +1,7 @@
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_eval.py,sha256=M8qTIEnnbff8BCbxvNIztYyG-BJGSe_cLexfqYr3E0w,1807
3
+ dv_flow/mgr/eval_jq.py,sha256=Ue-qkyNW6uOu2Wy8u6nrTbPPY7ujaHd0-4iki0eV3Ec,294
4
+ dv_flow/mgr/expr_eval.py,sha256=Mp0TvrV6gZWcj1uYwLfPNI-ARwwdAfwntE5byLBfBuY,2276
4
5
  dv_flow/mgr/expr_parser.py,sha256=aR8n6hgk5xmFknIaSVC02K-So-eU4pkkFtwb7zWsSPs,5474
5
6
  dv_flow/mgr/fileset.py,sha256=FNvC5sU2ArxJ0OO3v8dXTv8zX-bZ5t0a0ljne0fQQ1o,1150
6
7
  dv_flow/mgr/fragment_def.py,sha256=cyzp1XeWtNOaagScmeS-BPsoXj9j2LTBbKq5ZUioz8I,1641
@@ -8,8 +9,9 @@ dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
8
9
  dv_flow/mgr/package.py,sha256=878twhPD-E1pFlDNUtuyeFEgJ_Y89b560og4St-Iwrs,1679
9
10
  dv_flow/mgr/package_def.py,sha256=dwvs-7kGEp7wFrBK2Fybysb-vSKwtWOtxTrg1VIaL14,14975
10
11
  dv_flow/mgr/package_import_spec.py,sha256=ah3r15v5Jdub2poc3sgi6Uar1L3oGoYsCPPNiOHV-a4,1760
12
+ dv_flow/mgr/param.py,sha256=3BY-ucig6JRw73FhjyJQL-vpd57qhAzixgZ8I5FoUpw,553
11
13
  dv_flow/mgr/param_def.py,sha256=e2WvRCMArbgcsKC4TKQqZTscZmCdo3WvVR6w3LN0VK8,727
12
- dv_flow/mgr/param_ref_eval.py,sha256=MLJNUgvvgxEPzr16vLPUvGwn9lHkKohr7xVAaZhU7Yk,1129
14
+ dv_flow/mgr/param_ref_eval.py,sha256=dpV6IPdTtZHLy8maTsN61Ce1Cc5M5dLQW5sauNujEMU,1090
13
15
  dv_flow/mgr/parsetab.py,sha256=enSOnMQ-woIsMEzHyeYiefvhAl8enxfX9Ct_o8-jkqs,3780
14
16
  dv_flow/mgr/pkg_rgy.py,sha256=2R_EaeBDJn5qUq9DzSnLc37wUP36MWSv-p0LgUjJRAg,4471
15
17
  dv_flow/mgr/task.py,sha256=kLQSvnVwj9ROIDtxq8lLu-4mJizTxOqvUeogmgN6QAA,5976
@@ -22,7 +24,7 @@ dv_flow/mgr/task_graph_runner.py,sha256=jUGI49QvxUCfQoKQDDk2psbeapIcCg72qNOW1Jip
22
24
  dv_flow/mgr/task_graph_runner_local.py,sha256=OrydPwtQ8E7hYWvSXx0h7lI3nfUNFyklULhsyMwz9dA,4687
23
25
  dv_flow/mgr/task_impl_data.py,sha256=bFPijoKrh9x7fZN2DsvRJp0UHo-gGM0VjtDQISyfhFk,321
24
26
  dv_flow/mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
25
- dv_flow/mgr/task_node.py,sha256=CTMfBzKR_kSs10sLxA0NC9HihqsOTHJ49k5oPfcZyNU,4192
27
+ dv_flow/mgr/task_node.py,sha256=uCsyNT9IQu0cok27qTEi4iTB6FqobXbx7hbVAmjELKc,5130
26
28
  dv_flow/mgr/task_output.py,sha256=l-W-FvVo6YDah1RQS-I9N0KUtB3vp-kl7lxIdmNz0l4,178
27
29
  dv_flow/mgr/task_params_ctor.py,sha256=aXgB8o9xFPjaEjGW_xYkEC0N0apzGzGUPDj7g2ZLvus,1112
28
30
  dv_flow/mgr/task_runner.py,sha256=JmerE6CyXiJJK7-n6P65OzwW9UTYFQqV8Cck7eHe0B8,3882
@@ -35,9 +37,9 @@ dv_flow/mgr/std/fileset.py,sha256=uP7bGntRq-Tn5_GEFnt0_J_OAmfvep3GlCwCuE8by4o,27
35
37
  dv_flow/mgr/std/flow.dv,sha256=j9wLrF3Ghh1ZLbJxmk7WiNiRYUYEer-8CCUA5hsgtfk,1409
36
38
  dv_flow/mgr/std/message.py,sha256=BPTHnEMD4tBufQ9LvsS9Sa_0xjaJATbBpwqosWslvVA,193
37
39
  dv_flow/mgr/std/task_null.py,sha256=KObmjG_4D08GJ1k6neqKIQrFY72Sj0jLnwXxEkq5HA0,321
38
- dv_flow_mgr-0.0.1.13525773676a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
39
- dv_flow_mgr-0.0.1.13525773676a1.dist-info/METADATA,sha256=Bg3ASctj2O6u1eTnAZ9_FKztQjpslQZC0fr7SCSqg6c,13276
40
- dv_flow_mgr-0.0.1.13525773676a1.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
41
- dv_flow_mgr-0.0.1.13525773676a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
42
- dv_flow_mgr-0.0.1.13525773676a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
43
- dv_flow_mgr-0.0.1.13525773676a1.dist-info/RECORD,,
40
+ dv_flow_mgr-0.0.1.13577785562a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
41
+ dv_flow_mgr-0.0.1.13577785562a1.dist-info/METADATA,sha256=UeJMpl2RnCOQX98UgtpVXI3qjSPhe4Zs_Gcg4-Cv4hE,13276
42
+ dv_flow_mgr-0.0.1.13577785562a1.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
43
+ dv_flow_mgr-0.0.1.13577785562a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
44
+ dv_flow_mgr-0.0.1.13577785562a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
45
+ dv_flow_mgr-0.0.1.13577785562a1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.1)
2
+ Generator: setuptools (75.8.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5