osbot-utils 1.80.0__tar.gz → 1.81.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 (319) hide show
  1. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/PKG-INFO +2 -2
  2. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/README.md +1 -1
  3. osbot_utils-1.81.0/osbot_utils/helpers/generators/Generator_Context_Manager.py +21 -0
  4. osbot_utils-1.81.0/osbot_utils/helpers/generators/Generator_Manager.py +99 -0
  5. osbot_utils-1.81.0/osbot_utils/helpers/generators/Model__Generator_State.py +10 -0
  6. osbot_utils-1.81.0/osbot_utils/helpers/generators/Model__Generator_Target.py +10 -0
  7. osbot_utils-1.81.0/osbot_utils/utils/__init__.py +0 -0
  8. osbot_utils-1.81.0/osbot_utils/version +1 -0
  9. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/pyproject.toml +1 -1
  10. osbot_utils-1.80.0/osbot_utils/version +0 -1
  11. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/LICENSE +0 -0
  12. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/__init__.py +0 -0
  13. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
  14. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
  15. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
  16. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/base_classes/Type_Safe.py +0 -0
  17. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/base_classes/Type_Safe__List.py +0 -0
  18. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/base_classes/__init__.py +0 -0
  19. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/context_managers/__init__.py +0 -0
  20. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/context_managers/async_invoke.py +0 -0
  21. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/context_managers/capture_duration.py +0 -0
  22. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
  23. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/context_managers/print_duration.py +0 -0
  24. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/__init__.py +0 -0
  25. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/classes/__init__.py +0 -0
  26. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/classes/singleton.py +0 -0
  27. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/lists/__init__.py +0 -0
  28. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
  29. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/lists/group_by.py +0 -0
  30. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/lists/index_by.py +0 -0
  31. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/methods/__init__.py +0 -0
  32. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/methods/cache.py +0 -0
  33. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
  34. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
  35. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
  36. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
  37. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
  38. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/methods/catch.py +0 -0
  39. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/methods/context.py +0 -0
  40. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
  41. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
  42. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
  43. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
  44. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
  45. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
  46. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/fluent/Fluent_List.py +0 -0
  47. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/fluent/__init__.py +0 -0
  48. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/__init__.py +0 -0
  49. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mermaid/Mermaid.py +0 -0
  50. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -0
  51. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -0
  52. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -0
  53. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -0
  54. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -0
  55. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -0
  56. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -0
  57. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -0
  58. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -0
  59. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -0
  60. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -0
  61. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mgraph/MGraph.py +0 -0
  62. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -0
  63. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -0
  64. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -0
  65. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -0
  66. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -0
  67. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -0
  68. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mgraph/MGraphs.py +0 -0
  69. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/graphs/mgraph/__init__.py +0 -0
  70. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/CFormat.py +0 -0
  71. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/CPrint.py +0 -0
  72. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
  73. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
  74. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
  75. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/Local_Cache.py +0 -0
  76. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/Local_Caches.py +0 -0
  77. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/Print_Table.py +0 -0
  78. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/Python_Audit.py +0 -0
  79. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/Random_Guid.py +0 -0
  80. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
  81. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/Random_Seed.py +0 -0
  82. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/Safe_Id.py +0 -0
  83. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
  84. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/Type_Registry.py +0 -0
  85. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
  86. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/__init__.py +0 -0
  87. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/Ast.py +0 -0
  88. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
  89. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
  90. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
  91. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
  92. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
  93. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
  94. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
  95. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/__init__.py +0 -0
  96. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
  97. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
  98. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
  99. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
  100. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
  101. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
  102. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
  103. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
  104. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
  105. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
  106. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
  107. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
  108. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
  109. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
  110. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
  111. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
  112. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
  113. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
  114. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
  115. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
  116. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
  117. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
  118. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
  119. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
  120. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
  121. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
  122. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
  123. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
  124. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
  125. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
  126. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
  127. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
  128. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
  129. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
  130. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
  131. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
  132. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
  133. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
  134. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
  135. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
  136. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
  137. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
  138. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
  139. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
  140. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
  141. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
  142. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
  143. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
  144. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
  145. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
  146. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
  147. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
  148. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
  149. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
  150. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
  151. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
  152. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
  153. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
  154. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
  155. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
  156. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
  157. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
  158. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
  159. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
  160. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
  161. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
  162. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
  163. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
  164. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
  165. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
  166. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
  167. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
  168. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
  169. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
  170. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
  171. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/flows/Flow.py +0 -0
  172. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/flows/Flow__Events.py +0 -0
  173. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/flows/Task.py +0 -0
  174. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/flows/__init__.py +0 -0
  175. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
  176. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
  177. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
  178. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
  179. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
  180. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
  181. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
  182. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
  183. {osbot_utils-1.80.0/osbot_utils/helpers/html → osbot_utils-1.81.0/osbot_utils/helpers/generators}/__init__.py +0 -0
  184. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
  185. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
  186. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
  187. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
  188. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
  189. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
  190. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
  191. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
  192. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
  193. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
  194. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
  195. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
  196. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
  197. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
  198. {osbot_utils-1.80.0/osbot_utils/helpers/pubsub → osbot_utils-1.81.0/osbot_utils/helpers/html}/__init__.py +0 -0
  199. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
  200. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
  201. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
  202. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
  203. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
  204. {osbot_utils-1.80.0/osbot_utils/helpers/pubsub/schemas → osbot_utils-1.81.0/osbot_utils/helpers/pubsub}/__init__.py +0 -0
  205. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
  206. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
  207. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
  208. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
  209. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
  210. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
  211. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
  212. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
  213. {osbot_utils-1.80.0/osbot_utils/helpers/sqlite → osbot_utils-1.81.0/osbot_utils/helpers/pubsub/schemas}/__init__.py +0 -0
  214. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
  215. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
  216. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
  217. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
  218. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
  219. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
  220. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
  221. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
  222. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
  223. {osbot_utils-1.80.0/osbot_utils/helpers/sqlite/cache → osbot_utils-1.81.0/osbot_utils/helpers/sqlite}/__init__.py +0 -0
  224. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
  225. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
  226. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
  227. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
  228. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
  229. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
  230. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
  231. {osbot_utils-1.80.0/osbot_utils/helpers/sqlite/domains → osbot_utils-1.81.0/osbot_utils/helpers/sqlite/cache}/__init__.py +0 -0
  232. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
  233. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
  234. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
  235. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
  236. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
  237. {osbot_utils-1.80.0/osbot_utils/helpers/sqlite/domains/schemas → osbot_utils-1.81.0/osbot_utils/helpers/sqlite/domains}/__init__.py +0 -0
  238. {osbot_utils-1.80.0/osbot_utils/helpers/sqlite/models → osbot_utils-1.81.0/osbot_utils/helpers/sqlite/domains/schemas}/__init__.py +0 -0
  239. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
  240. {osbot_utils-1.80.0/osbot_utils/helpers/sqlite/sample_data → osbot_utils-1.81.0/osbot_utils/helpers/sqlite/models}/__init__.py +0 -0
  241. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
  242. {osbot_utils-1.80.0/osbot_utils/helpers/sqlite/sql_builder → osbot_utils-1.81.0/osbot_utils/helpers/sqlite/sample_data}/__init__.py +0 -0
  243. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
  244. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
  245. {osbot_utils-1.80.0/osbot_utils/helpers/sqlite/tables → osbot_utils-1.81.0/osbot_utils/helpers/sqlite/sql_builder}/__init__.py +0 -0
  246. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
  247. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
  248. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
  249. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
  250. {osbot_utils-1.80.0/osbot_utils/helpers/ssh → osbot_utils-1.81.0/osbot_utils/helpers/sqlite/tables}/__init__.py +0 -0
  251. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
  252. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
  253. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
  254. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
  255. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
  256. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
  257. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
  258. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
  259. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
  260. {osbot_utils-1.80.0/osbot_utils/helpers/trace → osbot_utils-1.81.0/osbot_utils/helpers/ssh}/__init__.py +0 -0
  261. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
  262. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
  263. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -0
  264. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
  265. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
  266. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
  267. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
  268. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
  269. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
  270. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
  271. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
  272. {osbot_utils-1.80.0/osbot_utils/testing → osbot_utils-1.81.0/osbot_utils/helpers/trace}/__init__.py +0 -0
  273. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Catch.py +0 -0
  274. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
  275. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Duration.py +0 -0
  276. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Hook_Method.py +0 -0
  277. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
  278. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Log_To_String.py +0 -0
  279. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Logging.py +0 -0
  280. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Patch_Print.py +0 -0
  281. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Profiler.py +0 -0
  282. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Pytest.py +0 -0
  283. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Stderr.py +0 -0
  284. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Stdout.py +0 -0
  285. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
  286. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Temp_File.py +0 -0
  287. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Temp_Folder.py +0 -0
  288. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
  289. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
  290. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Temp_Zip.py +0 -0
  291. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
  292. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Unit_Test.py +0 -0
  293. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/testing/Unzip_File.py +0 -0
  294. {osbot_utils-1.80.0/osbot_utils/utils → osbot_utils-1.81.0/osbot_utils/testing}/__init__.py +0 -0
  295. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Assert.py +0 -0
  296. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Call_Stack.py +0 -0
  297. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Csv.py +0 -0
  298. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Dev.py +0 -0
  299. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Env.py +0 -0
  300. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Exceptions.py +0 -0
  301. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Files.py +0 -0
  302. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Functions.py +0 -0
  303. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Http.py +0 -0
  304. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Int.py +0 -0
  305. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Json.py +0 -0
  306. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Json_Cache.py +0 -0
  307. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Lists.py +0 -0
  308. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Misc.py +0 -0
  309. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Objects.py +0 -0
  310. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Png.py +0 -0
  311. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Process.py +0 -0
  312. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Python_Logger.py +0 -0
  313. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Regex.py +0 -0
  314. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Status.py +0 -0
  315. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Str.py +0 -0
  316. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Threads.py +0 -0
  317. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Toml.py +0 -0
  318. {osbot_utils-1.80.0 → osbot_utils-1.81.0}/osbot_utils/utils/Version.py +0 -0
  319. {osbot_utils-1.80.0 → osbot_utils-1.81.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.80.0
3
+ Version: 1.81.0
4
4
  Summary: OWASP Security Bot - Utils
5
5
  Home-page: https://github.com/owasp-sbot/OSBot-Utils
6
6
  License: MIT
@@ -23,7 +23,7 @@ Description-Content-Type: text/markdown
23
23
 
24
24
  Powerful Python util methods and classes that simplify common apis and tasks.
25
25
 
26
- ![Current Release](https://img.shields.io/badge/release-v1.80.0-blue)
26
+ ![Current Release](https://img.shields.io/badge/release-v1.81.0-blue)
27
27
  [![codecov](https://codecov.io/gh/owasp-sbot/OSBot-Utils/graph/badge.svg?token=GNVW0COX1N)](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
28
28
 
29
29
 
@@ -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.80.0-blue)
5
+ ![Current Release](https://img.shields.io/badge/release-v1.81.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
 
@@ -0,0 +1,21 @@
1
+ from osbot_utils.helpers.generators.Model__Generator_State import Model__Generator_State
2
+
3
+
4
+ class Generator_Context_Manager:
5
+ def __init__(self, manager, generator_func):
6
+ self.manager = manager
7
+ self.generator_func = generator_func
8
+ self.target_id = None
9
+
10
+ def __enter__(self):
11
+ self.target_id = self.manager.add(self.generator_func) # Add the generator to the manager
12
+ return self.manager.generator(self.target_id).target # Return the generator's reference
13
+
14
+ def __exit__(self, exc_type, exc_val, exc_tb):
15
+ with self.manager.lock:
16
+ generator = self.manager.generator(self.target_id)
17
+ if generator and generator.state == Model__Generator_State.RUNNING:
18
+ generator.state = Model__Generator_State.COMPLETED
19
+
20
+
21
+ #self.manager.cleanup()
@@ -0,0 +1,99 @@
1
+ import threading
2
+ from _thread import RLock # Reentrant lock for thread-safe access
3
+ from types import GeneratorType
4
+ from typing import Dict # Typing imports for type hints
5
+ from typing import Union
6
+ from osbot_utils.base_classes.Type_Safe import Type_Safe # Type_Safe base class for type-safe attributes
7
+ from osbot_utils.helpers.Random_Guid import Random_Guid # Helper for generating unique IDs
8
+ from osbot_utils.helpers.generators.Generator_Context_Manager import Generator_Context_Manager
9
+ from osbot_utils.helpers.generators.Model__Generator_State import Model__Generator_State
10
+ from osbot_utils.helpers.generators.Model__Generator_Target import Model__Generator_Target
11
+
12
+
13
+ class Generator_Manager(Type_Safe): # Class for managing multiple generator targets
14
+ generators: Dict[Random_Guid, Model__Generator_Target] # Dictionary mapping target IDs to generator targets
15
+ lock : RLock = None # Reentrant lock for thread-safe access to shared data
16
+
17
+ def __init__(self, **kwargs): # Constructor method
18
+ super().__init__(**kwargs)
19
+ self.lock = threading.RLock() # return an object of type _thread.RLock
20
+
21
+
22
+ def active(self) -> Dict[Random_Guid, Model__Generator_Target]: # Method to get all active (running) generators
23
+ with self.lock: # Acquire the lock for thread-safe access
24
+ return {k: v for k, v in self.generators.items() if v.state == Model__Generator_State.RUNNING} # Return a dictionary of running generators
25
+
26
+ def add(self, target: GeneratorType) -> Random_Guid: # Method to add a new generator to the manager
27
+ with self.lock: # Acquire the lock for thread-safe access
28
+ existing_target_id = self.target_id(target) # Check if the target already exists
29
+ if existing_target_id: # If the target already exists
30
+ raise ValueError(f"In Generator_Manager.add_generator, " # Raise an error with the ID of the existing target
31
+ f"target already exists with ID: {existing_target_id}")
32
+
33
+ generator = Model__Generator_Target(target=target, state=Model__Generator_State.RUNNING) # Create a new Generator_Target with RUNNING state
34
+ self.generators[generator.target_id] = generator # Add the generator to the dictionary
35
+ return generator.target_id # Return the unique ID of the added generator
36
+
37
+ def capture(self, generator_func: GeneratorType): # Use this method to manage a generator's lifecycle via a context manager.
38
+ return Generator_Context_Manager(self, generator_func)
39
+
40
+ def cleanup(self) -> int: # Method to remove all completed or stopped generators
41
+ with self.lock: # Acquire the lock for thread-safe access
42
+ cleaned_count = 0 # Counter for the number of generators cleaned up
43
+ for target_id in list(self.generators.keys()): # Iterate over the keys of the dictionary
44
+ generator = self.generator(target_id) # Get the generator by its ID
45
+ if generator and generator.state in [Model__Generator_State.STOPPED,
46
+ Model__Generator_State.COMPLETED]: # Check if the generator is stopped or completed
47
+ self.generators.pop(target_id, None) # Remove the generator from the dictionary
48
+ cleaned_count += 1 # Increment the cleaned count
49
+ return cleaned_count # Return the total number of cleaned generators
50
+
51
+ def find_generator(self, target: GeneratorType) -> Model__Generator_Target:
52
+ with self.lock:
53
+ for generator in list(self.generators.values()):
54
+ if generator.target == target:
55
+ return generator
56
+
57
+ def generator(self, target_id: Random_Guid) -> Model__Generator_Target: # Method to get a generator by its ID
58
+ with self.lock: # Acquire the lock for thread-safe access
59
+ return self.generators.get(target_id) # Return the generator or None if it doesn't exist
60
+
61
+ def remove(self, target_id: Random_Guid) -> bool: # Method to remove a generator if it is stopped or completed
62
+ with self.lock: # Acquire the lock for thread-safe access
63
+ generator = self.generator(target_id) # Get the generator by its ID
64
+ if not generator: # If the generator doesn't exist
65
+ return False # Silently return False
66
+ if generator.state in [Model__Generator_State.STOPPED, Model__Generator_State.COMPLETED]: # Check if the generator is in a removable state
67
+ del self.generators[target_id] # Remove the generator from the dictionary
68
+ return True # Return True to indicate successful removal
69
+ return False # Return False if the generator was not removable
70
+
71
+ def should_stop(self, target_id: Random_Guid) -> bool: # Method to check if a generator should stop
72
+ with self.lock: # Acquire the lock for thread-safe access
73
+ generator = self.generator(target_id) # Get the generator by its ID
74
+ if not generator: # If the generator doesn't exist
75
+ raise ValueError(f"In Generator_Manager.should_stop, " # Raise an error indicating missing generator
76
+ f"Generator with ID {target_id} does not exist.")
77
+ return generator.state != Model__Generator_State.RUNNING # Return True if the generator is not running
78
+
79
+ def stop(self, target_id: Random_Guid) -> bool: # Method to stop a running generator
80
+ with self.lock: # Acquire the lock for thread-safe access
81
+ generator = self.generator(target_id) # Get the generator by its ID
82
+ if generator and generator.state == Model__Generator_State.RUNNING: # If the generator is running
83
+ generator.state = Model__Generator_State.STOPPING # Set its state to STOPPING
84
+ return True # Return True to indicate the generator is stopping
85
+ return False # Return False if the generator could not be stopped
86
+
87
+ def stop_all(self) -> int: # Method to stop all running generators
88
+ with self.lock: # Acquire the lock for thread-safe access
89
+ stopped_count = 0 # Counter for the number of generators stopped
90
+ for target_id in list(self.generators.keys()): # Iterate over the keys of the dictionary
91
+ if self.stop(target_id): # Attempt to stop each generator
92
+ stopped_count += 1 # Increment the stopped count if successful
93
+ return stopped_count # Return the total number of stopped generators
94
+
95
+ def target_id(self, target: GeneratorType) -> Union[Random_Guid, None]: # Method to get the ID of a specific generator
96
+ with self.lock: # Acquire the lock for thread-safe access
97
+ for generator in list(self.generators.values()): # Iterate over the generator targets
98
+ if generator.target == target: # Check if the target matches
99
+ return generator.target_id # Return the matching target's ID
@@ -0,0 +1,10 @@
1
+ from enum import Enum
2
+
3
+ class Model__Generator_State(Enum): # Enum representing possible states of a generator
4
+ CREATED : str = "created" # Initial state when the generator is created
5
+ RUNNING : str = "running" # State when the generator is actively running
6
+ STOPPING : str = "stopping" # State when the generator is in the process of stopping
7
+ STOPPED : str = "stopped" # State when the generator is fully stopped
8
+ COMPLETED : str = "completed" # State when the generator has completed its execution
9
+ ERROR : str = "error" # State when the generator encounters an error
10
+
@@ -0,0 +1,10 @@
1
+ from types import GeneratorType
2
+ from osbot_utils.base_classes.Type_Safe import Type_Safe
3
+ from osbot_utils.helpers.Random_Guid import Random_Guid
4
+ from osbot_utils.helpers.generators.Model__Generator_State import Model__Generator_State
5
+
6
+
7
+ class Model__Generator_Target(Type_Safe): # Class representing a generator target and its metadata
8
+ target_id : Random_Guid # Unique ID for the generator target
9
+ target : GeneratorType = None # The generator instance being managed
10
+ state : Model__Generator_State = Model__Generator_State.CREATED # Current state of the generator (default is CREATED)
File without changes
@@ -0,0 +1 @@
1
+ v1.81.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "osbot_utils"
3
- version = "v1.80.0"
3
+ version = "v1.81.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.80.0
File without changes