osbot-utils 1.54.0__tar.gz → 1.56.0__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 (310) hide show
  1. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/PKG-INFO +2 -2
  2. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/README.md +1 -1
  3. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/flows/Flow.py +40 -24
  4. osbot_utils-1.56.0/osbot_utils/helpers/flows/Flow__Events.py +45 -0
  5. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/flows/Task.py +27 -7
  6. {osbot_utils-1.54.0/osbot_utils/helpers/flows → osbot_utils-1.56.0/osbot_utils/helpers/flows/models}/Flow__Config.py +1 -0
  7. osbot_utils-1.56.0/osbot_utils/helpers/flows/models/Flow__Event.py +6 -0
  8. osbot_utils-1.56.0/osbot_utils/helpers/flows/models/Flow__Event_Type.py +8 -0
  9. osbot_utils-1.56.0/osbot_utils/utils/__init__.py +0 -0
  10. osbot_utils-1.56.0/osbot_utils/version +1 -0
  11. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/pyproject.toml +1 -1
  12. osbot_utils-1.54.0/osbot_utils/version +0 -1
  13. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/LICENSE +0 -0
  14. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/__init__.py +0 -0
  15. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
  16. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
  17. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
  18. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/base_classes/Type_Safe.py +0 -0
  19. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/base_classes/Type_Safe__List.py +0 -0
  20. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/base_classes/__init__.py +0 -0
  21. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/context_managers/__init__.py +0 -0
  22. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/context_managers/async_invoke.py +0 -0
  23. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/context_managers/capture_duration.py +0 -0
  24. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
  25. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/context_managers/print_duration.py +0 -0
  26. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/__init__.py +0 -0
  27. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/classes/__init__.py +0 -0
  28. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/classes/singleton.py +0 -0
  29. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/lists/__init__.py +0 -0
  30. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
  31. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/lists/group_by.py +0 -0
  32. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/lists/index_by.py +0 -0
  33. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/methods/__init__.py +0 -0
  34. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/methods/cache.py +0 -0
  35. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
  36. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
  37. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
  38. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
  39. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
  40. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/methods/catch.py +0 -0
  41. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/methods/context.py +0 -0
  42. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
  43. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
  44. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
  45. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
  46. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
  47. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
  48. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/fluent/Fluent_List.py +0 -0
  49. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/fluent/__init__.py +0 -0
  50. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/__init__.py +0 -0
  51. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mermaid/Mermaid.py +0 -0
  52. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -0
  53. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -0
  54. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -0
  55. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -0
  56. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -0
  57. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -0
  58. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -0
  59. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -0
  60. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -0
  61. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -0
  62. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -0
  63. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mgraph/MGraph.py +0 -0
  64. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -0
  65. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -0
  66. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -0
  67. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -0
  68. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -0
  69. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -0
  70. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mgraph/MGraphs.py +0 -0
  71. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/graphs/mgraph/__init__.py +0 -0
  72. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/CFormat.py +0 -0
  73. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/CPrint.py +0 -0
  74. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
  75. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
  76. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
  77. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/Local_Cache.py +0 -0
  78. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/Local_Caches.py +0 -0
  79. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/Print_Table.py +0 -0
  80. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/Python_Audit.py +0 -0
  81. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/Random_Guid.py +0 -0
  82. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/Random_Seed.py +0 -0
  83. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/Type_Registry.py +0 -0
  84. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
  85. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/__init__.py +0 -0
  86. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/Ast.py +0 -0
  87. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
  88. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
  89. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
  90. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
  91. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
  92. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
  93. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
  94. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/__init__.py +0 -0
  95. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
  96. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
  97. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
  98. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
  99. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
  100. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
  101. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
  102. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
  103. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
  104. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
  105. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
  106. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
  107. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
  108. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
  109. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
  110. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
  111. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
  112. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
  113. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
  114. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
  115. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
  116. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
  117. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
  118. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
  119. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
  120. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
  121. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
  122. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
  123. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
  124. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
  125. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
  126. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
  127. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
  128. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
  129. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
  130. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
  131. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
  132. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
  133. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
  134. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
  135. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
  136. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
  137. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
  138. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
  139. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
  140. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
  141. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
  142. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
  143. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
  144. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
  145. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
  146. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
  147. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
  148. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
  149. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
  150. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
  151. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
  152. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
  153. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
  154. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
  155. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
  156. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
  157. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
  158. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
  159. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
  160. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
  161. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
  162. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
  163. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
  164. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
  165. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
  166. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
  167. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
  168. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
  169. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
  170. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/flows/__init__.py +0 -0
  171. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
  172. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
  173. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
  174. {osbot_utils-1.54.0/osbot_utils/helpers/html → osbot_utils-1.56.0/osbot_utils/helpers/flows/models}/__init__.py +0 -0
  175. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
  176. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
  177. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
  178. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
  179. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
  180. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
  181. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
  182. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
  183. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
  184. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
  185. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
  186. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
  187. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
  188. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
  189. {osbot_utils-1.54.0/osbot_utils/helpers/pubsub → osbot_utils-1.56.0/osbot_utils/helpers/html}/__init__.py +0 -0
  190. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
  191. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
  192. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
  193. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
  194. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
  195. {osbot_utils-1.54.0/osbot_utils/helpers/pubsub/schemas → osbot_utils-1.56.0/osbot_utils/helpers/pubsub}/__init__.py +0 -0
  196. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
  197. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
  198. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
  199. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
  200. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
  201. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
  202. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
  203. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
  204. {osbot_utils-1.54.0/osbot_utils/helpers/sqlite → osbot_utils-1.56.0/osbot_utils/helpers/pubsub/schemas}/__init__.py +0 -0
  205. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
  206. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
  207. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
  208. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
  209. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
  210. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
  211. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
  212. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
  213. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
  214. {osbot_utils-1.54.0/osbot_utils/helpers/sqlite/cache → osbot_utils-1.56.0/osbot_utils/helpers/sqlite}/__init__.py +0 -0
  215. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
  216. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
  217. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
  218. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
  219. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
  220. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
  221. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
  222. {osbot_utils-1.54.0/osbot_utils/helpers/sqlite/domains → osbot_utils-1.56.0/osbot_utils/helpers/sqlite/cache}/__init__.py +0 -0
  223. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
  224. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
  225. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
  226. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
  227. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
  228. {osbot_utils-1.54.0/osbot_utils/helpers/sqlite/domains/schemas → osbot_utils-1.56.0/osbot_utils/helpers/sqlite/domains}/__init__.py +0 -0
  229. {osbot_utils-1.54.0/osbot_utils/helpers/sqlite/models → osbot_utils-1.56.0/osbot_utils/helpers/sqlite/domains/schemas}/__init__.py +0 -0
  230. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
  231. {osbot_utils-1.54.0/osbot_utils/helpers/sqlite/sample_data → osbot_utils-1.56.0/osbot_utils/helpers/sqlite/models}/__init__.py +0 -0
  232. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
  233. {osbot_utils-1.54.0/osbot_utils/helpers/sqlite/sql_builder → osbot_utils-1.56.0/osbot_utils/helpers/sqlite/sample_data}/__init__.py +0 -0
  234. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
  235. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
  236. {osbot_utils-1.54.0/osbot_utils/helpers/sqlite/tables → osbot_utils-1.56.0/osbot_utils/helpers/sqlite/sql_builder}/__init__.py +0 -0
  237. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
  238. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
  239. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
  240. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
  241. {osbot_utils-1.54.0/osbot_utils/helpers/ssh → osbot_utils-1.56.0/osbot_utils/helpers/sqlite/tables}/__init__.py +0 -0
  242. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
  243. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
  244. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
  245. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
  246. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
  247. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
  248. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
  249. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
  250. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
  251. {osbot_utils-1.54.0/osbot_utils/helpers/trace → osbot_utils-1.56.0/osbot_utils/helpers/ssh}/__init__.py +0 -0
  252. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
  253. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
  254. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -0
  255. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
  256. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
  257. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
  258. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
  259. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
  260. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
  261. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
  262. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
  263. {osbot_utils-1.54.0/osbot_utils/testing → osbot_utils-1.56.0/osbot_utils/helpers/trace}/__init__.py +0 -0
  264. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Catch.py +0 -0
  265. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
  266. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Duration.py +0 -0
  267. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Hook_Method.py +0 -0
  268. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
  269. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Log_To_String.py +0 -0
  270. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Logging.py +0 -0
  271. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Patch_Print.py +0 -0
  272. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Profiler.py +0 -0
  273. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Pytest.py +0 -0
  274. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Stderr.py +0 -0
  275. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Stdout.py +0 -0
  276. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
  277. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Temp_File.py +0 -0
  278. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Temp_Folder.py +0 -0
  279. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
  280. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
  281. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Temp_Zip.py +0 -0
  282. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
  283. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Unit_Test.py +0 -0
  284. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/testing/Unzip_File.py +0 -0
  285. {osbot_utils-1.54.0/osbot_utils/utils → osbot_utils-1.56.0/osbot_utils/testing}/__init__.py +0 -0
  286. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Assert.py +0 -0
  287. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Call_Stack.py +0 -0
  288. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Csv.py +0 -0
  289. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Dev.py +0 -0
  290. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Env.py +0 -0
  291. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Exceptions.py +0 -0
  292. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Files.py +0 -0
  293. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Functions.py +0 -0
  294. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Http.py +0 -0
  295. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Int.py +0 -0
  296. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Json.py +0 -0
  297. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Json_Cache.py +0 -0
  298. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Lists.py +0 -0
  299. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Misc.py +0 -0
  300. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Objects.py +0 -0
  301. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Png.py +0 -0
  302. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Process.py +0 -0
  303. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Python_Logger.py +0 -0
  304. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Regex.py +0 -0
  305. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Status.py +0 -0
  306. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Str.py +0 -0
  307. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Threads.py +0 -0
  308. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Toml.py +0 -0
  309. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Version.py +0 -0
  310. {osbot_utils-1.54.0 → osbot_utils-1.56.0}/osbot_utils/utils/Zip.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: osbot_utils
3
- Version: 1.54.0
3
+ Version: 1.56.0
4
4
  Summary: OWASP Security Bot - Utils
5
5
  Home-page: https://github.com/owasp-sbot/OSBot-Utils
6
6
  License: MIT
@@ -22,7 +22,7 @@ Description-Content-Type: text/markdown
22
22
 
23
23
  Powerful Python util methods and classes that simplify common apis and tasks.
24
24
 
25
- ![Current Release](https://img.shields.io/badge/release-v1.54.0-blue)
25
+ ![Current Release](https://img.shields.io/badge/release-v1.56.0-blue)
26
26
  [![codecov](https://codecov.io/gh/owasp-sbot/OSBot-Utils/graph/badge.svg?token=GNVW0COX1N)](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
27
27
 
28
28
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Powerful Python util methods and classes that simplify common apis and tasks.
4
4
 
5
- ![Current Release](https://img.shields.io/badge/release-v1.54.0-blue)
5
+ ![Current Release](https://img.shields.io/badge/release-v1.56.0-blue)
6
6
  [![codecov](https://codecov.io/gh/owasp-sbot/OSBot-Utils/graph/badge.svg?token=GNVW0COX1N)](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
7
7
 
8
8
 
@@ -2,14 +2,15 @@ import asyncio
2
2
  import logging
3
3
  import typing
4
4
 
5
- from osbot_utils.base_classes.Type_Safe import Type_Safe
6
- from osbot_utils.helpers.CFormat import CFormat, f_dark_grey, f_magenta, f_bold
7
- from osbot_utils.helpers.flows.Flow__Config import Flow__Config
8
- from osbot_utils.testing.Stdout import Stdout
9
- from osbot_utils.utils.Misc import random_id, lower
10
- from osbot_utils.utils.Python_Logger import Python_Logger
11
- from osbot_utils.utils.Str import ansis_to_texts
12
- from osbot_utils.utils.Threads import invoke_async, invoke_in_new_event_loop
5
+ from osbot_utils.base_classes.Type_Safe import Type_Safe
6
+ from osbot_utils.helpers.CFormat import CFormat, f_dark_grey, f_magenta, f_bold
7
+ from osbot_utils.helpers.flows.models.Flow__Config import Flow__Config
8
+ from osbot_utils.helpers.flows.Flow__Events import flow_events
9
+ from osbot_utils.testing.Stdout import Stdout
10
+ from osbot_utils.utils.Misc import random_id, lower
11
+ from osbot_utils.utils.Python_Logger import Python_Logger
12
+ from osbot_utils.utils.Str import ansis_to_texts
13
+ from osbot_utils.utils.Threads import invoke_in_new_event_loop
13
14
 
14
15
  FLOW__RANDOM_ID__PREFIX = 'flow_id__'
15
16
  FLOW__RANDOM_NAME__PREFIX = 'flow_name__'
@@ -42,28 +43,25 @@ class Flow(Type_Safe):
42
43
  if self.flow_config.log_to_console:
43
44
  _.add_console_logger()
44
45
 
45
-
46
- def debug(self, message):
47
- self.logger.debug(message)
48
-
49
46
  def create_flow(self):
50
47
  self.set_flow_name()
51
- self.debug(f"Created flow run '{self.f__flow_id()}' for flow '{self.f__flow_name()}'")
48
+ self.log_debug(f"Created flow run '{self.f__flow_id()}' for flow '{self.f__flow_name()}'")
52
49
 
53
50
  def execute(self):
54
51
  return self.execute_flow()
55
52
 
56
53
  def execute_flow(self):
54
+ flow_events.on__flow__start(self)
57
55
  if self.flow_config.log_to_memory:
58
56
  self.logger.add_memory_logger() # todo: move to method that does pre-execute tasks
59
57
 
60
- self.debug(f"Executing flow run '{self.f__flow_id()}''")
58
+ self.log_debug(f"Executing flow run '{self.f__flow_id()}'")
61
59
  try:
62
60
  with Stdout() as stdout:
63
61
  self.invoke_flow_target()
64
62
  except Exception as error:
65
63
  self.flow_error = error
66
- self.logger.error(self.cformat.red(f"Error executing flow: {error}"))
64
+ self.log_error(self.cformat.red(f"Error executing flow: {error}"))
67
65
 
68
66
  self.log_captured_stdout (stdout)
69
67
  self.print_flow_return_value ()
@@ -72,6 +70,7 @@ class Flow(Type_Safe):
72
70
  if self.flow_config.log_to_memory:
73
71
  self.captured_exec_logs = self.log_messages_with_colors()
74
72
  self.logger.remove_memory_logger() # todo: move to method that does post-execute tasks
73
+ flow_events.on__flow__stop(self)
75
74
  return self
76
75
 
77
76
  def f__flow_id(self):
@@ -83,9 +82,6 @@ class Flow(Type_Safe):
83
82
  def captured_logs(self):
84
83
  return ansis_to_texts(self.captured_exec_logs)
85
84
 
86
- def info(self, message):
87
- self.logger.info(message)
88
-
89
85
 
90
86
  async def invoke_flow_target__thread(self, flow): # this is a REALLY important method which is used to pin the flow object to the call stack
91
87
  return await flow.flow_target(*flow.flow_args, **flow.flow_kwargs) # which is then used by the Task.find_flow method to find it
@@ -100,13 +96,36 @@ class Flow(Type_Safe):
100
96
  def log_captured_stdout(self, stdout):
101
97
  for line in stdout.value().splitlines():
102
98
  if line:
103
- self.info(f_magenta(line))
99
+ self.log_info(f_magenta(line))
104
100
  if self.flow_config.print_logs:
105
101
  print()
106
102
  print()
107
103
  self.print_log_messages()
108
104
 
109
105
 
106
+ def log_debug(self, message, task_run_id=None):
107
+ self.logger_add_message(log_level=logging.DEBUG, message=message, task_run_id=task_run_id)
108
+
109
+ def log_error(self, message, task_run_id=None):
110
+ self.logger_add_message(log_level=logging.ERROR, message=message, task_run_id=task_run_id)
111
+
112
+ def log_info(self, message, task_run_id=None):
113
+ self.logger_add_message(log_level=logging.INFO, message=message, task_run_id=task_run_id)
114
+
115
+ def logger_add_message(self, log_level, message, task_run_id=None):
116
+ if self.flow_config.logging_enabled:
117
+ kwargs = dict(log_level = log_level ,
118
+ message = message ,
119
+ flow_run_id = self.flow_id,
120
+ task_run_id = task_run_id )
121
+ flow_events.on__flow_run__message(self, **kwargs)
122
+ if log_level == logging.DEBUG:
123
+ self.logger.debug(message)
124
+ elif log_level == logging.ERROR:
125
+ self.logger.error(message)
126
+ else:
127
+ self.logger.info(message)
128
+
110
129
  def log_messages(self):
111
130
  return ansis_to_texts(self.log_messages_with_colors())
112
131
 
@@ -128,12 +147,12 @@ class Flow(Type_Safe):
128
147
 
129
148
  def print_flow_finished_message(self):
130
149
  if self.flow_config.print_finished_message:
131
- self.debug(f"Finished flow run '{self.f__flow_id()}''")
150
+ self.log_debug(f"Finished flow run '{self.f__flow_id()}'")
132
151
 
133
152
  def print_flow_return_value(self):
134
153
  if self.flow_config.print_none_return_value is False and self.flow_return_value is None:
135
154
  return
136
- self.debug(f"{f_dark_grey('Flow return value')}: {f_bold(self.flow_return_value)}")
155
+ self.log_debug(f"{f_dark_grey('Flow return value')}: {f_bold(self.flow_return_value)}")
137
156
 
138
157
 
139
158
 
@@ -170,6 +189,3 @@ class Flow(Type_Safe):
170
189
  with self as _:
171
190
  if not _.flow_id:
172
191
  _.flow_id = self.random_flow_id()
173
- #if not _.flow_name:
174
- # _.flow_name = self.flow_target.__name__
175
- #self.random_flow_name()
@@ -0,0 +1,45 @@
1
+ from osbot_utils.utils.Str import ansis_to_texts, ansi_to_text
2
+
3
+ from osbot_utils.utils.Dev import pprint
4
+
5
+ from osbot_utils.base_classes.Type_Safe import Type_Safe
6
+ from osbot_utils.helpers.flows.models.Flow__Event import Flow__Event
7
+ from osbot_utils.helpers.flows.models.Flow__Event_Type import Flow__Event_Type
8
+
9
+
10
+ class Flow_Events(Type_Safe):
11
+ event_listeners : list
12
+
13
+ def on__flow__start(self, flow):
14
+ flow_event = Flow__Event(event_type=Flow__Event_Type.FLOW_START, event_source=flow)
15
+ self.raise_event(flow_event)
16
+
17
+ def on__flow__stop(self, flow): # todo: see of flow_ended or flow_completed are better names
18
+ flow_event = Flow__Event(event_type=Flow__Event_Type.FLOW_STOP , event_source=flow)
19
+ self.raise_event(flow_event)
20
+
21
+ def on__flow_run__message(self, flow, log_level, flow_run_id, task_run_id, message):
22
+ event_data = dict(flow_run_id = flow_run_id ,
23
+ log_level = log_level ,
24
+ message = message ,
25
+ message_text = ansi_to_text(message) ,
26
+ task_run_id = task_run_id )
27
+ flow_event = Flow__Event(event_type=Flow__Event_Type.FLOW_MESSAGE, event_source=flow, event_data=event_data)
28
+ self.raise_event(flow_event)
29
+
30
+ def on__task__start(self, task):
31
+ flow_event = Flow__Event(event_type=Flow__Event_Type.TASK_START, event_source=task)
32
+ self.raise_event(flow_event)
33
+
34
+ def on__task__stop(self, task): # todo: see of flow_ended or flow_completed are better names
35
+ flow_event = Flow__Event(event_type=Flow__Event_Type.TASK_STOP , event_source=task)
36
+ self.raise_event(flow_event)
37
+
38
+ def raise_event(self, flow_event):
39
+ for listener in self.event_listeners:
40
+ try:
41
+ listener(flow_event)
42
+ except Exception as error:
43
+ print(f"Error in listener: {error}")
44
+
45
+ flow_events = Flow_Events()
@@ -2,18 +2,19 @@ import asyncio
2
2
  import inspect
3
3
  import typing
4
4
 
5
+ from osbot_utils.utils.Misc import random_id, lower
5
6
  from osbot_utils.helpers.Dependency_Manager import Dependency_Manager
6
- from osbot_utils.utils.Dev import pprint
7
-
7
+ from osbot_utils.helpers.flows.Flow__Events import flow_events
8
8
  from osbot_utils.testing.Stdout import Stdout
9
9
  from osbot_utils.helpers.CFormat import CFormat, f_dark_grey, f_red, f_blue, f_bold
10
10
  from osbot_utils.base_classes.Type_Safe import Type_Safe
11
11
  from osbot_utils.helpers.flows.Flow import Flow
12
12
 
13
+ TASK__RANDOM_ID__PREFIX = 'task_id__'
13
14
 
14
15
  class Task(Type_Safe):
15
16
  data : dict # dict available to the task to add and collect data
16
- task_id : str # todo add a random Id value to this
17
+ task_id : str
17
18
  task_name : str # make this the function mame
18
19
  cformat : CFormat
19
20
  resolved_args : tuple
@@ -26,6 +27,15 @@ class Task(Type_Safe):
26
27
  task_error : Exception = None
27
28
  raise_on_error : bool = True
28
29
 
30
+ def log_info(self, message):
31
+ self.task_flow.log_info(message, self.task_id)
32
+
33
+ def log_debug(self, message):
34
+ self.task_flow.log_debug(message, self.task_id)
35
+
36
+ def log_error(self, message):
37
+ self.task_flow.log_error(message, self.task_id)
38
+
29
39
  def execute__sync(self):
30
40
  self.execute__before()
31
41
  self.execute__task_target__sync()
@@ -44,8 +54,13 @@ class Task(Type_Safe):
44
54
  if not self.task_name and self.task_target:
45
55
  self.task_name = self.task_target.__name__
46
56
 
57
+ if not self.task_id:
58
+ self.task_id = self.random_task_id()
59
+
60
+ flow_events.on__task__start(self)
61
+
47
62
  self.task_flow.executed_tasks.append(self)
48
- self.task_flow.logger.debug(f"Executing task '{f_blue(self.task_name)}'")
63
+ self.log_debug(f"Executing task '{f_blue(self.task_name)}'")
49
64
  dependency_manager = Dependency_Manager()
50
65
  dependency_manager.add_dependency('this_task', self )
51
66
  dependency_manager.add_dependency('this_flow', self.task_flow )
@@ -53,6 +68,7 @@ class Task(Type_Safe):
53
68
  dependency_manager.add_dependency('flow_data', self.task_flow.data)
54
69
  self.resolved_args, self.resolved_kwargs = dependency_manager.resolve_dependencies(self.task_target, *self.task_args, **self.task_kwargs)
55
70
 
71
+
56
72
  def execute__task_target__sync(self):
57
73
  try:
58
74
  with Stdout() as stdout:
@@ -73,11 +89,13 @@ class Task(Type_Safe):
73
89
  self.print_task_return_value()
74
90
 
75
91
  if self.task_error:
76
- self.task_flow.logger.error(f_red(f"Error executing '{self.task_name}' task: {self.task_error}"))
92
+ self.log_error(f_red(f"Error executing '{self.task_name}' task: {self.task_error}"))
77
93
  if self.raise_on_error:
78
94
  raise Exception(f"'{self.task_name}' failed and task raise_on_error was set to True. Stopping flow execution")
79
95
 
80
96
  self.print_task_finished_message()
97
+
98
+ flow_events.on__task__stop(self)
81
99
  return self.task_return_value
82
100
 
83
101
 
@@ -92,12 +110,14 @@ class Task(Type_Safe):
92
110
 
93
111
  def print_task_finished_message(self):
94
112
  if self.task_flow.flow_config.print_finished_message:
95
- self.task_flow.logger.debug(f"Finished task '{f_blue(self.task_name)}'")
113
+ self.log_debug(f"Finished task '{f_blue(self.task_name)}'")
96
114
 
97
115
  def print_task_return_value(self):
98
116
  flow_config = self.task_flow.flow_config
99
117
  if flow_config.print_none_return_value is False and self.task_return_value is None:
100
118
  return
101
- self.task_flow.logger.debug(f"{f_dark_grey('Task return value')}: {f_bold(self.task_return_value)}")
119
+ self.log_debug(f"{f_dark_grey('Task return value')}: {f_bold(self.task_return_value)}")
102
120
 
103
121
 
122
+ def random_task_id(self):
123
+ return lower(random_id(prefix=TASK__RANDOM_ID__PREFIX))
@@ -5,6 +5,7 @@ class Flow__Config(Type_Safe):
5
5
  add_task_to_self : bool = True
6
6
  log_to_console : bool = False
7
7
  log_to_memory : bool = True
8
+ logging_enabled : bool = True
8
9
  print_logs : bool = False
9
10
  print_none_return_value: bool = False
10
11
  print_finished_message : bool = False
@@ -0,0 +1,6 @@
1
+ from osbot_utils.base_classes.Type_Safe import Type_Safe
2
+
3
+ class Flow__Event(Type_Safe):
4
+ event_type : str
5
+ event_source: object
6
+ event_data : dict
@@ -0,0 +1,8 @@
1
+ from osbot_utils.base_classes.Type_Safe import Type_Safe
2
+
3
+ class Flow__Event_Type(Type_Safe):
4
+ FLOW_MESSAGE: str = 'flow_message'
5
+ FLOW_START : str = 'flow_start'
6
+ FLOW_STOP : str = 'flow_stop'
7
+ TASK_START : str = 'task_start'
8
+ TASK_STOP : str = 'task_stop'
File without changes
@@ -0,0 +1 @@
1
+ v1.56.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "osbot_utils"
3
- version = "v1.54.0"
3
+ version = "v1.56.0"
4
4
  description = "OWASP Security Bot - Utils"
5
5
  authors = ["Dinis Cruz <dinis.cruz@owasp.org>"]
6
6
  license = "MIT"
@@ -1 +0,0 @@
1
- v1.54.0
File without changes