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.
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/PKG-INFO +2 -2
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/README.md +1 -1
- osbot_utils-1.44.0/osbot_utils/context_managers/async_invoke.py +27 -0
- osbot_utils-1.44.0/osbot_utils/helpers/pubsub/Event__Queue.py +127 -0
- osbot_utils-1.44.0/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +4 -0
- osbot_utils-1.44.0/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +14 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +3 -4
- osbot_utils-1.44.0/osbot_utils/utils/Threads.py +27 -0
- osbot_utils-1.44.0/osbot_utils/version +1 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/pyproject.toml +1 -1
- osbot_utils-1.43.0/osbot_utils/helpers/pubsub/Event__Queue.py +0 -95
- osbot_utils-1.43.0/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -7
- osbot_utils-1.43.0/osbot_utils/version +0 -1
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/LICENSE +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/base_classes/Type_Safe.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/base_classes/Type_Safe__List.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/context_managers/capture_duration.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/Mermaid.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraphs.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/CFormat.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Local_Cache.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Random_Guid.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/flows/Flow.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/flows/Task.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/flows/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/html/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/helpers/trace/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Catch.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Duration.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Hook_Method.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/testing/__init__.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Env.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Files.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Http.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Json.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Misc.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Objects.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Python_Logger.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Regex.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Str.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/utils/Zip.py +0 -0
- {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.
|
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
|
-

|
26
26
|
[](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
|
-

|
6
6
|
[](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,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
|
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,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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/context_managers/disable_root_loggers.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/cache_on_function.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/capture_exception.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/function_type_check.py
RENAMED
File without changes
|
File without changes
|
{osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/decorators/methods/remove_return_value.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.43.0 → osbot_utils-1.44.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|