osbot-utils 1.31.0__tar.gz → 1.32.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.31.0 → osbot_utils-1.32.0}/PKG-INFO +2 -2
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/README.md +1 -1
- osbot_utils-1.32.0/osbot_utils/base_classes/Kwargs_To_Self.py +4 -0
- osbot_utils-1.31.0/osbot_utils/base_classes/Kwargs_To_Self.py → osbot_utils-1.32.0/osbot_utils/base_classes/Type_Safe.py +14 -17
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Catch.py +1 -1
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Objects.py +14 -0
- osbot_utils-1.32.0/osbot_utils/version +1 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/pyproject.toml +1 -1
- osbot_utils-1.31.0/osbot_utils/base_classes/Type_Safe.py +0 -6
- osbot_utils-1.31.0/osbot_utils/version +0 -1
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/LICENSE +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/base_classes/Type_Safe__List.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/context_managers/capture_duration.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mermaid/Mermaid.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mgraph/MGraph.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mgraph/MGraphs.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/graphs/mgraph/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/CFormat.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/Local_Cache.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/flows/Flow.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/flows/Task.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/flows/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/html/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/trace/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Duration.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Hook_Method.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/testing/__init__.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Env.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Files.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Http.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Json.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Misc.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Python_Logger.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Regex.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Str.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/utils/Zip.py +0 -0
- {osbot_utils-1.31.0 → osbot_utils-1.32.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.32.0
|
4
4
|
Summary: OWASP Security Bot - Utils
|
5
5
|
Home-page: https://github.com/owasp-sbot/OSBot-Utils
|
6
6
|
License: MIT
|
@@ -22,7 +22,7 @@ Description-Content-Type: text/markdown
|
|
22
22
|
|
23
23
|
Powerful Python util methods and classes that simplify common apis and tasks.
|
24
24
|
|
25
|
-

|
26
26
|
[](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
|
27
27
|
|
28
28
|
|
@@ -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
|
|
@@ -13,9 +13,10 @@ from osbot_utils.base_classes.Type_Safe__List import Type_Safe__List
|
|
13
13
|
from osbot_utils.utils.Dev import pprint
|
14
14
|
from osbot_utils.utils.Json import json_parse
|
15
15
|
from osbot_utils.utils.Misc import list_set
|
16
|
-
from osbot_utils.utils.Objects
|
16
|
+
from osbot_utils.utils.Objects import default_value, value_type_matches_obj_annotation_for_attr, \
|
17
17
|
raise_exception_on_obj_type_annotation_mismatch, obj_is_attribute_annotation_of_type, enum_from_value, \
|
18
|
-
obj_is_type_union_compatible, value_type_matches_obj_annotation_for_union_attr
|
18
|
+
obj_is_type_union_compatible, value_type_matches_obj_annotation_for_union_attr, \
|
19
|
+
convert_dict_to_value_from_obj_annotation
|
19
20
|
|
20
21
|
# Backport implementations of get_origin and get_args for Python 3.7
|
21
22
|
if sys.version_info < (3, 8):
|
@@ -47,7 +48,7 @@ immutable_types = (bool, int, float, complex, str, tuple, frozenset, bytes, None
|
|
47
48
|
# for example if we have an method like def add_node(self, title: str, call_index: int):
|
48
49
|
# throw an exception if the type of the value passed in is not the same as the one defined in the method
|
49
50
|
|
50
|
-
class
|
51
|
+
class Type_Safe:
|
51
52
|
|
52
53
|
def __init__(self, **kwargs):
|
53
54
|
"""
|
@@ -82,8 +83,8 @@ class Kwargs_To_Self:
|
|
82
83
|
if value is not None: # prevent None values from overwriting existing values, which is quite common in default constructors
|
83
84
|
setattr(self, key, value)
|
84
85
|
else:
|
85
|
-
raise
|
86
|
-
|
86
|
+
raise ValueError(f"{self.__class__.__name__} has no attribute '{key}' and cannot be assigned the value '{value}'. "
|
87
|
+
f"Use {self.__class__.__name__}.__default_kwargs__() see what attributes are available")
|
87
88
|
|
88
89
|
def __enter__(self): return self
|
89
90
|
def __exit__(self, exc_type, exc_val, exc_tb): pass
|
@@ -92,23 +93,19 @@ class Kwargs_To_Self:
|
|
92
93
|
if not hasattr(self, '__annotations__'): # can't do type safety checks if the class does not have annotations
|
93
94
|
return super().__setattr__(name, value)
|
94
95
|
|
95
|
-
# if self.__type_safety__:
|
96
|
-
# if self.__lock_attributes__:
|
97
|
-
# todo: this can't work on all, current hypothesis is that this will work for the values that are explicitly set
|
98
|
-
# if not hasattr(self, name):
|
99
|
-
# raise AttributeError(f"'[Object Locked] Current object is locked (with __lock_attributes__=True) which prevents new attributes allocations (i.e. setattr calls). In this case {type(self).__name__}' object has no attribute '{name}'") from None
|
100
|
-
|
101
96
|
if value is not None:
|
97
|
+
if type(value) is dict:
|
98
|
+
value = convert_dict_to_value_from_obj_annotation(self, name, value)
|
102
99
|
check_1 = value_type_matches_obj_annotation_for_attr (self, name, value)
|
103
100
|
check_2 = value_type_matches_obj_annotation_for_union_attr(self, name, value)
|
104
101
|
if (check_1 is False and check_2 is None or
|
105
102
|
check_1 is None and check_2 is False or
|
106
103
|
check_1 is False and check_2 is False ): # fix for type safety assigment on Union vars
|
107
|
-
raise
|
104
|
+
raise ValueError(f"Invalid type for attribute '{name}'. Expected '{self.__annotations__.get(name)}' but got '{type(value)}'")
|
108
105
|
else:
|
109
106
|
if hasattr(self, name) and self.__annotations__.get(name) : # don't allow previously set variables to be set to None
|
110
107
|
if getattr(self, name) is not None: # unless it is already set to None
|
111
|
-
raise
|
108
|
+
raise ValueError(f"Can't set None, to a variable that is already set. Invalid type for attribute '{name}'. Expected '{self.__annotations__.get(name)}' but got '{type(value)}'")
|
112
109
|
|
113
110
|
super().__setattr__(name, value)
|
114
111
|
|
@@ -145,13 +142,13 @@ class Kwargs_To_Self:
|
|
145
142
|
if var_value is not None: # allow None assignments on ctor since that is a valid use case
|
146
143
|
if var_type and not isinstance(var_value, var_type): # check type
|
147
144
|
exception_message = f"variable '{var_name}' is defined as type '{var_type}' but has value '{var_value}' of type '{type(var_value)}'"
|
148
|
-
raise
|
145
|
+
raise ValueError(exception_message)
|
149
146
|
if var_type not in immutable_types and var_name.startswith('__') is False: # if var_type is not one of the immutable_types or is an __ internal
|
150
147
|
#todo: fix type safety bug that I believe is caused here
|
151
148
|
if obj_is_type_union_compatible(var_type, immutable_types) is False: # if var_type is not something like Optional[Union[int, str]]
|
152
149
|
if type(var_type) not in immutable_types:
|
153
150
|
exception_message = f"variable '{var_name}' is defined as type '{var_type}' which is not supported by Kwargs_To_Self, with only the following immutable types being supported: '{immutable_types}'"
|
154
|
-
raise
|
151
|
+
raise ValueError(exception_message)
|
155
152
|
if include_base_classes is False:
|
156
153
|
break
|
157
154
|
return kwargs
|
@@ -251,14 +248,14 @@ class Kwargs_To_Self:
|
|
251
248
|
if value is not None:
|
252
249
|
if hasattr(self,'__annotations__'): # can only do type safety checks if the class does not have annotations
|
253
250
|
if value_type_matches_obj_annotation_for_attr(self, key, value) is False:
|
254
|
-
raise
|
251
|
+
raise ValueError(f"Invalid type for attribute '{key}'. Expected '{self.__annotations__.get(key)}' but got '{type(value)}'")
|
255
252
|
setattr(self, key, value)
|
256
253
|
return self
|
257
254
|
|
258
255
|
|
259
256
|
def deserialize_from_dict(self, data):
|
260
257
|
for key, value in data.items():
|
261
|
-
if hasattr(self, key) and isinstance(getattr(self, key),
|
258
|
+
if hasattr(self, key) and isinstance(getattr(self, key), Type_Safe):
|
262
259
|
getattr(self, key).deserialize_from_dict(value) # Recursive call for complex nested objects
|
263
260
|
else:
|
264
261
|
if hasattr(self, '__annotations__'): # can only do type safety checks if the class does not have annotations
|
@@ -42,7 +42,7 @@ class Catch:
|
|
42
42
|
if self.expected_error:
|
43
43
|
self.assert_error_is(self.expected_error)
|
44
44
|
if self.expect_exception and exception_type is None:
|
45
|
-
raise
|
45
|
+
raise ValueError(f'Expected exception: {self.expected_error} but no exception was raised')
|
46
46
|
if self.catch_exception:
|
47
47
|
return True # returning true here will prevent the exception to be propagated (which is the objective of this class :) )
|
48
48
|
return False
|
@@ -69,6 +69,9 @@ def base_classes(cls):
|
|
69
69
|
target = type(cls)
|
70
70
|
return type_base_classes(target)
|
71
71
|
|
72
|
+
def base_classes_names(cls):
|
73
|
+
return [cls.__name__ for cls in base_classes(cls)]
|
74
|
+
|
72
75
|
def class_functions_names(target):
|
73
76
|
return list_set(class_functions(target))
|
74
77
|
|
@@ -89,6 +92,17 @@ def class_full_name(target):
|
|
89
92
|
type_name = type_target.__name__
|
90
93
|
return f'{type_module}.{type_name}'
|
91
94
|
|
95
|
+
def convert_dict_to_value_from_obj_annotation(target, attr_name, value):
|
96
|
+
if target is not None and attr_name is not None:
|
97
|
+
if hasattr(target, '__annotations__'):
|
98
|
+
obj_annotations = target.__annotations__
|
99
|
+
if hasattr(obj_annotations,'get'):
|
100
|
+
attribute_annotation = obj_annotations.get(attr_name)
|
101
|
+
if 'Type_Safe' in base_classes_names(attribute_annotation):
|
102
|
+
return attribute_annotation(**value)
|
103
|
+
return value
|
104
|
+
|
105
|
+
|
92
106
|
def default_value(target : type):
|
93
107
|
try:
|
94
108
|
return target() # try to create the object using the default constructor
|
@@ -0,0 +1 @@
|
|
1
|
+
v1.32.0
|
@@ -1 +0,0 @@
|
|
1
|
-
v1.31.0
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/context_managers/disable_root_loggers.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/cache_on_function.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.31.0 → osbot_utils-1.32.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.31.0 → osbot_utils-1.32.0}/osbot_utils/decorators/methods/function_type_check.py
RENAMED
File without changes
|
File without changes
|
{osbot_utils-1.31.0 → osbot_utils-1.32.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.31.0 → osbot_utils-1.32.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.31.0 → osbot_utils-1.32.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
|
{osbot_utils-1.31.0 → osbot_utils-1.32.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.31.0 → osbot_utils-1.32.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.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.31.0 → osbot_utils-1.32.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|