osbot-utils 1.96.0__tar.gz → 2.2.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-1.96.0 → osbot_utils-2.2.0}/PKG-INFO +3 -3
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/README.md +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/base_classes/Kwargs_To_Self.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/context_managers/capture_duration.py +2 -2
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/type_safe.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/CFormat.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Hashicorp_Secrets.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Zip_Bytes.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/flows/Flow.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/flows/Flow__Events.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/flows/Task.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/generators/Generator_Manager.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/Event__Queue.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +3 -4
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +7 -13
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ssh/SSH.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ssh/SSH__Execute.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ssh/SSH__Python.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +1 -1
- osbot_utils-2.2.0/osbot_utils/helpers/xml/Xml__Attribute.py +7 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/xml/Xml__Element.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/xml/Xml__File.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/xml/Xml__File__Load.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/xml/Xml__File__To_Dict.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/xml/Xml__File__To_Xml.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/xml/rss/RSS__Channel.py +1 -1
- osbot_utils-2.2.0/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +7 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/xml/rss/RSS__Feed.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/xml/rss/RSS__Image.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/xml/rss/RSS__Item.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Temp_Env_Vars.py +1 -1
- {osbot_utils-1.96.0/osbot_utils/base_classes → osbot_utils-2.2.0/osbot_utils/type_safe}/Type_Safe.py +29 -18
- {osbot_utils-1.96.0/osbot_utils/base_classes → osbot_utils-2.2.0/osbot_utils/type_safe}/Type_Safe__Base.py +3 -0
- osbot_utils-2.2.0/osbot_utils/type_safe/Type_Safe__Dict.py +39 -0
- osbot_utils-2.2.0/osbot_utils/type_safe/Type_Safe__List.py +34 -0
- {osbot_utils-1.96.0/osbot_utils/helpers → osbot_utils-2.2.0/osbot_utils}/type_safe/validators/Validator__Max.py +1 -1
- {osbot_utils-1.96.0/osbot_utils/helpers → osbot_utils-2.2.0/osbot_utils}/type_safe/validators/Validator__Min.py +1 -1
- {osbot_utils-1.96.0/osbot_utils/helpers → osbot_utils-2.2.0/osbot_utils}/type_safe/validators/Validator__One_Of.py +1 -1
- {osbot_utils-1.96.0/osbot_utils/helpers → osbot_utils-2.2.0/osbot_utils}/type_safe/validators/Validator__Regex.py +1 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Python_Logger.py +1 -1
- osbot_utils-2.2.0/osbot_utils/version +1 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/pyproject.toml +1 -1
- osbot_utils-1.96.0/osbot_utils/base_classes/Type_Safe__Dict.py +0 -22
- osbot_utils-1.96.0/osbot_utils/base_classes/Type_Safe__List.py +0 -22
- osbot_utils-1.96.0/osbot_utils/helpers/xml/Xml__Attribute.py +0 -7
- osbot_utils-1.96.0/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +0 -7
- osbot_utils-1.96.0/osbot_utils/version +0 -1
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/LICENSE +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/context_managers/async_invoke.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/context_managers/print_duration.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Guid.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Local_Cache.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Random_Guid.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Safe_Id.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Str_ASCII.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/flows/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/generators/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/html/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/python_compatibility/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/python_compatibility/python_3_8.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/trace/__init__.py +0 -0
- {osbot_utils-1.96.0/osbot_utils/helpers/type_safe → osbot_utils-2.2.0/osbot_utils/helpers/xml}/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/xml/rss/RSS__Feed__Parser.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Catch.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Duration.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Hook_Method.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-1.96.0/osbot_utils/helpers/type_safe/validators → osbot_utils-2.2.0/osbot_utils/testing}/__init__.py +0 -0
- {osbot_utils-1.96.0/osbot_utils/helpers → osbot_utils-2.2.0/osbot_utils/type_safe}/Type_Safe_Method.py +0 -0
- {osbot_utils-1.96.0/osbot_utils/helpers → osbot_utils-2.2.0/osbot_utils}/type_safe/Type_Safe__Validator.py +0 -0
- {osbot_utils-1.96.0/osbot_utils/helpers/xml → osbot_utils-2.2.0/osbot_utils/type_safe}/__init__.py +0 -0
- {osbot_utils-1.96.0/osbot_utils/testing → osbot_utils-2.2.0/osbot_utils/type_safe/validators}/__init__.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Env.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Files.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Http.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Json.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Misc.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Objects.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Regex.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Str.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Threads.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/Zip.py +0 -0
- {osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/utils/__init__.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.3
|
2
2
|
Name: osbot_utils
|
3
|
-
Version:
|
3
|
+
Version: 2.2.0
|
4
4
|
Summary: OWASP Security Bot - Utils
|
5
5
|
Home-page: https://github.com/owasp-sbot/OSBot-Utils
|
6
6
|
License: MIT
|
@@ -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
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import functools # For wrapping functions
|
2
|
-
from osbot_utils.
|
2
|
+
from osbot_utils.type_safe.Type_Safe_Method import Type_Safe_Method
|
3
3
|
|
4
4
|
def type_safe(func): # Main decorator function
|
5
5
|
@functools.wraps(func) # Preserve function metadata
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# - Have code complete on CPrint
|
3
3
|
# - not have the write the code for each of the methods
|
4
4
|
# - have a good and logical place to capture the ID of the color
|
5
|
-
from osbot_utils.
|
5
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
6
6
|
|
7
7
|
|
8
8
|
class CFormat_Colors:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from osbot_utils.
|
1
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
2
2
|
from osbot_utils.utils.Dev import pprint
|
3
3
|
from osbot_utils.utils.Files import files_list, file_create_from_bytes, temp_file, parent_folder, parent_folder_create
|
4
4
|
from osbot_utils.utils.Misc import random_text
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from osbot_utils.
|
1
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
2
2
|
from osbot_utils.helpers.cache_requests.Cache__Requests__Row import Cache__Requests__Row
|
3
3
|
from osbot_utils.helpers.cache_requests.Cache__Requests__Table import Cache__Requests__Table
|
4
4
|
from osbot_utils.utils.Json import json_dumps
|
{osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py
RENAMED
@@ -1,5 +1,5 @@
|
|
1
1
|
import types
|
2
|
-
from osbot_utils.
|
2
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
3
3
|
from osbot_utils.helpers.cache_requests.Cache__Requests__Config import Cache__Requests__Config
|
4
4
|
from osbot_utils.helpers.cache_requests.Cache__Requests__Table import Cache__Requests__Table
|
5
5
|
from osbot_utils.utils.Json import json_dumps, json_loads
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import threading
|
2
2
|
import types
|
3
3
|
|
4
|
-
from osbot_utils.
|
4
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
5
5
|
from osbot_utils.helpers.cache_requests.Cache__Requests__Actions import Cache__Requests__Actions
|
6
6
|
from osbot_utils.helpers.cache_requests.Cache__Requests__Config import Cache__Requests__Config
|
7
7
|
from osbot_utils.helpers.cache_requests.Cache__Requests__Data import Cache__Requests__Data
|
{osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
from osbot_utils.
|
1
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
2
2
|
from osbot_utils.helpers.cache_requests.Cache__Requests__Config import Cache__Requests__Config
|
3
3
|
from osbot_utils.helpers.cache_requests.Cache__Requests__Table import Cache__Requests__Table
|
4
4
|
from osbot_utils.utils.Json import json_dumps
|
@@ -3,7 +3,7 @@ import logging
|
|
3
3
|
import typing
|
4
4
|
|
5
5
|
from osbot_utils.helpers.Dependency_Manager import Dependency_Manager
|
6
|
-
from osbot_utils.
|
6
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
7
7
|
from osbot_utils.helpers.CFormat import CFormat, f_dark_grey, f_magenta, f_bold
|
8
8
|
from osbot_utils.helpers.flows.models.Flow_Run__Config import Flow_Run__Config
|
9
9
|
from osbot_utils.helpers.flows.Flow__Events import flow_events
|
@@ -1,6 +1,6 @@
|
|
1
1
|
from osbot_utils.helpers.flows.models.Flow_Run__Event_Data import Flow_Run__Event_Data
|
2
2
|
from osbot_utils.utils.Str import ansi_to_text
|
3
|
-
from osbot_utils.
|
3
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
4
4
|
from osbot_utils.helpers.flows.models.Flow_Run__Event import Flow_Run__Event
|
5
5
|
from osbot_utils.helpers.flows.models.Flow_Run__Event_Type import Flow_Run__Event_Type
|
6
6
|
|
@@ -8,7 +8,7 @@ from osbot_utils.helpers.Dependency_Manager import Dependency_Manager
|
|
8
8
|
from osbot_utils.helpers.flows.Flow__Events import flow_events
|
9
9
|
from osbot_utils.testing.Stdout import Stdout
|
10
10
|
from osbot_utils.helpers.CFormat import CFormat, f_dark_grey, f_red, f_blue, f_bold
|
11
|
-
from osbot_utils.
|
11
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
12
12
|
from osbot_utils.helpers.flows.Flow import Flow
|
13
13
|
|
14
14
|
TASK__RANDOM_ID__PREFIX = 'task_id__'
|
{osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
from osbot_utils.helpers.Random_Guid import Random_Guid
|
2
2
|
|
3
|
-
from osbot_utils.
|
3
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
4
4
|
from osbot_utils.helpers.Timestamp_Now import Timestamp_Now
|
5
5
|
from osbot_utils.helpers.flows.models.Flow_Run__Event_Data import Flow_Run__Event_Data
|
6
6
|
from osbot_utils.helpers.flows.models.Flow_Run__Event_Type import Flow_Run__Event_Type
|
{osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/generators/Generator_Manager.py
RENAMED
@@ -3,7 +3,7 @@ from _thread import RLock
|
|
3
3
|
from types import GeneratorType
|
4
4
|
from typing import Dict # Typing imports for type hints
|
5
5
|
from typing import Union
|
6
|
-
from osbot_utils.
|
6
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe # Type_Safe base class for type-safe attributes
|
7
7
|
from osbot_utils.helpers.Random_Guid import Random_Guid # Helper for generating unique IDs
|
8
8
|
from osbot_utils.helpers.generators.Generator_Context_Manager import Generator_Context_Manager
|
9
9
|
from osbot_utils.helpers.generators.Model__Generator_State import Model__Generator_State
|
{osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/generators/Model__Generator_Target.py
RENAMED
@@ -1,5 +1,5 @@
|
|
1
1
|
from types import GeneratorType
|
2
|
-
from osbot_utils.
|
2
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
3
3
|
from osbot_utils.helpers.Random_Guid import Random_Guid
|
4
4
|
from osbot_utils.helpers.generators.Model__Generator_State import Model__Generator_State
|
5
5
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import time
|
2
2
|
from queue import Queue, Empty
|
3
3
|
from threading import Thread
|
4
|
-
from osbot_utils.
|
4
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
5
5
|
from osbot_utils.helpers.pubsub.schemas.Schema__Event import Schema__Event
|
6
6
|
from osbot_utils.helpers.pubsub.schemas.Schema__Event__Message import Schema__Event__Message
|
7
7
|
from osbot_utils.utils.Misc import random_text, timestamp_utc_now, random_guid
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from osbot_utils.
|
1
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
2
2
|
from osbot_utils.decorators.methods.cache_on_self import cache_on_self
|
3
3
|
from osbot_utils.utils.Files import current_temp_folder, path_combine, folder_create, file_exists, file_delete
|
4
4
|
from osbot_utils.utils.Misc import random_filename
|
{osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py
RENAMED
@@ -1,6 +1,5 @@
|
|
1
1
|
import inspect
|
2
|
-
from typing
|
3
|
-
|
2
|
+
from typing import List
|
4
3
|
from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
|
5
4
|
from osbot_utils.decorators.lists.filter_list import filter_list
|
6
5
|
from osbot_utils.helpers.sqlite.Sqlite__Field import Sqlite__Field
|
@@ -17,8 +16,8 @@ class Sqlite__Table__Create(Kwargs_To_Self):
|
|
17
16
|
self.set_default_fields()
|
18
17
|
|
19
18
|
def add_field(self, field_data: dict):
|
20
|
-
|
21
|
-
|
19
|
+
if field_data and isinstance(field_data, dict):
|
20
|
+
sqlite_field = Sqlite__Field.from_json(field_data)
|
22
21
|
self.fields.append(sqlite_field)
|
23
22
|
return True
|
24
23
|
return False
|
{osbot_utils-1.96.0 → osbot_utils-2.2.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py
RENAMED
@@ -1,5 +1,5 @@
|
|
1
1
|
import types
|
2
|
-
from osbot_utils.
|
2
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
3
3
|
from osbot_utils.helpers.cache_requests.Cache__Requests__Actions import Cache__Requests__Actions
|
4
4
|
from osbot_utils.helpers.cache_requests.Cache__Requests__Config import Cache__Requests__Config
|
5
5
|
from osbot_utils.helpers.cache_requests.Cache__Requests__Data import Cache__Requests__Data
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from osbot_utils.
|
1
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
2
2
|
from osbot_utils.helpers.cache_requests.Cache__Requests__Config import Cache__Requests__Config
|
3
3
|
from osbot_utils.helpers.sqlite.cache.Sqlite__DB__Requests import Sqlite__DB__Requests
|
4
4
|
|
@@ -1,16 +1,10 @@
|
|
1
|
-
from osbot_utils.base_classes.Kwargs_To_Self
|
2
|
-
from osbot_utils.decorators.methods.cache_on_self
|
3
|
-
from osbot_utils.helpers.sqlite.Sqlite__Database
|
4
|
-
from osbot_utils.helpers.sqlite.
|
5
|
-
from osbot_utils.
|
6
|
-
from osbot_utils.
|
7
|
-
from osbot_utils.
|
8
|
-
from osbot_utils.utils.Dev import pprint
|
9
|
-
from osbot_utils.utils.Files import current_temp_folder, path_combine, folder_create, file_exists, file_not_exists, \
|
10
|
-
file_contents
|
11
|
-
from osbot_utils.utils.Http import GET, GET_to_file
|
12
|
-
from osbot_utils.utils.Json import json_loads, json_from_file, json_dump, json_file_create, json_file_load
|
13
|
-
from osbot_utils.utils.Objects import obj_info
|
1
|
+
from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
|
2
|
+
from osbot_utils.decorators.methods.cache_on_self import cache_on_self
|
3
|
+
from osbot_utils.helpers.sqlite.Sqlite__Database import Sqlite__Database
|
4
|
+
from osbot_utils.helpers.sqlite.domains.Sqlite__DB__Json import Sqlite__DB__Json
|
5
|
+
from osbot_utils.utils.Files import current_temp_folder, path_combine, folder_create, file_not_exists
|
6
|
+
from osbot_utils.utils.Http import GET_to_file
|
7
|
+
from osbot_utils.utils.Json import json_from_file, json_file_create, json_file_load
|
14
8
|
|
15
9
|
URL__CHINOOK_JSON = 'https://github.com/lerocha/chinook-database/releases/download/v1.4.5/ChinookData.json'
|
16
10
|
FILE_NAME__CHINOOK_DATA_JSON = 'ChinookData.json'
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
|
2
|
-
from osbot_utils.
|
2
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
3
3
|
from osbot_utils.decorators.methods.cache_on_self import cache_on_self
|
4
4
|
from osbot_utils.helpers.ssh.SCP import SCP
|
5
5
|
from osbot_utils.helpers.ssh.SSH__Execute import SSH__Execute
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from osbot_utils.
|
1
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
2
2
|
from osbot_utils.context_managers.capture_duration import capture_duration
|
3
3
|
from osbot_utils.decorators.lists.group_by import group_by
|
4
4
|
from osbot_utils.decorators.lists.index_by import index_by
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from osbot_utils.
|
1
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
2
2
|
from osbot_utils.helpers.ssh.SSH__Execute import SSH__Execute
|
3
3
|
from osbot_utils.helpers.ssh.SSH__Linux import SSH__Linux
|
4
4
|
from osbot_utils.utils.Dev import pprint
|
@@ -1,7 +1,7 @@
|
|
1
1
|
from io import StringIO
|
2
2
|
from typing import List, Union, Dict
|
3
3
|
from xml.etree.ElementTree import iterparse, Element, fromstring, ParseError
|
4
|
-
from osbot_utils.
|
4
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
5
5
|
from osbot_utils.helpers.xml.Xml__Attribute import Xml__Attribute
|
6
6
|
from osbot_utils.helpers.xml.Xml__Element import XML__Element
|
7
7
|
from osbot_utils.helpers.xml.Xml__File import Xml__File
|
@@ -1,7 +1,7 @@
|
|
1
1
|
from typing import Optional
|
2
2
|
from xml.etree.ElementTree import Element, SubElement, tostring
|
3
3
|
from xml.dom import minidom
|
4
|
-
from osbot_utils.
|
4
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
5
5
|
from osbot_utils.helpers.xml.Xml__Element import XML__Element
|
6
6
|
from osbot_utils.helpers.xml.Xml__File import Xml__File
|
7
7
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from typing import Any, Dict, List
|
2
|
-
from osbot_utils.
|
2
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe
|
3
3
|
from osbot_utils.helpers.xml.rss.RSS__Image import RSS__Image
|
4
4
|
from osbot_utils.helpers.xml.rss.RSS__Item import RSS__Item
|
5
5
|
|
{osbot_utils-1.96.0/osbot_utils/base_classes → osbot_utils-2.2.0/osbot_utils/type_safe}/Type_Safe.py
RENAMED
@@ -24,7 +24,7 @@ if sys.version_info < (3, 8): # pragma
|
|
24
24
|
else:
|
25
25
|
return ()
|
26
26
|
else:
|
27
|
-
from typing import get_origin, get_args, ForwardRef
|
27
|
+
from typing import get_origin, get_args, ForwardRef, Any
|
28
28
|
from osbot_utils.helpers.python_compatibility.python_3_8 import Annotated
|
29
29
|
|
30
30
|
if sys.version_info >= (3, 10):
|
@@ -84,11 +84,11 @@ class Type_Safe:
|
|
84
84
|
raise AttributeError(f"'{type(self).__name__}' object has no attribute '{name}'") # Raise error if attribute is not a valid getter/setter
|
85
85
|
|
86
86
|
def __setattr__(self, name, value):
|
87
|
-
from osbot_utils.utils.Objects
|
88
|
-
from osbot_utils.utils.Objects
|
89
|
-
from osbot_utils.utils.Objects
|
90
|
-
from osbot_utils.utils.Objects
|
91
|
-
from osbot_utils.
|
87
|
+
from osbot_utils.utils.Objects import convert_dict_to_value_from_obj_annotation
|
88
|
+
from osbot_utils.utils.Objects import convert_to_value_from_obj_annotation
|
89
|
+
from osbot_utils.utils.Objects import value_type_matches_obj_annotation_for_attr
|
90
|
+
from osbot_utils.utils.Objects import value_type_matches_obj_annotation_for_union_and_annotated
|
91
|
+
from osbot_utils.type_safe.Type_Safe__Validator import Type_Safe__Validator
|
92
92
|
|
93
93
|
annotations = all_annotations(self)
|
94
94
|
if not annotations: # can't do type safety checks if the class does not have annotations
|
@@ -117,12 +117,16 @@ class Type_Safe:
|
|
117
117
|
# todo: refactor this to separate method
|
118
118
|
if hasattr(annotations, 'get'):
|
119
119
|
annotation = annotations.get(name)
|
120
|
-
if annotation
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
120
|
+
if annotation:
|
121
|
+
annotation_origin = get_origin(annotation)
|
122
|
+
if annotation_origin is Annotated:
|
123
|
+
annotation_args = get_args(annotation)
|
124
|
+
target_type = annotation_args[0]
|
125
|
+
for attribute in annotation_args[1:]:
|
126
|
+
if isinstance(attribute, Type_Safe__Validator):
|
127
|
+
attribute.validate(value=value, field_name=name, target_type=target_type)
|
128
|
+
elif annotation_origin is dict:
|
129
|
+
value = self.deserialize_dict__using_key_value_annotations(name, value)
|
126
130
|
|
127
131
|
super().__setattr__(name, value)
|
128
132
|
|
@@ -184,8 +188,8 @@ class Type_Safe:
|
|
184
188
|
@classmethod
|
185
189
|
def __default__value__(cls, var_type):
|
186
190
|
import typing
|
187
|
-
from osbot_utils.
|
188
|
-
from osbot_utils.
|
191
|
+
from osbot_utils.type_safe.Type_Safe__List import Type_Safe__List
|
192
|
+
from osbot_utils.type_safe.Type_Safe__Dict import Type_Safe__Dict
|
189
193
|
|
190
194
|
if var_type is typing.Set: # todo: refactor the dict, set and list logic, since they are 90% the same
|
191
195
|
return set()
|
@@ -324,7 +328,7 @@ class Type_Safe:
|
|
324
328
|
return value
|
325
329
|
|
326
330
|
def deserialize_dict__using_key_value_annotations(self, key, value):
|
327
|
-
from osbot_utils.
|
331
|
+
from osbot_utils.type_safe.Type_Safe__Dict import Type_Safe__Dict
|
328
332
|
|
329
333
|
dict_annotations_tuple = get_args(self.__annotations__[key])
|
330
334
|
if not dict_annotations_tuple: # happens when the value is a dict/Dict with no annotations
|
@@ -341,8 +345,12 @@ class Type_Safe:
|
|
341
345
|
else:
|
342
346
|
new__dict_key = key_class(dict_key)
|
343
347
|
|
344
|
-
if
|
348
|
+
if type(dict_value) == value_class: # if the value is already the target, then just use it
|
349
|
+
new__dict_value = dict_value
|
350
|
+
elif issubclass(value_class, Type_Safe):
|
345
351
|
new__dict_value = value_class().deserialize_from_dict(dict_value)
|
352
|
+
elif value_class is Any:
|
353
|
+
new__dict_value = dict_value
|
346
354
|
else:
|
347
355
|
new__dict_value = value_class(dict_value)
|
348
356
|
new_value[new__dict_key] = new__dict_value
|
@@ -353,7 +361,7 @@ class Type_Safe:
|
|
353
361
|
def deserialize_from_dict(self, data, raise_on_not_found=False):
|
354
362
|
from decimal import Decimal
|
355
363
|
from enum import EnumMeta
|
356
|
-
from osbot_utils.
|
364
|
+
from osbot_utils.type_safe.Type_Safe__List import Type_Safe__List
|
357
365
|
from osbot_utils.helpers.Random_Guid import Random_Guid
|
358
366
|
from osbot_utils.helpers.Random_Guid_Short import Random_Guid_Short
|
359
367
|
from osbot_utils.utils.Objects import obj_is_attribute_annotation_of_type
|
@@ -362,6 +370,9 @@ class Type_Safe:
|
|
362
370
|
from osbot_utils.helpers.Safe_Id import Safe_Id
|
363
371
|
from osbot_utils.helpers.Timestamp_Now import Timestamp_Now
|
364
372
|
|
373
|
+
if hasattr(data, 'items') is False:
|
374
|
+
raise ValueError(f"Expected a dictionary, but got '{type(data)}'")
|
375
|
+
|
365
376
|
for key, value in data.items():
|
366
377
|
if hasattr(self, key) and isinstance(getattr(self, key), Type_Safe):
|
367
378
|
getattr(self, key).deserialize_from_dict(value) # if the attribute is a Type_Safe object, then also deserialize it
|
@@ -432,7 +443,7 @@ class Type_Safe:
|
|
432
443
|
json_data = json_parse(json_data)
|
433
444
|
if json_data: # if there is no data or is {} then don't create an object (since this could be caused by bad data being provided)
|
434
445
|
return cls().deserialize_from_dict(json_data,raise_on_not_found=raise_on_not_found)
|
435
|
-
return
|
446
|
+
return cls()
|
436
447
|
|
437
448
|
# todo: see if it is possible to add recursive protection to this logic
|
438
449
|
def serialize_to_dict(obj):
|
@@ -85,6 +85,9 @@ class Type_Safe__Base:
|
|
85
85
|
actual_type_name = type_str(type(item))
|
86
86
|
raise TypeError(f"Expected '{expected_type_name}', but got '{actual_type_name}'")
|
87
87
|
|
88
|
+
def json(self):
|
89
|
+
raise NotImplemented
|
90
|
+
|
88
91
|
# todo: see if we should/can move this to the Objects.py file
|
89
92
|
def type_str(tp):
|
90
93
|
origin = get_origin(tp)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
from osbot_utils.type_safe.Type_Safe__Base import type_str, Type_Safe__Base
|
2
|
+
|
3
|
+
class Type_Safe__Dict(Type_Safe__Base, dict):
|
4
|
+
def __init__(self, expected_key_type, expected_value_type, *args, **kwargs):
|
5
|
+
super().__init__(*args, **kwargs)
|
6
|
+
|
7
|
+
self.expected_key_type = expected_key_type
|
8
|
+
self.expected_value_type = expected_value_type
|
9
|
+
|
10
|
+
for k, v in self.items(): # check type-safety of ctor arguments
|
11
|
+
self.is_instance_of_type(k, self.expected_key_type )
|
12
|
+
self.is_instance_of_type(v, self.expected_value_type)
|
13
|
+
|
14
|
+
def __setitem__(self, key, value): # Check type-safety before allowing assignment.
|
15
|
+
self.is_instance_of_type(key, self.expected_key_type)
|
16
|
+
self.is_instance_of_type(value, self.expected_value_type)
|
17
|
+
super().__setitem__(key, value)
|
18
|
+
|
19
|
+
def __repr__(self):
|
20
|
+
key_type_name = type_str(self.expected_key_type)
|
21
|
+
value_type_name = type_str(self.expected_value_type)
|
22
|
+
return f"dict[{key_type_name}, {value_type_name}] with {len(self)} entries"
|
23
|
+
|
24
|
+
def json(self): # Convert the dictionary to a JSON-serializable format.
|
25
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe # can only import this here to avoid circular imports
|
26
|
+
|
27
|
+
result = {}
|
28
|
+
for key, value in self.items():
|
29
|
+
if isinstance(value, Type_Safe): # Handle Type_Safe objects in values
|
30
|
+
result[key] = value.json()
|
31
|
+
elif isinstance(value, (list, tuple)): # Handle lists/tuples that might contain Type_Safe objects
|
32
|
+
result[key] = [item.json() if isinstance(item, Type_Safe) else item
|
33
|
+
for item in value]
|
34
|
+
elif isinstance(value, dict): # Handle nested dictionaries that might contain Type_Safe objects
|
35
|
+
result[key] = {k: v.json() if isinstance(v, Type_Safe) else v
|
36
|
+
for k, v in value.items()}
|
37
|
+
else: # Regular values can be used as-is
|
38
|
+
result[key] = value
|
39
|
+
return result
|
@@ -0,0 +1,34 @@
|
|
1
|
+
from osbot_utils.type_safe.Type_Safe__Base import Type_Safe__Base, type_str
|
2
|
+
|
3
|
+
class Type_Safe__List(Type_Safe__Base, list):
|
4
|
+
|
5
|
+
def __init__(self, expected_type, *args):
|
6
|
+
super().__init__(*args)
|
7
|
+
self.expected_type = expected_type
|
8
|
+
|
9
|
+
def __repr__(self):
|
10
|
+
expected_type_name = type_str(self.expected_type)
|
11
|
+
return f"list[{expected_type_name}] with {len(self)} elements"
|
12
|
+
|
13
|
+
def append(self, item):
|
14
|
+
try:
|
15
|
+
self.is_instance_of_type(item, self.expected_type)
|
16
|
+
except TypeError as e:
|
17
|
+
raise TypeError(f"In Type_Safe__List: Invalid type for item: {e}")
|
18
|
+
super().append(item)
|
19
|
+
|
20
|
+
|
21
|
+
def json(self): # Convert the list to a JSON-serializable format.
|
22
|
+
from osbot_utils.type_safe.Type_Safe import Type_Safe # Import here to avoid circular imports
|
23
|
+
|
24
|
+
result = []
|
25
|
+
for item in self:
|
26
|
+
if isinstance(item, Type_Safe):
|
27
|
+
result.append(item.json())
|
28
|
+
elif isinstance(item, (list, tuple)):
|
29
|
+
result.append([x.json() if isinstance(x, Type_Safe) else x for x in item])
|
30
|
+
elif isinstance(item, dict):
|
31
|
+
result.append({k: v.json() if isinstance(v, Type_Safe) else v for k, v in item.items()})
|
32
|
+
else:
|
33
|
+
result.append(item)
|
34
|
+
return result
|