osbot-utils 2.80.0__tar.gz → 2.82.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.80.0 → osbot_utils-2.82.0}/PKG-INFO +2 -2
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/README.md +1 -1
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/Type_Safe__Base.py +8 -1
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/methods/Type_Safe__Method.py +78 -49
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/shared/Type_Safe__Validation.py +40 -12
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/steps/Type_Safe__Step__Set_Attr.py +35 -7
- osbot_utils-2.82.0/osbot_utils/version +1 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/pyproject.toml +1 -1
- osbot_utils-2.80.0/osbot_utils/version +0 -1
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/LICENSE +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/context_managers/async_invoke.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/CFormat.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/Local_Cache.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/Obj_Id.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/Str_ASCII.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/cache_on_self/Cache_Controller.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/cache_on_self/Cache_Key_Generator.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/cache_on_self/Cache_Metrics.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/cache_on_self/Cache_On_Self.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/cache_on_self/Cache_Storage.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/cache_on_self/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/duration/Duration.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/duration/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/duration/decorators/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/duration/decorators/capture_duration.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/duration/decorators/duration.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/duration/decorators/print_duration.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/duration/schemas/Schema__Duration.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/duration/schemas/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/Flow.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/Task.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/actions/Flow__Data.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/actions/Flow__Events.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/actions/Flow__Stats__Collector.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/actions/Task__Stats__Collector.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/actions/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/models/Schema__Flow__Artifact.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/models/Schema__Flow__Result.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/schemas/Schema__Flow.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Data.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Event.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Event__Data.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Log.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Stats.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Status.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Task__Data.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/schemas/Schema__Task__Stats.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/flows/schemas/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/generators/Generator_Manager.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/generators/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/schemas/Schema__Html_Document.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/schemas/Schema__Html_Node.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/schemas/Schema__Html_Node__Data.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/schemas/Schema__Html_Node__Data__Type.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/schemas/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/tags/Tag__Base.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/tags/Tag__Body.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/tags/Tag__Div.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/tags/Tag__H.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/tags/Tag__HR.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/tags/Tag__Head.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/tags/Tag__Html.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/tags/Tag__Link.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/tags/Tag__Style.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/tags/Tag__Text.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/tags/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/transformers/CSS_Dict__To__Css.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/transformers/Html_Dict__To__Html.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/transformers/Html_Dict__To__Html_Document.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/transformers/Html_Dict__To__Html_Tags.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/transformers/Html_Document__To__Html_Dict.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/transformers/Html__To__Html_Dict.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/transformers/Html__To__Html_Document.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/transformers/Html__To__Html_Tag.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/transformers/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/utils/Html__Query.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/html/utils/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/actions/LLM_Request__Execute.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/actions/Type_Safe__Schema_For__LLMs.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/actions/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/builders/LLM_Request__Builder.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/builders/LLM_Request__Builder__Open_AI.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/builders/LLM_Request__Factory.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/builders/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/cache/LLM_Cache__Path_Generator.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/cache/LLM_Request__Cache.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/cache/LLM_Request__Cache__File_System.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/cache/LLM_Request__Cache__Storage.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/cache/Virtual_Storage__Local__Folder.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/cache/Virtual_Storage__Sqlite.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/cache/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/platforms/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/platforms/open_ai/API__LLM__Open_AI.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/platforms/open_ai/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/schemas/Safe_Str__LLM__Model_Name.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Cache__Index.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Data.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Function_Call.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Message__Content.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Message__Role.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Response.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Response__Cache.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/llms/schemas/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/python_compatibility/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/python_compatibility/python_3_8.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/trace/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/transformers/Dict__To__Toml.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/xml/Xml__Attribute.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/xml/Xml__Element.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/xml/Xml__File.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/xml/Xml__File__Load.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/xml/Xml__File__To_Dict.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/xml/Xml__File__To_Xml.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/xml/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/xml/rss/RSS__Channel.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/xml/rss/RSS__Feed.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/xml/rss/RSS__Feed__Parser.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/xml/rss/RSS__Image.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/helpers/xml/rss/RSS__Item.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Catch.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Hook_Method.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/performance/Performance_Measure__Session.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/performance/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Measurement.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Result.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/performance/models/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/test_data/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/testing/test_data/const__test__data__html.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/Type_Safe.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/Type_Safe__Primitive.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_float/Safe_Float.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_float/Safe_Float__Engineering.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_float/Safe_Float__Money.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_float/Safe_Float__Percentage_Exact.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_float/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_int/Safe_Int.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_int/Timestamp_Now.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_int/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/Enum__Safe_Str__Regex_Mode.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/Safe_Str.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/cryptography/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/cryptography/hashes/Safe_Str__Hash.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/cryptography/hashes/Safe_Str__SHA1.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/cryptography/hashes/Safe_Str__SHA1__Short.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/cryptography/hashes/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/cryptography/nacl/Safe_Str__NaCl__Private_Key.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/cryptography/nacl/Safe_Str__NaCl__Public_Key.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/cryptography/nacl/Schema__NaCl__Keys.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/cryptography/nacl/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/filesystem/Safe_Str__File__Name.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/filesystem/Safe_Str__File__Path.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/filesystem/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/git/Safe_Str__Git__Branch.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/git/Safe_Str__Git__Ref.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/git/Safe_Str__Git__Ref_Base.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/git/Safe_Str__Git__Tag.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/git/Safe_Str__Version.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/git/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/github/Safe_Str__GitHub__Repo.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/github/Safe_Str__GitHub__Repo_Name.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/github/Safe_Str__GitHub__Repo_Owner.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/github/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/http/Safe_Str__Http__Content_Type.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/http/Safe_Str__Http__ETag.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/http/Safe_Str__Http__Last_Modified.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/http/Safe_Str__Http__Text.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/http/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/identifiers/Guid.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/identifiers/Random_Guid.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/identifiers/Random_Guid_Short.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/identifiers/Safe_Id.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/identifiers/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/text/Safe_Str__Text.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/text/Safe_Str__Text__Dangerous.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/text/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/web/Safe_Str__Html.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/web/Safe_Str__IP_Address.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/web/Safe_Str__Url.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_str/web/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_uint/Safe_UInt.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_uint/Safe_UInt__Byte.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_uint/Safe_UInt__FileSize.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_uint/Safe_UInt__Percentage.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_uint/Safe_UInt__Port.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/primitives/safe_uint/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/collections/Type_Safe__Dict.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/collections/Type_Safe__List.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/collections/Type_Safe__Set.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/collections/Type_Safe__Tuple.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/collections/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/decorators/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/decorators/type_safe.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/methods/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/methods/type_safe_property.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/shared/Type_Safe__Annotations.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/shared/Type_Safe__Cache.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/shared/Type_Safe__Convert.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/shared/Type_Safe__Json_Compressor.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/shared/Type_Safe__Json_Compressor__Type_Registry.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/shared/Type_Safe__Not_Cached.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/shared/Type_Safe__Raise_Exception.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/shared/Type_Safe__Shared__Variables.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/shared/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/steps/Type_Safe__Step__Class_Kwargs.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/steps/Type_Safe__Step__Default_Kwargs.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/steps/Type_Safe__Step__Default_Value.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/steps/Type_Safe__Step__From_Json.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/steps/Type_Safe__Step__Init.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/type_safe_core/steps/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/validators/Type_Safe__Validator.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/validators/Validator__Max.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/validators/Validator__Min.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/validators/Validator__One_Of.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/validators/Validator__Regex.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/type_safe/validators/__init__.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Env.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Files.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Http.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Json.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Misc.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Objects.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Python_Logger.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Regex.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Str.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Threads.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/utils/Zip.py +0 -0
- {osbot_utils-2.80.0 → osbot_utils-2.82.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.82.0
|
4
4
|
Summary: OWASP Security Bot - Utils
|
5
5
|
License: MIT
|
6
6
|
Author: Dinis Cruz
|
@@ -21,7 +21,7 @@ Description-Content-Type: text/markdown
|
|
21
21
|
|
22
22
|
# OSBot-Utils
|
23
23
|
|
24
|
-

|
25
25
|

|
26
26
|

|
27
27
|

|
@@ -1,6 +1,6 @@
|
|
1
1
|
# OSBot-Utils
|
2
2
|
|
3
|
-

|
4
4
|

|
5
5
|

|
6
6
|

|
@@ -1,5 +1,5 @@
|
|
1
1
|
import types
|
2
|
-
from typing import get_args, Union, Optional, Any, ForwardRef
|
2
|
+
from typing import get_args, Union, Optional, Any, ForwardRef, Literal
|
3
3
|
from osbot_utils.helpers.Obj_Id import Obj_Id
|
4
4
|
from osbot_utils.type_safe.type_safe_core.shared.Type_Safe__Cache import type_safe_cache
|
5
5
|
|
@@ -13,6 +13,13 @@ class Type_Safe__Base:
|
|
13
13
|
return True
|
14
14
|
origin = type_safe_cache.get_origin(expected_type)
|
15
15
|
args = get_args(expected_type)
|
16
|
+
|
17
|
+
if origin is Literal: # Add Literal support
|
18
|
+
if item not in args:
|
19
|
+
allowed_values = ', '.join(repr(v) for v in args)
|
20
|
+
raise ValueError(f"Literal value must be one of {allowed_values}, got {repr(item)}")
|
21
|
+
return True
|
22
|
+
|
16
23
|
if origin is None:
|
17
24
|
if expected_type in EXACT_TYPE_MATCH:
|
18
25
|
if type(item) is expected_type:
|
@@ -2,6 +2,7 @@ import collections
|
|
2
2
|
import inspect # For function introspection
|
3
3
|
from enum import Enum
|
4
4
|
from typing import get_args, get_origin, Union, List, Any, Dict # For type hinting utilities
|
5
|
+
from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
|
5
6
|
from osbot_utils.type_safe.type_safe_core.shared.Type_Safe__Shared__Variables import IMMUTABLE_TYPES
|
6
7
|
|
7
8
|
|
@@ -18,24 +19,53 @@ class Type_Safe__Method:
|
|
18
19
|
raise ValueError(f"Parameter '{param_name}' uses lowercase 'any' instead of 'Any' from typing module. "
|
19
20
|
f"Please use 'from typing import Any' and annotate as '{param_name}: Any'")
|
20
21
|
|
21
|
-
def
|
22
|
+
def convert_primitive_parameters(self, bound_args): # Convert parameters to Type_Safe__Primitive types where applicable
|
23
|
+
|
24
|
+
for param_name, param_value in bound_args.arguments.items():
|
25
|
+
if param_name == 'self' or param_name not in self.annotations:
|
26
|
+
continue
|
27
|
+
|
28
|
+
expected_type = self.annotations[param_name]
|
29
|
+
|
30
|
+
if not (isinstance(expected_type, type) and issubclass(expected_type, Type_Safe__Primitive)): # Check if expected type is a Type_Safe__Primitive subclass
|
31
|
+
continue
|
32
|
+
|
33
|
+
primitive_base = expected_type.__primitive_base__ # Try direct conversion for common cases
|
34
|
+
|
35
|
+
if primitive_base in (int, float) and isinstance(param_value, str): # Handle string to int/float conversion
|
36
|
+
try:
|
37
|
+
bound_args.arguments[param_name] = expected_type(param_value)
|
38
|
+
continue
|
39
|
+
except (ValueError, TypeError):
|
40
|
+
pass # Let normal validation handle the error
|
41
|
+
|
42
|
+
if primitive_base and isinstance(param_value, primitive_base): # Handle values that match the primitive base type
|
43
|
+
try:
|
44
|
+
bound_args.arguments[param_name] = expected_type(param_value)
|
45
|
+
except (ValueError, TypeError):
|
46
|
+
pass # Let normal validation handle the error
|
47
|
+
|
48
|
+
def handle_type_safety(self, args: tuple, kwargs: dict): # Main method to handle type safety
|
22
49
|
self.check_for_any_use()
|
23
|
-
bound_args = self.bind_args(args, kwargs)
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
bound_args
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
50
|
+
bound_args = self.bind_args(args, kwargs) # Bind arguments to parameters
|
51
|
+
|
52
|
+
self.convert_primitive_parameters(bound_args) # Pre-process primitive type conversions
|
53
|
+
|
54
|
+
for param_name, param_value in bound_args.arguments.items(): # Iterate through arguments
|
55
|
+
if param_name != 'self': # Skip self parameter
|
56
|
+
self.validate_parameter(param_name, param_value, bound_args) # Validate each parameter
|
57
|
+
return bound_args # Return bound arguments
|
58
|
+
|
59
|
+
def bind_args(self, args: tuple, kwargs: dict): # Bind args to parameters
|
60
|
+
bound_args = self.sig.bind(*args, **kwargs) # Bind arguments to signature
|
61
|
+
bound_args.apply_defaults() # Apply default values
|
62
|
+
return bound_args # Return bound arguments
|
63
|
+
|
64
|
+
def validate_parameter(self, param_name: str, param_value: Any, bound_args): # Validate a single parameter
|
65
|
+
self.validate_immutable_parameter(param_name, param_value) # Validata the param_value (make sure if it set it is on of IMMUTABLE_TYPES)
|
66
|
+
if param_name in self.annotations: # Check if parameter is annotated
|
67
|
+
expected_type = self.annotations[param_name] # Get expected type
|
68
|
+
self.check_parameter_value(param_name, param_value, expected_type, bound_args) # Check value against type
|
39
69
|
|
40
70
|
def validate_immutable_parameter(self, param_name, param_value):
|
41
71
|
param = self.sig.parameters.get(param_name) # Check if this is a default value from a mutable type
|
@@ -101,45 +131,44 @@ class Type_Safe__Method:
|
|
101
131
|
def is_list_type(self, origin_type: Any) -> bool: # Check if type is a List
|
102
132
|
return origin_type is list or origin_type is List # Check against list types
|
103
133
|
|
104
|
-
def validate_list_type(self, param_name: str,
|
105
|
-
param_value: Any, expected_type: Any):
|
106
|
-
if not isinstance(param_value, list):
|
107
|
-
raise ValueError(f"Parameter '{param_name}' expected a list but got {type(param_value)}")
|
108
|
-
|
109
|
-
item_type = get_args(expected_type)[0]
|
110
|
-
item_origin = get_origin(item_type)
|
111
|
-
|
112
|
-
if item_origin is dict or item_origin is Dict:
|
113
|
-
key_type, value_type = get_args(item_type)
|
114
|
-
for i, item in enumerate(param_value):
|
115
|
-
if not isinstance(item, dict):
|
116
|
-
raise ValueError(f"List item at index {i} expected dict but got {type(item)}")
|
117
|
-
if key_type is Any and value_type is Any:
|
118
|
-
continue
|
119
|
-
for k, v in item.items():
|
120
|
-
if key_type is not Any and not isinstance(k, key_type):
|
121
|
-
raise ValueError(f"Dict key '{k}' at index {i} expected type {key_type}, but got {type(k)}")
|
122
|
-
if value_type is not Any and not isinstance(v, value_type):
|
123
|
-
raise ValueError(f"Dict value for key '{k}' at index {i} expected type {value_type}, but got {type(v)}")
|
124
|
-
elif item_origin is collections.abc.Callable:
|
125
|
-
for i, item in enumerate(param_value):
|
126
|
-
if not callable(item):
|
127
|
-
raise ValueError(f"List item at index {i} expected callable but got {type(item)}")
|
134
|
+
def validate_list_type(self, param_name: str, # Validate list type and contents
|
135
|
+
param_value: Any, expected_type: Any): # List parameters
|
136
|
+
if not isinstance(param_value, list): # Check if value is a list
|
137
|
+
raise ValueError(f"Parameter '{param_name}' expected a list but got {type(param_value)}") # Raise error if not list
|
138
|
+
|
139
|
+
item_type = get_args(expected_type)[0] # Get list item type
|
140
|
+
item_origin = get_origin(item_type) # Get origin of item type
|
141
|
+
|
142
|
+
if item_origin is dict or item_origin is Dict: # Handle Dict[K, V] items
|
143
|
+
key_type, value_type = get_args(item_type) # Extract key and value types
|
144
|
+
for i, item in enumerate(param_value): # Validate each dict in list
|
145
|
+
if not isinstance(item, dict): # Check item is a dict
|
146
|
+
raise ValueError(f"List item at index {i} expected dict but got {type(item)}") # Raise error if not dict
|
147
|
+
if key_type is Any and value_type is Any: # Skip validation if both are Any
|
148
|
+
continue # No type checking needed
|
149
|
+
for k, v in item.items(): # Validate dict contents
|
150
|
+
if key_type is not Any and not isinstance(k, key_type): # Check key type if not Any
|
151
|
+
raise ValueError(f"Dict key '{k}' at index {i} expected type {key_type}, but got {type(k)}") # Raise error for invalid key
|
152
|
+
if value_type is not Any and not isinstance(v, value_type): # Check value type if not Any
|
153
|
+
raise ValueError(f"Dict value for key '{k}' at index {i} expected type {value_type}, but got {type(v)}") # Raise error for invalid value
|
154
|
+
elif item_origin is collections.abc.Callable: # Handle Callable[[...], ...] items
|
155
|
+
for i, item in enumerate(param_value): # Validate each callable in list
|
156
|
+
if not callable(item): # Check item is callable
|
157
|
+
raise ValueError(f"List item at index {i} expected callable but got {type(item)}") # Raise error if not callable
|
128
158
|
# Note: Full signature validation would require is_callable_compatible method
|
129
|
-
elif item_origin is not None:
|
159
|
+
elif item_origin is not None: # Handle other subscripted types
|
130
160
|
raise NotImplementedError(f"Validation for list items with subscripted type"
|
131
161
|
f" '{item_type}' is not yet supported "
|
132
|
-
f"in parameter '{param_name}'.")
|
133
|
-
else:
|
134
|
-
for i, item in enumerate(param_value):
|
135
|
-
if not isinstance(item, item_type):
|
136
|
-
raise ValueError(f"List item at index {i} expected type {item_type}, but got {type(item)}")
|
162
|
+
f"in parameter '{param_name}'.") # todo: add support for checking for subscripted types
|
163
|
+
else: # Handle non-subscripted types
|
164
|
+
for i, item in enumerate(param_value): # Check each list item
|
165
|
+
if not isinstance(item, item_type): # Validate item type
|
166
|
+
raise ValueError(f"List item at index {i} expected type {item_type}, but got {type(item)}") # Raise error for invalid item
|
137
167
|
|
138
|
-
def validate_type_parameter(self, param_name: str, param_value: Any, expected_type: Any):
|
168
|
+
def validate_type_parameter(self, param_name: str, param_value: Any, expected_type: Any): # Validate a Type[T] parameter
|
139
169
|
if not isinstance(param_value, type):
|
140
170
|
raise ValueError(f"Parameter '{param_name}' expected a type class but got {type(param_value)}")
|
141
171
|
|
142
|
-
|
143
172
|
type_args = get_args(expected_type) # Extract the T from Type[T]
|
144
173
|
if type_args:
|
145
174
|
required_base = type_args[0] # get direct type (this doesn't handle Forward refs)
|
@@ -3,7 +3,7 @@ import inspect
|
|
3
3
|
import types
|
4
4
|
import typing
|
5
5
|
from enum import EnumMeta
|
6
|
-
from typing import Any, Annotated, Optional, get_args, get_origin, ForwardRef, Type, Dict, _GenericAlias
|
6
|
+
from typing import Any, Annotated, Optional, get_args, get_origin, ForwardRef, Type, Dict, _GenericAlias # noqa (_GenericAlias does exist)
|
7
7
|
from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
|
8
8
|
from osbot_utils.type_safe.type_safe_core.shared.Type_Safe__Annotations import type_safe_annotations
|
9
9
|
from osbot_utils.type_safe.type_safe_core.shared.Type_Safe__Cache import type_safe_cache
|
@@ -50,12 +50,21 @@ class Type_Safe__Validation:
|
|
50
50
|
return True
|
51
51
|
if target_type is MagicMock:
|
52
52
|
return True
|
53
|
-
# if class_full_name(source_type) == 'unittest.mock.MagicMock':
|
54
|
-
# return True
|
55
|
-
# if class_full_name(target_type) == 'unittest.mock.MagicMock':
|
56
|
-
# return True
|
57
53
|
return False
|
58
54
|
|
55
|
+
def obj_is_type_literal_compatible(self, var_type) -> bool: # Check if a Literal type contains only immutable values
|
56
|
+
from typing import Literal
|
57
|
+
|
58
|
+
origin = get_origin(var_type)
|
59
|
+
if origin is not Literal:
|
60
|
+
return False
|
61
|
+
|
62
|
+
literal_values = get_args(var_type)
|
63
|
+
for value in literal_values:
|
64
|
+
if value is not None and type(value) not in (bool, int, float, complex, str, bytes):
|
65
|
+
return False
|
66
|
+
return True
|
67
|
+
|
59
68
|
def obj_is_type_union_compatible(self, var_type, compatible_types):
|
60
69
|
from typing import Union
|
61
70
|
|
@@ -92,7 +101,7 @@ class Type_Safe__Validation:
|
|
92
101
|
return None
|
93
102
|
|
94
103
|
def check_if__value_is__special_generic_alias(self, value):
|
95
|
-
from typing import _SpecialGenericAlias # todo see if there is a better way to do this since typing is showing as not having _SpecialGenericAlias (this is to handle case like List, Dict, etc...)
|
104
|
+
from typing import _SpecialGenericAlias # noqa todo see if there is a better way to do this since typing is showing as not having _SpecialGenericAlias (this is to handle case like List, Dict, etc...)
|
96
105
|
return value is not None and type(value) is not _SpecialGenericAlias
|
97
106
|
|
98
107
|
def check_if__type_matches__union_type(self, annotation : Any, # Union type annotation
|
@@ -163,6 +172,10 @@ class Type_Safe__Validation:
|
|
163
172
|
if attr_type:
|
164
173
|
origin_attr_type = get_origin(attr_type) # to handle when type definition contains a generic
|
165
174
|
|
175
|
+
if origin_attr_type is typing.Literal: # Add Literal support
|
176
|
+
literal_values = get_args(attr_type)
|
177
|
+
return value in literal_values
|
178
|
+
|
166
179
|
if origin_attr_type is collections.abc.Callable: # Handle Callable types
|
167
180
|
return self.is_callable_compatible(value, attr_type) # ISSUE: THIS IS NEVER CALLED
|
168
181
|
|
@@ -286,12 +299,27 @@ class Type_Safe__Validation:
|
|
286
299
|
|
287
300
|
# todo: see if need to add cache support to this method (it looks like this method is not called very often)
|
288
301
|
def validate_type_immutability(self, var_name: str, var_type: Any) -> None: # Validates that type is immutable or in supported format
|
289
|
-
if var_type
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
302
|
+
if var_type in IMMUTABLE_TYPES or var_name.startswith('__'): # if var_type is not one of the IMMUTABLE_TYPES or is an __ internal
|
303
|
+
return
|
304
|
+
if self.obj_is_type_literal_compatible(var_type):
|
305
|
+
return
|
306
|
+
if self.obj_is_type_union_compatible(var_type, IMMUTABLE_TYPES) : # if var_type is not something like Optional[Union[int, str]]
|
307
|
+
return
|
308
|
+
if var_type in IMMUTABLE_TYPES:
|
309
|
+
return
|
310
|
+
if isinstance(var_type, EnumMeta):
|
311
|
+
return
|
312
|
+
if isinstance(var_type, type) and issubclass(var_type, (int,str, float)):
|
313
|
+
return
|
314
|
+
type_safe_raise_exception.immutable_type_error(var_name, var_type)
|
315
|
+
|
316
|
+
# def validate_type_immutability(self, var_name: str, var_type: Any) -> None: # Validates that type is immutable or in supported format
|
317
|
+
# if var_type not in IMMUTABLE_TYPES and var_name.startswith('__') is False: # if var_type is not one of the IMMUTABLE_TYPES or is an __ internal
|
318
|
+
# if self.obj_is_type_union_compatible(var_type, IMMUTABLE_TYPES) is False: # if var_type is not something like Optional[Union[int, str]]
|
319
|
+
# if var_type not in IMMUTABLE_TYPES or type(var_type) not in IMMUTABLE_TYPES:
|
320
|
+
# if not isinstance(var_type, EnumMeta):
|
321
|
+
# if not (isinstance(var_type, type) and issubclass(var_type, (int,str, float))):
|
322
|
+
# type_safe_raise_exception.immutable_type_error(var_name, var_type)
|
295
323
|
|
296
324
|
def validate_variable_type(self, var_name, var_type, var_value): # Validate type compatibility
|
297
325
|
if type(var_type) is type and not isinstance(var_value, var_type):
|
@@ -1,10 +1,10 @@
|
|
1
|
-
from typing
|
2
|
-
from osbot_utils.type_safe.Type_Safe__Primitive
|
3
|
-
from osbot_utils.type_safe.type_safe_core.collections.Type_Safe__List
|
4
|
-
from osbot_utils.type_safe.type_safe_core.shared.Type_Safe__Cache
|
5
|
-
from osbot_utils.type_safe.type_safe_core.shared.Type_Safe__Convert
|
6
|
-
from osbot_utils.type_safe.type_safe_core.shared.Type_Safe__Validation
|
7
|
-
from osbot_utils.type_safe.validators.Type_Safe__Validator
|
1
|
+
from typing import get_origin, Annotated, get_args, Literal, Union
|
2
|
+
from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
|
3
|
+
from osbot_utils.type_safe.type_safe_core.collections.Type_Safe__List import Type_Safe__List
|
4
|
+
from osbot_utils.type_safe.type_safe_core.shared.Type_Safe__Cache import type_safe_cache
|
5
|
+
from osbot_utils.type_safe.type_safe_core.shared.Type_Safe__Convert import type_safe_convert
|
6
|
+
from osbot_utils.type_safe.type_safe_core.shared.Type_Safe__Validation import type_safe_validation
|
7
|
+
from osbot_utils.type_safe.validators.Type_Safe__Validator import Type_Safe__Validator
|
8
8
|
|
9
9
|
class Type_Safe__Step__Set_Attr:
|
10
10
|
|
@@ -20,6 +20,8 @@ class Type_Safe__Step__Set_Attr:
|
|
20
20
|
else:
|
21
21
|
value = self.resolve_value__from_origin(value)
|
22
22
|
|
23
|
+
self.validate_literal_value(annotations, name, value) # Check Literal value constraints before generic type checking
|
24
|
+
|
23
25
|
type_safe_validation.validate_type_compatibility(_self, annotations, name, value)
|
24
26
|
return value
|
25
27
|
|
@@ -111,5 +113,31 @@ class Type_Safe__Step__Set_Attr:
|
|
111
113
|
|
112
114
|
_super.__setattr__(name, value)
|
113
115
|
|
116
|
+
def validate_literal_value(self, annotations, name, value): # Check if a value is valid for a Literal type annotation
|
117
|
+
|
118
|
+
annotation = annotations.get(name)
|
119
|
+
if not annotation:
|
120
|
+
return
|
121
|
+
|
122
|
+
origin = get_origin(annotation)
|
123
|
+
|
124
|
+
if origin is Union: # Handle Optional[Literal[...]] by unwrapping the Optional
|
125
|
+
args = get_args(annotation)
|
126
|
+
if type(None) in args: # Check if it's Optional (Union with None)
|
127
|
+
for arg in args: # Find the non-None type
|
128
|
+
if arg is not type(None) and get_origin(arg) is Literal:
|
129
|
+
allowed_values = get_args(arg) # Found Literal inside Optional
|
130
|
+
if value is not None and value not in allowed_values:
|
131
|
+
allowed_str = ', '.join(repr(v) for v in allowed_values)
|
132
|
+
raise ValueError(f"Invalid value for '{name}': must be one of [{allowed_str}], got {repr(value)}")
|
133
|
+
return
|
134
|
+
|
135
|
+
|
136
|
+
elif origin is Literal: # Handle direct Literal[...]
|
137
|
+
allowed_values = get_args(annotation)
|
138
|
+
if value not in allowed_values:
|
139
|
+
allowed_str = ', '.join(repr(v) for v in allowed_values)
|
140
|
+
raise ValueError(f"Invalid value for '{name}': must be one of [{allowed_str}], got {repr(value)}")
|
141
|
+
|
114
142
|
|
115
143
|
type_safe_step_set_attr = Type_Safe__Step__Set_Attr()
|
@@ -0,0 +1 @@
|
|
1
|
+
v2.82.0
|
@@ -1 +0,0 @@
|
|
1
|
-
v2.80.0
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/context_managers/disable_root_loggers.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-2.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/cache_on_function.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-2.80.0 → osbot_utils-2.82.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.80.0 → osbot_utils-2.82.0}/osbot_utils/decorators/methods/function_type_check.py
RENAMED
File without changes
|
File without changes
|
{osbot_utils-2.80.0 → osbot_utils-2.82.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
|
{osbot_utils-2.80.0 → osbot_utils-2.82.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.80.0 → osbot_utils-2.82.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.80.0 → osbot_utils-2.82.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
|