osbot-utils 1.53.0__tar.gz → 1.55.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.53.0 → osbot_utils-1.55.0}/PKG-INFO +2 -2
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/README.md +1 -1
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/flows/Flow.py +28 -24
- osbot_utils-1.55.0/osbot_utils/helpers/flows/Flow__Events.py +32 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/flows/Task.py +22 -7
- {osbot_utils-1.53.0/osbot_utils/helpers/flows → osbot_utils-1.55.0/osbot_utils/helpers/flows/models}/Flow__Config.py +1 -0
- osbot_utils-1.55.0/osbot_utils/helpers/flows/models/Flow__Event.py +6 -0
- osbot_utils-1.55.0/osbot_utils/helpers/flows/models/Flow__Event_Type.py +8 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Objects.py +28 -1
- osbot_utils-1.55.0/osbot_utils/utils/__init__.py +0 -0
- osbot_utils-1.55.0/osbot_utils/version +1 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/pyproject.toml +1 -1
- osbot_utils-1.53.0/osbot_utils/version +0 -1
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/LICENSE +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/base_classes/Type_Safe.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/base_classes/Type_Safe__List.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/context_managers/async_invoke.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/context_managers/capture_duration.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/context_managers/print_duration.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mermaid/Mermaid.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mgraph/MGraph.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mgraph/MGraphs.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/graphs/mgraph/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/CFormat.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/Local_Cache.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/Random_Guid.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/flows/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/helpers/html → osbot_utils-1.55.0/osbot_utils/helpers/flows/models}/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/helpers/pubsub → osbot_utils-1.55.0/osbot_utils/helpers/html}/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/helpers/pubsub/schemas → osbot_utils-1.55.0/osbot_utils/helpers/pubsub}/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/helpers/sqlite → osbot_utils-1.55.0/osbot_utils/helpers/pubsub/schemas}/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/helpers/sqlite/cache → osbot_utils-1.55.0/osbot_utils/helpers/sqlite}/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/helpers/sqlite/domains → osbot_utils-1.55.0/osbot_utils/helpers/sqlite/cache}/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/helpers/sqlite/domains/schemas → osbot_utils-1.55.0/osbot_utils/helpers/sqlite/domains}/__init__.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/helpers/sqlite/models → osbot_utils-1.55.0/osbot_utils/helpers/sqlite/domains/schemas}/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/helpers/sqlite/sample_data → osbot_utils-1.55.0/osbot_utils/helpers/sqlite/models}/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/helpers/sqlite/sql_builder → osbot_utils-1.55.0/osbot_utils/helpers/sqlite/sample_data}/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/helpers/sqlite/tables → osbot_utils-1.55.0/osbot_utils/helpers/sqlite/sql_builder}/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/helpers/ssh → osbot_utils-1.55.0/osbot_utils/helpers/sqlite/tables}/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/helpers/trace → osbot_utils-1.55.0/osbot_utils/helpers/ssh}/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/testing → osbot_utils-1.55.0/osbot_utils/helpers/trace}/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Catch.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Duration.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Hook_Method.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-1.53.0/osbot_utils/utils → osbot_utils-1.55.0/osbot_utils/testing}/__init__.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Env.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Files.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Http.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Json.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Misc.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Python_Logger.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Regex.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Str.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Threads.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-1.53.0 → osbot_utils-1.55.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.
|
3
|
+
Version: 1.55.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
|
|
@@ -2,14 +2,15 @@ import asyncio
|
|
2
2
|
import logging
|
3
3
|
import typing
|
4
4
|
|
5
|
-
from osbot_utils.base_classes.Type_Safe
|
6
|
-
from osbot_utils.helpers.CFormat
|
7
|
-
from osbot_utils.helpers.flows.Flow__Config
|
8
|
-
from osbot_utils.
|
9
|
-
from osbot_utils.
|
10
|
-
from osbot_utils.utils.
|
11
|
-
from osbot_utils.utils.
|
12
|
-
from osbot_utils.utils.
|
5
|
+
from osbot_utils.base_classes.Type_Safe import Type_Safe
|
6
|
+
from osbot_utils.helpers.CFormat import CFormat, f_dark_grey, f_magenta, f_bold
|
7
|
+
from osbot_utils.helpers.flows.models.Flow__Config import Flow__Config
|
8
|
+
from osbot_utils.helpers.flows.Flow__Events import flow_events
|
9
|
+
from osbot_utils.testing.Stdout import Stdout
|
10
|
+
from osbot_utils.utils.Misc import random_id, lower
|
11
|
+
from osbot_utils.utils.Python_Logger import Python_Logger
|
12
|
+
from osbot_utils.utils.Str import ansis_to_texts
|
13
|
+
from osbot_utils.utils.Threads import invoke_in_new_event_loop
|
13
14
|
|
14
15
|
FLOW__RANDOM_ID__PREFIX = 'flow_id__'
|
15
16
|
FLOW__RANDOM_NAME__PREFIX = 'flow_name__'
|
@@ -42,28 +43,25 @@ class Flow(Type_Safe):
|
|
42
43
|
if self.flow_config.log_to_console:
|
43
44
|
_.add_console_logger()
|
44
45
|
|
45
|
-
|
46
|
-
def debug(self, message):
|
47
|
-
self.logger.debug(message)
|
48
|
-
|
49
46
|
def create_flow(self):
|
50
47
|
self.set_flow_name()
|
51
|
-
self.
|
48
|
+
self.log_debug(f"Created flow run '{self.f__flow_id()}' for flow '{self.f__flow_name()}'")
|
52
49
|
|
53
50
|
def execute(self):
|
54
51
|
return self.execute_flow()
|
55
52
|
|
56
53
|
def execute_flow(self):
|
54
|
+
flow_events.on__flow__start(self)
|
57
55
|
if self.flow_config.log_to_memory:
|
58
56
|
self.logger.add_memory_logger() # todo: move to method that does pre-execute tasks
|
59
57
|
|
60
|
-
self.
|
58
|
+
self.log_debug(f"Executing flow run '{self.f__flow_id()}''")
|
61
59
|
try:
|
62
60
|
with Stdout() as stdout:
|
63
61
|
self.invoke_flow_target()
|
64
62
|
except Exception as error:
|
65
63
|
self.flow_error = error
|
66
|
-
self.
|
64
|
+
self.log_error(self.cformat.red(f"Error executing flow: {error}"))
|
67
65
|
|
68
66
|
self.log_captured_stdout (stdout)
|
69
67
|
self.print_flow_return_value ()
|
@@ -72,6 +70,7 @@ class Flow(Type_Safe):
|
|
72
70
|
if self.flow_config.log_to_memory:
|
73
71
|
self.captured_exec_logs = self.log_messages_with_colors()
|
74
72
|
self.logger.remove_memory_logger() # todo: move to method that does post-execute tasks
|
73
|
+
flow_events.on__flow__stop(self)
|
75
74
|
return self
|
76
75
|
|
77
76
|
def f__flow_id(self):
|
@@ -83,9 +82,6 @@ class Flow(Type_Safe):
|
|
83
82
|
def captured_logs(self):
|
84
83
|
return ansis_to_texts(self.captured_exec_logs)
|
85
84
|
|
86
|
-
def info(self, message):
|
87
|
-
self.logger.info(message)
|
88
|
-
|
89
85
|
|
90
86
|
async def invoke_flow_target__thread(self, flow): # this is a REALLY important method which is used to pin the flow object to the call stack
|
91
87
|
return await flow.flow_target(*flow.flow_args, **flow.flow_kwargs) # which is then used by the Task.find_flow method to find it
|
@@ -100,12 +96,23 @@ class Flow(Type_Safe):
|
|
100
96
|
def log_captured_stdout(self, stdout):
|
101
97
|
for line in stdout.value().splitlines():
|
102
98
|
if line:
|
103
|
-
self.
|
99
|
+
self.log_info(f_magenta(line))
|
104
100
|
if self.flow_config.print_logs:
|
105
101
|
print()
|
106
102
|
print()
|
107
103
|
self.print_log_messages()
|
108
104
|
|
105
|
+
def log_debug(self, message):
|
106
|
+
if self.flow_config.logging_enabled:
|
107
|
+
self.logger.debug(message)
|
108
|
+
|
109
|
+
def log_error(self, message):
|
110
|
+
if self.flow_config.logging_enabled:
|
111
|
+
self.logger.error(message)
|
112
|
+
|
113
|
+
def log_info(self, message):
|
114
|
+
if self.flow_config.logging_enabled:
|
115
|
+
self.logger.info(message)
|
109
116
|
|
110
117
|
def log_messages(self):
|
111
118
|
return ansis_to_texts(self.log_messages_with_colors())
|
@@ -128,12 +135,12 @@ class Flow(Type_Safe):
|
|
128
135
|
|
129
136
|
def print_flow_finished_message(self):
|
130
137
|
if self.flow_config.print_finished_message:
|
131
|
-
self.
|
138
|
+
self.log_debug(f"Finished flow run '{self.f__flow_id()}''")
|
132
139
|
|
133
140
|
def print_flow_return_value(self):
|
134
141
|
if self.flow_config.print_none_return_value is False and self.flow_return_value is None:
|
135
142
|
return
|
136
|
-
self.
|
143
|
+
self.log_debug(f"{f_dark_grey('Flow return value')}: {f_bold(self.flow_return_value)}")
|
137
144
|
|
138
145
|
|
139
146
|
|
@@ -170,6 +177,3 @@ class Flow(Type_Safe):
|
|
170
177
|
with self as _:
|
171
178
|
if not _.flow_id:
|
172
179
|
_.flow_id = self.random_flow_id()
|
173
|
-
#if not _.flow_name:
|
174
|
-
# _.flow_name = self.flow_target.__name__
|
175
|
-
#self.random_flow_name()
|
@@ -0,0 +1,32 @@
|
|
1
|
+
from osbot_utils.base_classes.Type_Safe import Type_Safe
|
2
|
+
from osbot_utils.helpers.flows.models.Flow__Event import Flow__Event
|
3
|
+
from osbot_utils.helpers.flows.models.Flow__Event_Type import Flow__Event_Type
|
4
|
+
|
5
|
+
|
6
|
+
class Flow_Events(Type_Safe):
|
7
|
+
event_listeners : list
|
8
|
+
|
9
|
+
def on__flow__start(self, flow):
|
10
|
+
flow_event = Flow__Event(event_type=Flow__Event_Type.FLOW_START, event_source=flow)
|
11
|
+
self.raise_event(flow_event)
|
12
|
+
|
13
|
+
def on__flow__stop(self, flow): # todo: see of flow_ended or flow_completed are better names
|
14
|
+
flow_event = Flow__Event(event_type=Flow__Event_Type.FLOW_STOP , event_source=flow)
|
15
|
+
self.raise_event(flow_event)
|
16
|
+
|
17
|
+
def on__task__start(self, task):
|
18
|
+
flow_event = Flow__Event(event_type=Flow__Event_Type.TASK_START, event_source=task)
|
19
|
+
self.raise_event(flow_event)
|
20
|
+
|
21
|
+
def on__task__stop(self, task): # todo: see of flow_ended or flow_completed are better names
|
22
|
+
flow_event = Flow__Event(event_type=Flow__Event_Type.TASK_STOP , event_source=task)
|
23
|
+
self.raise_event(flow_event)
|
24
|
+
|
25
|
+
def raise_event(self, flow_event):
|
26
|
+
for listener in self.event_listeners:
|
27
|
+
try:
|
28
|
+
listener(flow_event)
|
29
|
+
except Exception as error:
|
30
|
+
print(f"Error in listener: {error}")
|
31
|
+
|
32
|
+
flow_events = Flow_Events()
|
@@ -2,18 +2,19 @@ import asyncio
|
|
2
2
|
import inspect
|
3
3
|
import typing
|
4
4
|
|
5
|
+
from osbot_utils.utils.Misc import random_id, lower
|
5
6
|
from osbot_utils.helpers.Dependency_Manager import Dependency_Manager
|
6
|
-
from osbot_utils.
|
7
|
-
|
7
|
+
from osbot_utils.helpers.flows.Flow__Events import flow_events
|
8
8
|
from osbot_utils.testing.Stdout import Stdout
|
9
9
|
from osbot_utils.helpers.CFormat import CFormat, f_dark_grey, f_red, f_blue, f_bold
|
10
10
|
from osbot_utils.base_classes.Type_Safe import Type_Safe
|
11
11
|
from osbot_utils.helpers.flows.Flow import Flow
|
12
12
|
|
13
|
+
TASK__RANDOM_ID__PREFIX = 'task_id__'
|
13
14
|
|
14
15
|
class Task(Type_Safe):
|
15
16
|
data : dict # dict available to the task to add and collect data
|
16
|
-
task_id : str
|
17
|
+
task_id : str
|
17
18
|
task_name : str # make this the function mame
|
18
19
|
cformat : CFormat
|
19
20
|
resolved_args : tuple
|
@@ -26,6 +27,12 @@ class Task(Type_Safe):
|
|
26
27
|
task_error : Exception = None
|
27
28
|
raise_on_error : bool = True
|
28
29
|
|
30
|
+
def log_debug(self, message):
|
31
|
+
self.task_flow.log_debug(message)
|
32
|
+
|
33
|
+
def log_error(self, message):
|
34
|
+
self.task_flow.log_error(message)
|
35
|
+
|
29
36
|
def execute__sync(self):
|
30
37
|
self.execute__before()
|
31
38
|
self.execute__task_target__sync()
|
@@ -44,14 +51,18 @@ class Task(Type_Safe):
|
|
44
51
|
if not self.task_name and self.task_target:
|
45
52
|
self.task_name = self.task_target.__name__
|
46
53
|
|
54
|
+
if not self.task_id:
|
55
|
+
self.task_id = self.random_task_id()
|
56
|
+
|
47
57
|
self.task_flow.executed_tasks.append(self)
|
48
|
-
self.
|
58
|
+
self.log_debug(f"Executing task '{f_blue(self.task_name)}'")
|
49
59
|
dependency_manager = Dependency_Manager()
|
50
60
|
dependency_manager.add_dependency('this_task', self )
|
51
61
|
dependency_manager.add_dependency('this_flow', self.task_flow )
|
52
62
|
dependency_manager.add_dependency('task_data', self.data )
|
53
63
|
dependency_manager.add_dependency('flow_data', self.task_flow.data)
|
54
64
|
self.resolved_args, self.resolved_kwargs = dependency_manager.resolve_dependencies(self.task_target, *self.task_args, **self.task_kwargs)
|
65
|
+
flow_events.on__task__start(self)
|
55
66
|
|
56
67
|
def execute__task_target__sync(self):
|
57
68
|
try:
|
@@ -73,11 +84,13 @@ class Task(Type_Safe):
|
|
73
84
|
self.print_task_return_value()
|
74
85
|
|
75
86
|
if self.task_error:
|
76
|
-
self.
|
87
|
+
self.log_error(f_red(f"Error executing '{self.task_name}' task: {self.task_error}"))
|
77
88
|
if self.raise_on_error:
|
78
89
|
raise Exception(f"'{self.task_name}' failed and task raise_on_error was set to True. Stopping flow execution")
|
79
90
|
|
80
91
|
self.print_task_finished_message()
|
92
|
+
|
93
|
+
flow_events.on__task__stop(self)
|
81
94
|
return self.task_return_value
|
82
95
|
|
83
96
|
|
@@ -92,12 +105,14 @@ class Task(Type_Safe):
|
|
92
105
|
|
93
106
|
def print_task_finished_message(self):
|
94
107
|
if self.task_flow.flow_config.print_finished_message:
|
95
|
-
self.
|
108
|
+
self.log_debug(f"Finished task '{f_blue(self.task_name)}'")
|
96
109
|
|
97
110
|
def print_task_return_value(self):
|
98
111
|
flow_config = self.task_flow.flow_config
|
99
112
|
if flow_config.print_none_return_value is False and self.task_return_value is None:
|
100
113
|
return
|
101
|
-
self.
|
114
|
+
self.log_debug(f"{f_dark_grey('Task return value')}: {f_bold(self.task_return_value)}")
|
102
115
|
|
103
116
|
|
117
|
+
def random_task_id(self):
|
118
|
+
return lower(random_id(prefix=TASK__RANDOM_ID__PREFIX))
|
@@ -4,8 +4,9 @@ import pickle
|
|
4
4
|
import sys
|
5
5
|
import types
|
6
6
|
import typing
|
7
|
-
from typing import Union
|
8
7
|
|
8
|
+
from typing import Union
|
9
|
+
from types import SimpleNamespace
|
9
10
|
from osbot_utils.utils.Misc import list_set
|
10
11
|
from osbot_utils.utils.Str import str_unicode_escape, str_max_width
|
11
12
|
|
@@ -120,6 +121,32 @@ def dict_remove(data, target):
|
|
120
121
|
del data[target]
|
121
122
|
return data
|
122
123
|
|
124
|
+
|
125
|
+
def dict_to_obj(target, class_name="_"):
|
126
|
+
DynamicClass = type(class_name, (SimpleNamespace,), {})
|
127
|
+
if isinstance(target, dict):
|
128
|
+
new_dict = {}
|
129
|
+
for key, value in target.items():
|
130
|
+
new_dict[key] = dict_to_obj(value, class_name=class_name) # Recursively convert elements in the dict
|
131
|
+
return DynamicClass(**new_dict)
|
132
|
+
elif isinstance(target, list): # Recursively convert elements in the list
|
133
|
+
return [dict_to_obj(item, class_name=class_name) for item in target]
|
134
|
+
elif isinstance(target, tuple): # Recursively convert elements in the tuple
|
135
|
+
return tuple(dict_to_obj(item, class_name=class_name) for item in target)
|
136
|
+
|
137
|
+
return target
|
138
|
+
|
139
|
+
def obj_to_dict(target): # Recursively converts an object (SimpleNamespace) back into a dictionary."""
|
140
|
+
if isinstance(target, SimpleNamespace): # Convert SimpleNamespace attributes to a dictionary
|
141
|
+
return {key: obj_to_dict(value) for key, value in target.__dict__.items()}
|
142
|
+
elif isinstance(target, list): # Handle lists: convert each item in the list
|
143
|
+
return [obj_to_dict(item) for item in target]
|
144
|
+
elif isinstance(target, tuple): # Handle tuples: convert each item and return as a tuple
|
145
|
+
return tuple(obj_to_dict(item) for item in target)
|
146
|
+
elif isinstance(target, set): # Handle sets: convert each item and return as a set
|
147
|
+
return {obj_to_dict(item) for item in target}
|
148
|
+
return target # Return non-object types as is
|
149
|
+
|
123
150
|
def enum_from_value(enum_type, value):
|
124
151
|
try:
|
125
152
|
return enum_type[value] # Attempt to convert the value to an Enum member by name
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
v1.55.0
|
@@ -1 +0,0 @@
|
|
1
|
-
v1.53.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
|
File without changes
|
{osbot_utils-1.53.0 → osbot_utils-1.55.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
|
File without changes
|
{osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/cache_on_function.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.53.0 → osbot_utils-1.55.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.53.0 → osbot_utils-1.55.0}/osbot_utils/decorators/methods/function_type_check.py
RENAMED
File without changes
|
File without changes
|
{osbot_utils-1.53.0 → osbot_utils-1.55.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.53.0 → osbot_utils-1.55.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.53.0 → osbot_utils-1.55.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
|
File without changes
|
{osbot_utils-1.53.0 → osbot_utils-1.55.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|