osbot-utils 1.75.0__tar.gz → 1.77.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.75.0 → osbot_utils-1.77.0}/PKG-INFO +2 -2
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/README.md +1 -1
- osbot_utils-1.77.0/osbot_utils/base_classes/Type_Safe__List.py +133 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/cache_on_self.py +2 -3
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Objects.py +6 -0
- osbot_utils-1.77.0/osbot_utils/version +1 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/pyproject.toml +1 -1
- osbot_utils-1.75.0/osbot_utils/base_classes/Type_Safe__List.py +0 -14
- osbot_utils-1.75.0/osbot_utils/version +0 -1
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/LICENSE +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/base_classes/Type_Safe.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/context_managers/async_invoke.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/context_managers/capture_duration.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/context_managers/print_duration.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mermaid/Mermaid.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mgraph/MGraph.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mgraph/MGraphs.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mgraph/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/CFormat.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/Local_Cache.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/Random_Guid.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/Safe_Id.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/flows/Flow.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/flows/Flow__Events.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/flows/Task.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/flows/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/html/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/trace/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Catch.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Duration.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Hook_Method.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/testing/__init__.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Env.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Files.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Http.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Json.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Misc.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Python_Logger.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Regex.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Str.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Threads.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/Zip.py +0 -0
- {osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/utils/__init__.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: osbot_utils
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.77.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
|
|
@@ -0,0 +1,133 @@
|
|
1
|
+
from typing import get_origin, get_args, Union, Optional, Any, ForwardRef
|
2
|
+
|
3
|
+
EXACT_TYPE_MATCH = (int, float, str, bytes, bool, complex)
|
4
|
+
|
5
|
+
class Type_Safe__List(list):
|
6
|
+
|
7
|
+
def __init__(self, expected_type, *args):
|
8
|
+
super().__init__(*args)
|
9
|
+
self.expected_type = expected_type
|
10
|
+
|
11
|
+
def __repr__(self):
|
12
|
+
expected_type_name = type_str(self.expected_type)
|
13
|
+
return f"list[{expected_type_name}] with {len(self)} elements"
|
14
|
+
|
15
|
+
def append(self, item):
|
16
|
+
try:
|
17
|
+
self.is_instance_of_type(item, self.expected_type)
|
18
|
+
except TypeError as e:
|
19
|
+
raise TypeError(f"In Type_Safe__List: Invalid type for item: {e}")
|
20
|
+
super().append(item)
|
21
|
+
|
22
|
+
def is_instance_of_type(self, item, expected_type):
|
23
|
+
if expected_type is Any:
|
24
|
+
return True
|
25
|
+
if isinstance(expected_type, ForwardRef): # todo: add support for ForwardRef
|
26
|
+
return True
|
27
|
+
origin = get_origin(expected_type)
|
28
|
+
args = get_args(expected_type)
|
29
|
+
if origin is None:
|
30
|
+
if expected_type in EXACT_TYPE_MATCH:
|
31
|
+
if type(item) is expected_type:
|
32
|
+
return True
|
33
|
+
else:
|
34
|
+
expected_type_name = type_str(expected_type)
|
35
|
+
actual_type_name = type_str(type(item))
|
36
|
+
raise TypeError(f"Expected '{expected_type_name}', but got '{actual_type_name}'")
|
37
|
+
else:
|
38
|
+
if isinstance(item, expected_type): # Non-parameterized type
|
39
|
+
return True
|
40
|
+
else:
|
41
|
+
expected_type_name = type_str(expected_type)
|
42
|
+
actual_type_name = type_str(type(item))
|
43
|
+
raise TypeError(f"Expected '{expected_type_name}', but got '{actual_type_name}'")
|
44
|
+
|
45
|
+
elif origin is list and args: # Expected type is List[...]
|
46
|
+
(item_type,) = args
|
47
|
+
if not isinstance(item, list):
|
48
|
+
expected_type_name = type_str(expected_type)
|
49
|
+
actual_type_name = type_str(type(item))
|
50
|
+
raise TypeError(f"Expected '{expected_type_name}', but got '{actual_type_name}'")
|
51
|
+
for idx, elem in enumerate(item):
|
52
|
+
try:
|
53
|
+
self.is_instance_of_type(elem, item_type)
|
54
|
+
except TypeError as e:
|
55
|
+
raise TypeError(f"In list at index {idx}: {e}")
|
56
|
+
return True
|
57
|
+
elif origin is dict and args: # Expected type is Dict[...]
|
58
|
+
key_type, value_type = args
|
59
|
+
if not isinstance(item, dict):
|
60
|
+
expected_type_name = type_str(expected_type)
|
61
|
+
actual_type_name = type_str(type(item))
|
62
|
+
raise TypeError(f"Expected '{expected_type_name}', but got '{actual_type_name}'")
|
63
|
+
for k, v in item.items():
|
64
|
+
try:
|
65
|
+
self.is_instance_of_type(k, key_type)
|
66
|
+
except TypeError as e:
|
67
|
+
raise TypeError(f"In dict key '{k}': {e}")
|
68
|
+
try:
|
69
|
+
self.is_instance_of_type(v, value_type)
|
70
|
+
except TypeError as e:
|
71
|
+
raise TypeError(f"In dict value for key '{k}': {e}")
|
72
|
+
return True
|
73
|
+
elif origin is tuple:
|
74
|
+
if not isinstance(item, tuple):
|
75
|
+
expected_type_name = type_str(expected_type)
|
76
|
+
actual_type_name = type_str(type(item))
|
77
|
+
raise TypeError(f"Expected '{expected_type_name}', but got '{actual_type_name}'")
|
78
|
+
if len(args) != len(item):
|
79
|
+
raise TypeError(f"Expected tuple of length {len(args)}, but got {len(item)}")
|
80
|
+
for idx, (elem, elem_type) in enumerate(zip(item, args)):
|
81
|
+
try:
|
82
|
+
self.is_instance_of_type(elem, elem_type)
|
83
|
+
except TypeError as e:
|
84
|
+
raise TypeError(f"In tuple at index {idx}: {e}")
|
85
|
+
return True
|
86
|
+
elif origin is Union or expected_type is Optional: # Expected type is Union[...]
|
87
|
+
for arg in args:
|
88
|
+
try:
|
89
|
+
self.is_instance_of_type(item, arg)
|
90
|
+
return True
|
91
|
+
except TypeError:
|
92
|
+
continue
|
93
|
+
expected_type_name = type_str(expected_type)
|
94
|
+
actual_type_name = type_str(type(item))
|
95
|
+
raise TypeError(f"Expected '{expected_type_name}', but got '{actual_type_name}'")
|
96
|
+
else:
|
97
|
+
if isinstance(item, origin):
|
98
|
+
return True
|
99
|
+
else:
|
100
|
+
expected_type_name = type_str(expected_type)
|
101
|
+
actual_type_name = type_str(type(item))
|
102
|
+
raise TypeError(f"Expected '{expected_type_name}', but got '{actual_type_name}'")
|
103
|
+
|
104
|
+
# todo: see if we should/can move this to the Objects.py file
|
105
|
+
def type_str(tp):
|
106
|
+
origin = get_origin(tp)
|
107
|
+
if origin is None:
|
108
|
+
if hasattr(tp, '__name__'):
|
109
|
+
return tp.__name__
|
110
|
+
else:
|
111
|
+
return str(tp)
|
112
|
+
else:
|
113
|
+
args = get_args(tp)
|
114
|
+
args_str = ', '.join(type_str(arg) for arg in args)
|
115
|
+
return f"{origin.__name__}[{args_str}]"
|
116
|
+
|
117
|
+
def get_object_type_str(obj):
|
118
|
+
if isinstance(obj, dict):
|
119
|
+
if not obj:
|
120
|
+
return "Dict[Empty]"
|
121
|
+
key_types = set(type(k).__name__ for k in obj.keys())
|
122
|
+
value_types = set(type(v).__name__ for v in obj.values())
|
123
|
+
key_type_str = ', '.join(sorted(key_types))
|
124
|
+
value_type_str = ', '.join(sorted(value_types))
|
125
|
+
return f"Dict[{key_type_str}, {value_type_str}]"
|
126
|
+
elif isinstance(obj, list):
|
127
|
+
if not obj:
|
128
|
+
return "List[Empty]"
|
129
|
+
elem_types = set(type(e).__name__ for e in obj)
|
130
|
+
elem_type_str = ', '.join(sorted(elem_types))
|
131
|
+
return f"List[{elem_type_str}]"
|
132
|
+
else:
|
133
|
+
return type(obj).__name__
|
@@ -1,8 +1,7 @@
|
|
1
1
|
import inspect
|
2
|
-
from functools
|
3
|
-
|
2
|
+
from functools import wraps
|
4
3
|
from osbot_utils.utils.Misc import str_md5
|
5
|
-
from typing
|
4
|
+
from typing import Any, Callable, TypeVar
|
6
5
|
|
7
6
|
|
8
7
|
CACHE_ON_SELF_KEY_PREFIX = '__cache_on_self__'
|
@@ -394,6 +394,12 @@ def value_type_matches_obj_annotation_for_attr(target, attr_name, value):
|
|
394
394
|
attr_type = obj_annotations.get(attr_name)
|
395
395
|
if attr_type:
|
396
396
|
origin_attr_type = get_origin(attr_type) # to handle when type definion contains an generic
|
397
|
+
if origin_attr_type is typing.Union:
|
398
|
+
args = get_args(attr_type)
|
399
|
+
if len(args)==2 and args[1] is type(None): # todo: find a better way to do this, since this is handling an edge case when origin_attr_type is Optional (whcih is an shorthand for Union[X, None] )
|
400
|
+
attr_type = args[0]
|
401
|
+
origin_attr_type = get_origin(attr_type)
|
402
|
+
|
397
403
|
if origin_attr_type:
|
398
404
|
attr_type = origin_attr_type
|
399
405
|
value_type = type(value)
|
@@ -0,0 +1 @@
|
|
1
|
+
v1.77.0
|
@@ -1,14 +0,0 @@
|
|
1
|
-
class Type_Safe__List(list):
|
2
|
-
|
3
|
-
def __init__(self, expected_type, *args):
|
4
|
-
super().__init__(*args)
|
5
|
-
self.expected_type = expected_type
|
6
|
-
|
7
|
-
def __repr__(self):
|
8
|
-
return f"list[{self.expected_type.__name__}] with {len(self)} elements"
|
9
|
-
|
10
|
-
def append(self, item):
|
11
|
-
if not isinstance(item, self.expected_type):
|
12
|
-
raise TypeError(f"In Type_Safe__List: Invalid type for item: Expected '{self.expected_type.__name__}', but got '{type(item).__name__}'")
|
13
|
-
super().append(item)
|
14
|
-
|
@@ -1 +0,0 @@
|
|
1
|
-
v1.75.0
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/context_managers/disable_root_loggers.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/cache_on_function.py
RENAMED
File without changes
|
File without changes
|
{osbot_utils-1.75.0 → osbot_utils-1.77.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-1.75.0 → osbot_utils-1.77.0}/osbot_utils/decorators/methods/function_type_check.py
RENAMED
File without changes
|
File without changes
|
{osbot_utils-1.75.0 → osbot_utils-1.77.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
|
{osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.75.0 → osbot_utils-1.77.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.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
|
{osbot_utils-1.75.0 → osbot_utils-1.77.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-1.75.0 → osbot_utils-1.77.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-1.75.0 → osbot_utils-1.77.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|