osbot-utils 2.29.0__tar.gz → 2.31.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-2.29.0 → osbot_utils-2.31.0}/PKG-INFO +2 -2
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/README.md +1 -1
- {osbot_utils-2.29.0/osbot_utils/testing → osbot_utils-2.31.0/osbot_utils/helpers/duration}/Duration.py +14 -26
- osbot_utils-2.31.0/osbot_utils/helpers/duration/decorators/duration.py +21 -0
- {osbot_utils-2.29.0/osbot_utils/context_managers → osbot_utils-2.31.0/osbot_utils/helpers/duration/decorators}/print_duration.py +1 -1
- osbot_utils-2.31.0/osbot_utils/helpers/duration/schemas/Schema__Duration.py +8 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/Flow.py +19 -16
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/Task.py +18 -8
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/actions/Flow__Data.py +0 -1
- osbot_utils-2.31.0/osbot_utils/helpers/flows/actions/Flow__Stats__Collector.py +47 -0
- osbot_utils-2.31.0/osbot_utils/helpers/flows/actions/Task__Stats__Collector.py +34 -0
- osbot_utils-2.31.0/osbot_utils/helpers/flows/schemas/Schema__Flow__Stats.py +16 -0
- osbot_utils-2.31.0/osbot_utils/helpers/flows/schemas/Schema__Flow__Status.py +7 -0
- osbot_utils-2.31.0/osbot_utils/helpers/flows/schemas/Schema__Task__Stats.py +13 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ssh/SCP.py +6 -6
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ssh/SSH__Execute.py +10 -10
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Hook_Method.py +4 -3
- osbot_utils-2.31.0/osbot_utils/type_safe/shared/Type_Safe__Shared__Variables.py +8 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py +9 -4
- osbot_utils-2.31.0/osbot_utils/type_safe/steps/__init__.py +0 -0
- osbot_utils-2.31.0/osbot_utils/type_safe/validators/__init__.py +0 -0
- osbot_utils-2.31.0/osbot_utils/utils/__init__.py +0 -0
- osbot_utils-2.31.0/osbot_utils/version +1 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/pyproject.toml +1 -1
- osbot_utils-2.29.0/osbot_utils/type_safe/shared/Type_Safe__Shared__Variables.py +0 -4
- osbot_utils-2.29.0/osbot_utils/version +0 -1
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/LICENSE +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/context_managers/async_invoke.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/CFormat.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Guid.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Local_Cache.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Obj_Id.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Random_Guid.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Safe_Id.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Str_ASCII.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/flows → osbot_utils-2.31.0/osbot_utils/helpers/duration}/__init__.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/flows/actions → osbot_utils-2.31.0/osbot_utils/helpers/duration/decorators}/__init__.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/context_managers → osbot_utils-2.31.0/osbot_utils/helpers/duration/decorators}/capture_duration.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/flows/decorators → osbot_utils-2.31.0/osbot_utils/helpers/duration/schemas}/__init__.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/flows/models → osbot_utils-2.31.0/osbot_utils/helpers/flows}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/actions/Flow__Events.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/flows/schemas → osbot_utils-2.31.0/osbot_utils/helpers/flows/actions}/__init__.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/generators → osbot_utils-2.31.0/osbot_utils/helpers/flows/decorators}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/models/Schema__Flow__Artifact.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/models/Schema__Flow__Result.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/html → osbot_utils-2.31.0/osbot_utils/helpers/flows/models}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/schemas/Schema__Flow.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Data.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Event.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Event__Data.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Log.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Task__Data.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/pubsub → osbot_utils-2.31.0/osbot_utils/helpers/flows/schemas}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/generators/Generator_Manager.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/pubsub/schemas → osbot_utils-2.31.0/osbot_utils/helpers/generators}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/python_compatibility → osbot_utils-2.31.0/osbot_utils/helpers/html}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/sqlite → osbot_utils-2.31.0/osbot_utils/helpers/pubsub}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/sqlite/cache → osbot_utils-2.31.0/osbot_utils/helpers/pubsub/schemas}/__init__.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/sqlite/domains → osbot_utils-2.31.0/osbot_utils/helpers/python_compatibility}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/python_compatibility/python_3_8.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/sqlite/domains/schemas → osbot_utils-2.31.0/osbot_utils/helpers/sqlite}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/sqlite/models → osbot_utils-2.31.0/osbot_utils/helpers/sqlite/cache}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/sqlite/sample_data → osbot_utils-2.31.0/osbot_utils/helpers/sqlite/domains}/__init__.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/sqlite/sql_builder → osbot_utils-2.31.0/osbot_utils/helpers/sqlite/domains/schemas}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/sqlite/tables → osbot_utils-2.31.0/osbot_utils/helpers/sqlite/models}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/ssh → osbot_utils-2.31.0/osbot_utils/helpers/sqlite/sample_data}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/trace → osbot_utils-2.31.0/osbot_utils/helpers/sqlite/sql_builder}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/helpers/xml → osbot_utils-2.31.0/osbot_utils/helpers/sqlite/tables}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/testing → osbot_utils-2.31.0/osbot_utils/helpers/ssh}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/testing/performance → osbot_utils-2.31.0/osbot_utils/helpers/trace}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/xml/Xml__Attribute.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/xml/Xml__Element.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/xml/Xml__File.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/xml/Xml__File__Load.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/xml/Xml__File__To_Dict.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/xml/Xml__File__To_Xml.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/testing/performance/models → osbot_utils-2.31.0/osbot_utils/helpers/xml}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/xml/rss/RSS__Channel.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/xml/rss/RSS__Feed.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/xml/rss/RSS__Feed__Parser.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/xml/rss/RSS__Image.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/helpers/xml/rss/RSS__Item.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Catch.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/type_safe → osbot_utils-2.31.0/osbot_utils/testing}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/performance/Performance_Measure__Session.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/type_safe/decorators → osbot_utils-2.31.0/osbot_utils/testing/performance}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Measurement.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Result.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/type_safe/methods → osbot_utils-2.31.0/osbot_utils/testing/performance/models}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/Type_Safe.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/Type_Safe__Base.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/Type_Safe__Dict.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/Type_Safe__List.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/Type_Safe__Method.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/Type_Safe__Set.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/Type_Safe__Tuple.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/type_safe/shared → osbot_utils-2.31.0/osbot_utils/type_safe}/__init__.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/type_safe/steps → osbot_utils-2.31.0/osbot_utils/type_safe/decorators}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/decorators/type_safe.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/type_safe/validators → osbot_utils-2.31.0/osbot_utils/type_safe/methods}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/methods/type_safe_property.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/shared/Type_Safe__Annotations.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/shared/Type_Safe__Cache.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/shared/Type_Safe__Convert.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/shared/Type_Safe__Json_Compressor.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/shared/Type_Safe__Json_Compressor__Type_Registry.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/shared/Type_Safe__Not_Cached.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/shared/Type_Safe__Raise_Exception.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/shared/Type_Safe__Validation.py +0 -0
- {osbot_utils-2.29.0/osbot_utils/utils → osbot_utils-2.31.0/osbot_utils/type_safe/shared}/__init__.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Class_Kwargs.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Default_Kwargs.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Default_Value.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Init.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Set_Attr.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/validators/Type_Safe__Validator.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/validators/Validator__Max.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/validators/Validator__Min.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/validators/Validator__One_Of.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/validators/Validator__Regex.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Env.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Files.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Http.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Json.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Misc.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Objects.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Python_Logger.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Regex.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Str.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Threads.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/utils/Zip.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: osbot_utils
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.31.0
|
4
4
|
Summary: OWASP Security Bot - Utils
|
5
5
|
License: MIT
|
6
6
|
Author: Dinis Cruz
|
@@ -23,7 +23,7 @@ Description-Content-Type: text/markdown
|
|
23
23
|
|
24
24
|
Powerful Python util methods and classes that simplify common apis and tasks.
|
25
25
|
|
26
|
-

|
27
27
|
[](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
|
28
28
|
|
29
29
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Powerful Python util methods and classes that simplify common apis and tasks.
|
4
4
|
|
5
|
-

|
6
6
|
[](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
|
7
7
|
|
8
8
|
|
@@ -1,32 +1,11 @@
|
|
1
|
-
import
|
2
|
-
from datetime import timedelta
|
3
|
-
from functools import wraps
|
1
|
+
from datetime import timedelta
|
4
2
|
|
5
|
-
from osbot_utils.
|
3
|
+
from osbot_utils.helpers.duration.schemas.Schema__Duration import Schema__Duration
|
4
|
+
from osbot_utils.utils.Call_Stack import Call_Stack
|
5
|
+
from osbot_utils.utils.Misc import date_time_now, time_delta_to_str
|
6
6
|
|
7
|
-
from osbot_utils.utils.Misc import date_time_now, time_delta_to_str
|
8
7
|
|
9
|
-
|
10
|
-
def duration(func):
|
11
|
-
if inspect.iscoroutinefunction(func):
|
12
|
-
# It's an async function
|
13
|
-
@wraps(func)
|
14
|
-
async def async_wrapper(*args, **kwargs):
|
15
|
-
with Duration(prefix=f'.{func.__name__} took'):
|
16
|
-
return await func(*args, **kwargs)
|
17
|
-
return async_wrapper
|
18
|
-
else:
|
19
|
-
# It's a regular function
|
20
|
-
@wraps(func)
|
21
|
-
def sync_wrapper(*args, **kwargs):
|
22
|
-
with Duration(prefix=f'.{func.__name__} took'):
|
23
|
-
return func(*args, **kwargs)
|
24
|
-
return sync_wrapper
|
25
|
-
|
26
|
-
class Duration:
|
27
|
-
"""
|
28
|
-
Helper class for to capture time duration
|
29
|
-
"""
|
8
|
+
class Duration: # Helper class for to capture time duration
|
30
9
|
def __init__(self, prefix="\nDuration:", print_result=True, use_utc=True, print_stack=False):
|
31
10
|
self.use_utc = use_utc
|
32
11
|
self.print_result = print_result
|
@@ -47,6 +26,15 @@ class Duration:
|
|
47
26
|
def __exit__(self, exception_type, exception_value, exception_traceback):
|
48
27
|
self.end()
|
49
28
|
|
29
|
+
def data(self) -> Schema__Duration: # Returns the duration data in Schema__Duration format.
|
30
|
+
if not self.duration:
|
31
|
+
raise ValueError("Duration has not been calculated yet. Call end() first.")
|
32
|
+
|
33
|
+
return Schema__Duration( utc = self.use_utc ,
|
34
|
+
timestamp_start = self.start_time.timestamp(),
|
35
|
+
timestamp_end = self.end_time .timestamp(),
|
36
|
+
duration_seconds = self.seconds ())
|
37
|
+
|
50
38
|
def start(self):
|
51
39
|
self.start_time = date_time_now(use_utc=self.use_utc, return_str=False)
|
52
40
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import inspect
|
2
|
+
from functools import wraps
|
3
|
+
|
4
|
+
from osbot_utils.helpers.duration.Duration import Duration
|
5
|
+
|
6
|
+
|
7
|
+
def duration(func):
|
8
|
+
if inspect.iscoroutinefunction(func):
|
9
|
+
# It's an async function
|
10
|
+
@wraps(func)
|
11
|
+
async def async_wrapper(*args, **kwargs):
|
12
|
+
with Duration(prefix=f'.{func.__name__} took'):
|
13
|
+
return await func(*args, **kwargs)
|
14
|
+
return async_wrapper
|
15
|
+
else:
|
16
|
+
# It's a regular function
|
17
|
+
@wraps(func)
|
18
|
+
def sync_wrapper(*args, **kwargs):
|
19
|
+
with Duration(prefix=f'.{func.__name__} took'):
|
20
|
+
return func(*args, **kwargs)
|
21
|
+
return sync_wrapper
|
@@ -1,21 +1,21 @@
|
|
1
1
|
import asyncio
|
2
2
|
import logging
|
3
3
|
import typing
|
4
|
-
|
5
|
-
from osbot_utils.helpers.
|
6
|
-
from osbot_utils.helpers.flows.actions.
|
7
|
-
from osbot_utils.helpers.flows.models.Flow_Run__Event
|
8
|
-
from osbot_utils.type_safe.Type_Safe
|
9
|
-
from osbot_utils.helpers.CFormat
|
10
|
-
from osbot_utils.helpers.flows.models.Flow_Run__Config
|
11
|
-
from osbot_utils.helpers.flows.actions.Flow__Events
|
12
|
-
from osbot_utils.helpers.flows.models.Flow_Run__Event_Data
|
13
|
-
from osbot_utils.testing.Stdout
|
14
|
-
from osbot_utils.utils.Dev
|
15
|
-
from osbot_utils.utils.Misc
|
16
|
-
from osbot_utils.utils.Python_Logger
|
17
|
-
from osbot_utils.utils.Str
|
18
|
-
from osbot_utils.utils.Threads
|
4
|
+
from osbot_utils.helpers.Dependency_Manager import Dependency_Manager
|
5
|
+
from osbot_utils.helpers.flows.actions.Flow__Data import Flow__Data
|
6
|
+
from osbot_utils.helpers.flows.actions.Flow__Stats__Collector import Flow__Stats__Collector
|
7
|
+
from osbot_utils.helpers.flows.models.Flow_Run__Event import Flow_Run__Event
|
8
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
9
|
+
from osbot_utils.helpers.CFormat import CFormat, f_dark_grey, f_magenta, f_bold
|
10
|
+
from osbot_utils.helpers.flows.models.Flow_Run__Config import Flow_Run__Config
|
11
|
+
from osbot_utils.helpers.flows.actions.Flow__Events import flow_events
|
12
|
+
from osbot_utils.helpers.flows.models.Flow_Run__Event_Data import Flow_Run__Event_Data
|
13
|
+
from osbot_utils.testing.Stdout import Stdout
|
14
|
+
from osbot_utils.utils.Dev import pprint
|
15
|
+
from osbot_utils.utils.Misc import random_id, lower, time_now
|
16
|
+
from osbot_utils.utils.Python_Logger import Python_Logger
|
17
|
+
from osbot_utils.utils.Str import ansis_to_texts
|
18
|
+
from osbot_utils.utils.Threads import invoke_in_new_event_loop
|
19
19
|
|
20
20
|
FLOW__RANDOM_ID__PREFIX = 'flow_id__'
|
21
21
|
FLOW__RANDOM_NAME__PREFIX = 'flow_name__'
|
@@ -23,9 +23,10 @@ FLOW__LOGGING__LOG_FORMAT = '%(asctime)s.%(msecs)03d | %(levelname)-8s | %(mess
|
|
23
23
|
FLOW__LOGGING__DATE_FORMAT = '%H:%M:%S'
|
24
24
|
|
25
25
|
|
26
|
-
# todo:
|
26
|
+
# todo: replace the flow_id (and task_id) with either Obj_Id or Safe_Id
|
27
27
|
class Flow(Type_Safe):
|
28
28
|
flow_data : Flow__Data
|
29
|
+
flow_stats : Flow__Stats__Collector
|
29
30
|
captured_exec_logs : list
|
30
31
|
data : dict # dict available to the tasks to add and collect data
|
31
32
|
flow_id : str # rename to flow_run_id (or also capture the flow_run_id)
|
@@ -82,6 +83,7 @@ class Flow(Type_Safe):
|
|
82
83
|
|
83
84
|
def execute_flow(self, flow_run_params=None): # todo: see if it makes more sense to call this start_flow_run
|
84
85
|
self.check_setup()
|
86
|
+
self.flow_stats.start(flow_id=self.flow_id, flow_name=self.flow_name) # start the flow stats collector
|
85
87
|
flow_events.on__flow__start(self.flow_event_data())
|
86
88
|
self.log_debug(f"Created flow run '{self.f__flow_id()}' for flow '{self.f__flow_name()}'")
|
87
89
|
self.set_flow_run_params(flow_run_params)
|
@@ -101,6 +103,7 @@ class Flow(Type_Safe):
|
|
101
103
|
self.log_error(self.cformat.red(f"Error executing flow: {error}"))
|
102
104
|
self.flow_data.set_error(error)
|
103
105
|
|
106
|
+
self.flow_stats.end (self.flow_error)
|
104
107
|
self.log_captured_stdout (stdout)
|
105
108
|
self.print_flow_return_value ()
|
106
109
|
self.print_flow_finished_message()
|
@@ -2,14 +2,15 @@ import inspect
|
|
2
2
|
import traceback
|
3
3
|
import typing
|
4
4
|
|
5
|
-
from osbot_utils.helpers.flows.
|
6
|
-
from osbot_utils.
|
7
|
-
from osbot_utils.
|
8
|
-
from osbot_utils.helpers.
|
9
|
-
from osbot_utils.
|
10
|
-
from osbot_utils.
|
11
|
-
from osbot_utils.
|
12
|
-
from osbot_utils.
|
5
|
+
from osbot_utils.helpers.flows.actions.Task__Stats__Collector import Task__Stats__Collector
|
6
|
+
from osbot_utils.helpers.flows.models.Flow_Run__Event_Data import Flow_Run__Event_Data
|
7
|
+
from osbot_utils.utils.Misc import random_id, lower
|
8
|
+
from osbot_utils.helpers.Dependency_Manager import Dependency_Manager
|
9
|
+
from osbot_utils.helpers.flows.actions.Flow__Events import flow_events
|
10
|
+
from osbot_utils.testing.Stdout import Stdout
|
11
|
+
from osbot_utils.helpers.CFormat import CFormat, f_dark_grey, f_red, f_blue, f_bold
|
12
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
13
|
+
from osbot_utils.helpers.flows.Flow import Flow
|
13
14
|
|
14
15
|
TASK__RANDOM_ID__PREFIX = 'task_id__'
|
15
16
|
|
@@ -18,6 +19,7 @@ TASK__RANDOM_ID__PREFIX = 'task_id__'
|
|
18
19
|
class Task(Type_Safe):
|
19
20
|
data : dict # dict available to the task to add and collect data
|
20
21
|
task_id : str
|
22
|
+
task_stats : Task__Stats__Collector
|
21
23
|
task_name : str # make this the function mame
|
22
24
|
cformat : CFormat
|
23
25
|
resolved_args : tuple
|
@@ -63,6 +65,9 @@ class Task(Type_Safe):
|
|
63
65
|
if not self.task_id:
|
64
66
|
self.task_id = self.random_task_id()
|
65
67
|
|
68
|
+
execution_order = self.task_flow.flow_stats.get_next_execution_order()
|
69
|
+
self.task_stats.start(flow_id=self.task_flow.flow_id, task_id=self.task_id, task_name=self.task_name, execution_order=execution_order)
|
70
|
+
|
66
71
|
self.on_task_start()
|
67
72
|
flow_events.on__task__start(self.task_event_data())
|
68
73
|
|
@@ -105,6 +110,11 @@ class Task(Type_Safe):
|
|
105
110
|
self.task_flow.log_captured_stdout(stdout)
|
106
111
|
|
107
112
|
def execute__after(self):
|
113
|
+
|
114
|
+
self.task_stats.end(task_error=self.task_error)
|
115
|
+
self.task_flow.flow_stats.add_task_stats(self.task_stats.stats)
|
116
|
+
|
117
|
+
|
108
118
|
self.print_task_return_value()
|
109
119
|
|
110
120
|
if self.task_error:
|
@@ -5,7 +5,6 @@ from osbot_utils.helpers.flows.models.Schema__Flow__Artifact import Schema__F
|
|
5
5
|
from osbot_utils.helpers.flows.models.Schema__Flow__Result import Schema__Flow__Result
|
6
6
|
from osbot_utils.helpers.flows.schemas.Schema__Flow import Schema__Flow
|
7
7
|
from osbot_utils.helpers.flows.schemas.Schema__Flow__Data import Schema__Flow__Data
|
8
|
-
#from osbot_utils.helpers.flows.schemas.Schema__Flow__Event import Schema__Flow__Event
|
9
8
|
from osbot_utils.helpers.flows.schemas.Schema__Flow__Log import Schema__Flow__Log
|
10
9
|
from osbot_utils.helpers.flows.schemas.Schema__Flow__Task__Data import Schema__Flow__Task__Data
|
11
10
|
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
@@ -0,0 +1,47 @@
|
|
1
|
+
from typing import Dict
|
2
|
+
from osbot_utils.helpers.duration.Duration import Duration
|
3
|
+
from osbot_utils.helpers.flows.schemas.Schema__Flow__Status import Schema__Flow__Status
|
4
|
+
from osbot_utils.helpers.flows.schemas.Schema__Task__Stats import Schema__Task__Stats
|
5
|
+
from osbot_utils.helpers.flows.schemas.Schema__Flow__Stats import Schema__Flow__Stats
|
6
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
7
|
+
|
8
|
+
|
9
|
+
class Flow__Stats__Collector(Type_Safe):
|
10
|
+
duration : Duration
|
11
|
+
stats : Schema__Flow__Stats
|
12
|
+
task_execution_counter : int
|
13
|
+
|
14
|
+
def start(self, flow_id: str, flow_name:str):
|
15
|
+
self.duration.print_result = False
|
16
|
+
self.duration.start()
|
17
|
+
self.task_execution_counter = 0
|
18
|
+
with self.stats as _:
|
19
|
+
_.flow_id = flow_id
|
20
|
+
_.flow_name = flow_name
|
21
|
+
_.status = Schema__Flow__Status.RUNNING
|
22
|
+
return self
|
23
|
+
|
24
|
+
def end(self, flow_error:Exception):
|
25
|
+
self.duration.end()
|
26
|
+
with self.stats as _:
|
27
|
+
_.duration = self.duration.data()
|
28
|
+
_.total_tasks = len(self.stats.tasks_stats)
|
29
|
+
_.failed_tasks = sum(1 for task in self.stats.tasks_stats.values() if task.status == Schema__Flow__Status.FAILED)
|
30
|
+
|
31
|
+
if flow_error:
|
32
|
+
_.status = Schema__Flow__Status.FAILED
|
33
|
+
_.error_message = str(flow_error)
|
34
|
+
else:
|
35
|
+
_.status = Schema__Flow__Status.COMPLETED
|
36
|
+
return self
|
37
|
+
|
38
|
+
def get_next_execution_order(self): # Get the next execution order number and increment the counter."""
|
39
|
+
self.task_execution_counter += 1
|
40
|
+
return self.task_execution_counter
|
41
|
+
|
42
|
+
def add_task_stats(self, task_stats: Schema__Task__Stats): # Add task stats to the collection.
|
43
|
+
self.stats.tasks_stats[task_stats.task_id] = task_stats
|
44
|
+
return self
|
45
|
+
|
46
|
+
def json(self): # Return JSON representation of the stats.
|
47
|
+
return self.stats.json()
|
@@ -0,0 +1,34 @@
|
|
1
|
+
from osbot_utils.helpers.duration.Duration import Duration
|
2
|
+
from osbot_utils.helpers.flows.schemas.Schema__Flow__Status import Schema__Flow__Status
|
3
|
+
from osbot_utils.helpers.flows.schemas.Schema__Task__Stats import Schema__Task__Stats
|
4
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
5
|
+
|
6
|
+
class Task__Stats__Collector(Type_Safe):
|
7
|
+
duration : Duration
|
8
|
+
stats : Schema__Task__Stats
|
9
|
+
|
10
|
+
def start(self, flow_id: str, task_id: str, task_name: str , execution_order:int):
|
11
|
+
self.duration.print_result = False
|
12
|
+
self.duration.start()
|
13
|
+
with self.stats as _:
|
14
|
+
_.parent_flow_id = flow_id
|
15
|
+
_.execution_order = execution_order
|
16
|
+
_.status = Schema__Flow__Status.RUNNING
|
17
|
+
_.task_id = task_id
|
18
|
+
_.task_name = task_name
|
19
|
+
return self
|
20
|
+
|
21
|
+
def end(self, task_error: Exception):
|
22
|
+
self.duration.end()
|
23
|
+
with self.stats as _:
|
24
|
+
_.duration = self.duration.data()
|
25
|
+
if task_error:
|
26
|
+
_.status = Schema__Flow__Status.FAILED
|
27
|
+
_.error_message = str(task_error)
|
28
|
+
else:
|
29
|
+
_.status = Schema__Flow__Status.COMPLETED
|
30
|
+
return self
|
31
|
+
|
32
|
+
|
33
|
+
def json(self): # Return JSON representation of the stats.
|
34
|
+
return self.stats.json()
|
@@ -0,0 +1,16 @@
|
|
1
|
+
from typing import Dict
|
2
|
+
from osbot_utils.helpers.duration.schemas.Schema__Duration import Schema__Duration
|
3
|
+
from osbot_utils.helpers.flows.schemas.Schema__Flow__Status import Schema__Flow__Status
|
4
|
+
from osbot_utils.helpers.flows.schemas.Schema__Task__Stats import Schema__Task__Stats
|
5
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
6
|
+
|
7
|
+
|
8
|
+
class Schema__Flow__Stats(Type_Safe):
|
9
|
+
duration : Schema__Duration # How long the flow took to execute
|
10
|
+
error_message: str = None # Error message if flow failed
|
11
|
+
failed_tasks : int # Number of failed tasks
|
12
|
+
flow_id : str # Unique identifier for the flow
|
13
|
+
flow_name : str # Name of the flow
|
14
|
+
status : Schema__Flow__Status # 'completed', 'failed', 'running'
|
15
|
+
tasks_stats : Dict[str, Schema__Task__Stats] # Map of task_id to task stats
|
16
|
+
total_tasks : int # Total number of tasks executed
|
@@ -0,0 +1,13 @@
|
|
1
|
+
from osbot_utils.helpers.duration.schemas.Schema__Duration import Schema__Duration
|
2
|
+
from osbot_utils.helpers.flows.schemas.Schema__Flow__Status import Schema__Flow__Status
|
3
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
4
|
+
|
5
|
+
|
6
|
+
class Schema__Task__Stats(Type_Safe):
|
7
|
+
task_id : str # Unique identifier for the task
|
8
|
+
task_name : str # Name of the task
|
9
|
+
execution_order: int # Order in which the task was executed
|
10
|
+
duration : Schema__Duration # How long the task took to execute
|
11
|
+
status : Schema__Flow__Status # 'completed', 'failed', 'running'
|
12
|
+
parent_flow_id : str # ID of the flow that contains this task
|
13
|
+
error_message : str = None # Error message if task failed
|
@@ -1,9 +1,9 @@
|
|
1
|
-
from osbot_utils.
|
2
|
-
from osbot_utils.helpers.ssh.SSH__Execute
|
3
|
-
from osbot_utils.testing.Temp_Zip
|
4
|
-
from osbot_utils.utils.Files
|
5
|
-
from osbot_utils.utils.Process
|
6
|
-
from osbot_utils.utils.Status
|
1
|
+
from osbot_utils.helpers.duration.decorators.capture_duration import capture_duration
|
2
|
+
from osbot_utils.helpers.ssh.SSH__Execute import SSH__Execute
|
3
|
+
from osbot_utils.testing.Temp_Zip import Temp_Zip
|
4
|
+
from osbot_utils.utils.Files import file_not_exists, file_name
|
5
|
+
from osbot_utils.utils.Process import start_process
|
6
|
+
from osbot_utils.utils.Status import status_error
|
7
7
|
|
8
8
|
|
9
9
|
|
@@ -1,13 +1,13 @@
|
|
1
|
-
from osbot_utils.type_safe.Type_Safe
|
2
|
-
from osbot_utils.
|
3
|
-
from osbot_utils.decorators.lists.group_by
|
4
|
-
from osbot_utils.decorators.lists.index_by
|
5
|
-
from osbot_utils.utils.Dev
|
6
|
-
from osbot_utils.utils.Env
|
7
|
-
from osbot_utils.utils.Http
|
8
|
-
from osbot_utils.utils.Misc
|
9
|
-
from osbot_utils.utils.Process
|
10
|
-
from osbot_utils.utils.Status
|
1
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
2
|
+
from osbot_utils.helpers.duration.decorators.capture_duration import capture_duration
|
3
|
+
from osbot_utils.decorators.lists.group_by import group_by
|
4
|
+
from osbot_utils.decorators.lists.index_by import index_by
|
5
|
+
from osbot_utils.utils.Dev import pprint
|
6
|
+
from osbot_utils.utils.Env import get_env
|
7
|
+
from osbot_utils.utils.Http import is_port_open
|
8
|
+
from osbot_utils.utils.Misc import str_to_int, str_to_bool
|
9
|
+
from osbot_utils.utils.Process import start_process, run_process
|
10
|
+
from osbot_utils.utils.Status import status_error
|
11
11
|
|
12
12
|
ENV_VAR__SSH__HOST = 'SSH__HOST'
|
13
13
|
ENV_VAR__SSH__PORT = 'SSH__PORT'
|
@@ -1,7 +1,8 @@
|
|
1
|
-
from osbot_utils.helpers.Print_Table
|
2
|
-
from osbot_utils.
|
1
|
+
from osbot_utils.helpers.Print_Table import Print_Table
|
2
|
+
from osbot_utils.helpers.duration.Duration import Duration
|
3
|
+
from osbot_utils.utils.Call_Stack import Call_Stack
|
4
|
+
|
3
5
|
|
4
|
-
from osbot_utils.testing.Duration import Duration
|
5
6
|
|
6
7
|
class Hook_Method:
|
7
8
|
|
{osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py
RENAMED
@@ -141,9 +141,14 @@ class Type_Safe__Step__From_Json:
|
|
141
141
|
if key_origin is type:
|
142
142
|
if type(dict_key) is str:
|
143
143
|
dict_key = self.deserialize_type__using_value(dict_key)
|
144
|
-
|
145
|
-
if
|
146
|
-
|
144
|
+
key_class_args = get_args(key_class)
|
145
|
+
if key_class_args:
|
146
|
+
expected_dict_type = key_class_args[0]
|
147
|
+
if dict_key != expected_dict_type and not issubclass(dict_key,expected_dict_type):
|
148
|
+
raise TypeError(f"Expected {expected_dict_type} class for key but got instance: {dict_key}")
|
149
|
+
else:
|
150
|
+
if not isinstance(dict_key, key_class):
|
151
|
+
raise TypeError(f"Expected {key_class} class for key but got instance: {dict_key}")
|
147
152
|
new__dict_key = dict_key
|
148
153
|
elif issubclass(key_class, Type_Safe):
|
149
154
|
new__dict_key = self.deserialize_from_dict(key_class(), dict_key)
|
@@ -171,7 +176,7 @@ class Type_Safe__Step__From_Json:
|
|
171
176
|
if type(json_data) is str:
|
172
177
|
json_data = json_parse(json_data)
|
173
178
|
if json_data: # if there is no data or is {} then don't create an object (since this could be caused by bad data being provided)
|
174
|
-
return self.deserialize_from_dict(_cls(), json_data,raise_on_not_found=raise_on_not_found)
|
179
|
+
return self.deserialize_from_dict(_cls(), json_data, raise_on_not_found=raise_on_not_found)
|
175
180
|
return _cls()
|
176
181
|
|
177
182
|
type_safe_step_from_json = Type_Safe__Step__From_Json()
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
v2.31.0
|
@@ -1 +0,0 @@
|
|
1
|
-
v2.29.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
|
{osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/context_managers/disable_root_loggers.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/cache_on_function.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-2.29.0 → osbot_utils-2.31.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-2.29.0 → osbot_utils-2.31.0}/osbot_utils/decorators/methods/function_type_check.py
RENAMED
File without changes
|
File without changes
|
{osbot_utils-2.29.0 → osbot_utils-2.31.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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|