osbot-utils 2.12.0__tar.gz → 2.14.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.12.0 → osbot_utils-2.14.0}/PKG-INFO +2 -2
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/README.md +1 -1
- osbot_utils-2.14.0/osbot_utils/helpers/Obj_Id.py +29 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/performance/Performance_Measure__Session.py +23 -3
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Convert.py +11 -9
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Validation.py +4 -1
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Class_Kwargs.py +11 -8
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py +11 -1
- osbot_utils-2.14.0/osbot_utils/version +1 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/pyproject.toml +1 -1
- osbot_utils-2.12.0/osbot_utils/version +0 -1
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/LICENSE +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/context_managers/async_invoke.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/context_managers/capture_duration.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/context_managers/print_duration.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/CFormat.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Guid.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Local_Cache.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Random_Guid.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Safe_Id.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Str_ASCII.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/Flow.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/Flow__Events.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/Task.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/generators/Generator_Manager.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/generators/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/python_compatibility/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/python_compatibility/python_3_8.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/Xml__Attribute.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/Xml__Element.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/Xml__File.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/Xml__File__Load.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/Xml__File__To_Dict.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/Xml__File__To_Xml.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/rss/RSS__Channel.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/rss/RSS__Feed.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/rss/RSS__Feed__Parser.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/rss/RSS__Image.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/rss/RSS__Item.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Catch.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Duration.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Hook_Method.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/performance/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Measurement.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Result.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/performance/models/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/Type_Safe.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/Type_Safe__Base.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/Type_Safe__Dict.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/Type_Safe__List.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/Type_Safe__Method.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/decorators/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/decorators/type_safe.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/methods/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/methods/type_safe_property.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Annotations.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Cache.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Not_Cached.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Raise_Exception.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Shared__Variables.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Default_Kwargs.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Default_Value.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Init.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Set_Attr.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/validators/Type_Safe__Validator.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/validators/Validator__Max.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/validators/Validator__Min.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/validators/Validator__One_Of.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/validators/Validator__Regex.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/validators/__init__.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Env.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Files.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Http.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Json.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Misc.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Objects.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Python_Logger.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Regex.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Str.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Threads.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Zip.py +0 -0
- {osbot_utils-2.12.0 → osbot_utils-2.14.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.14.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
|
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import random
|
2
|
+
|
3
|
+
_hex_table = [f"{i:02x}" for i in range(256)]
|
4
|
+
|
5
|
+
def is_obj_id(value: str):
|
6
|
+
var_type = type(value)
|
7
|
+
if var_type is Obj_Id:
|
8
|
+
return True
|
9
|
+
if var_type is str:
|
10
|
+
if len(value) == 8: # todo: add efficient check if we only have hex values
|
11
|
+
return True
|
12
|
+
return False
|
13
|
+
|
14
|
+
def new_obj_id():
|
15
|
+
return hex(random.getrandbits(32))[2:].zfill(8) # slice off '0x' and pad
|
16
|
+
|
17
|
+
class Obj_Id(str):
|
18
|
+
def __new__(cls, value: str=None):
|
19
|
+
if value:
|
20
|
+
if is_obj_id(value):
|
21
|
+
obj_id = value
|
22
|
+
else:
|
23
|
+
raise ValueError(f'in Obj_Id: value provided was not a valid Obj_Id: {value}')
|
24
|
+
else:
|
25
|
+
obj_id = new_obj_id()
|
26
|
+
return super().__new__(cls, obj_id) # Return a new instance of Guid initialized with the string version of the UUID
|
27
|
+
|
28
|
+
def __str__(self):
|
29
|
+
return self
|
@@ -11,6 +11,7 @@ MEASURE__INVOCATION__LOOPS = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377,
|
|
11
11
|
class Performance_Measure__Session(Type_Safe):
|
12
12
|
result : Model__Performance_Measure__Result = None # Current measurement result
|
13
13
|
assert_enabled: bool = True
|
14
|
+
padding : int = 30
|
14
15
|
|
15
16
|
def calculate_raw_score(self, times: List[int]) -> int: # Calculate raw performance score
|
16
17
|
if len(times) < 3: # Need at least 3 values for stability
|
@@ -89,11 +90,11 @@ class Performance_Measure__Session(Type_Safe):
|
|
89
90
|
print(f"Median : {measurement.median_time:,}ns")
|
90
91
|
print(f"StdDev : {measurement.stddev_time:,.2f}ns")
|
91
92
|
|
92
|
-
def print(self
|
93
|
+
def print(self): # Print measurement results
|
93
94
|
if not self.result:
|
94
95
|
print("No measurements taken yet")
|
95
96
|
return
|
96
|
-
print(f"{self.result.name:{padding}} | score: {self.result.final_score:7,d} ns | raw: {self.result.raw_score:7,d} ns") # Print name and normalized score
|
97
|
+
print(f"{self.result.name:{self.padding}} | score: {self.result.final_score:7,d} ns | raw: {self.result.raw_score:7,d} ns") # Print name and normalized score
|
97
98
|
|
98
99
|
return self
|
99
100
|
|
@@ -105,4 +106,23 @@ class Performance_Measure__Session(Type_Safe):
|
|
105
106
|
new_expected_time = last_expected_time * 5 # using last_expected_time * 5 as the upper limit (since these tests are significantly slowed in GitHUb Actions)
|
106
107
|
assert last_expected_time <= self.result.final_score <= new_expected_time, f"Performance changed for {self.result.name}: expected {last_expected_time} < {self.result.final_score:,d}ns, expected {new_expected_time}"
|
107
108
|
else:
|
108
|
-
assert self.result.final_score in expected_time, f"Performance changed for {self.result.name}: got {self.result.final_score:,d}ns, expected {expected_time}"
|
109
|
+
assert self.result.final_score in expected_time, f"Performance changed for {self.result.name}: got {self.result.final_score:,d}ns, expected {expected_time}"
|
110
|
+
|
111
|
+
def assert_time(self, *expected_time: int): # Assert that the final score matches the expected normalized time"""
|
112
|
+
if self.assert_enabled is False:
|
113
|
+
return
|
114
|
+
if in_github_action():
|
115
|
+
last_expected_time = expected_time[-1] + 100 # +100 in case it is 0
|
116
|
+
new_expected_time = last_expected_time * 5 # using last_expected_time * 5 as the upper limit (since these tests are significantly slowed in GitHUb Actions)
|
117
|
+
assert last_expected_time <= self.result.final_score <= new_expected_time, f"Performance changed for {self.result.name}: expected {last_expected_time} < {self.result.final_score:,d}ns, expected {new_expected_time}"
|
118
|
+
else:
|
119
|
+
assert self.result.final_score in expected_time, f"Performance changed for {self.result.name}: got {self.result.final_score:,d}ns, expected {expected_time}"
|
120
|
+
|
121
|
+
def assert_time__less_than(self, max_time: int): # Assert that the final score matches the expected normalized time"""
|
122
|
+
if self.assert_enabled is False:
|
123
|
+
return
|
124
|
+
if in_github_action():
|
125
|
+
max_time = max_time * 5 # adjust for GitHub's slowness
|
126
|
+
|
127
|
+
assert self.result.final_score <= max_time, f"Performance changed for {self.result.name}: got {self.result.final_score:,d}ns, expected less than {max_time}ns"
|
128
|
+
|
{osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Convert.py
RENAMED
@@ -20,8 +20,9 @@ class Type_Safe__Convert:
|
|
20
20
|
from osbot_utils.helpers.Random_Guid import Random_Guid
|
21
21
|
from osbot_utils.helpers.Safe_Id import Safe_Id
|
22
22
|
from osbot_utils.helpers.Str_ASCII import Str_ASCII
|
23
|
+
from osbot_utils.helpers.Obj_Id import Obj_Id
|
23
24
|
|
24
|
-
TYPE_SAFE__CONVERT_VALUE__SUPPORTED_TYPES = [Guid, Random_Guid, Safe_Id, Str_ASCII, Timestamp_Now]
|
25
|
+
TYPE_SAFE__CONVERT_VALUE__SUPPORTED_TYPES = [Guid, Random_Guid, Safe_Id, Str_ASCII, Timestamp_Now, Obj_Id]
|
25
26
|
|
26
27
|
if target is not None and attr_name is not None:
|
27
28
|
if hasattr(target, '__annotations__'):
|
@@ -31,16 +32,17 @@ class Type_Safe__Convert:
|
|
31
32
|
if attribute_annotation:
|
32
33
|
origin = type_safe_cache.get_origin(attribute_annotation) # Add handling for Type[T] annotations
|
33
34
|
if origin is type and isinstance(value, str):
|
34
|
-
|
35
|
-
if len(value.rsplit('.', 1)) > 1:
|
36
|
-
module_name, class_name = value.rsplit('.', 1)
|
37
|
-
module = __import__(module_name, fromlist=[class_name])
|
38
|
-
return getattr(module, class_name)
|
39
|
-
except (ValueError, ImportError, AttributeError) as e:
|
40
|
-
raise ValueError(f"Could not convert '{value}' to type: {str(e)}")
|
41
|
-
|
35
|
+
return self.get_class_from_class_name(value)
|
42
36
|
if attribute_annotation in TYPE_SAFE__CONVERT_VALUE__SUPPORTED_TYPES: # for now hard-coding this to just these types until we understand the side effects
|
43
37
|
return attribute_annotation(value)
|
44
38
|
return value
|
45
39
|
|
40
|
+
def get_class_from_class_name(self, value):
|
41
|
+
try: # Convert string path to actual type
|
42
|
+
if len(value.rsplit('.', 1)) > 1:
|
43
|
+
module_name, class_name = value.rsplit('.', 1)
|
44
|
+
module = __import__(module_name, fromlist=[class_name])
|
45
|
+
return getattr(module, class_name)
|
46
|
+
except (ValueError, ImportError, AttributeError) as e:
|
47
|
+
raise ValueError(f"Could not convert '{value}' to type: {str(e)}")
|
46
48
|
type_safe_convert = Type_Safe__Convert()
|
{osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Validation.py
RENAMED
@@ -228,7 +228,10 @@ class Type_Safe__Validation:
|
|
228
228
|
|
229
229
|
if is_invalid:
|
230
230
|
expected_type = annotations.get(name)
|
231
|
-
|
231
|
+
if type(value) is type:
|
232
|
+
actual_type = value
|
233
|
+
else:
|
234
|
+
actual_type = type(value)
|
232
235
|
raise ValueError(f"Invalid type for attribute '{name}'. Expected '{expected_type}' but got '{actual_type}'")
|
233
236
|
|
234
237
|
# todo: see if need to add cache support to this method (it looks like this method is not called very often)
|
@@ -1,9 +1,10 @@
|
|
1
|
-
from typing
|
2
|
-
from osbot_utils.helpers.
|
3
|
-
from osbot_utils.
|
4
|
-
from osbot_utils.type_safe.shared.
|
5
|
-
from osbot_utils.type_safe.shared.
|
6
|
-
from osbot_utils.type_safe.
|
1
|
+
from typing import Dict, Any, Type
|
2
|
+
from osbot_utils.helpers.Obj_Id import Obj_Id
|
3
|
+
from osbot_utils.helpers.Random_Guid import Random_Guid
|
4
|
+
from osbot_utils.type_safe.shared.Type_Safe__Cache import Type_Safe__Cache, type_safe_cache
|
5
|
+
from osbot_utils.type_safe.shared.Type_Safe__Shared__Variables import IMMUTABLE_TYPES
|
6
|
+
from osbot_utils.type_safe.shared.Type_Safe__Validation import type_safe_validation
|
7
|
+
from osbot_utils.type_safe.steps.Type_Safe__Step__Default_Value import type_safe_step_default_value
|
7
8
|
|
8
9
|
|
9
10
|
|
@@ -43,8 +44,10 @@ class Type_Safe__Step__Class_Kwargs:
|
|
43
44
|
match = all(isinstance(value, IMMUTABLE_TYPES) for value in kwargs.values())
|
44
45
|
|
45
46
|
if match: # check for special cases that we can't cache (like Random_Guid)
|
46
|
-
|
47
|
-
|
47
|
+
annotations_types = list(dict(annotations).values())
|
48
|
+
if Random_Guid in annotations_types: # todo: need to add the other special cases (like Timestamp_Now)
|
49
|
+
return False
|
50
|
+
if Obj_Id in annotations_types: # we can't cache Obj_id, since this would give us the same ID everutime
|
48
51
|
return False
|
49
52
|
return match
|
50
53
|
|
{osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py
RENAMED
@@ -8,6 +8,7 @@ from osbot_utils.helpers.Random_Guid import Random_Guid
|
|
8
8
|
from osbot_utils.helpers.Random_Guid_Short import Random_Guid_Short
|
9
9
|
from osbot_utils.type_safe.shared.Type_Safe__Annotations import type_safe_annotations
|
10
10
|
from osbot_utils.type_safe.shared.Type_Safe__Cache import type_safe_cache
|
11
|
+
from osbot_utils.type_safe.shared.Type_Safe__Convert import type_safe_convert
|
11
12
|
from osbot_utils.utils.Objects import enum_from_value
|
12
13
|
from osbot_utils.helpers.Safe_Id import Safe_Id
|
13
14
|
from osbot_utils.helpers.Timestamp_Now import Timestamp_Now
|
@@ -43,7 +44,13 @@ class Type_Safe__Step__From_Json:
|
|
43
44
|
raise ValueError(f"Attribute '{key}' not found in '{_self.__class__.__name__}'")
|
44
45
|
else:
|
45
46
|
continue
|
46
|
-
|
47
|
+
annotation = type_safe_annotations.obj_attribute_annotation(_self, key)
|
48
|
+
annotation_origin = type_safe_cache.get_origin(annotation)
|
49
|
+
|
50
|
+
|
51
|
+
if annotation == type: # Handle type objects
|
52
|
+
value = self.deserialize_type__using_value(value)
|
53
|
+
elif annotation_origin == type: # Handle type objects inside ForwardRef
|
47
54
|
value = self.deserialize_type__using_value(value)
|
48
55
|
elif type_safe_annotations.obj_is_attribute_annotation_of_type(_self, key, dict): # handle the case when the value is a dict
|
49
56
|
value = self.deserialize_dict__using_key_value_annotations(_self, key, value)
|
@@ -117,6 +124,9 @@ class Type_Safe__Step__From_Json:
|
|
117
124
|
if type(dict_value) == value_class: # if the value is already the target, then just use it
|
118
125
|
new__dict_value = dict_value
|
119
126
|
elif issubclass(value_class, Type_Safe):
|
127
|
+
if 'node_type' in dict_value:
|
128
|
+
value_class = type_safe_convert.get_class_from_class_name(dict_value['node_type'])
|
129
|
+
|
120
130
|
new__dict_value = self.deserialize_from_dict(value_class(), dict_value)
|
121
131
|
elif value_class is Any:
|
122
132
|
new__dict_value = dict_value
|
@@ -0,0 +1 @@
|
|
1
|
+
v2.14.0
|
@@ -1 +0,0 @@
|
|
1
|
-
v2.12.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.12.0 → osbot_utils-2.14.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.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/cache_on_function.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-2.12.0 → osbot_utils-2.14.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.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/function_type_check.py
RENAMED
File without changes
|
File without changes
|
{osbot_utils-2.12.0 → osbot_utils-2.14.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
|
{osbot_utils-2.12.0 → osbot_utils-2.14.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.12.0 → osbot_utils-2.14.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.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
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.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|