dv-flow-mgr 0.0.1.13730507343a1__tar.gz → 0.0.1.13755459426a1__tar.gz

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.
Files changed (103) hide show
  1. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/PKG-INFO +1 -1
  2. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/pyproject.toml +1 -1
  3. dv_flow_mgr-0.0.1.13755459426a1/src/dv_flow/mgr/task_listener_log.py +50 -0
  4. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/task_node.py +6 -4
  5. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/task_runner.py +1 -0
  6. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow_mgr.egg-info/PKG-INFO +1 -1
  7. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow_mgr.egg-info/SOURCES.txt +1 -0
  8. dv_flow_mgr-0.0.1.13755459426a1/tests/unit/test_markers.py +45 -0
  9. dv_flow_mgr-0.0.1.13730507343a1/src/dv_flow/mgr/task_listener_log.py +0 -27
  10. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/.github/workflows/ci.yml +0 -0
  11. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/.gitignore +0 -0
  12. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/.vscode/settings.json +0 -0
  13. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/LICENSE +0 -0
  14. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/README.md +0 -0
  15. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/KeyArchitecture.md +0 -0
  16. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/Makefile +0 -0
  17. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/Notes.md +0 -0
  18. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/Roadmap.md +0 -0
  19. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/RundirLayout.md +0 -0
  20. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/Stages.md +0 -0
  21. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/Steps.md +0 -0
  22. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/Tasks.md +0 -0
  23. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/TypesAndDefs.md +0 -0
  24. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/Usecases.md +0 -0
  25. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/conf.py +0 -0
  26. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/index.rst +0 -0
  27. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/intro.rst +0 -0
  28. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/quickstart.rst +0 -0
  29. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/docs/reference.rst +0 -0
  30. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/fwperiph_dma.pss +0 -0
  31. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/ivpm.yaml +0 -0
  32. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/setup.cfg +0 -0
  33. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/__init__.py +0 -0
  34. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/__main__.py +0 -0
  35. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/cmds/cmd_run.py +0 -0
  36. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/eval_jq.py +0 -0
  37. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/expr_eval.py +0 -0
  38. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/expr_parser.py +0 -0
  39. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/fileset.py +0 -0
  40. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/fragment_def.py +0 -0
  41. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/out +0 -0
  42. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/package.py +0 -0
  43. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/package_def.py +0 -0
  44. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/package_import_spec.py +0 -0
  45. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/param.py +0 -0
  46. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/param_def.py +0 -0
  47. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/param_ref_eval.py +0 -0
  48. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/parsetab.py +0 -0
  49. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/pkg_rgy.py +0 -0
  50. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/share/flow.json +0 -0
  51. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/std/exec.py +0 -0
  52. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/std/fileset.py +0 -0
  53. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/std/flow.dv +0 -0
  54. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/std/message.py +0 -0
  55. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/std/task_null.py +0 -0
  56. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/task.py +0 -0
  57. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/task_ctor.py +0 -0
  58. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/task_data.py +0 -0
  59. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/task_def.py +0 -0
  60. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/task_exec_data.py +0 -0
  61. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/task_graph_builder.py +0 -0
  62. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/task_graph_runner.py +0 -0
  63. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/task_graph_runner_local.py +0 -0
  64. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/task_impl_data.py +0 -0
  65. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/task_memento.py +0 -0
  66. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/task_output.py +0 -0
  67. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/task_params_ctor.py +0 -0
  68. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/type.py +0 -0
  69. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/type_def.py +0 -0
  70. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow/mgr/util.py +0 -0
  71. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow_mgr.egg-info/dependency_links.txt +0 -0
  72. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow_mgr.egg-info/entry_points.txt +0 -0
  73. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow_mgr.egg-info/requires.txt +0 -0
  74. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/src/dv_flow_mgr.egg-info/top_level.txt +0 -0
  75. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/examples/example1/example1.flow +0 -0
  76. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/system/test_depends.py +0 -0
  77. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/system/test_pkg_discovery.py +0 -0
  78. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/system/test_stdlib.py +0 -0
  79. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/__init__.py +0 -0
  80. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/data/fileset/test1/files1/file1_1.sv +0 -0
  81. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/data/fileset/test1/files1/file1_2.sv +0 -0
  82. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/data/fileset/test1/files2/file2_1.sv +0 -0
  83. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/data/fileset/test1/files2/file2_2.sv +0 -0
  84. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/data/fileset/test1/flow.dv +0 -0
  85. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/data/fileset/test1 copy/files1/file1_1.sv +0 -0
  86. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/data/fileset/test1 copy/files1/file1_2.sv +0 -0
  87. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/data/fileset/test1 copy/files2/file2_1.sv +0 -0
  88. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/data/fileset/test1 copy/files2/file2_2.sv +0 -0
  89. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/data/fileset/test1 copy/test1.dfs +0 -0
  90. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/data/proj1/proj1.dfs +0 -0
  91. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/data/proj2/proj2.dfs +0 -0
  92. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/data/proj3/proj3.dfs +0 -0
  93. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/test_data_merge.py +0 -0
  94. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/test_expr_eval.py +0 -0
  95. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/test_expr_parser.py +0 -0
  96. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/test_fileset.py +0 -0
  97. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/test_imports.py +0 -0
  98. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/test_parse.py +0 -0
  99. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/test_pyclass.py +0 -0
  100. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/test_pytask_smoke.py +0 -0
  101. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/test_smoke copy.sav +0 -0
  102. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/test_smoke.py +0 -0
  103. {dv_flow_mgr-0.0.1.13730507343a1 → dv_flow_mgr-0.0.1.13755459426a1}/tests/unit/test_stdlib.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.13730507343a1
3
+ Version: 0.0.1.13755459426a1
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,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "dv-flow-mgr"
8
- version = "0.0.1.13730507343a1"
8
+ version = "0.0.1.13755459426a1"
9
9
  dependencies = [
10
10
  'jq',
11
11
  'pydantic',
@@ -0,0 +1,50 @@
1
+ import dataclasses as dc
2
+ from rich.console import Console
3
+
4
+ @dc.dataclass
5
+ class TaskListenerLog(object):
6
+ console : Console = dc.field(default_factory=Console)
7
+ level : int = 0
8
+ quiet : bool = False
9
+
10
+ def event(self, task : 'Task', reason : 'Reason'):
11
+ if reason == 'enter':
12
+ self.level += 1
13
+ if not self.quiet:
14
+ self.console.print("[green]>[%d][/green] Task %s" % (self.level, task.name))
15
+ elif reason == 'leave':
16
+ if self.quiet:
17
+ if task.result.changed:
18
+ self.console.print("[green]Done:[/green] %s" % (task.name,))
19
+ else:
20
+ sev_pref_m = {
21
+ "info": "[blue]I[/blue]",
22
+ "warn": "[yellow]W[/yellow]",
23
+ "error": "[red]E[/red]",
24
+ }
25
+ for m in task.result.markers:
26
+ msg = " %s %s: %s" % (
27
+ sev_pref_m[m.severity],
28
+ task.name,
29
+ m.msg)
30
+
31
+ self.console.print(msg)
32
+
33
+ if m.loc is not None:
34
+ if m.loc.line != -1 and m.loc.pos != -1:
35
+ self.console.print(" %s:%d:%d" % (m.loc.path, m.loc.line, m.loc.pos))
36
+ elif m.loc.line != -1:
37
+ self.console.print(" %s:%d" % (m.loc.path, m.loc.line))
38
+ else:
39
+ self.console.print(" %s" % m.loc.path)
40
+
41
+ pass
42
+ if task.result.status == 0:
43
+ self.console.print("[green]<[%d][/green] Task %s" % (self.level, task.name))
44
+ else:
45
+ self.console.print("[red]<[%d][/red] Task %s" % (self.level, task.name))
46
+ self.level -= 1
47
+ else:
48
+ self.console.print("[red]-[/red] Task %s" % task.name)
49
+ pass
50
+
@@ -135,10 +135,12 @@ class TaskNode(object):
135
135
  match = False
136
136
  for k,v in c.items():
137
137
  self._log.debug("k,v: %s,%s" % (k,v))
138
- if hasattr(out, k) and getattr(out, k) == v:
139
- self._log.debug("match")
140
- match = True
141
- break
138
+ if hasattr(out, k):
139
+ self._log.debug("has attribute: %s" % str(getattr(out ,k)))
140
+ if getattr(out, k) == v:
141
+ self._log.debug("match")
142
+ match = True
143
+ break
142
144
  if match:
143
145
  consumed = True
144
146
  break
@@ -176,6 +176,7 @@ class SingleTaskRunner(TaskRunner):
176
176
  # print("Field: %s" % field.name)
177
177
 
178
178
  input = TaskDataInput(
179
+ name=task.name,
179
180
  changed=changed,
180
181
  srcdir=task.srcdir,
181
182
  rundir=self.rundir,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.13730507343a1
3
+ Version: 0.0.1.13755459426a1
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
@@ -78,6 +78,7 @@ tests/unit/test_expr_eval.py
78
78
  tests/unit/test_expr_parser.py
79
79
  tests/unit/test_fileset.py
80
80
  tests/unit/test_imports.py
81
+ tests/unit/test_markers.py
81
82
  tests/unit/test_parse.py
82
83
  tests/unit/test_pyclass.py
83
84
  tests/unit/test_pytask_smoke.py
@@ -0,0 +1,45 @@
1
+ import asyncio
2
+ import pytest
3
+ from typing import List, Union
4
+ import dataclasses as dc
5
+ import pydantic.dataclasses as pdc
6
+ from pydantic import BaseModel
7
+ from dv_flow.mgr.param import Param, ParamT
8
+ from dv_flow.mgr.task import Task
9
+ from dv_flow.mgr.task_data import TaskDataResult, TaskMarker, TaskMarkerLoc
10
+ from dv_flow.mgr.task_node import task as t_decorator
11
+ from dv_flow.mgr.task_node import task
12
+ from dv_flow.mgr.task_runner import SingleTaskRunner, TaskSetRunner
13
+ from dv_flow.mgr.task_listener_log import TaskListenerLog
14
+
15
+ def test_smoke_1(tmpdir):
16
+
17
+ class Params(BaseModel):
18
+ p1 : str = None
19
+
20
+ called = False
21
+
22
+ @task(Params)
23
+ async def MyTask(runner, input):
24
+ nonlocal called
25
+ called = True
26
+ print("Hello from run")
27
+ return TaskDataResult(
28
+ status=1,
29
+ markers=[
30
+ TaskMarker(msg="testing", severity="info",
31
+ loc=TaskMarkerLoc(
32
+ path="file1",
33
+ line=1,
34
+ pos=1
35
+ ))
36
+ ]
37
+ )
38
+
39
+ task1 = MyTask("task1", srcdir="srcdir", p1="p1")
40
+ runner = TaskSetRunner("rundir")
41
+ runner.add_listener(TaskListenerLog().event)
42
+
43
+ result = asyncio.run(runner.run(task1))
44
+
45
+ assert called
@@ -1,27 +0,0 @@
1
- import dataclasses as dc
2
- from rich.console import Console
3
-
4
- @dc.dataclass
5
- class TaskListenerLog(object):
6
- console : Console = dc.field(default_factory=Console)
7
- level : int = 0
8
- quiet : bool = False
9
-
10
- def event(self, task : 'Task', reason : 'Reason'):
11
- if reason == 'enter':
12
- self.level += 1
13
- if not self.quiet:
14
- self.console.print("[green]>[%d][/green] Task %s" % (self.level, task.name))
15
- elif reason == 'leave':
16
- for m in task.result.markers:
17
- print(" %s" % m)
18
- if self.quiet:
19
- if task.result.changed:
20
- self.console.print("[green]Done:[/green] %s" % (task.name,))
21
- else:
22
- self.console.print("[green]<[%d][/green] Task %s" % (self.level, task.name))
23
- self.level -= 1
24
- else:
25
- self.console.print("[red]-[/red] Task %s" % task.name)
26
- pass
27
-