osbot-utils 2.70.0__tar.gz → 2.72.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.70.0 → osbot_utils-2.72.0}/PKG-INFO +2 -2
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/README.md +1 -1
- osbot_utils-2.72.0/osbot_utils/helpers/safe_str/Safe_Str.py +75 -0
- osbot_utils-2.72.0/osbot_utils/helpers/safe_str/Safe_Str__Version.py +20 -0
- osbot_utils-2.72.0/osbot_utils/helpers/safe_str/http/Safe_Str__IP_Address.py +29 -0
- osbot_utils-2.72.0/osbot_utils/helpers/safe_str/schemas/Enum__Safe_Str__Regex_Mode.py +5 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Temp_Env_Vars.py +1 -1
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Temp_Web_Server.py +10 -11
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Http.py +7 -12
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Objects.py +3 -1
- osbot_utils-2.72.0/osbot_utils/utils/__init__.py +0 -0
- osbot_utils-2.72.0/osbot_utils/version +1 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/pyproject.toml +1 -1
- osbot_utils-2.70.0/osbot_utils/helpers/safe_str/Safe_Str.py +0 -54
- osbot_utils-2.70.0/osbot_utils/version +0 -1
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/LICENSE +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/context_managers/async_invoke.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/CFormat.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Guid.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Local_Cache.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Obj_Id.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Random_Guid.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Safe_Id.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Str_ASCII.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/cache_on_self/Cache_Controller.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/cache_on_self/Cache_Key_Generator.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/cache_on_self/Cache_Metrics.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/cache_on_self/Cache_On_Self.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/cache_on_self/Cache_Storage.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/cache_on_self/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/duration/Duration.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/duration/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/duration/decorators/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/duration/decorators/capture_duration.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/duration/decorators/duration.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/duration/decorators/print_duration.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/duration/schemas/Schema__Duration.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/duration/schemas/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/Flow.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/Task.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/actions/Flow__Data.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/actions/Flow__Events.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/actions/Flow__Stats__Collector.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/actions/Task__Stats__Collector.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/actions/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/models/Schema__Flow__Artifact.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/models/Schema__Flow__Result.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/schemas/Schema__Flow.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Data.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Event.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Event__Data.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Log.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Stats.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Status.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Task__Data.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/schemas/Schema__Task__Stats.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/flows/schemas/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/generators/Generator_Manager.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/generators/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/CSS_Dict__To__Css.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Html_Dict__To__Html.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Html_Dict__To__Html_Document.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Html_Dict__To__Html_Tags.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Html_Document__To__Html_Dict.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Html__To__Html_Dict.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Html__To__Html_Document.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Html__To__Html_Tag.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/Tag__Text.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/schemas/Schema__Html_Document.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/schemas/Schema__Html_Node.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/schemas/Schema__Html_Node__Data.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/schemas/Schema__Html_Node__Data__Type.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/html/schemas/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/actions/LLM_Request__Execute.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/actions/Type_Safe__Schema_For__LLMs.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/actions/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/builders/LLM_Request__Builder.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/builders/LLM_Request__Builder__Open_AI.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/builders/LLM_Request__Factory.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/builders/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/cache/LLM_Cache__Path_Generator.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/cache/LLM_Request__Cache.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/cache/LLM_Request__Cache__File_System.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/cache/LLM_Request__Cache__Storage.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/cache/Virtual_Storage__Local__Folder.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/cache/Virtual_Storage__Sqlite.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/cache/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/platforms/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/platforms/open_ai/API__LLM__Open_AI.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/platforms/open_ai/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/schemas/Safe_Str__LLM__Model_Name.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Cache__Index.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Data.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Function_Call.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Message__Content.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Message__Role.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Response.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Response__Cache.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/llms/schemas/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/python_compatibility/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/python_compatibility/python_3_8.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_float/Safe_Float.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_float/Safe_Float__Engineering.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_float/Safe_Float__Money.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_float/Safe_Float__Percentage_Exact.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_float/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_int/Safe_Int.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_int/Safe_UInt.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_int/Safe_UInt__Byte.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_int/Safe_UInt__FileSize.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_int/Safe_UInt__Percentage.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_int/Safe_UInt__Port.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_int/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_str/Safe_Str__File__Name.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_str/Safe_Str__File__Path.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_str/Safe_Str__Hash.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_str/Safe_Str__Text.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_str/Safe_Str__Text__Dangerous.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_str/Safe_Str__Url.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_str/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_str/http/Safe_Str__Html.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_str/http/Safe_Str__Http__Content_Type.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_str/http/Safe_Str__Http__ETag.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_str/http/Safe_Str__Http__Last_Modified.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_str/http/Safe_Str__Http__Text.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/safe_str/http/__init__.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/helpers/sqlite → osbot_utils-2.72.0/osbot_utils/helpers/safe_str/schemas}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/helpers/sqlite/cache → osbot_utils-2.72.0/osbot_utils/helpers/sqlite}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/helpers/sqlite/domains → osbot_utils-2.72.0/osbot_utils/helpers/sqlite/cache}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/helpers/sqlite/domains/schemas → osbot_utils-2.72.0/osbot_utils/helpers/sqlite/domains}/__init__.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/helpers/sqlite/models → osbot_utils-2.72.0/osbot_utils/helpers/sqlite/domains/schemas}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/helpers/sqlite/sample_data → osbot_utils-2.72.0/osbot_utils/helpers/sqlite/models}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/helpers/sqlite/sql_builder → osbot_utils-2.72.0/osbot_utils/helpers/sqlite/sample_data}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/helpers/sqlite/tables → osbot_utils-2.72.0/osbot_utils/helpers/sqlite/sql_builder}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/helpers/ssh → osbot_utils-2.72.0/osbot_utils/helpers/sqlite/tables}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/helpers/trace → osbot_utils-2.72.0/osbot_utils/helpers/ssh}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/helpers/xml → osbot_utils-2.72.0/osbot_utils/helpers/trace}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/xml/Xml__Attribute.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/xml/Xml__Element.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/xml/Xml__File.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/xml/Xml__File__Load.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/xml/Xml__File__To_Dict.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/xml/Xml__File__To_Xml.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/testing → osbot_utils-2.72.0/osbot_utils/helpers/xml}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/xml/rss/RSS__Channel.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/xml/rss/RSS__Feed.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/xml/rss/RSS__Feed__Parser.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/xml/rss/RSS__Image.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/helpers/xml/rss/RSS__Item.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Catch.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Hook_Method.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/testing/performance → osbot_utils-2.72.0/osbot_utils/testing}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/performance/Performance_Measure__Session.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/testing/performance/models → osbot_utils-2.72.0/osbot_utils/testing/performance}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Measurement.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Result.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/type_safe → osbot_utils-2.72.0/osbot_utils/testing/performance/models}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/Type_Safe.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/Type_Safe__Base.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/Type_Safe__Dict.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/Type_Safe__List.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/Type_Safe__Method.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/Type_Safe__Primitive.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/Type_Safe__Set.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/Type_Safe__Tuple.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/type_safe/decorators → osbot_utils-2.72.0/osbot_utils/type_safe}/__init__.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/type_safe/methods → osbot_utils-2.72.0/osbot_utils/type_safe/decorators}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/decorators/type_safe.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/type_safe/shared → osbot_utils-2.72.0/osbot_utils/type_safe/methods}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/methods/type_safe_property.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/shared/Type_Safe__Annotations.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/shared/Type_Safe__Cache.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/shared/Type_Safe__Convert.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/shared/Type_Safe__Json_Compressor.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/shared/Type_Safe__Json_Compressor__Type_Registry.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/shared/Type_Safe__Not_Cached.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/shared/Type_Safe__Raise_Exception.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/shared/Type_Safe__Shared__Variables.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/shared/Type_Safe__Validation.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/type_safe/steps → osbot_utils-2.72.0/osbot_utils/type_safe/shared}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Class_Kwargs.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Default_Kwargs.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Default_Value.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Init.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Set_Attr.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/type_safe/validators → osbot_utils-2.72.0/osbot_utils/type_safe/steps}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/validators/Type_Safe__Validator.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/validators/Validator__Max.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/validators/Validator__Min.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/validators/Validator__One_Of.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/type_safe/validators/Validator__Regex.py +0 -0
- {osbot_utils-2.70.0/osbot_utils/utils → osbot_utils-2.72.0/osbot_utils/type_safe/validators}/__init__.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Env.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Files.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Json.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Misc.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Python_Logger.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Regex.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Str.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Threads.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/utils/Zip.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: osbot_utils
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.72.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,75 @@
|
|
1
|
+
import re
|
2
|
+
from typing import Optional
|
3
|
+
from osbot_utils.helpers.safe_str.schemas.Enum__Safe_Str__Regex_Mode import Enum__Safe_Str__Regex_Mode
|
4
|
+
from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
|
5
|
+
|
6
|
+
TYPE_SAFE__STR__REGEX__SAFE_STR = re.compile(r'[^a-zA-Z0-9]') # Only allow alphanumerics and numbers
|
7
|
+
TYPE_SAFE__STR__MAX_LENGTH = 512
|
8
|
+
|
9
|
+
|
10
|
+
class Safe_Str(Type_Safe__Primitive, str):
|
11
|
+
max_length : int = TYPE_SAFE__STR__MAX_LENGTH
|
12
|
+
regex : re.Pattern = TYPE_SAFE__STR__REGEX__SAFE_STR
|
13
|
+
regex_mode : Enum__Safe_Str__Regex_Mode = Enum__Safe_Str__Regex_Mode.REPLACE
|
14
|
+
replacement_char : str = '_'
|
15
|
+
allow_empty : bool = True
|
16
|
+
trim_whitespace : bool = False
|
17
|
+
allow_all_replacement_char: bool = True
|
18
|
+
strict_validation : bool = False # If True, don't replace invalid chars, raise an error instead
|
19
|
+
exact_length : bool = False # If True, require exact length match, not just max length
|
20
|
+
|
21
|
+
|
22
|
+
def __new__(cls, value: Optional[str] = None) -> 'Safe_Str':
|
23
|
+
|
24
|
+
if value is None: # Validate inputs
|
25
|
+
if cls.allow_empty:
|
26
|
+
value = ""
|
27
|
+
else:
|
28
|
+
raise ValueError(f"in {cls.__name__}, value cannot be None when allow_empty is False") from None
|
29
|
+
|
30
|
+
if not isinstance(value, str): # Convert to string if not already
|
31
|
+
value = str(value)
|
32
|
+
|
33
|
+
if cls.trim_whitespace: # Trim whitespace if requested
|
34
|
+
value = value.strip()
|
35
|
+
|
36
|
+
if not cls.allow_empty and (value is None or value == ""): # Check for empty string if not allowed
|
37
|
+
raise ValueError("Value cannot be empty when allow_empty is False")
|
38
|
+
|
39
|
+
if cls.exact_length and len(value) != cls.max_length:
|
40
|
+
raise ValueError(f"Value must be exactly {cls.max_length} characters long (was {len(value)})")
|
41
|
+
elif not cls.exact_length and len(value) > cls.max_length: # Check max length
|
42
|
+
raise ValueError(f"Value exceeds maximum length of {cls.max_length} characters (was {len(value)})")
|
43
|
+
|
44
|
+
if cls.allow_empty and value =='':
|
45
|
+
return str.__new__(cls, '')
|
46
|
+
|
47
|
+
sanitized_value = cls.validate_and_sanitize(value)
|
48
|
+
|
49
|
+
|
50
|
+
return str.__new__(cls, sanitized_value)
|
51
|
+
|
52
|
+
@classmethod
|
53
|
+
def validate_and_sanitize(cls, value):
|
54
|
+
if cls.strict_validation:
|
55
|
+
if cls.regex_mode == Enum__Safe_Str__Regex_Mode.MATCH: # For 'match' mode, regex defines the valid pattern (like version numbers)
|
56
|
+
if not cls.regex.match(value):
|
57
|
+
raise ValueError(f"Value does not match required pattern: {cls.regex.pattern}")
|
58
|
+
return value
|
59
|
+
elif cls.regex_mode == Enum__Safe_Str__Regex_Mode.REPLACE: # For 'replace' mode, regex defines invalid characters to replace
|
60
|
+
if cls.regex.search(value) is not None:
|
61
|
+
raise ValueError(f"Value contains invalid characters (must not match pattern: {cls.regex.pattern})")
|
62
|
+
return value
|
63
|
+
else:
|
64
|
+
raise ValueError(f"in {cls.__name__}, regex_mode value cannot be None when strict_validation is True")
|
65
|
+
else:
|
66
|
+
if cls.regex_mode == Enum__Safe_Str__Regex_Mode.MATCH: # Cannot do replacement when regex defines valid pattern
|
67
|
+
raise ValueError(f"Cannot use regex_mode='match' without strict_validation=True")
|
68
|
+
else: # assume the default Enum__Safe_Str__Regex_Mode.MATCH
|
69
|
+
sanitized_value = cls.regex.sub(cls.replacement_char, value)
|
70
|
+
|
71
|
+
if not cls.allow_all_replacement_char and set(sanitized_value) == {
|
72
|
+
cls.replacement_char} and sanitized_value:
|
73
|
+
raise ValueError(f"Sanitized value consists entirely of '{cls.replacement_char}' characters")
|
74
|
+
|
75
|
+
return sanitized_value
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import re
|
2
|
+
from osbot_utils.helpers.safe_str.Safe_Str import Safe_Str
|
3
|
+
from osbot_utils.helpers.safe_str.schemas.Enum__Safe_Str__Regex_Mode import Enum__Safe_Str__Regex_Mode
|
4
|
+
|
5
|
+
TYPE_SAFE_STR__VERSION__REGEX = re.compile(r'^v(\d{1,3})\.(\d{1,3})\.(\d{1,3})$') # Regex to match versions like v0.1.1 or v999.999.999
|
6
|
+
TYPE_SAFE_STR__VERSION__MAX_LENGTH = 12 # Max length for 'v999.999.999'
|
7
|
+
|
8
|
+
class Safe_Str__Version(Safe_Str):
|
9
|
+
regex = TYPE_SAFE_STR__VERSION__REGEX
|
10
|
+
regex_mode = Enum__Safe_Str__Regex_Mode.MATCH # in this case we need an exact match of the version regex
|
11
|
+
max_length = TYPE_SAFE_STR__VERSION__MAX_LENGTH
|
12
|
+
allow_empty = False
|
13
|
+
trim_whitespace = True
|
14
|
+
strict_validation = True # Ensure the value exactly matches the regex
|
15
|
+
|
16
|
+
def __add__(self, other): # Concatenation returns regular str, not Safe_Str__Version
|
17
|
+
return str.__add__(self, other)
|
18
|
+
|
19
|
+
def __radd__(self, other): # Reverse concatenation also returns regular str
|
20
|
+
return str.__add__(other, self)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import ipaddress
|
2
|
+
from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
|
3
|
+
|
4
|
+
|
5
|
+
class Safe_Str__IP_Address(Type_Safe__Primitive, str):
|
6
|
+
|
7
|
+
def __new__(cls, value: str = None):
|
8
|
+
if value is not None: # check that it is not None
|
9
|
+
if not isinstance(value, str): # check that it is a string
|
10
|
+
raise TypeError(f"Value provided must be a string, and it was {type(value)}")
|
11
|
+
else:
|
12
|
+
value = value.strip() # trim/strip the value since there could be some leading spaces (which are easy to fix here)
|
13
|
+
|
14
|
+
if not value: # allow empty or null values
|
15
|
+
return str.__new__(cls, "")
|
16
|
+
|
17
|
+
try:
|
18
|
+
ip_obj = ipaddress.ip_address(value) # validate IP address using ipaddress module
|
19
|
+
value = str(ip_obj) # Use the canonical representation
|
20
|
+
except ValueError as e:
|
21
|
+
raise ValueError(f"Invalid IP address: {value}") from e
|
22
|
+
|
23
|
+
return str.__new__(cls, value)
|
24
|
+
|
25
|
+
def __add__(self, other): # Concatenation returns regular str, not Safe_Str__IP_Address
|
26
|
+
return str.__add__(self, other)
|
27
|
+
|
28
|
+
def __radd__(self, other): # Reverse concatenation also returns regular str"""
|
29
|
+
return str.__add__(other, self)
|
@@ -1,14 +1,11 @@
|
|
1
|
-
from contextlib
|
2
|
-
from functools
|
3
|
-
from http.server
|
4
|
-
from threading
|
5
|
-
from urllib.parse
|
6
|
-
|
7
|
-
from osbot_utils.utils.
|
8
|
-
|
9
|
-
from osbot_utils.utils.Misc import random_port, random_string
|
10
|
-
|
11
|
-
from osbot_utils.utils.Http import port_is_open, GET
|
1
|
+
from contextlib import contextmanager
|
2
|
+
from functools import partial
|
3
|
+
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
|
4
|
+
from threading import Thread
|
5
|
+
from urllib.parse import urljoin
|
6
|
+
from osbot_utils.utils.Files import file_create, path_combine, temp_filename, file_create_all_parent_folders
|
7
|
+
from osbot_utils.utils.Misc import random_port, random_string
|
8
|
+
from osbot_utils.utils.Http import port_is_open, GET
|
12
9
|
|
13
10
|
|
14
11
|
class Temp_Web_Server:
|
@@ -67,6 +64,7 @@ class Temp_Web_Server:
|
|
67
64
|
self.server_thread.join()
|
68
65
|
else:
|
69
66
|
self.server._BaseServer__shutdown_request = True # simulate what happens inside self.server.shutdown()
|
67
|
+
return self
|
70
68
|
|
71
69
|
def start(self):
|
72
70
|
if self.http_handler is SimpleHTTPRequestHandler:
|
@@ -76,6 +74,7 @@ class Temp_Web_Server:
|
|
76
74
|
self.server = ThreadingHTTPServer((self.host, self.port), handler_config)
|
77
75
|
self.server_thread = Thread(target=self.server.serve_forever, name=self.server_name)
|
78
76
|
self.server_thread.start()
|
77
|
+
return self
|
79
78
|
|
80
79
|
def url(self,path=''):
|
81
80
|
base_url = f"http://{self.host}:{self.port}"
|
@@ -1,20 +1,15 @@
|
|
1
1
|
import json
|
2
|
-
import os
|
3
2
|
import re
|
4
3
|
import socket
|
5
4
|
import ssl
|
6
5
|
import unicodedata
|
7
|
-
from http.cookies
|
8
|
-
from time
|
9
|
-
from urllib.parse
|
10
|
-
from urllib.request
|
11
|
-
|
12
|
-
from osbot_utils.utils.
|
13
|
-
|
14
|
-
from osbot_utils.utils.Misc import url_decode
|
15
|
-
|
16
|
-
from osbot_utils.utils.Files import save_bytes_as_file, file_size, file_bytes, file_open_bytes, file_create
|
17
|
-
from osbot_utils.utils.Python_Logger import Python_Logger
|
6
|
+
from http.cookies import SimpleCookie
|
7
|
+
from time import sleep
|
8
|
+
from urllib.parse import quote, urljoin, urlparse
|
9
|
+
from urllib.request import Request, urlopen
|
10
|
+
from osbot_utils.utils.Str import html_decode
|
11
|
+
from osbot_utils.utils.Misc import url_decode
|
12
|
+
from osbot_utils.utils.Files import save_bytes_as_file, file_create
|
18
13
|
|
19
14
|
URL_CHECK_HOST_ONLINE = 'https://www.google.com'
|
20
15
|
URL_JOIN_SAFE__MAX_ITERATIONS = 5
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
v2.72.0
|
@@ -1,54 +0,0 @@
|
|
1
|
-
import re
|
2
|
-
from typing import Optional
|
3
|
-
from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
|
4
|
-
|
5
|
-
TYPE_SAFE__STR__REGEX__SAFE_STR = re.compile(r'[^a-zA-Z0-9]') # Only allow alphanumerics and numbers
|
6
|
-
TYPE_SAFE__STR__MAX_LENGTH = 512
|
7
|
-
|
8
|
-
class Safe_Str(Type_Safe__Primitive, str):
|
9
|
-
max_length : int = TYPE_SAFE__STR__MAX_LENGTH
|
10
|
-
regex : re.Pattern = TYPE_SAFE__STR__REGEX__SAFE_STR
|
11
|
-
replacement_char : str = '_'
|
12
|
-
allow_empty : bool = True
|
13
|
-
trim_whitespace : bool = False
|
14
|
-
allow_all_replacement_char: bool = True
|
15
|
-
strict_validation : bool = False # If True, don't replace invalid chars, raise an error instead
|
16
|
-
exact_length : bool = False # If True, require exact length match, not just max length
|
17
|
-
|
18
|
-
|
19
|
-
def __new__(cls, value: Optional[str] = None) -> 'Safe_Str':
|
20
|
-
|
21
|
-
if value is None: # Validate inputs
|
22
|
-
if cls.allow_empty:
|
23
|
-
value = ""
|
24
|
-
else:
|
25
|
-
raise ValueError(f"in {cls.__name__}, value cannot be None when allow_empty is False") from None
|
26
|
-
|
27
|
-
if not isinstance(value, str): # Convert to string if not already
|
28
|
-
value = str(value)
|
29
|
-
|
30
|
-
if cls.trim_whitespace: # Trim whitespace if requested
|
31
|
-
value = value.strip()
|
32
|
-
|
33
|
-
if not cls.allow_empty and (value is None or value == ""): # Check for empty string if not allowed
|
34
|
-
raise ValueError("Value cannot be empty when allow_empty is False")
|
35
|
-
|
36
|
-
if cls.exact_length and len(value) != cls.max_length:
|
37
|
-
raise ValueError(f"Value must be exactly {cls.max_length} characters long (was {len(value)})")
|
38
|
-
elif not cls.exact_length and len(value) > cls.max_length: # Check max length
|
39
|
-
raise ValueError(f"Value exceeds maximum length of {cls.max_length} characters (was {len(value)})")
|
40
|
-
|
41
|
-
if cls.allow_empty and value =='':
|
42
|
-
return str.__new__(cls, '')
|
43
|
-
|
44
|
-
if cls.strict_validation: # If using strict validation, check if the value matches the regex pattern exactly
|
45
|
-
if not cls.regex.search(value) is None: # If there are non-matching characters
|
46
|
-
raise ValueError(f"Value contains invalid characters (must match pattern: {cls.regex.pattern})")
|
47
|
-
sanitized_value = value
|
48
|
-
else:
|
49
|
-
sanitized_value = cls.regex.sub(cls.replacement_char, value) # Apply regex sanitization
|
50
|
-
|
51
|
-
if not cls.allow_all_replacement_char and set(sanitized_value) == {cls.replacement_char} and sanitized_value: # Check if sanitized value consists entirely of replacement characters
|
52
|
-
raise ValueError(f"Sanitized value consists entirely of '{cls.replacement_char}' characters")
|
53
|
-
|
54
|
-
return str.__new__(cls, sanitized_value)
|
@@ -1 +0,0 @@
|
|
1
|
-
v2.70.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.70.0 → osbot_utils-2.72.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.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/cache_on_function.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-2.70.0 → osbot_utils-2.72.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.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/function_type_check.py
RENAMED
File without changes
|
File without changes
|
{osbot_utils-2.70.0 → osbot_utils-2.72.0}/osbot_utils/decorators/methods/remove_return_value.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-2.70.0 → osbot_utils-2.72.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.70.0 → osbot_utils-2.72.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.70.0 → osbot_utils-2.72.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
|