dv-flow-mgr 0.0.1.14110240305a1__py3-none-any.whl → 0.0.1.14139694132a1__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/__init__.py CHANGED
@@ -22,6 +22,7 @@
22
22
  from .package_def import *
23
23
  from .pkg_rgy import PkgRgy
24
24
  from .task_data import *
25
+ from .task_def import *
25
26
  from .task_graph_builder import TaskGraphBuilder
26
27
  from .task_runner import TaskRunner
27
28
  from .task_node_ctor_wrapper import task
@@ -33,7 +33,7 @@ from .fragment_def import FragmentDef
33
33
  from .package import Package
34
34
  from .package_import_spec import PackageImportSpec, PackageSpec
35
35
  from .param_def import ParamDef
36
- from .task_def import TaskDef
36
+ from .task_def import TaskDef, PassthroughE, ConsumesE
37
37
  from .task_node_ctor import TaskNodeCtor
38
38
  from .task_node_ctor_proxy import TaskNodeCtorProxy
39
39
  from .task_node_ctor_task import TaskNodeCtorTask
@@ -183,7 +183,7 @@ class PackageDef(BaseModel):
183
183
  base_params : BaseModel = None
184
184
  callable = None
185
185
  passthrough = task.passthrough
186
- consumes = [] if task.consumes is None else task.consumes.copy()
186
+ consumes = task.consumes.copy() if isinstance(task.consumes, list) else task.consumes
187
187
  needs = [] if task.needs is None else task.needs.copy()
188
188
  fullname = self.name + "." + task.name
189
189
 
@@ -192,15 +192,21 @@ class PackageDef(BaseModel):
192
192
  base_ctor_t = self.getTaskCtor(session, task.uses, tasks_m)
193
193
  base_params = base_ctor_t.mkTaskParams()
194
194
 
195
- # Once we have passthrough, we can't turn it off
196
- passthrough |= base_ctor_t.passthrough
197
- consumes.extend(base_ctor_t.consumes)
195
+ if passthrough is None:
196
+ passthrough = base_ctor_t.passthrough
197
+ if consumes is None:
198
+ consumes = base_ctor_t.consumes
198
199
 
199
200
  if base_ctor_t is None:
200
201
  self._log.error("Failed to load task ctor %s" % task.uses)
201
202
  else:
202
203
  self._log.debug("No 'uses' specified")
203
204
 
205
+ if passthrough is None:
206
+ passthrough = PassthroughE.No
207
+ if consumes is None:
208
+ consumes = ConsumesE.All
209
+
204
210
  # Determine the implementation constructor first
205
211
  if task.pytask is not None:
206
212
  # Built-in impl
dv_flow/mgr/std/flow.dv CHANGED
@@ -37,7 +37,8 @@ package:
37
37
  doc: |
38
38
  Creates a fileset from a list of files or glob patterns
39
39
  pytask: dv_flow.mgr.std.fileset.FileSet
40
- passthrough: true
40
+ passthrough: all
41
+ consumes: none
41
42
  with:
42
43
  base:
43
44
  doc: |
@@ -61,7 +62,8 @@ package:
61
62
  value: ""
62
63
  - name: CreateFile
63
64
  pytask: dv_flow.mgr.std.create_file.CreateFile
64
- passthrough: true
65
+ passthrough: all
66
+ consumes: none
65
67
  doc: |
66
68
  Creates one or more files in the run directory from
67
69
  literal content in the .dv file. Outputs a fileset
dv_flow/mgr/task_def.py CHANGED
@@ -39,8 +39,12 @@ class RundirE(enum.Enum):
39
39
  Unique = "unique"
40
40
  Inherit = "inherit"
41
41
 
42
+ class ConsumesE(enum.Enum):
43
+ No = "none"
44
+ All = "all"
45
+
42
46
  class PassthroughE(enum.Enum):
43
- No = "no"
47
+ No = "none"
44
48
  All = "all"
45
49
  Unused = "unused"
46
50
 
@@ -89,11 +93,11 @@ class TaskDef(BaseModel):
89
93
  rundir : RundirE = dc.Field(
90
94
  default=RundirE.Unique,
91
95
  description="Specifies handling of this tasks's run directory")
92
- passthrough: Union[bool, PassthroughE] = dc.Field(
93
- default=PassthroughE.No,
96
+ passthrough: Union[PassthroughE, List[Any], None] = dc.Field(
97
+ default=None,
94
98
  description="Specifies whether this task should pass its inputs to its output")
95
- consumes : List[Any] = dc.Field(
96
- default_factory=list,
99
+ consumes : Union[ConsumesE, List[Any], None] = dc.Field(
100
+ default=None,
97
101
  description="Specifies matching patterns for parameter sets that this task consumes")
98
102
 
99
103
  # out: List[TaskOutput] = dc.Field(default_factory=list)
dv_flow/mgr/task_node.py CHANGED
@@ -86,7 +86,7 @@ class TaskNode(object):
86
86
  for k,v in c.items():
87
87
  self._log.debug("k,v: %s,%s - hasattr=%s" % (k,v, hasattr(params, k)))
88
88
  if hasattr(params, k):
89
- self._log.debug("getattr=%s v=%s" % (getattr(params, k), v))
89
+ self._log.debug("getattr=\"%s\" v=\"%s\"" % (getattr(params, k), v))
90
90
  if getattr(params, k) == v:
91
91
  match = True
92
92
  else:
@@ -28,9 +28,6 @@ import logging
28
28
  import toposort
29
29
  from typing import Any, Callable, ClassVar, Dict, List, Tuple
30
30
  from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult
31
- from .task_params_ctor import TaskParamsCtor
32
- from .param_ref_eval import ParamRefEval
33
- from .param import Param
34
31
  from .task_node_ctor import TaskNodeCtor
35
32
 
36
33
  @dc.dataclass
@@ -28,9 +28,6 @@ import logging
28
28
  import toposort
29
29
  from typing import Any, Callable, ClassVar, Dict, List, Tuple
30
30
  from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult
31
- from .task_params_ctor import TaskParamsCtor
32
- from .param_ref_eval import ParamRefEval
33
- from .param import Param
34
31
  from .task_node import TaskNode
35
32
  from .task_node_ctor import TaskNodeCtor
36
33
  from .task_node_ctor_def_base import TaskNodeCtorDefBase
@@ -28,12 +28,8 @@ import logging
28
28
  import toposort
29
29
  from typing import Any, Callable, ClassVar, Dict, List, Tuple
30
30
  from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult
31
- from .task_params_ctor import TaskParamsCtor
32
- from .param_ref_eval import ParamRefEval
33
- from .param import Param
34
31
  from .task_node import TaskNode
35
32
  from .task_node_leaf import TaskNodeLeaf
36
- from .task_node_ctor import TaskNodeCtor
37
33
  from .task_node_ctor_def_base import TaskNodeCtorDefBase
38
34
 
39
35
  @dc.dataclass
@@ -28,13 +28,10 @@ import logging
28
28
  import toposort
29
29
  from typing import Any, Callable, ClassVar, Dict, List, Tuple
30
30
  from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult
31
- from .task_params_ctor import TaskParamsCtor
32
- from .param_ref_eval import ParamRefEval
33
31
  from .param import Param
34
32
  from .task_node import TaskNode
35
33
  from .task_node_leaf import TaskNodeLeaf
36
34
  from .task_node_ctor import TaskNodeCtor
37
- from .task_node_ctor_def_base import TaskNodeCtorDefBase
38
35
 
39
36
  @dc.dataclass
40
37
  class TaskNodeCtorWrapper(TaskNodeCtor):
@@ -7,8 +7,8 @@ import logging
7
7
  import toposort
8
8
  from typing import Any, Callable, ClassVar, Dict, List, Tuple
9
9
  from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult
10
+ from .task_def import ConsumesE, PassthroughE
10
11
  from .task_node import TaskNode
11
- from .task_params_ctor import TaskParamsCtor
12
12
  from .param_ref_eval import ParamRefEval
13
13
  from .param import Param
14
14
 
@@ -83,10 +83,12 @@ class TaskNodeLeaf(TaskNode):
83
83
 
84
84
  # Default inputs is the list of parameter sets that match 'consumes'
85
85
  inputs = []
86
- if self.consumes is not None and len(self.consumes):
86
+ if isinstance(self.consumes, list) and len(self.consumes):
87
87
  for in_p in in_params:
88
88
  if self._matches(in_p, self.consumes):
89
89
  inputs.append(in_p)
90
+ elif self.consumes == ConsumesE.All:
91
+ inputs = in_params.copy()
90
92
 
91
93
  for name,field in self.params.model_fields.items():
92
94
  value = getattr(self.params, name)
@@ -125,10 +127,17 @@ class TaskNodeLeaf(TaskNode):
125
127
  # Add an entry for ourselves
126
128
  dep_m[self.name] = list(need.name for need,_ in self.needs)
127
129
 
128
- if self.passthrough:
130
+ if isinstance(self.passthrough, list):
131
+ self._log.warning("List-based passthrough not yet supported")
132
+ elif self.passthrough == PassthroughE.All:
133
+ self._log.debug("Propagating all input parameters to output")
134
+ for need,block in self.needs:
135
+ if not block:
136
+ output.extend(need.output.output)
137
+ elif self.passthrough == PassthroughE.Unused:
129
138
  self._log.debug("passthrough: %s" % self.name)
130
139
 
131
- if self.consumes is None or len(self.consumes) == 0:
140
+ if self.consumes == ConsumesE.No or (isinstance(self.consumes, list) and len(self.consumes) == 0):
132
141
  self._log.debug("Propagating all input parameters to output")
133
142
  for need,block in self.needs:
134
143
  if not block:
@@ -164,6 +173,11 @@ class TaskNodeLeaf(TaskNode):
164
173
  # TODO:
165
174
  self._log.debug("<-- do_run: %s" % self.name)
166
175
 
176
+ if self.result is None:
177
+ raise Exception("Task %s did not produce a result" % self.name)
178
+
179
+ if self.output is None:
180
+ raise Exception("Task %s did not produce a result" % self.name)
167
181
  return self.result
168
182
 
169
183
  def __hash__(self):
@@ -117,20 +117,7 @@ class TaskSetRunner(TaskRunner):
117
117
  while len(active_task_l) >= self.nproc and t not in done_task_s:
118
118
  # Wait for at least one job to complete
119
119
  done, pending = await asyncio.wait(at[1] for at in active_task_l)
120
- for d in done:
121
- for i in range(len(active_task_l)):
122
- if active_task_l[i][1] == d:
123
- tt = active_task_l[i][0]
124
- tt.end = datetime.now()
125
- if tt.result.memento is not None:
126
- dst_memento[tt.name] = tt.result.memento.model_dump()
127
- else:
128
- dst_memento[tt.name] = None
129
- self.status |= tt.result.status
130
- self._notify(tt, "leave")
131
- done_task_s.add(tt)
132
- active_task_l.pop(i)
133
- break
120
+ self._completeTasks(active_task_l, done_task_s, done, dst_memento)
134
121
 
135
122
  if self.status == 0 and t not in done_task_s:
136
123
  memento = src_memento.get(t.name, None)
@@ -162,19 +149,10 @@ class TaskSetRunner(TaskRunner):
162
149
 
163
150
  # All pending tasks in the task-group have been launched
164
151
  # Wait for them to all complete
165
- if len(active_task_l):
152
+ while len(active_task_l):
166
153
  # TODO: Shouldn't gather here -- reach to each completion
167
- coros = list(at[1] for at in active_task_l)
168
- res = await asyncio.gather(*coros)
169
- for tt in active_task_l:
170
- tt[0].end = datetime.now()
171
- if tt[0].result.memento is not None:
172
- dst_memento[tt[0].name] = tt[0].result.memento.model_dump()
173
- else:
174
- dst_memento[tt[0].name] = None
175
- self.status |= tt[0].result.status
176
- self._notify(tt[0], "leave")
177
- active_task_l.clear()
154
+ done, pending = await asyncio.wait(at[1] for at in active_task_l)
155
+ self._completeTasks(active_task_l, done_task_s, done, dst_memento)
178
156
 
179
157
  if self.status != 0:
180
158
  self._log.debug("Exiting due to status: %d", self.status)
@@ -183,10 +161,35 @@ class TaskSetRunner(TaskRunner):
183
161
  with open(os.path.join(self.rundir, "cache", "mementos.json"), "w") as f:
184
162
  json.dump(dst_memento, f)
185
163
 
186
- if isinstance(task, list):
187
- return list(t.output for t in task)
164
+ if self.status == 0:
165
+ if isinstance(task, list):
166
+ for t in task:
167
+ if t.output is None:
168
+ raise Exception("Task %s did not produce output" % t.name)
169
+ return list(t.output for t in task)
170
+ else:
171
+ if task.output is None:
172
+ raise Exception("Task %s did not produce output" % task.name)
173
+ return task.output
188
174
  else:
189
- return task.output
175
+ return None
176
+
177
+ def _completeTasks(self, active_task_l, done_task_s, done_l, dst_memento):
178
+ for d in done_l:
179
+ for i in range(len(active_task_l)):
180
+ if active_task_l[i][1] == d:
181
+ tt = active_task_l[i][0]
182
+ tt.end = datetime.now()
183
+ if tt.result.memento is not None:
184
+ dst_memento[tt.name] = tt.result.memento.model_dump()
185
+ else:
186
+ dst_memento[tt.name] = None
187
+ self.status |= tt.result.status
188
+ self._notify(tt, "leave")
189
+ done_task_s.add(tt)
190
+ active_task_l.pop(i)
191
+ break
192
+ pass
190
193
 
191
194
  def buildDepMap(self, task : Union[TaskNode, List[TaskNode]]) -> Dict[TaskNode, Set[TaskNode]]:
192
195
  tasks = task if isinstance(task, list) else [task]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.14110240305a1
3
+ Version: 0.0.1.14139694132a1
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,4 +1,4 @@
1
- dv_flow/mgr/__init__.py,sha256=EL7krYGBmN53z3HKvdrIiyHTD4TRx94LegCgx8whUAo,1130
1
+ dv_flow/mgr/__init__.py,sha256=Zv-hbAhsxnQ49zy6_tKlwqgu5q12Yr7dCySyJMDtOO0,1154
2
2
  dv_flow/mgr/__main__.py,sha256=ExLZCOjDZtxqPk_SSF5SZKkbYUjMmVca4sT2OeePv10,3437
3
3
  dv_flow/mgr/eval_jq.py,sha256=bRsHtaN51qIOiZK1VJV52W0-vj5VH0nQ7XIFebZi5kI,1129
4
4
  dv_flow/mgr/expr_eval.py,sha256=N_8hRIgzJK9JVqhRt8F9rc4S7AAdKHMMltafqk6KhJs,3113
@@ -7,7 +7,7 @@ dv_flow/mgr/fileset.py,sha256=4izm4-qldWLiZxWDUa5Em0iFizzS-S-O0YU6zvtbUUs,1264
7
7
  dv_flow/mgr/fragment_def.py,sha256=AHx3ITbiNbGCzlDk5FM8Iimm0GJnWXDDRAoRC1b41jM,1647
8
8
  dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
9
9
  dv_flow/mgr/package.py,sha256=9FhOu1hKYKzlD88zehwrI6KAcs1E7TbXDnq4v54dqDQ,1701
10
- dv_flow/mgr/package_def.py,sha256=L6KzBLSgArDgKPdjRAkkkq1c771BwV0NU-fMZRMMwws,20581
10
+ dv_flow/mgr/package_def.py,sha256=WdVVpWVe4Pip5mR717iz2UWoZPkIfKrH8KzPIK-t73Y,20777
11
11
  dv_flow/mgr/package_import_spec.py,sha256=aZMpnS9a5NFY76_pYXEuO3-Mkc_xFzy73fdrUe_54Dc,1760
12
12
  dv_flow/mgr/param.py,sha256=kkxMRGf6mPjSZJsjgLKH2vJL62Sn0ZESvjBLkEYOp20,1386
13
13
  dv_flow/mgr/param_def.py,sha256=mkAw3DanIxcVWRYeh9lUAfUMkpqDFly_Ku_iobr4ix8,1745
@@ -15,23 +15,23 @@ dv_flow/mgr/param_ref_eval.py,sha256=5yH37oIX6f2qmk7GfRgNT5qZx0jm3CJFgB9lLDZZ1yQ
15
15
  dv_flow/mgr/parsetab.py,sha256=I-p3nC60t9jiNtPhKyl_sE92SiP96zJLnNdydcLy33g,3780
16
16
  dv_flow/mgr/pkg_rgy.py,sha256=d1nIjRm3ymMNJT-yiMDxCS6bFisTPvLMqh5VrfsHVKM,5404
17
17
  dv_flow/mgr/task_data.py,sha256=lN7Iq8YTitEMGG4rZqYQi6Ri2HuPgBQ5oGQbW-63T8c,12436
18
- dv_flow/mgr/task_def.py,sha256=H_8PUHbve7qBB_6ZEjI3kzIxOlXOor_rZ5yl1ZT-GUQ,3590
18
+ dv_flow/mgr/task_def.py,sha256=9_VJfY8hfZI7x9LFqDxALurg6oWMQQw6rdsppcjTweM,3669
19
19
  dv_flow/mgr/task_graph_builder.py,sha256=3jDlC6UinOHNZO1scO4g6bdDdLZKJEjtexxV9RXy0_4,14371
20
20
  dv_flow/mgr/task_graph_dot_writer.py,sha256=GxqiYwQJbFgUQdnPCS9vpIYmYFbSXwnXCSbGmjbxC3M,2418
21
21
  dv_flow/mgr/task_listener_log.py,sha256=hrJEjSRXXoovDTcD1Cmhi3Spzw7uEJ-WP6tv6JUaa6s,4060
22
- dv_flow/mgr/task_node.py,sha256=ftAB3-j7ZeWV8Y8R1OwaqL8h2Xdc5tC77jLaL2Q390k,3532
22
+ dv_flow/mgr/task_node.py,sha256=xkcdFZyEIIO6Natk-v4-5eyLZGI5kV0516kfjgqzQ34,3540
23
23
  dv_flow/mgr/task_node_compound.py,sha256=y8_jzsfT9Vnm-tCWc_-hFHFoSat95zBXFibySu38YRA,1696
24
24
  dv_flow/mgr/task_node_ctor.py,sha256=COFGvm5PR2B92H3uW1yhDIUCmppo9U4IfOcv_Jrsreo,3952
25
25
  dv_flow/mgr/task_node_ctor_compound.py,sha256=inJeqOtlkVa7QRCzktqvVkkZ0vZALHFadIGlRZyDTD8,4006
26
26
  dv_flow/mgr/task_node_ctor_compound_proxy.py,sha256=fkH_b35xE0dABbRn9Boa80WWx_tR4L9v1mhX6faefpg,1999
27
- dv_flow/mgr/task_node_ctor_def_base.py,sha256=C2EeKgjeHB9xdC7nkLMBOcektwDoLhdP-4wQLY8OZ4g,1562
28
- dv_flow/mgr/task_node_ctor_proxy.py,sha256=e1pfLBnJHAgQvkyNcB8sKw5DJdAPRphQz1-DT9Oheho,2017
29
- dv_flow/mgr/task_node_ctor_task.py,sha256=9HT39F3KcEpnOBd0SbUqE6FaeSY5fFp_tN1bzGNfFKk,2237
30
- dv_flow/mgr/task_node_ctor_wrapper.py,sha256=fRwO2RRJbt7IB1Ziwobmg0-nU5vFYsXoNV4IXfsS7mw,3435
31
- dv_flow/mgr/task_node_leaf.py,sha256=52qv1hwp5FLG9PuPvYVPLlTdzi1TcG4OTqMZC54iIwc,6481
27
+ dv_flow/mgr/task_node_ctor_def_base.py,sha256=KEOU0uRL8VxbANyOc7X5dUMERAtlqUAGI-pMPfbuHlU,1451
28
+ dv_flow/mgr/task_node_ctor_proxy.py,sha256=ViOFJ64JM4-CGFZNl89BghFuKSQ66kZVqSj4v2PA6VA,1906
29
+ dv_flow/mgr/task_node_ctor_task.py,sha256=qpgqMgQ-Nx4F2hAWfp08zPU43TbWs9rv0GnFuD84G6M,2085
30
+ dv_flow/mgr/task_node_ctor_wrapper.py,sha256=El09jWz6aAq08sy2ZPgr93LwtCi2Zyt1Ykh-Shd0Cho,3292
31
+ dv_flow/mgr/task_node_leaf.py,sha256=t1aP26CPCO89XSA_5AonvNFQhsgjJsq62lxY3TFyUMI,7231
32
32
  dv_flow/mgr/task_output.py,sha256=ZwyvwnYj_gHOEFAEOH3m24Xfc4Cn77hb1j7LkX8_3C4,1086
33
33
  dv_flow/mgr/task_params_ctor.py,sha256=BPkbnoCtzhCxc1g8CJ6VimCcm5UAu92PXeDMhQ4lYsQ,1957
34
- dv_flow/mgr/task_runner.py,sha256=6Tq-ADmCjWzDmUktHs0yHsmJovUXAxcbZdOuJovdR2M,9117
34
+ dv_flow/mgr/task_runner.py,sha256=mEFf0Mh5XYHkmB52UQI1gT9ugH9oISEb59Ce8EezZaI,9104
35
35
  dv_flow/mgr/type.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  dv_flow/mgr/type_def.py,sha256=NDeyplKrPnWwEv4yHkhXEMK9d9j39b5MOeLB-1Mchqo,1095
37
37
  dv_flow/mgr/cmds/cmd_graph.py,sha256=Ykw__EdwamDBZZKxQZVbtMtFl7koq5dJMShTBXSM2pk,2672
@@ -41,7 +41,7 @@ dv_flow/mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5
41
41
  dv_flow/mgr/std/create_file.py,sha256=wmn5N_mObx_wr2LPdKOVbNmdM71hhs3UXOv6Ap9l3Ts,2726
42
42
  dv_flow/mgr/std/exec.py,sha256=UChqa_tAjvdB1NjqTsvlPgFomP8hMsX2rAOPyUonNpk,3896
43
43
  dv_flow/mgr/std/fileset.py,sha256=5IxS6T-x0wzA6fdEQcfHZ9kNP8IpH9hfJ3UMhL4A6Iw,3911
44
- dv_flow/mgr/std/flow.dv,sha256=rl0VZt_H-TyIJq0iERai07aDDZHI86mNozs4gUxidDA,3759
44
+ dv_flow/mgr/std/flow.dv,sha256=t8m-urWYhKEAOFhG4wlrMqGHwiWDyO8H-b6-5vNQkBk,3795
45
45
  dv_flow/mgr/std/message.py,sha256=0JHLErg8whqMLAasG1fumZ2O7R7WNWeNQ9ibJaLDpVY,1029
46
46
  dv_flow/mgr/std/task_null.py,sha256=dw6LXBXVwth6gLPeduDvlz5znAhcVpDH8r1DticD-0w,1041
47
47
  dv_flow/mgr/util/__init__.py,sha256=6uuA6z5cKS2hcjJw6YyEM2M79g6OpXb6tZF_Gku-AGU,22
@@ -49,9 +49,9 @@ dv_flow/mgr/util/__main__.py,sha256=F0LXpCDpYTPalSo0dc1h_qZkip5v1AZYYh-vcYbh5s0,
49
49
  dv_flow/mgr/util/util.py,sha256=yg9oTPRiO87mkCSOQpOtlG9vyKPQzY3qp4OJkEMbWyY,1443
50
50
  dv_flow/mgr/util/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
51
  dv_flow/mgr/util/cmds/cmd_schema.py,sha256=lrEI-Jwb8j4I4yYOn9hq7_7NYbK8leVxLesrHyEWm-E,1879
52
- dv_flow_mgr-0.0.1.14110240305a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
53
- dv_flow_mgr-0.0.1.14110240305a1.dist-info/METADATA,sha256=giD0HNKpfr3oaDAgHqo6nT2uUNm5_0H3DHiTMzv3itA,13336
54
- dv_flow_mgr-0.0.1.14110240305a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
55
- dv_flow_mgr-0.0.1.14110240305a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
56
- dv_flow_mgr-0.0.1.14110240305a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
57
- dv_flow_mgr-0.0.1.14110240305a1.dist-info/RECORD,,
52
+ dv_flow_mgr-0.0.1.14139694132a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
53
+ dv_flow_mgr-0.0.1.14139694132a1.dist-info/METADATA,sha256=p0Qw8i67Jgu_NdhXRRZD_6xzpMtrELAJp4GE6Tuumjs,13336
54
+ dv_flow_mgr-0.0.1.14139694132a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
55
+ dv_flow_mgr-0.0.1.14139694132a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
56
+ dv_flow_mgr-0.0.1.14139694132a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
57
+ dv_flow_mgr-0.0.1.14139694132a1.dist-info/RECORD,,