osbot-utils 2.22.0__tar.gz → 2.24.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.22.0 → osbot_utils-2.24.0}/PKG-INFO +2 -2
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/README.md +1 -1
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/Flow.py +14 -1
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/Task.py +2 -2
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/decorators/task.py +1 -1
- osbot_utils-2.24.0/osbot_utils/type_safe/shared/Type_Safe__Json_Compressor.py +119 -0
- osbot_utils-2.24.0/osbot_utils/type_safe/shared/Type_Safe__Json_Compressor__Type_Registry.py +39 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py +7 -1
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Objects.py +1 -1
- osbot_utils-2.24.0/osbot_utils/version +1 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/pyproject.toml +1 -1
- osbot_utils-2.22.0/osbot_utils/version +0 -1
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/LICENSE +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/context_managers/async_invoke.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/context_managers/capture_duration.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/context_managers/print_duration.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/CFormat.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Guid.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Local_Cache.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Obj_Id.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Random_Guid.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Safe_Id.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Str_ASCII.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/actions/Flow__Data.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/actions/Flow__Events.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/actions/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/models/Schema__Flow__Artifact.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/models/Schema__Flow__Result.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/schemas/Schema__Flow.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Data.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Event.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Event__Data.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Log.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Task__Data.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/flows/schemas/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/generators/Generator_Manager.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/generators/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/html/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/python_compatibility/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/python_compatibility/python_3_8.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/trace/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/xml/Xml__Attribute.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/xml/Xml__Element.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/xml/Xml__File.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/xml/Xml__File__Load.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/xml/Xml__File__To_Dict.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/xml/Xml__File__To_Xml.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/xml/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/xml/rss/RSS__Channel.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/xml/rss/RSS__Feed.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/xml/rss/RSS__Feed__Parser.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/xml/rss/RSS__Image.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/xml/rss/RSS__Item.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Catch.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Duration.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Hook_Method.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/performance/Performance_Measure__Session.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/performance/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Measurement.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Result.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/testing/performance/models/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/Type_Safe.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/Type_Safe__Base.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/Type_Safe__Dict.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/Type_Safe__List.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/Type_Safe__Method.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/Type_Safe__Set.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/Type_Safe__Tuple.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/decorators/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/decorators/type_safe.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/methods/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/methods/type_safe_property.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/shared/Type_Safe__Annotations.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/shared/Type_Safe__Cache.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/shared/Type_Safe__Convert.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/shared/Type_Safe__Not_Cached.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/shared/Type_Safe__Raise_Exception.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/shared/Type_Safe__Shared__Variables.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/shared/Type_Safe__Validation.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/shared/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Class_Kwargs.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Default_Kwargs.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Default_Value.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Init.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Set_Attr.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/steps/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/validators/Type_Safe__Validator.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/validators/Validator__Max.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/validators/Validator__Min.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/validators/Validator__One_Of.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/validators/Validator__Regex.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/validators/__init__.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Env.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Files.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Http.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Json.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Misc.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Python_Logger.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Regex.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Str.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Threads.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/Zip.py +0 -0
- {osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/utils/__init__.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: osbot_utils
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.24.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
|
|
@@ -41,6 +41,7 @@ class Flow(Type_Safe):
|
|
41
41
|
executed_tasks : typing.List
|
42
42
|
resolved_args : tuple
|
43
43
|
resolved_kwargs : dict
|
44
|
+
setup_completed : bool
|
44
45
|
|
45
46
|
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
|
46
47
|
event_data = Flow_Run__Event_Data()
|
@@ -64,6 +65,10 @@ class Flow(Type_Safe):
|
|
64
65
|
flow_events.on__new_result(event_data)
|
65
66
|
self.flow_data.add_result(key, description)
|
66
67
|
|
68
|
+
def check_setup(self):
|
69
|
+
if self.setup_completed is False:
|
70
|
+
raise ValueError("Error starting Flow, setup has not been called, use .setup(target, *args, **kwargs) to configure it")
|
71
|
+
|
67
72
|
def config_logger(self):
|
68
73
|
with self.logger as _:
|
69
74
|
_.set_log_level(logging.DEBUG)
|
@@ -75,6 +80,7 @@ class Flow(Type_Safe):
|
|
75
80
|
return self.execute_flow()
|
76
81
|
|
77
82
|
def execute_flow(self, flow_run_params=None): # todo: see if it makes more sense to call this start_flow_run
|
83
|
+
self.check_setup()
|
78
84
|
flow_events.on__flow__start(self.flow_event_data())
|
79
85
|
self.log_debug(f"Created flow run '{self.f__flow_id()}' for flow '{self.f__flow_name()}'")
|
80
86
|
self.set_flow_run_params(flow_run_params)
|
@@ -240,7 +246,13 @@ class Flow(Type_Safe):
|
|
240
246
|
self.log_info(f"flow_run_params: {flow_run_params}")
|
241
247
|
self.add_flow_artifact(description="Data received via FastAPI's request.json()", key='post-data', data=flow_run_params)
|
242
248
|
|
243
|
-
def
|
249
|
+
def main(self, *args, **kwargs): # method to be overwritten by implementing classes
|
250
|
+
pass
|
251
|
+
|
252
|
+
def setup(self, target=None, *args, **kwargs):
|
253
|
+
if target is None:
|
254
|
+
target = self.main
|
255
|
+
|
244
256
|
with self as _:
|
245
257
|
_.cformat.auto_bold = True
|
246
258
|
_.set_flow_target (target, *args, **kwargs)
|
@@ -250,6 +262,7 @@ class Flow(Type_Safe):
|
|
250
262
|
_.flow_data.set_flow_id (self.flow_id)
|
251
263
|
_.flow_data.set_flow_name(self.flow_name)
|
252
264
|
_.add_event_listener()
|
265
|
+
_.setup_completed = True
|
253
266
|
return self
|
254
267
|
|
255
268
|
def setup_flow_run(self):
|
@@ -103,7 +103,7 @@ class Task(Type_Safe):
|
|
103
103
|
if self.task_error:
|
104
104
|
self.log_error(f_red(f"Error executing '{self.task_name}' task: {self.task_error}"))
|
105
105
|
if self.raise_on_error:
|
106
|
-
raise Exception(f"'{self.task_name}' failed and task raise_on_error was set to True. Stopping flow execution")
|
106
|
+
raise Exception(f"'{self.task_name}' failed and task raise_on_error was set to True. Stopping flow execution", self.task_error)
|
107
107
|
|
108
108
|
self.print_task_finished_message()
|
109
109
|
|
@@ -116,7 +116,7 @@ class Task(Type_Safe):
|
|
116
116
|
for frame_info in stack:
|
117
117
|
frame = frame_info.frame
|
118
118
|
for var_name, var_value in list(frame.f_locals.items()): # Check all local variables in the frame
|
119
|
-
if
|
119
|
+
if isinstance(var_value, Flow):
|
120
120
|
return var_value
|
121
121
|
return None
|
122
122
|
|
@@ -0,0 +1,119 @@
|
|
1
|
+
from typing import Dict, Any, Type
|
2
|
+
from osbot_utils.type_safe.Type_Safe__Base import Type_Safe__Base
|
3
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
4
|
+
from osbot_utils.type_safe.shared.Type_Safe__Cache import type_safe_cache
|
5
|
+
from osbot_utils.type_safe.shared.Type_Safe__Json_Compressor__Type_Registry import Type_Safe__Json_Compressor__Type_Registry
|
6
|
+
from osbot_utils.utils.Objects import class_full_name
|
7
|
+
|
8
|
+
class Type_Safe__Json_Compressor(Type_Safe__Base):
|
9
|
+
|
10
|
+
def __init__(self):
|
11
|
+
self.type_registry = Type_Safe__Json_Compressor__Type_Registry()
|
12
|
+
|
13
|
+
def compress(self, data: dict) -> dict:
|
14
|
+
if not data:
|
15
|
+
return data
|
16
|
+
|
17
|
+
self.type_registry.clear()
|
18
|
+
compressed = self.compress_object(data)
|
19
|
+
|
20
|
+
if self.type_registry.registry:
|
21
|
+
return { "_type_registry": self.type_registry.reverse,
|
22
|
+
**compressed }
|
23
|
+
return compressed
|
24
|
+
|
25
|
+
def compress_object(self, obj: Any) -> Any:
|
26
|
+
if isinstance(obj, Type_Safe):
|
27
|
+
annotations = type_safe_cache.get_obj_annotations(obj)
|
28
|
+
return self.process_type_safe_object(obj, annotations)
|
29
|
+
elif isinstance(obj, dict):
|
30
|
+
return self.compress_dict(obj)
|
31
|
+
elif isinstance(obj, list):
|
32
|
+
return [self.compress_object(item) for item in obj]
|
33
|
+
elif isinstance(obj, tuple):
|
34
|
+
return tuple(self.compress_object(item) for item in obj)
|
35
|
+
elif isinstance(obj, set):
|
36
|
+
return {self.compress_object(item) for item in obj}
|
37
|
+
return obj
|
38
|
+
|
39
|
+
def process_type_safe_object(self, obj : Type_Safe ,
|
40
|
+
annotations: Dict
|
41
|
+
) -> Dict:
|
42
|
+
result = {}
|
43
|
+
for key, value in obj.__dict__.items():
|
44
|
+
if key.startswith('_'): # Skip internal attributes
|
45
|
+
continue
|
46
|
+
if key in annotations:
|
47
|
+
annotation = annotations[key]
|
48
|
+
result[key] = self.compress_annotated_value(value, annotation)
|
49
|
+
else:
|
50
|
+
result[key] = self.compress_object(value)
|
51
|
+
return result
|
52
|
+
|
53
|
+
def compress_annotated_value(self, value : Any ,
|
54
|
+
annotation : Any
|
55
|
+
) -> Any:
|
56
|
+
origin = type_safe_cache.get_origin(annotation)
|
57
|
+
if origin in (type, Type): # Handle Type annotations
|
58
|
+
if value:
|
59
|
+
return self.type_registry.register_type(class_full_name(value))
|
60
|
+
return None
|
61
|
+
elif origin is dict: # Handle Dict annotations
|
62
|
+
return self.compress_dict(value)
|
63
|
+
elif origin in (list, tuple, set): # Handle sequence annotations
|
64
|
+
return self.compress_sequence(value)
|
65
|
+
elif isinstance(value, Type_Safe): # Handle nested Type_Safe objects
|
66
|
+
return self.compress_object(value)
|
67
|
+
return value
|
68
|
+
|
69
|
+
def compress_dict(self, data: Dict) -> Dict:
|
70
|
+
if not isinstance(data, dict):
|
71
|
+
return data
|
72
|
+
|
73
|
+
result = {}
|
74
|
+
for key, value in data.items():
|
75
|
+
compressed_key = self.compress_object(key) if isinstance(key, Type_Safe) else key
|
76
|
+
compressed_value = self.compress_object(value)
|
77
|
+
result[compressed_key] = compressed_value
|
78
|
+
return result
|
79
|
+
|
80
|
+
def compress_sequence(self, sequence: Any) -> Any:
|
81
|
+
if isinstance(sequence, (list, tuple, set)):
|
82
|
+
compressed = [self.compress_object(item) for item in sequence]
|
83
|
+
if isinstance(sequence, list):
|
84
|
+
return compressed
|
85
|
+
elif isinstance(sequence, tuple):
|
86
|
+
return tuple(compressed)
|
87
|
+
else:
|
88
|
+
return set(compressed)
|
89
|
+
return sequence
|
90
|
+
|
91
|
+
def decompress(self, data: dict) -> dict:
|
92
|
+
if not data or "_type_registry" not in data:
|
93
|
+
return data
|
94
|
+
|
95
|
+
registry = data.pop("_type_registry")
|
96
|
+
return self.expand_types(data.copy(), registry)
|
97
|
+
|
98
|
+
def expand_types(self, obj : Any ,
|
99
|
+
type_lookup : Dict[str, str]
|
100
|
+
) -> Any:
|
101
|
+
if isinstance(obj, dict):
|
102
|
+
return {k: self.expand_value(v, type_lookup) for k, v in obj.items()}
|
103
|
+
elif isinstance(obj, list):
|
104
|
+
return [self.expand_types(item, type_lookup) for item in obj]
|
105
|
+
elif isinstance(obj, tuple):
|
106
|
+
return tuple(self.expand_types(item, type_lookup) for item in obj)
|
107
|
+
elif isinstance(obj, set):
|
108
|
+
return {self.expand_types(item, type_lookup) for item in obj}
|
109
|
+
return obj
|
110
|
+
|
111
|
+
def expand_value(self, value : Any ,
|
112
|
+
type_lookup : Dict[str, str]
|
113
|
+
) -> Any:
|
114
|
+
if isinstance(value, str) and value.startswith('@'):
|
115
|
+
return type_lookup.get(value, value)
|
116
|
+
return self.expand_types(value, type_lookup)
|
117
|
+
|
118
|
+
def register_type(self, type_path: str) -> str:
|
119
|
+
return self.type_registry.register_type(type_path)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
from typing import Dict, Optional
|
2
|
+
|
3
|
+
|
4
|
+
class Type_Safe__Json_Compressor__Type_Registry:
|
5
|
+
|
6
|
+
registry : Dict[str, str]
|
7
|
+
reverse : Dict[str, str]
|
8
|
+
|
9
|
+
def __init__(self):
|
10
|
+
self.registry = {}
|
11
|
+
self.reverse = {}
|
12
|
+
|
13
|
+
def create_reference_name(self, type_path: str) -> str:
|
14
|
+
parts = type_path.split('.')
|
15
|
+
class_name = parts[-1]
|
16
|
+
parts = class_name.split('__')
|
17
|
+
|
18
|
+
if len(parts) > 1:
|
19
|
+
name_parts = []
|
20
|
+
for part in parts:
|
21
|
+
name_parts.append(part.lower())
|
22
|
+
return f"@{'_'.join(name_parts)}"
|
23
|
+
|
24
|
+
return f"@{class_name.lower()}"
|
25
|
+
|
26
|
+
def register_type(self, type_path: str)-> str:
|
27
|
+
if type_path not in self.registry:
|
28
|
+
ref = self.create_reference_name(type_path)
|
29
|
+
self.registry[type_path] = ref
|
30
|
+
self.reverse[ref] = type_path
|
31
|
+
return ref
|
32
|
+
return self.registry[type_path]
|
33
|
+
|
34
|
+
def get_type(self, ref: str) -> Optional[str]:
|
35
|
+
return self.reverse.get(ref)
|
36
|
+
|
37
|
+
def clear(self):
|
38
|
+
self.registry.clear()
|
39
|
+
self.reverse.clear()
|
{osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py
RENAMED
@@ -137,7 +137,13 @@ class Type_Safe__Step__From_Json:
|
|
137
137
|
new_value = Type_Safe__Dict(expected_key_type=key_class, expected_value_type=value_class)
|
138
138
|
|
139
139
|
for dict_key, dict_value in value.items():
|
140
|
-
|
140
|
+
key_origin = type_safe_cache.get_origin(key_class)
|
141
|
+
if key_origin is type:
|
142
|
+
expected_dict_type = get_args(key_class)[0]
|
143
|
+
if dict_key != expected_dict_type and not issubclass(dict_key,expected_dict_type):
|
144
|
+
raise TypeError(f"Expected {expected_dict_type} class for key but got instance: {dict_key}")
|
145
|
+
new__dict_key = get_args(key_class)[0]
|
146
|
+
elif issubclass(key_class, Type_Safe):
|
141
147
|
new__dict_key = self.deserialize_from_dict(key_class(), dict_key)
|
142
148
|
else:
|
143
149
|
new__dict_key = key_class(dict_key)
|
@@ -273,7 +273,7 @@ def serialize_to_dict(obj):
|
|
273
273
|
from enum import Enum
|
274
274
|
from typing import List
|
275
275
|
|
276
|
-
if isinstance(obj, (str, int, float, bool, bytes, Decimal)) or obj is None:
|
276
|
+
if isinstance(obj, (str, int, float, bool, bytes, Decimal)) or obj is None: # todo: add support for objects like datetime
|
277
277
|
return obj
|
278
278
|
elif isinstance(obj, Enum):
|
279
279
|
return obj.name
|
@@ -0,0 +1 @@
|
|
1
|
+
v2.24.0
|
@@ -1 +0,0 @@
|
|
1
|
-
v2.22.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
|
{osbot_utils-2.22.0 → osbot_utils-2.24.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-2.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/cache_on_function.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-2.22.0 → osbot_utils-2.24.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.22.0 → osbot_utils-2.24.0}/osbot_utils/decorators/methods/function_type_check.py
RENAMED
File without changes
|
File without changes
|
{osbot_utils-2.22.0 → osbot_utils-2.24.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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-2.22.0 → osbot_utils-2.24.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|