osbot-utils 2.21.0__tar.gz → 2.23.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.21.0 → osbot_utils-2.23.0}/PKG-INFO +2 -2
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/README.md +1 -1
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/Flow.py +14 -1
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/Task.py +2 -2
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/decorators/task.py +1 -1
- osbot_utils-2.23.0/osbot_utils/type_safe/shared/Type_Safe__Json_Compressor.py +119 -0
- osbot_utils-2.23.0/osbot_utils/type_safe/shared/Type_Safe__Json_Compressor__Type_Registry.py +39 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/shared/Type_Safe__Validation.py +43 -4
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Objects.py +1 -1
- osbot_utils-2.23.0/osbot_utils/version +1 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/pyproject.toml +1 -1
- osbot_utils-2.21.0/osbot_utils/version +0 -1
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/LICENSE +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/context_managers/async_invoke.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/context_managers/capture_duration.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/context_managers/print_duration.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/CFormat.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Guid.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Local_Cache.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Obj_Id.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Random_Guid.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Safe_Id.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Str_ASCII.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/actions/Flow__Data.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/actions/Flow__Events.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/actions/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/models/Schema__Flow__Artifact.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/models/Schema__Flow__Result.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/schemas/Schema__Flow.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Data.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Event.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Event__Data.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Log.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Task__Data.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/flows/schemas/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/generators/Generator_Manager.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/generators/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/html/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/python_compatibility/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/python_compatibility/python_3_8.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/trace/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/xml/Xml__Attribute.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/xml/Xml__Element.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/xml/Xml__File.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/xml/Xml__File__Load.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/xml/Xml__File__To_Dict.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/xml/Xml__File__To_Xml.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/xml/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/xml/rss/RSS__Channel.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/xml/rss/RSS__Feed.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/xml/rss/RSS__Feed__Parser.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/xml/rss/RSS__Image.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/helpers/xml/rss/RSS__Item.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Catch.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Duration.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Hook_Method.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/performance/Performance_Measure__Session.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/performance/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Measurement.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Result.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/testing/performance/models/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/Type_Safe.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/Type_Safe__Base.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/Type_Safe__Dict.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/Type_Safe__List.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/Type_Safe__Method.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/Type_Safe__Set.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/Type_Safe__Tuple.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/decorators/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/decorators/type_safe.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/methods/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/methods/type_safe_property.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/shared/Type_Safe__Annotations.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/shared/Type_Safe__Cache.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/shared/Type_Safe__Convert.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/shared/Type_Safe__Not_Cached.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/shared/Type_Safe__Raise_Exception.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/shared/Type_Safe__Shared__Variables.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/shared/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Class_Kwargs.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Default_Kwargs.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Default_Value.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Init.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Set_Attr.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/steps/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/validators/Type_Safe__Validator.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/validators/Validator__Max.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/validators/Validator__Min.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/validators/Validator__One_Of.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/validators/Validator__Regex.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/validators/__init__.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Env.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Files.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Http.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Json.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Misc.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Python_Logger.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Regex.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Str.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Threads.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.0}/osbot_utils/utils/Zip.py +0 -0
- {osbot_utils-2.21.0 → osbot_utils-2.23.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.23.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.21.0 → osbot_utils-2.23.0}/osbot_utils/type_safe/shared/Type_Safe__Validation.py
RENAMED
@@ -1,3 +1,5 @@
|
|
1
|
+
import collections
|
2
|
+
import inspect
|
1
3
|
import types
|
2
4
|
import typing
|
3
5
|
from enum import EnumMeta
|
@@ -151,14 +153,15 @@ class Type_Safe__Validation:
|
|
151
153
|
return all(isinstance(k, key_type) and isinstance(v, value_type)
|
152
154
|
for k, v in value.items()) # if it is not a Union or Annotated types just return None (to give an indication to the caller that the comparison was not made)
|
153
155
|
|
154
|
-
def check_if__type_matches__obj_annotation__for_attr(self, target,
|
155
|
-
attr_name,
|
156
|
-
value
|
157
|
-
) -> Optional[bool]:
|
156
|
+
def check_if__type_matches__obj_annotation__for_attr(self, target, attr_name, value) -> Optional[bool]:
|
158
157
|
annotations = type_safe_cache.get_obj_annotations(target)
|
159
158
|
attr_type = annotations.get(attr_name)
|
160
159
|
if attr_type:
|
161
160
|
origin_attr_type = get_origin(attr_type) # to handle when type definition contains a generic
|
161
|
+
|
162
|
+
if origin_attr_type is collections.abc.Callable: # Handle Callable types
|
163
|
+
return self.is_callable_compatible(value, attr_type) # ISSUE: THIS IS NEVER CALLED
|
164
|
+
|
162
165
|
if origin_attr_type is set:
|
163
166
|
if type(value) is list:
|
164
167
|
return True # if the attribute is a set and the value is a list, then they are compatible
|
@@ -190,6 +193,42 @@ class Type_Safe__Validation:
|
|
190
193
|
return value_type is attr_type
|
191
194
|
return None
|
192
195
|
|
196
|
+
def is_callable_compatible(self, value, expected_type) -> bool:
|
197
|
+
if not callable(value):
|
198
|
+
return False
|
199
|
+
|
200
|
+
expected_args = get_args(expected_type)
|
201
|
+
if not expected_args: # Callable without type hints
|
202
|
+
return True
|
203
|
+
|
204
|
+
if len(expected_args) != 2: # Should have args and return type
|
205
|
+
return False
|
206
|
+
|
207
|
+
expected_param_types = expected_args[0] # First element is tuple of parameter types
|
208
|
+
expected_return_type = expected_args[1] # Second element is return type
|
209
|
+
|
210
|
+
|
211
|
+
try: # Get the signature of the actual value
|
212
|
+
sig = inspect.signature(value)
|
213
|
+
except ValueError: # Some built-in functions don't support introspection
|
214
|
+
return True
|
215
|
+
|
216
|
+
actual_params = list(sig.parameters.values()) # Get actual parameters
|
217
|
+
|
218
|
+
if len(actual_params) != len(expected_param_types): # Check number of parameters matches
|
219
|
+
return False
|
220
|
+
|
221
|
+
for actual_param, expected_param_type in zip(actual_params, expected_param_types): # Check each parameter type
|
222
|
+
if actual_param.annotation != inspect.Parameter.empty:
|
223
|
+
if not self.are_types_compatible_for_assigment(actual_param.annotation, expected_param_type):
|
224
|
+
return False # todo: check if we shouldn't raise an exception here, since this is the only place where we actually know the types that don't match in the method signature
|
225
|
+
|
226
|
+
if sig.return_annotation != inspect.Parameter.empty: # Check return type
|
227
|
+
if not self.are_types_compatible_for_assigment(sig.return_annotation, expected_return_type):
|
228
|
+
return False # todo: check if we shouldn't raise an exception here, since this is the only place where we actually know the types that don't match in the method return type
|
229
|
+
|
230
|
+
return True
|
231
|
+
|
193
232
|
# todo: add cache support to this method
|
194
233
|
def should_skip_type_check(self, var_type): # Determine if type checking should be skipped
|
195
234
|
origin = type_safe_cache.get_origin(var_type) # Use cached get_origin
|
@@ -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.23.0
|
@@ -1 +0,0 @@
|
|
1
|
-
v2.21.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.21.0 → osbot_utils-2.23.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.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/cache_on_function.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-2.21.0 → osbot_utils-2.23.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.21.0 → osbot_utils-2.23.0}/osbot_utils/decorators/methods/function_type_check.py
RENAMED
File without changes
|
File without changes
|
{osbot_utils-2.21.0 → osbot_utils-2.23.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.21.0 → osbot_utils-2.23.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.21.0 → osbot_utils-2.23.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.21.0 → osbot_utils-2.23.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
|