osbot-utils 1.43.0__tar.gz → 1.44.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 (301) hide show
  1. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/PKG-INFO +2 -2
  2. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/README.md +1 -1
  3. osbot_utils-1.44.0/osbot_utils/context_managers/async_invoke.py +27 -0
  4. osbot_utils-1.44.0/osbot_utils/helpers/pubsub/Event__Queue.py +127 -0
  5. osbot_utils-1.44.0/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +4 -0
  6. osbot_utils-1.44.0/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +14 -0
  7. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +3 -4
  8. osbot_utils-1.44.0/osbot_utils/utils/Threads.py +27 -0
  9. osbot_utils-1.44.0/osbot_utils/version +1 -0
  10. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/pyproject.toml +1 -1
  11. osbot_utils-1.43.0/osbot_utils/helpers/pubsub/Event__Queue.py +0 -95
  12. osbot_utils-1.43.0/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -7
  13. osbot_utils-1.43.0/osbot_utils/version +0 -1
  14. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/LICENSE +0 -0
  15. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/__init__.py +0 -0
  16. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
  17. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
  18. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
  19. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/base_classes/Type_Safe.py +0 -0
  20. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/base_classes/Type_Safe__List.py +0 -0
  21. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/base_classes/__init__.py +0 -0
  22. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/context_managers/__init__.py +0 -0
  23. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/context_managers/capture_duration.py +0 -0
  24. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
  25. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/__init__.py +0 -0
  26. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/classes/__init__.py +0 -0
  27. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/classes/singleton.py +0 -0
  28. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/lists/__init__.py +0 -0
  29. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
  30. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/lists/group_by.py +0 -0
  31. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/lists/index_by.py +0 -0
  32. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/__init__.py +0 -0
  33. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/cache.py +0 -0
  34. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
  35. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
  36. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
  37. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
  38. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
  39. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/catch.py +0 -0
  40. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/context.py +0 -0
  41. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
  42. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
  43. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
  44. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
  45. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
  46. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
  47. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/fluent/Fluent_List.py +0 -0
  48. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/fluent/__init__.py +0 -0
  49. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/__init__.py +0 -0
  50. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/Mermaid.py +0 -0
  51. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -0
  52. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -0
  53. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -0
  54. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -0
  55. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -0
  56. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -0
  57. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -0
  58. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -0
  59. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -0
  60. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -0
  61. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -0
  62. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph.py +0 -0
  63. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -0
  64. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -0
  65. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -0
  66. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -0
  67. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -0
  68. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -0
  69. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraphs.py +0 -0
  70. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/__init__.py +0 -0
  71. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/CFormat.py +0 -0
  72. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/CPrint.py +0 -0
  73. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
  74. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
  75. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Local_Cache.py +0 -0
  76. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Local_Caches.py +0 -0
  77. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Print_Table.py +0 -0
  78. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Python_Audit.py +0 -0
  79. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Random_Guid.py +0 -0
  80. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Random_Seed.py +0 -0
  81. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Type_Registry.py +0 -0
  82. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
  83. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/__init__.py +0 -0
  84. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Ast.py +0 -0
  85. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
  86. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
  87. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
  88. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
  89. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
  90. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
  91. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
  92. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/__init__.py +0 -0
  93. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
  94. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
  95. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
  96. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
  97. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
  98. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
  99. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
  100. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
  101. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
  102. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
  103. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
  104. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
  105. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
  106. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
  107. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
  108. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
  109. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
  110. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
  111. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
  112. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
  113. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
  114. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
  115. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
  116. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
  117. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
  118. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
  119. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
  120. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
  121. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
  122. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
  123. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
  124. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
  125. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
  126. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
  127. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
  128. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
  129. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
  130. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
  131. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
  132. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
  133. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
  134. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
  135. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
  136. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
  137. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
  138. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
  139. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
  140. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
  141. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
  142. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
  143. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
  144. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
  145. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
  146. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
  147. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
  148. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
  149. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
  150. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
  151. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
  152. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
  153. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
  154. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
  155. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
  156. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
  157. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
  158. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
  159. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
  160. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
  161. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
  162. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
  163. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
  164. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
  165. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
  166. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
  167. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
  168. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/flows/Flow.py +0 -0
  169. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/flows/Task.py +0 -0
  170. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/flows/__init__.py +0 -0
  171. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
  172. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
  173. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
  174. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
  175. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
  176. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
  177. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
  178. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
  179. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
  180. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
  181. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
  182. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
  183. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
  184. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
  185. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/__init__.py +0 -0
  186. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
  187. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
  188. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
  189. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
  190. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
  191. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
  192. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
  193. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
  194. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
  195. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
  196. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
  197. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
  198. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
  199. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
  200. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
  201. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
  202. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
  203. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
  204. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
  205. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
  206. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
  207. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
  208. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
  209. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
  210. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
  211. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
  212. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
  213. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
  214. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
  215. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
  216. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
  217. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
  218. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
  219. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
  220. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
  221. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
  222. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
  223. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
  224. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
  225. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
  226. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
  227. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
  228. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
  229. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
  230. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
  231. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
  232. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
  233. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
  234. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
  235. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
  236. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
  237. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
  238. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
  239. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
  240. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
  241. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
  242. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
  243. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
  244. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
  245. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
  246. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -0
  247. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
  248. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
  249. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
  250. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
  251. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
  252. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
  253. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
  254. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
  255. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/__init__.py +0 -0
  256. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Catch.py +0 -0
  257. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Duration.py +0 -0
  258. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Hook_Method.py +0 -0
  259. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
  260. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Log_To_String.py +0 -0
  261. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Logging.py +0 -0
  262. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Patch_Print.py +0 -0
  263. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Profiler.py +0 -0
  264. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Pytest.py +0 -0
  265. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Stderr.py +0 -0
  266. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Stdout.py +0 -0
  267. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
  268. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Temp_File.py +0 -0
  269. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Temp_Folder.py +0 -0
  270. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
  271. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
  272. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Temp_Zip.py +0 -0
  273. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
  274. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Unit_Test.py +0 -0
  275. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Unzip_File.py +0 -0
  276. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/__init__.py +0 -0
  277. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Assert.py +0 -0
  278. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Call_Stack.py +0 -0
  279. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Csv.py +0 -0
  280. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Dev.py +0 -0
  281. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Env.py +0 -0
  282. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Exceptions.py +0 -0
  283. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Files.py +0 -0
  284. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Functions.py +0 -0
  285. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Http.py +0 -0
  286. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Int.py +0 -0
  287. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Json.py +0 -0
  288. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Json_Cache.py +0 -0
  289. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Lists.py +0 -0
  290. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Misc.py +0 -0
  291. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Objects.py +0 -0
  292. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Png.py +0 -0
  293. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Process.py +0 -0
  294. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Python_Logger.py +0 -0
  295. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Regex.py +0 -0
  296. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Status.py +0 -0
  297. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Str.py +0 -0
  298. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Toml.py +0 -0
  299. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Version.py +0 -0
  300. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Zip.py +0 -0
  301. {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: osbot_utils
3
- Version: 1.43.0
3
+ Version: 1.44.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.43.0-blue)
25
+ ![Current Release](https://img.shields.io/badge/release-v1.44.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.43.0-blue)
5
+ ![Current Release](https://img.shields.io/badge/release-v1.44.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,27 @@
1
+ import logging
2
+ from contextlib import contextmanager
3
+ import asyncio
4
+
5
+ @contextmanager
6
+ def async_invoke():
7
+ logger = logging.getLogger('asyncio')
8
+ level_original = logger.level
9
+ logger.level = logging.INFO # this will suppress the asyncio debug messages which where showing in tests
10
+ try:
11
+ original_loop = asyncio.get_event_loop()
12
+ except RuntimeError:
13
+ original_loop = None
14
+
15
+ loop = asyncio.new_event_loop()
16
+ asyncio.set_event_loop(loop)
17
+
18
+ try:
19
+ yield loop.run_until_complete
20
+ finally:
21
+ loop.close()
22
+ if original_loop is not None:
23
+ asyncio.set_event_loop(original_loop)
24
+ else:
25
+ asyncio.set_event_loop(None)
26
+
27
+ logger.level = level_original # restore the original log level
@@ -0,0 +1,127 @@
1
+ import time
2
+ from queue import Queue, Empty
3
+ from threading import Thread
4
+ from osbot_utils.base_classes.Type_Safe import Type_Safe
5
+ from osbot_utils.helpers.pubsub.schemas.Schema__Event import Schema__Event
6
+ from osbot_utils.helpers.pubsub.schemas.Schema__Event__Message import Schema__Event__Message
7
+ from osbot_utils.utils.Misc import random_text, timestamp_utc_now, random_guid
8
+
9
+ TIMEOUT__THREAD_JOIN = 1.0 # todo: see if this value is a good one to use here
10
+ TIMEOUT__QUEUE_GET = 1.0
11
+ TIMEOUT__WAIT_FOR_QUEUE_COMPLETED = 0.05 # todo: see if this value is too aggressive (or if will be better to use a value like 0.1 or 0.5)
12
+
13
+
14
+ class Event__Queue(Type_Safe):
15
+ events : list
16
+ event_class : type
17
+ events_added : int
18
+ events_completed : int
19
+ events_failed : int
20
+ log_events : bool = False
21
+ queue : Queue
22
+ queue_name : str = random_text('event_queue')
23
+ queue_get_timeout : float = TIMEOUT__QUEUE_GET
24
+ running : bool
25
+ thread : Thread = None
26
+
27
+
28
+ def __init__(self, **kwargs):
29
+ self.event_class = Schema__Event
30
+ super().__init__(**kwargs)
31
+
32
+ def __enter__(self):
33
+ self.start()
34
+ return self
35
+
36
+ def __exit__(self, exc_type, exc_val, exc_tb):
37
+ self.stop()
38
+ return False
39
+
40
+ def new_event_obj(self, **kwargs):
41
+ return self.event_class(**kwargs)
42
+
43
+ def handle_event(self, event):
44
+ if self.log_events:
45
+ self.events.append(event)
46
+ return True
47
+
48
+ def send_event(self, event: Schema__Event):
49
+ if isinstance(event, Schema__Event):
50
+ if not event.timestamp:
51
+ event.timestamp = timestamp_utc_now()
52
+ if not event.event_id:
53
+ event.event_id = random_guid()
54
+ self.events_added += 1
55
+ self.queue.put(event)
56
+ return True
57
+ return False
58
+
59
+ def send_data(self, event_data, **kwargs):
60
+ if type(event_data) is not dict:
61
+ event_data = {'data': event_data}
62
+ new_event = Schema__Event__Message(event_data=event_data, **kwargs)
63
+ if self.send_event(new_event):
64
+ return new_event
65
+
66
+ def send_message(self, message, **kwargs):
67
+ new_event = Schema__Event__Message(event_message=str(message), **kwargs)
68
+ if self.send_event(new_event):
69
+ return new_event
70
+
71
+ def start(self):
72
+ self.running = True
73
+ self.thread = Thread(target=self.run_thread, daemon=True)
74
+ self.thread.start()
75
+ return self
76
+
77
+ def stop(self):
78
+ self.running = False # will make the event loop stop at the next self.queue_get_timeout
79
+ return self
80
+
81
+ def queue_size(self):
82
+ return self.queue.qsize()
83
+
84
+ def run_thread(self):
85
+ while self.running:
86
+ try:
87
+ event = self.queue.get(timeout=self.queue_get_timeout)
88
+ if isinstance(event, self.event_class):
89
+ self.handle_event(event)
90
+ self.events_completed += 1
91
+ except Empty:
92
+ continue
93
+ except Exception as e: # todo: add way to handle this (which are errors in the handle_event), may call an on_event_handler_exceptions method
94
+ self.events_failed += 1
95
+ continue
96
+
97
+ def wait_micro_seconds(self, value=10):
98
+ time.sleep(0.000001 * value)
99
+
100
+
101
+ def wait_for_thread_ends(self):
102
+ self.thread.join()
103
+ return self
104
+
105
+ # todo see if there are valid use cases for wait_for_queue_empty , or the wait_for_queue_completed is the one that is always used
106
+ def wait_for_queue_empty(self, thread_join_timeout=TIMEOUT__THREAD_JOIN): # this will start a new thread to wait for the main queue to be empty
107
+ def wait_until_queue_empty():
108
+ while self.running:
109
+ if self.queue.empty():
110
+ break
111
+ time.sleep(0.01)
112
+
113
+ wait_thread = Thread(target=wait_until_queue_empty)
114
+ wait_thread.start()
115
+ wait_thread.join(timeout=thread_join_timeout)
116
+ return self.queue.empty()
117
+
118
+ def wait_for_queue_completed(self, thread_join_timeout=TIMEOUT__THREAD_JOIN): # this will start a new thread to wait for the main queue to be empty
119
+ def wait_until_queue_completed():
120
+ while self.running:
121
+ if self.queue.empty() and self.events_added == self.events_completed :
122
+ break
123
+ time.sleep(TIMEOUT__WAIT_FOR_QUEUE_COMPLETED)
124
+ wait_thread = Thread(target=wait_until_queue_completed)
125
+ wait_thread.start()
126
+ wait_thread.join(timeout=thread_join_timeout)
127
+ return self.queue.empty()
@@ -0,0 +1,4 @@
1
+ from osbot_utils.helpers.pubsub.schemas.Schema__Event import Schema__Event
2
+
3
+ class Schema__Event__Disconnect(Schema__Event):
4
+ event_type : str = 'disconnect'
@@ -0,0 +1,14 @@
1
+ import types
2
+ from osbot_utils.helpers.pubsub.schemas.Schema__Event import Schema__Event
3
+
4
+ class Schema__Event__Execute_Method(Schema__Event):
5
+ event_type : str = 'execute-method'
6
+ execution_result : object = None
7
+ method_target : types.MethodType
8
+ method_args : list
9
+ method_kwargs : dict
10
+
11
+
12
+ def execute(self):
13
+ self.execution_result = self.method_target(*self.method_args, **self.method_kwargs)
14
+ return self.execution_result
@@ -1,5 +1,4 @@
1
- from osbot_utils.utils.Dev import pprint
2
-
1
+ from osbot_utils.utils.Dev import pprint
3
2
  from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
4
3
 
5
4
  PRINT_MAX_STRING_LENGTH = 100
@@ -7,14 +6,12 @@ PRINT_PADDING__DURATION = 100
7
6
  PRINT_PADDING_PARENT_INFO = 60
8
7
 
9
8
  class Trace_Call__Config(Kwargs_To_Self):
10
- title : str
11
9
  capture_locals : bool = False
12
10
  capture_duration : bool
13
11
  capture_extra_data : bool
14
12
  capture_frame : bool = True
15
13
  capture_frame_stats : bool
16
14
  deep_copy_locals : bool
17
- trace_capture_lines : bool
18
15
  ignore_start_with : list
19
16
  print_padding_duration : int = PRINT_PADDING__DURATION
20
17
  print_padding_parent_info : int = PRINT_PADDING_PARENT_INFO
@@ -27,6 +24,7 @@ class Trace_Call__Config(Kwargs_To_Self):
27
24
  show_caller : bool
28
25
  show_method_class : bool = True
29
26
  show_source_code_path : bool
27
+ title : str
30
28
  trace_capture_all : bool
31
29
  trace_capture_source_code : bool
32
30
  trace_capture_start_with : list
@@ -34,6 +32,7 @@ class Trace_Call__Config(Kwargs_To_Self):
34
32
  trace_enabled : bool = True
35
33
  trace_ignore_start_with : list
36
34
  trace_ignore_contains : list
35
+ trace_capture_lines : bool
37
36
  trace_show_internals : bool
38
37
  trace_up_to_depth : int
39
38
  with_duration_bigger_than : float
@@ -0,0 +1,27 @@
1
+ import asyncio
2
+ import logging
3
+ import typing
4
+
5
+ def invoke_async_function(target: typing.Coroutine):
6
+ """Run an asynchronous coroutine in a new event loop."""
7
+ logger = logging.getLogger('asyncio')
8
+ level_original = logger.level
9
+ logger.level = logging.INFO # this will suppress the asyncio debug messages which where showing in tests
10
+ try:
11
+ original_loop = asyncio.get_event_loop()
12
+ except RuntimeError:
13
+ original_loop = None # No event loop was set
14
+
15
+ loop = asyncio.new_event_loop()
16
+ asyncio.set_event_loop(loop)
17
+ try:
18
+ return loop.run_until_complete(target)
19
+ finally:
20
+ loop.close()
21
+ # Restore the original event loop
22
+ if original_loop is not None:
23
+ asyncio.set_event_loop(original_loop)
24
+ else:
25
+ asyncio.set_event_loop(None)
26
+
27
+ logger.level = level_original # restore the original log level
@@ -0,0 +1 @@
1
+ v1.44.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "osbot_utils"
3
- version = "v1.43.0"
3
+ version = "v1.44.0"
4
4
  description = "OWASP Security Bot - Utils"
5
5
  authors = ["Dinis Cruz <dinis.cruz@owasp.org>"]
6
6
  license = "MIT"
@@ -1,95 +0,0 @@
1
- import time
2
- from enum import Enum
3
- from queue import Queue, Empty
4
- from threading import Thread
5
- from typing import Any
6
-
7
- from osbot_utils.helpers.pubsub.schemas.Schema__Event import Schema__Event
8
- from osbot_utils.helpers.pubsub.schemas.Schema__Event__Message import Schema__Event__Message
9
- from osbot_utils.utils import Misc
10
- from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
11
- from osbot_utils.utils.Misc import random_text, wait_for, timestamp_utc_now, random_guid
12
-
13
- QUEUE_WAIT_TIMEOUT = 1.0 # todo: see if this value is a good one to use here
14
-
15
- class Event__Queue(Kwargs_To_Self):
16
- events : list
17
- event_class : type
18
- log_events : bool = False
19
- queue : Queue
20
- queue_name : str = random_text('event_queue')
21
- queue_timeout: float = QUEUE_WAIT_TIMEOUT
22
- running : bool
23
- thread : Thread = None
24
-
25
-
26
- def __init__(self, **kwargs):
27
- self.event_class = Schema__Event
28
- super().__init__(**kwargs)
29
-
30
- def __enter__(self):
31
- self.start()
32
- return self
33
-
34
- def __exit__(self, exc_type, exc_val, exc_tb):
35
- self.stop()
36
- return False
37
-
38
- def new_event_obj(self, **kwargs):
39
- return self.event_class(**kwargs)
40
-
41
- def handle_event(self, event):
42
- if self.log_events:
43
- self.events.append(event)
44
- return True
45
-
46
- def send_event(self, event: Schema__Event):
47
- if isinstance(event, Schema__Event):
48
- if not event.timestamp:
49
- event.timestamp = timestamp_utc_now()
50
- if not event.event_id:
51
- event.event_id = random_guid()
52
- self.queue.put(event)
53
- return True
54
- return False
55
-
56
- def send_data(self, event_data, **kwargs):
57
- if type(event_data) is not dict:
58
- event_data = {'data': event_data}
59
- new_event = Schema__Event__Message(event_data=event_data, **kwargs)
60
- if self.send_event(new_event):
61
- return new_event
62
-
63
- def send_message(self, message, **kwargs):
64
- new_event = Schema__Event__Message(event_message=str(message), **kwargs)
65
- if self.send_event(new_event):
66
- return new_event
67
-
68
- def start(self):
69
- self.running = True
70
- self.thread = Thread(target=self.run_thread, daemon=True)
71
- self.thread.start()
72
- return self
73
-
74
- def stop(self):
75
- self.running = False
76
- return self
77
-
78
- def run_thread(self):
79
- while self.running:
80
- try:
81
- event = self.queue.get(timeout=self.queue_timeout)
82
- if isinstance(event, self.event_class):
83
- self.handle_event(event)
84
- except Empty:
85
- continue
86
- except Exception as e: # todo: add way to handle this (which are errors in the handle_event), may call an on_event_handler_exceptions method
87
- continue
88
-
89
- def wait_micro_seconds(self, value=10):
90
- time.sleep(0.000001 * value)
91
-
92
-
93
- def wait_for_thread_ends(self):
94
- self.thread.join()
95
- return self
@@ -1,7 +0,0 @@
1
- from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
2
- from osbot_utils.helpers.pubsub.schemas.Schema__Event import Schema__Event
3
- from osbot_utils.utils.Misc import random_guid
4
-
5
-
6
- class Schema__Event__Disconnect(Schema__Event):
7
- event_type : str = 'disconnect'
@@ -1 +0,0 @@
1
- v1.43.0
File without changes