osbot-utils 1.59.0__tar.gz → 1.61.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.59.0 → osbot_utils-1.61.0}/PKG-INFO +3 -2
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/README.md +1 -1
- osbot_utils-1.61.0/osbot_utils/helpers/Timestamp_Now.py +13 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/flows/Flow.py +50 -34
- osbot_utils-1.61.0/osbot_utils/helpers/flows/Flow__Events.py +52 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/flows/Task.py +10 -2
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/flows/decorators/flow.py +1 -3
- osbot_utils-1.59.0/osbot_utils/helpers/flows/models/Flow__Config.py → osbot_utils-1.61.0/osbot_utils/helpers/flows/models/Flow_Run__Config.py +1 -1
- osbot_utils-1.61.0/osbot_utils/helpers/flows/models/Flow_Run__Event.py +15 -0
- osbot_utils-1.61.0/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +14 -0
- osbot_utils-1.59.0/osbot_utils/helpers/flows/models/Flow__Event_Type.py → osbot_utils-1.61.0/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +3 -1
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Json.py +2 -2
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Misc.py +3 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Objects.py +6 -0
- osbot_utils-1.61.0/osbot_utils/version +1 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/pyproject.toml +1 -1
- osbot_utils-1.59.0/osbot_utils/helpers/flows/Flow__Events.py +0 -53
- osbot_utils-1.59.0/osbot_utils/helpers/flows/models/Flow__Event.py +0 -6
- osbot_utils-1.59.0/osbot_utils/version +0 -1
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/LICENSE +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/base_classes/Type_Safe.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/base_classes/Type_Safe__List.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/context_managers/async_invoke.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/context_managers/capture_duration.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/context_managers/print_duration.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mermaid/Mermaid.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mgraph/MGraph.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mgraph/MGraphs.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/graphs/mgraph/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/CFormat.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/Local_Cache.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/Random_Guid.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/flows/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/html/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/helpers/trace/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Catch.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Duration.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Hook_Method.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/testing/__init__.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Env.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Files.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Http.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Python_Logger.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Regex.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Str.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Threads.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.0}/osbot_utils/utils/Zip.py +0 -0
- {osbot_utils-1.59.0 → osbot_utils-1.61.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.61.0
|
4
4
|
Summary: OWASP Security Bot - Utils
|
5
5
|
Home-page: https://github.com/owasp-sbot/OSBot-Utils
|
6
6
|
License: MIT
|
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.9
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.10
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
17
17
|
Classifier: Programming Language :: Python :: 3.12
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
18
19
|
Project-URL: Repository, https://github.com/owasp-sbot/OSBot-Utils
|
19
20
|
Description-Content-Type: text/markdown
|
20
21
|
|
@@ -22,7 +23,7 @@ Description-Content-Type: text/markdown
|
|
22
23
|
|
23
24
|
Powerful Python util methods and classes that simplify common apis and tasks.
|
24
25
|
|
25
|
-

|
26
27
|
[](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
|
27
28
|
|
28
29
|
|
@@ -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,13 @@
|
|
1
|
+
from osbot_utils.utils.Misc import timestamp_now
|
2
|
+
|
3
|
+
class Timestamp_Now(int):
|
4
|
+
def __new__(cls, value=None):
|
5
|
+
if value is None:
|
6
|
+
value = timestamp_now()
|
7
|
+
return int.__new__(cls, value)
|
8
|
+
|
9
|
+
def __init__(self, value=None):
|
10
|
+
self.value = value if value is not None else timestamp_now()
|
11
|
+
|
12
|
+
def __str__(self):
|
13
|
+
return str(self.value)
|
@@ -2,17 +2,17 @@ import asyncio
|
|
2
2
|
import logging
|
3
3
|
import typing
|
4
4
|
|
5
|
-
from osbot_utils.helpers.Dependency_Manager
|
6
|
-
|
7
|
-
from osbot_utils.
|
8
|
-
from osbot_utils.helpers.
|
9
|
-
from osbot_utils.helpers.flows.
|
10
|
-
from osbot_utils.helpers.flows.
|
11
|
-
from osbot_utils.testing.Stdout
|
12
|
-
from osbot_utils.utils.Misc
|
13
|
-
from osbot_utils.utils.Python_Logger
|
14
|
-
from osbot_utils.utils.Str
|
15
|
-
from osbot_utils.utils.Threads
|
5
|
+
from osbot_utils.helpers.Dependency_Manager import Dependency_Manager
|
6
|
+
from osbot_utils.base_classes.Type_Safe import Type_Safe
|
7
|
+
from osbot_utils.helpers.CFormat import CFormat, f_dark_grey, f_magenta, f_bold
|
8
|
+
from osbot_utils.helpers.flows.models.Flow_Run__Config import Flow_Run__Config
|
9
|
+
from osbot_utils.helpers.flows.Flow__Events import flow_events
|
10
|
+
from osbot_utils.helpers.flows.models.Flow_Run__Event_Data import Flow_Run__Event_Data
|
11
|
+
from osbot_utils.testing.Stdout import Stdout
|
12
|
+
from osbot_utils.utils.Misc import random_id, lower
|
13
|
+
from osbot_utils.utils.Python_Logger import Python_Logger
|
14
|
+
from osbot_utils.utils.Str import ansis_to_texts
|
15
|
+
from osbot_utils.utils.Threads import invoke_in_new_event_loop
|
16
16
|
|
17
17
|
FLOW__RANDOM_ID__PREFIX = 'flow_id__'
|
18
18
|
FLOW__RANDOM_NAME__PREFIX = 'flow_name__'
|
@@ -26,32 +26,35 @@ class Flow(Type_Safe):
|
|
26
26
|
data : dict # dict available to the tasks to add and collect data
|
27
27
|
flow_id : str
|
28
28
|
flow_name : str
|
29
|
-
flow_config :
|
29
|
+
flow_config : Flow_Run__Config
|
30
30
|
flow_error : Exception = None
|
31
31
|
flow_target : callable
|
32
32
|
flow_args : tuple
|
33
33
|
flow_kwargs : dict
|
34
34
|
flow_return_value : typing.Any
|
35
|
+
flow_run_params : dict
|
35
36
|
logger : Python_Logger
|
36
37
|
cformat : CFormat
|
37
38
|
executed_tasks : typing.List
|
38
39
|
resolved_args : tuple
|
39
40
|
resolved_kwargs : dict
|
40
41
|
|
41
|
-
def add_flow_artifact(self, description=None, key=None, data=None, artifact_type=None): # todo: figure out how to make this work since at the moment most are showing an unknown type
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
def add_flow_artifact(self, description=None, key=None, data=None, artifact_type=None): # todo: figure out how to make this work since at the moment most are showing an unknown type
|
43
|
+
event_data = Flow_Run__Event_Data()
|
44
|
+
event_data.data= dict(artifact_data = dict(description = description or 'description',
|
45
|
+
key = key or 'an-artifact-key',
|
46
|
+
data = data or {"link": "https://www.google.com", "link_text": "link to Google"}, # test data to see if it worksw
|
47
|
+
type = artifact_type or "link")) # type clashed with built-in type
|
48
|
+
event_data.flow_run_id = self.flow_id
|
49
|
+
flow_events.on__new_artifact(event_data)
|
47
50
|
|
48
|
-
flow_events.on__new_artifact(self, result_data )
|
49
51
|
|
50
52
|
def add_flow_result(self, key, description):
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
53
|
+
event_data = Flow_Run__Event_Data()
|
54
|
+
event_data.flow_run_id = self.flow_id
|
55
|
+
event_data.data = dict(result_data = dict(key = key ,
|
56
|
+
description = description ))
|
57
|
+
flow_events.on__new_result(event_data)
|
55
58
|
|
56
59
|
def config_logger(self):
|
57
60
|
with self.logger as _:
|
@@ -60,15 +63,14 @@ class Flow(Type_Safe):
|
|
60
63
|
if self.flow_config.log_to_console:
|
61
64
|
_.add_console_logger()
|
62
65
|
|
63
|
-
def create_flow(self):
|
64
|
-
self.set_flow_name()
|
65
|
-
self.log_debug(f"Created flow run '{self.f__flow_id()}' for flow '{self.f__flow_name()}'")
|
66
|
-
|
67
66
|
def execute(self):
|
68
67
|
return self.execute_flow()
|
69
68
|
|
70
|
-
def execute_flow(self):
|
71
|
-
flow_events.on__flow__start(self)
|
69
|
+
def execute_flow(self, flow_run_params=None): # todo: see if it makes more sense to call this start_flow_run
|
70
|
+
flow_events.on__flow__start(self.flow_event_data())
|
71
|
+
self.log_debug(f"Created flow run '{self.f__flow_id()}' for flow '{self.f__flow_name()}'")
|
72
|
+
self.set_flow_run_params(flow_run_params)
|
73
|
+
|
72
74
|
if self.flow_config.log_to_memory:
|
73
75
|
self.logger.add_memory_logger() # todo: move to method that does pre-execute tasks
|
74
76
|
|
@@ -90,7 +92,7 @@ class Flow(Type_Safe):
|
|
90
92
|
self.logger.remove_memory_logger() # todo: move to method that does post-execute tasks
|
91
93
|
if self.flow_return_value:
|
92
94
|
self.add_flow_result(key = 'flow-return-value', description=f'{self.flow_return_value}')
|
93
|
-
flow_events.on__flow__stop(self)
|
95
|
+
flow_events.on__flow__stop(self.flow_event_data())
|
94
96
|
return self
|
95
97
|
|
96
98
|
def captured_logs(self):
|
@@ -113,6 +115,11 @@ class Flow(Type_Safe):
|
|
113
115
|
def f__flow_name(self):
|
114
116
|
return self.cformat.blue(self.flow_name)
|
115
117
|
|
118
|
+
def flow_event_data(self):
|
119
|
+
kwargs = dict(flow_name = self.flow_name ,
|
120
|
+
#flow_id = self.flow_id , # todo: add support for actually sending the flow_id value (not the flow_run_id)
|
121
|
+
flow_run_id = self.flow_id )
|
122
|
+
return Flow_Run__Event_Data(**kwargs)
|
116
123
|
|
117
124
|
def log_captured_stdout(self, stdout):
|
118
125
|
for line in stdout.value().splitlines():
|
@@ -139,7 +146,7 @@ class Flow(Type_Safe):
|
|
139
146
|
message = message ,
|
140
147
|
flow_run_id = self.flow_id,
|
141
148
|
task_run_id = task_run_id )
|
142
|
-
flow_events.on__flow_run__message(
|
149
|
+
flow_events.on__flow_run__message(**kwargs)
|
143
150
|
if log_level == logging.DEBUG:
|
144
151
|
self.logger.debug(message)
|
145
152
|
elif log_level == logging.ERROR:
|
@@ -206,11 +213,20 @@ class Flow(Type_Safe):
|
|
206
213
|
self.flow_name = self.flow_target.__name__
|
207
214
|
else:
|
208
215
|
self.flow_name = self.random_flow_name()
|
209
|
-
|
216
|
+
|
217
|
+
def set_flow_run_params(self, flow_run_params=None):
|
218
|
+
if flow_run_params:
|
219
|
+
self.flow_run_params = flow_run_params
|
220
|
+
self.log_info(f"flow_run_params: {flow_run_params}")
|
221
|
+
self.add_flow_artifact(description="Data received via FastAPI's request.json()", key='post-data', data=flow_run_params)
|
222
|
+
|
223
|
+
def setup(self, target, *args, **kwargs):
|
210
224
|
with self as _:
|
211
225
|
_.cformat.auto_bold = True
|
212
|
-
_.
|
213
|
-
_.
|
226
|
+
_.set_flow_target (target, *args, **kwargs)
|
227
|
+
_.config_logger ()
|
228
|
+
_.setup_flow_run ()
|
229
|
+
_.set_flow_name ()
|
214
230
|
return self
|
215
231
|
|
216
232
|
def setup_flow_run(self):
|
@@ -0,0 +1,52 @@
|
|
1
|
+
from osbot_utils.helpers.flows.models.Flow_Run__Event_Data import Flow_Run__Event_Data
|
2
|
+
from osbot_utils.utils.Str import ansi_to_text
|
3
|
+
from osbot_utils.base_classes.Type_Safe import Type_Safe
|
4
|
+
from osbot_utils.helpers.flows.models.Flow_Run__Event import Flow_Run__Event
|
5
|
+
from osbot_utils.helpers.flows.models.Flow_Run__Event_Type import Flow_Run__Event_Type
|
6
|
+
|
7
|
+
|
8
|
+
class Flow_Events(Type_Safe):
|
9
|
+
event_listeners : list
|
10
|
+
|
11
|
+
def on__flow__start(self, event_data: Flow_Run__Event_Data):
|
12
|
+
flow_event = Flow_Run__Event(event_type=Flow_Run__Event_Type.FLOW_START, event_data=event_data)
|
13
|
+
self.raise_event(flow_event)
|
14
|
+
|
15
|
+
def on__flow__stop(self, event_data: Flow_Run__Event_Data): # todo: see of flow_ended or flow_completed are better names
|
16
|
+
flow_event = Flow_Run__Event(event_type=Flow_Run__Event_Type.FLOW_STOP , event_data=event_data)
|
17
|
+
self.raise_event(flow_event)
|
18
|
+
|
19
|
+
def on__flow_run__message(self, log_level, flow_run_id, task_run_id, message):
|
20
|
+
event_data = Flow_Run__Event_Data()
|
21
|
+
event_data.flow_run_id = flow_run_id
|
22
|
+
event_data.task_run_id = task_run_id
|
23
|
+
event_data.data = dict(message_data = dict(log_level = log_level ,
|
24
|
+
message = message ,
|
25
|
+
message_text = ansi_to_text(message) ))
|
26
|
+
flow_event = Flow_Run__Event(event_type=Flow_Run__Event_Type.FLOW_MESSAGE, event_data=event_data)
|
27
|
+
self.raise_event(flow_event)
|
28
|
+
|
29
|
+
def on__new_artifact(self, event_data: Flow_Run__Event_Data):
|
30
|
+
flow_event = Flow_Run__Event(event_type=Flow_Run__Event_Type.NEW_ARTIFACT, event_data=event_data)
|
31
|
+
self.raise_event(flow_event)
|
32
|
+
|
33
|
+
def on__new_result(self, event_data: Flow_Run__Event_Data):
|
34
|
+
flow_event = Flow_Run__Event(event_type=Flow_Run__Event_Type.NEW_RESULT, event_data=event_data)
|
35
|
+
self.raise_event(flow_event)
|
36
|
+
|
37
|
+
def on__task__start(self, event_data: Flow_Run__Event_Data):
|
38
|
+
flow_event = Flow_Run__Event(event_type=Flow_Run__Event_Type.TASK_START, event_data=event_data)
|
39
|
+
self.raise_event(flow_event)
|
40
|
+
|
41
|
+
def on__task__stop(self, event_data: Flow_Run__Event_Data): # todo: see of flow_ended or flow_completed are better names
|
42
|
+
flow_event = Flow_Run__Event(event_type=Flow_Run__Event_Type.TASK_STOP , event_data=event_data)
|
43
|
+
self.raise_event(flow_event)
|
44
|
+
|
45
|
+
def raise_event(self, flow_event):
|
46
|
+
for listener in self.event_listeners:
|
47
|
+
try:
|
48
|
+
listener(flow_event)
|
49
|
+
except Exception as error:
|
50
|
+
print(f"Error in listener: {error}")
|
51
|
+
|
52
|
+
flow_events = Flow_Events()
|
@@ -2,6 +2,7 @@ import asyncio
|
|
2
2
|
import inspect
|
3
3
|
import typing
|
4
4
|
|
5
|
+
from osbot_utils.helpers.flows.models.Flow_Run__Event_Data import Flow_Run__Event_Data
|
5
6
|
from osbot_utils.utils.Misc import random_id, lower
|
6
7
|
from osbot_utils.helpers.Dependency_Manager import Dependency_Manager
|
7
8
|
from osbot_utils.helpers.flows.Flow__Events import flow_events
|
@@ -57,12 +58,19 @@ class Task(Type_Safe):
|
|
57
58
|
if not self.task_id:
|
58
59
|
self.task_id = self.random_task_id()
|
59
60
|
|
60
|
-
flow_events.on__task__start(self)
|
61
|
+
flow_events.on__task__start(self.task_event_data())
|
61
62
|
|
62
63
|
self.task_flow.executed_tasks.append(self)
|
63
64
|
self.log_debug(f"Executing task '{f_blue(self.task_name)}'")
|
64
65
|
self.resolve_args_and_kwargs()
|
65
66
|
|
67
|
+
def task_event_data(self):
|
68
|
+
kwargs = dict(flow_name = self.task_flow.flow_name,
|
69
|
+
flow_run_id = self.task_flow.flow_id ,
|
70
|
+
task_name = self.task_name ,
|
71
|
+
task_run_id = self.task_id )
|
72
|
+
return Flow_Run__Event_Data(**kwargs)
|
73
|
+
|
66
74
|
def resolve_args_and_kwargs(self):
|
67
75
|
dependency_manager = Dependency_Manager()
|
68
76
|
dependency_manager.add_dependency('this_task', self )
|
@@ -97,7 +105,7 @@ class Task(Type_Safe):
|
|
97
105
|
|
98
106
|
self.print_task_finished_message()
|
99
107
|
|
100
|
-
flow_events.on__task__stop(self)
|
108
|
+
flow_events.on__task__stop(self.task_event_data())
|
101
109
|
return self.task_return_value
|
102
110
|
|
103
111
|
|
@@ -10,9 +10,7 @@ def flow(**flow_kwargs):
|
|
10
10
|
@wraps(function)
|
11
11
|
def wrapper(*args: Any, **kwargs: Any) -> Flow:
|
12
12
|
with Flow(**flow_kwargs) as _:
|
13
|
-
_.
|
14
|
-
_.setup()
|
15
|
-
_.create_flow()
|
13
|
+
_.setup(function, *args, **kwargs)
|
16
14
|
return _
|
17
15
|
return wrapper
|
18
16
|
return decorator
|
@@ -0,0 +1,15 @@
|
|
1
|
+
from osbot_utils.helpers.Random_Guid import Random_Guid
|
2
|
+
|
3
|
+
from osbot_utils.base_classes.Type_Safe import Type_Safe
|
4
|
+
from osbot_utils.helpers.Timestamp_Now import Timestamp_Now
|
5
|
+
from osbot_utils.helpers.flows.models.Flow_Run__Event_Data import Flow_Run__Event_Data
|
6
|
+
from osbot_utils.helpers.flows.models.Flow_Run__Event_Type import Flow_Run__Event_Type
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
class Flow_Run__Event(Type_Safe):
|
11
|
+
event_id : Random_Guid
|
12
|
+
event_type : Flow_Run__Event_Type
|
13
|
+
event_data : Flow_Run__Event_Data
|
14
|
+
timestamp : Timestamp_Now
|
15
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
from osbot_utils.base_classes.Type_Safe import Type_Safe
|
4
|
+
|
5
|
+
|
6
|
+
class Flow_Run__Event_Data(Type_Safe):
|
7
|
+
data : dict
|
8
|
+
event_source: str
|
9
|
+
flow_id : str = None
|
10
|
+
flow_name : str = None
|
11
|
+
flow_run_id : str = None
|
12
|
+
log_level : int = logging.INFO
|
13
|
+
task_name : str = None
|
14
|
+
task_run_id : str = None
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import json
|
2
2
|
import os
|
3
3
|
|
4
|
-
from osbot_utils.utils.Misc
|
4
|
+
from osbot_utils.utils.Misc import str_lines, str_md5, str_sha256
|
5
5
|
from osbot_utils.utils.Files import file_create_gz, file_create, load_file_gz, file_contents, file_lines, file_lines_gz
|
6
|
-
from osbot_utils.utils.Zip
|
6
|
+
from osbot_utils.utils.Zip import str_to_gz, gz_to_str
|
7
7
|
|
8
8
|
|
9
9
|
def json_dumps(python_object, indent=4, pretty=True, sort_keys=False, default=str, raise_exception=False):
|
@@ -131,6 +131,8 @@ def date_today():
|
|
131
131
|
def list_set(target: object) -> object:
|
132
132
|
if hasattr(target, '__iter__'):
|
133
133
|
return sorted(list(set(target)))
|
134
|
+
if hasattr(target, '__dict__'):
|
135
|
+
return list_set(target.__dict__)
|
134
136
|
return []
|
135
137
|
|
136
138
|
def time_str_milliseconds(datetime_str, datetime_format, milliseconds_numbers=0):
|
@@ -511,5 +513,6 @@ random_guid = random_uuid
|
|
511
513
|
random_value = random_string
|
512
514
|
|
513
515
|
time_utc = time_now
|
516
|
+
timestamp_now = timestamp_utc_now
|
514
517
|
wait_for = wait
|
515
518
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# todo add tests
|
2
2
|
import inspect
|
3
|
+
import json
|
3
4
|
import pickle
|
4
5
|
import sys
|
5
6
|
import types
|
@@ -151,6 +152,9 @@ def obj_to_dict(target):
|
|
151
152
|
return {obj_to_dict(item) for item in target}
|
152
153
|
return target # Return non-object types as is
|
153
154
|
|
155
|
+
def str_to_obj(target):
|
156
|
+
return dict_to_obj(json.loads(target))
|
157
|
+
|
154
158
|
def enum_from_value(enum_type, value):
|
155
159
|
try:
|
156
160
|
return enum_type[value] # Attempt to convert the value to an Enum member by name
|
@@ -390,6 +394,8 @@ def value_type_matches_obj_annotation_for_attr(target, attr_name, value):
|
|
390
394
|
base_types = base_classes
|
391
395
|
bytes_to_obj = pickle_load_from_bytes
|
392
396
|
|
397
|
+
json_to_obj = str_to_obj
|
398
|
+
|
393
399
|
full_type_name = class_full_name
|
394
400
|
|
395
401
|
obj_list_set = obj_keys
|
@@ -0,0 +1 @@
|
|
1
|
+
v1.61.0
|
@@ -1,53 +0,0 @@
|
|
1
|
-
from osbot_utils.utils.Str import ansis_to_texts, ansi_to_text
|
2
|
-
|
3
|
-
from osbot_utils.utils.Dev import pprint
|
4
|
-
|
5
|
-
from osbot_utils.base_classes.Type_Safe import Type_Safe
|
6
|
-
from osbot_utils.helpers.flows.models.Flow__Event import Flow__Event
|
7
|
-
from osbot_utils.helpers.flows.models.Flow__Event_Type import Flow__Event_Type
|
8
|
-
|
9
|
-
|
10
|
-
class Flow_Events(Type_Safe):
|
11
|
-
event_listeners : list
|
12
|
-
|
13
|
-
def on__flow__start(self, flow):
|
14
|
-
flow_event = Flow__Event(event_type=Flow__Event_Type.FLOW_START, event_source=flow)
|
15
|
-
self.raise_event(flow_event)
|
16
|
-
|
17
|
-
def on__flow__stop(self, flow): # todo: see of flow_ended or flow_completed are better names
|
18
|
-
flow_event = Flow__Event(event_type=Flow__Event_Type.FLOW_STOP , event_source=flow)
|
19
|
-
self.raise_event(flow_event)
|
20
|
-
|
21
|
-
def on__flow_run__message(self, flow, log_level, flow_run_id, task_run_id, message):
|
22
|
-
event_data = dict(flow_run_id = flow_run_id ,
|
23
|
-
log_level = log_level ,
|
24
|
-
message = message ,
|
25
|
-
message_text = ansi_to_text(message) ,
|
26
|
-
task_run_id = task_run_id )
|
27
|
-
flow_event = Flow__Event(event_type=Flow__Event_Type.FLOW_MESSAGE, event_source=flow, event_data=event_data)
|
28
|
-
self.raise_event(flow_event)
|
29
|
-
|
30
|
-
def on__new_artifact(self, flow, result_data):
|
31
|
-
flow_event = Flow__Event(event_type=Flow__Event_Type.NEW_ARTIFACT , event_source=flow, event_data=result_data)
|
32
|
-
self.raise_event(flow_event)
|
33
|
-
|
34
|
-
def on__new_result(self, flow, result_data):
|
35
|
-
flow_event = Flow__Event(event_type=Flow__Event_Type.NEW_RESULT , event_source=flow, event_data=result_data)
|
36
|
-
self.raise_event(flow_event)
|
37
|
-
|
38
|
-
def on__task__start(self, task):
|
39
|
-
flow_event = Flow__Event(event_type=Flow__Event_Type.TASK_START, event_source=task)
|
40
|
-
self.raise_event(flow_event)
|
41
|
-
|
42
|
-
def on__task__stop(self, task): # todo: see of flow_ended or flow_completed are better names
|
43
|
-
flow_event = Flow__Event(event_type=Flow__Event_Type.TASK_STOP , event_source=task)
|
44
|
-
self.raise_event(flow_event)
|
45
|
-
|
46
|
-
def raise_event(self, flow_event):
|
47
|
-
for listener in self.event_listeners:
|
48
|
-
try:
|
49
|
-
listener(flow_event)
|
50
|
-
except Exception as error:
|
51
|
-
print(f"Error in listener: {error}")
|
52
|
-
|
53
|
-
flow_events = Flow_Events()
|
@@ -1 +0,0 @@
|
|
1
|
-
v1.59.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.59.0 → osbot_utils-1.61.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.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/cache_on_function.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.59.0 → osbot_utils-1.61.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.59.0 → osbot_utils-1.61.0}/osbot_utils/decorators/methods/function_type_check.py
RENAMED
File without changes
|
File without changes
|
{osbot_utils-1.59.0 → osbot_utils-1.61.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.59.0 → osbot_utils-1.61.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
|