osbot-utils 1.93.0__tar.gz → 1.95.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.93.0 → osbot_utils-1.95.0}/PKG-INFO +2 -2
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/README.md +1 -1
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/Type_Safe.py +9 -7
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/Type_Safe__Dict.py +1 -1
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Guid.py +1 -1
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +1 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Objects.py +33 -22
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Str.py +4 -4
- osbot_utils-1.95.0/osbot_utils/version +1 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/pyproject.toml +1 -1
- osbot_utils-1.93.0/osbot_utils/graphs/mermaid/Mermaid.py +0 -75
- osbot_utils-1.93.0/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -49
- osbot_utils-1.93.0/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -95
- osbot_utils-1.93.0/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -65
- osbot_utils-1.93.0/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -56
- osbot_utils-1.93.0/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -7
- osbot_utils-1.93.0/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -9
- osbot_utils-1.93.0/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -7
- osbot_utils-1.93.0/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -98
- osbot_utils-1.93.0/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -9
- osbot_utils-1.93.0/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -16
- osbot_utils-1.93.0/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -30
- osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraph.py +0 -55
- osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -7
- osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -139
- osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -24
- osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -32
- osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -27
- osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -42
- osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraphs.py +0 -12
- osbot_utils-1.93.0/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -26
- osbot_utils-1.93.0/osbot_utils/testing/__init__.py +0 -0
- osbot_utils-1.93.0/osbot_utils/utils/__init__.py +0 -0
- osbot_utils-1.93.0/osbot_utils/version +0 -1
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/LICENSE +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/Type_Safe__Base.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/Type_Safe__List.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/context_managers/async_invoke.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/context_managers/capture_duration.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/context_managers/print_duration.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/type_safe.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/CFormat.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Local_Cache.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Random_Guid.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Safe_Id.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Str_ASCII.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Type_Safe_Method.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/graphs → osbot_utils-1.95.0/osbot_utils/helpers}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/graphs/mgraph → osbot_utils-1.95.0/osbot_utils/helpers/ast/nodes}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers → osbot_utils-1.95.0/osbot_utils/helpers/cache_requests}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/Flow.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/Flow__Events.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/Task.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/ast/nodes → osbot_utils-1.95.0/osbot_utils/helpers/flows}/__init__.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/cache_requests → osbot_utils-1.95.0/osbot_utils/helpers/flows/decorators}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/flows → osbot_utils-1.95.0/osbot_utils/helpers/flows/models}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/generators/Generator_Manager.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/flows/decorators → osbot_utils-1.95.0/osbot_utils/helpers/generators}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/flows/models → osbot_utils-1.95.0/osbot_utils/helpers/html}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/generators → osbot_utils-1.95.0/osbot_utils/helpers/pubsub}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/html → osbot_utils-1.95.0/osbot_utils/helpers/pubsub/schemas}/__init__.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/pubsub → osbot_utils-1.95.0/osbot_utils/helpers/python_compatibility}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/python_compatibility/python_3_8.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/pubsub/schemas → osbot_utils-1.95.0/osbot_utils/helpers/sqlite}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/python_compatibility → osbot_utils-1.95.0/osbot_utils/helpers/sqlite/cache}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/sqlite → osbot_utils-1.95.0/osbot_utils/helpers/sqlite/domains}/__init__.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/sqlite/cache → osbot_utils-1.95.0/osbot_utils/helpers/sqlite/domains/schemas}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/sqlite/domains → osbot_utils-1.95.0/osbot_utils/helpers/sqlite/models}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/sqlite/domains/schemas → osbot_utils-1.95.0/osbot_utils/helpers/sqlite/sample_data}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/sqlite/models → osbot_utils-1.95.0/osbot_utils/helpers/sqlite/sql_builder}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/sqlite/sample_data → osbot_utils-1.95.0/osbot_utils/helpers/sqlite/tables}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/sqlite/sql_builder → osbot_utils-1.95.0/osbot_utils/helpers/ssh}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/sqlite/tables → osbot_utils-1.95.0/osbot_utils/helpers/trace}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/type_safe/Type_Safe__Validator.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/ssh → osbot_utils-1.95.0/osbot_utils/helpers/type_safe}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/type_safe/validators/Validator__Max.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/type_safe/validators/Validator__Min.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/type_safe/validators/Validator__One_Of.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/type_safe/validators/Validator__Regex.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/trace → osbot_utils-1.95.0/osbot_utils/helpers/type_safe/validators}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/Xml__Attribute.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/Xml__Element.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/Xml__File.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/Xml__File__Load.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/Xml__File__To_Dict.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/Xml__File__To_Xml.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/type_safe → osbot_utils-1.95.0/osbot_utils/helpers/xml}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/rss/RSS__Channel.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/rss/RSS__Feed.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/rss/RSS__Feed__Parser.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/rss/RSS__Image.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/rss/RSS__Item.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Catch.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Duration.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Hook_Method.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/type_safe/validators → osbot_utils-1.95.0/osbot_utils/testing}/__init__.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Env.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Files.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Http.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Json.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Misc.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Python_Logger.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Regex.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Threads.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Zip.py +0 -0
- {osbot_utils-1.93.0/osbot_utils/helpers/xml → osbot_utils-1.95.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.95.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
|
|
@@ -3,7 +3,8 @@
|
|
3
3
|
|
4
4
|
import sys
|
5
5
|
import types
|
6
|
-
from osbot_utils.utils.Objects import default_value
|
6
|
+
from osbot_utils.utils.Objects import default_value # todo: remove test mocking requirement for this to be here (instead of on the respective method)
|
7
|
+
from osbot_utils.utils.Objects import all_annotations
|
7
8
|
|
8
9
|
# Backport implementations of get_origin and get_args for Python 3.7
|
9
10
|
if sys.version_info < (3, 8): # pragma: no cover
|
@@ -89,7 +90,8 @@ class Type_Safe:
|
|
89
90
|
from osbot_utils.utils.Objects import value_type_matches_obj_annotation_for_union_and_annotated
|
90
91
|
from osbot_utils.helpers.type_safe.Type_Safe__Validator import Type_Safe__Validator
|
91
92
|
|
92
|
-
|
93
|
+
annotations = all_annotations(self)
|
94
|
+
if not annotations: # can't do type safety checks if the class does not have annotations
|
93
95
|
return super().__setattr__(name, value)
|
94
96
|
|
95
97
|
if value is not None:
|
@@ -101,20 +103,20 @@ class Type_Safe:
|
|
101
103
|
origin = get_origin(value)
|
102
104
|
if origin is not None:
|
103
105
|
value = origin
|
104
|
-
check_1 = value_type_matches_obj_annotation_for_attr
|
106
|
+
check_1 = value_type_matches_obj_annotation_for_attr (self, name, value)
|
105
107
|
check_2 = value_type_matches_obj_annotation_for_union_and_annotated(self, name, value)
|
106
108
|
if (check_1 is False and check_2 is None or
|
107
109
|
check_1 is None and check_2 is False or
|
108
110
|
check_1 is False and check_2 is False ): # fix for type safety assigment on Union vars
|
109
|
-
raise ValueError(f"Invalid type for attribute '{name}'. Expected '{
|
111
|
+
raise ValueError(f"Invalid type for attribute '{name}'. Expected '{annotations.get(name)}' but got '{type(value)}'")
|
110
112
|
else:
|
111
|
-
if hasattr(self, name) and
|
113
|
+
if hasattr(self, name) and annotations.get(name) : # don't allow previously set variables to be set to None
|
112
114
|
if getattr(self, name) is not None: # unless it is already set to None
|
113
115
|
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)}'")
|
114
116
|
|
115
117
|
# todo: refactor this to separate method
|
116
|
-
if hasattr(
|
117
|
-
annotation =
|
118
|
+
if hasattr(annotations, 'get'):
|
119
|
+
annotation = annotations.get(name)
|
118
120
|
if annotation and get_origin(annotation) is Annotated:
|
119
121
|
annotation_args = get_args(annotation)
|
120
122
|
target_type = annotation_args[0]
|
@@ -19,4 +19,4 @@ class Type_Safe__Dict(Type_Safe__Base, dict):
|
|
19
19
|
def __repr__(self):
|
20
20
|
key_type_name = type_str(self.expected_key_type)
|
21
21
|
value_type_name = type_str(self.expected_value_type)
|
22
|
-
return f"dict[{key_type_name}, {value_type_name}] with {len(self)} entries"
|
22
|
+
return f"dict[{key_type_name}, {value_type_name}] with {len(self)} entries"
|
@@ -11,7 +11,7 @@ class Guid(str):
|
|
11
11
|
if is_guid(value):
|
12
12
|
guid = value
|
13
13
|
else:
|
14
|
-
guid = uuid.uuid5(GUID__NAMESPACE, value)
|
14
|
+
guid = uuid.uuid5(GUID__NAMESPACE, value) # Generate a UUID5 using the namespace and value
|
15
15
|
return super().__new__(cls, str(guid)) # Return a new instance of Guid initialized with the string version of the UUID
|
16
16
|
|
17
17
|
def __str__(self):
|
@@ -12,6 +12,7 @@ GLOBAL_FUNCTIONS_TO_IGNORE = ['value_type_matches_obj_annotation_for_attr'
|
|
12
12
|
'value_type_matches_obj_annotation_for_union_and_annotated' , # todo: map out and document why exactly these methods are ignore (and what is the side effect)
|
13
13
|
'are_types_compatible_for_assigment' ,
|
14
14
|
'obj_attribute_annotation' ,
|
15
|
+
'all_annotations' ,
|
15
16
|
'get_origin' ,
|
16
17
|
'getmro' ,
|
17
18
|
'default_value' ,
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# todo add tests
|
2
2
|
import sys
|
3
|
-
from types
|
3
|
+
from types import SimpleNamespace
|
4
|
+
from osbot_utils.helpers.python_compatibility.python_3_8 import Annotated
|
5
|
+
|
4
6
|
|
5
7
|
class __(SimpleNamespace):
|
6
8
|
pass
|
@@ -439,29 +441,38 @@ def pickle_load_from_bytes(pickled_data: bytes):
|
|
439
441
|
except Exception:
|
440
442
|
return {}
|
441
443
|
|
444
|
+
def all_annotations(target):
|
445
|
+
annotations = {}
|
446
|
+
if hasattr(target.__class__, '__mro__'):
|
447
|
+
for base in reversed(target.__class__.__mro__):
|
448
|
+
if hasattr(base, '__annotations__'):
|
449
|
+
annotations.update(base.__annotations__)
|
450
|
+
return annotations
|
451
|
+
|
442
452
|
def value_type_matches_obj_annotation_for_attr(target, attr_name, value):
|
443
453
|
import typing
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
454
|
+
annotations = all_annotations(target)
|
455
|
+
attr_type = annotations.get(attr_name)
|
456
|
+
if attr_type:
|
457
|
+
origin_attr_type = get_origin(attr_type) # to handle when type definition contains a generic
|
458
|
+
if origin_attr_type is Annotated: # if the type is Annotated
|
459
|
+
args = get_args(attr_type)
|
460
|
+
origin_attr_type = args[0]
|
461
|
+
|
462
|
+
elif origin_attr_type is typing.Union:
|
463
|
+
args = get_args(attr_type)
|
464
|
+
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 (which is an shorthand for Union[X, None] )
|
465
|
+
attr_type = args[0]
|
466
|
+
origin_attr_type = get_origin(attr_type)
|
467
|
+
|
468
|
+
if origin_attr_type:
|
469
|
+
attr_type = origin_attr_type
|
470
|
+
value_type = type(value)
|
471
|
+
if are_types_compatible_for_assigment(source_type=value_type, target_type=attr_type):
|
472
|
+
return True
|
473
|
+
if are_types_magic_mock(source_type=value_type, target_type=attr_type):
|
474
|
+
return True
|
475
|
+
return value_type is attr_type
|
465
476
|
return None
|
466
477
|
|
467
478
|
|
@@ -9,17 +9,17 @@ REGEX__ANSI_ESCAPE_PATTERN = re.compile(r'\x1b\[[0-9;]*m')
|
|
9
9
|
REGEX__SAFE_ID_REGEX = re.compile(r'[^a-zA-Z0-9_-]')
|
10
10
|
|
11
11
|
def ansi_text_visible_length(ansi_text):
|
12
|
-
if
|
12
|
+
if isinstance(ansi_text, str):
|
13
13
|
ansi_escape = re.compile(REGEX__ANSI_ESCAPE_PATTERN) # This regex matches the escape sequences used for text formatting
|
14
14
|
visible_text = ansi_escape.sub('', ansi_text) # Remove the escape sequences
|
15
15
|
return len(visible_text) # Return the length of the remaining text
|
16
16
|
|
17
17
|
def ansi_to_text(ansi_text: str):
|
18
|
-
if
|
18
|
+
if isinstance(ansi_text, str):
|
19
19
|
return REGEX__ANSI_ESCAPE_PATTERN.sub('', ansi_text)
|
20
20
|
|
21
21
|
def ansis_to_texts(ansis_texts: list): # todo: find a better name for this method :)
|
22
|
-
if
|
22
|
+
if isinstance(ansis_texts, list):
|
23
23
|
return [ansi_to_text(ansi_text) for ansi_text in ansis_texts]
|
24
24
|
return []
|
25
25
|
|
@@ -98,7 +98,7 @@ def str_cap_snake_case(snake_str):
|
|
98
98
|
|
99
99
|
|
100
100
|
def trim(target):
|
101
|
-
if
|
101
|
+
if isinstance(target, str):
|
102
102
|
return target.strip()
|
103
103
|
return ""
|
104
104
|
|
@@ -0,0 +1 @@
|
|
1
|
+
v1.95.0
|
@@ -1,75 +0,0 @@
|
|
1
|
-
from osbot_utils.graphs.mermaid.Mermaid__Renderer import Mermaid__Renderer
|
2
|
-
from osbot_utils.graphs.mermaid.Mermaid__Edge import Mermaid__Edge
|
3
|
-
from osbot_utils.graphs.mermaid.Mermaid__Graph import Mermaid__Graph
|
4
|
-
from osbot_utils.graphs.mermaid.models.Mermaid__Diagram_Direction import Diagram__Direction
|
5
|
-
from osbot_utils.graphs.mermaid.models.Mermaid__Diagram__Type import Diagram__Type
|
6
|
-
from osbot_utils.utils.Python_Logger import Python_Logger
|
7
|
-
from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
|
8
|
-
|
9
|
-
class Mermaid(Kwargs_To_Self):
|
10
|
-
graph : Mermaid__Graph
|
11
|
-
renderer : Mermaid__Renderer
|
12
|
-
logger : Python_Logger
|
13
|
-
|
14
|
-
# todo add support for storing the data in sqlite so that the search for existing nodes is efficient
|
15
|
-
def add_edge(self, from_node_key, to_node_key, label=None,attributes=None):
|
16
|
-
nodes_by_id = self.graph.data().nodes__by_key()
|
17
|
-
from_node = nodes_by_id.get(from_node_key)
|
18
|
-
to_node = nodes_by_id.get(to_node_key)
|
19
|
-
if not from_node:
|
20
|
-
from_node = self.add_node(key=from_node_key)
|
21
|
-
if not to_node:
|
22
|
-
to_node = self.add_node(key=to_node_key)
|
23
|
-
|
24
|
-
# todo: add back the protection/detection that we get from MGraph class of allow_circle_edges and allow_duplicate_edges
|
25
|
-
mermaid_edge = Mermaid__Edge(from_node=from_node, to_node=to_node, label=label, attributes=attributes)
|
26
|
-
self.graph.edges.append(mermaid_edge)
|
27
|
-
return mermaid_edge
|
28
|
-
|
29
|
-
def add_directive(self, directive):
|
30
|
-
self.renderer.config.directives.append(directive)
|
31
|
-
return self
|
32
|
-
|
33
|
-
def add_node(self, **kwargs):
|
34
|
-
return self.graph.add_node(**kwargs)
|
35
|
-
|
36
|
-
def code(self):
|
37
|
-
return self.renderer.code(self.nodes(), self.edges())
|
38
|
-
|
39
|
-
def code_markdown(self):
|
40
|
-
#self.code_create()
|
41
|
-
self.code()
|
42
|
-
rendered_lines = self.renderer.mermaid_code
|
43
|
-
markdown = ['#### Mermaid Graph',
|
44
|
-
"```mermaid" ,
|
45
|
-
*rendered_lines ,
|
46
|
-
"```" ]
|
47
|
-
|
48
|
-
return '\n'.join(markdown)
|
49
|
-
|
50
|
-
def edges(self):
|
51
|
-
return self.graph.edges
|
52
|
-
|
53
|
-
def print_code(self):
|
54
|
-
print(self.code())
|
55
|
-
|
56
|
-
def nodes(self):
|
57
|
-
return self.graph.nodes
|
58
|
-
|
59
|
-
def set_direction(self, direction):
|
60
|
-
if isinstance(direction, Diagram__Direction):
|
61
|
-
self.renderer.diagram_direction = direction
|
62
|
-
elif isinstance(direction, str) and direction in Diagram__Direction.__members__:
|
63
|
-
self.renderer.diagram_direction = Diagram__Direction[direction]
|
64
|
-
return self # If the value can't be set (not a valid name), do nothing
|
65
|
-
|
66
|
-
def set_diagram_type(self, diagram_type):
|
67
|
-
if isinstance(diagram_type, Diagram__Type):
|
68
|
-
self.renderer.diagram_type = diagram_type
|
69
|
-
|
70
|
-
def save(self, target_file=None):
|
71
|
-
file_path = target_file or '/tmp/mermaid.md'
|
72
|
-
|
73
|
-
with open(file_path, 'w') as file:
|
74
|
-
file.write(self.code_markdown())
|
75
|
-
return file_path
|
@@ -1,49 +0,0 @@
|
|
1
|
-
from osbot_utils.graphs.mermaid.Mermaid__Node import LINE_PADDING, Mermaid__Node
|
2
|
-
from osbot_utils.graphs.mermaid.configs.Mermaid__Edge__Config import Mermaid__Edge__Config
|
3
|
-
from osbot_utils.graphs.mgraph.MGraph__Edge import MGraph__Edge
|
4
|
-
#from osbot_utils.graphs.mgraph.views.mermaid.Mermaid__Node import Mermaid__Node
|
5
|
-
from osbot_utils.utils.Str import safe_str
|
6
|
-
|
7
|
-
|
8
|
-
class Mermaid__Edge(MGraph__Edge):
|
9
|
-
config : Mermaid__Edge__Config
|
10
|
-
from_node : Mermaid__Node
|
11
|
-
to_node : Mermaid__Node
|
12
|
-
|
13
|
-
# def __init__(self, **kwargs):
|
14
|
-
# super().__init__(**kwargs)
|
15
|
-
|
16
|
-
# def __init__(self, **kwargs):
|
17
|
-
# super().__init__(**kwargs)
|
18
|
-
# self.convert_nodes()
|
19
|
-
#
|
20
|
-
def edge_mode(self, edge_mode):
|
21
|
-
self.config.edge_mode = edge_mode
|
22
|
-
return self
|
23
|
-
|
24
|
-
def edge_mode__lr_using_pipe(self):
|
25
|
-
return self.edge_mode('lr_using_pipe')
|
26
|
-
|
27
|
-
def output_node_from(self, value=True):
|
28
|
-
self.config.output_node_from = value
|
29
|
-
return self
|
30
|
-
|
31
|
-
def output_node_to(self, value=True):
|
32
|
-
self.config.output_node_to = value
|
33
|
-
return self
|
34
|
-
|
35
|
-
def render_edge(self):
|
36
|
-
from_node_key = safe_str(self.from_node.key)
|
37
|
-
to_node_key = safe_str(self.to_node .key)
|
38
|
-
if self.config.output_node_from:
|
39
|
-
from_node_key = self.from_node.render_node(include_padding=False) #f'{edge.from_node.key}["{edge.from_node.label}"]'
|
40
|
-
if self.config.output_node_to:
|
41
|
-
to_node_key = self.to_node.render_node(include_padding=False ) #f'{edge.to_node .key}["{edge.to_node .label}"]'
|
42
|
-
if self.config.edge_mode == 'lr_using_pipe':
|
43
|
-
link_code = f'-->|{self.label}|'
|
44
|
-
elif self.label:
|
45
|
-
link_code = f'--"{self.label}"-->'
|
46
|
-
else:
|
47
|
-
link_code = '-->'
|
48
|
-
edge_code = f'{LINE_PADDING}{from_node_key} {link_code} {to_node_key}'
|
49
|
-
return edge_code
|
@@ -1,95 +0,0 @@
|
|
1
|
-
from typing import List
|
2
|
-
|
3
|
-
from osbot_utils.graphs.mgraph.MGraph__Edge import MGraph__Edge
|
4
|
-
from osbot_utils.graphs.mgraph.MGraph__Node import MGraph__Node
|
5
|
-
from osbot_utils.graphs.mermaid.Mermaid__Edge import Mermaid__Edge
|
6
|
-
from osbot_utils.graphs.mermaid.Mermaid__Node import Mermaid__Node
|
7
|
-
from osbot_utils.graphs.mgraph.MGraph import MGraph
|
8
|
-
|
9
|
-
|
10
|
-
class Mermaid__Graph(MGraph):
|
11
|
-
edges : List[Mermaid__Edge]
|
12
|
-
mermaid_code : List
|
13
|
-
nodes : List[Mermaid__Node]
|
14
|
-
|
15
|
-
# def __init__(self, mgraph=None):
|
16
|
-
# super().__init__()
|
17
|
-
# if mgraph is None:
|
18
|
-
# mgraph = MGraph()
|
19
|
-
# self.__dict__ = mgraph.__dict__
|
20
|
-
# self.convert_nodes().convert_edges()
|
21
|
-
|
22
|
-
# def cast(self, source):
|
23
|
-
# self.__dict__ = source.__dict__
|
24
|
-
# return self
|
25
|
-
|
26
|
-
# def add_edge(self, **kwargs):
|
27
|
-
# #new_edge = super().add_edge(*args, **kwargs)
|
28
|
-
# mermaid_edge = Mermaid__Edge(**kwargs)
|
29
|
-
# self.edges.append(mermaid_edge)
|
30
|
-
# return mermaid_edge
|
31
|
-
#
|
32
|
-
def add_node(self, **kwargs):
|
33
|
-
new_node = MGraph__Node(**kwargs)
|
34
|
-
mermaid_node = Mermaid__Node().merge_with(new_node)
|
35
|
-
self.nodes.append(mermaid_node)
|
36
|
-
return mermaid_node
|
37
|
-
|
38
|
-
#
|
39
|
-
#
|
40
|
-
# def add_line(self, line):
|
41
|
-
# self.mermaid_code.append(line)
|
42
|
-
# return line
|
43
|
-
#
|
44
|
-
# def code(self):
|
45
|
-
# self.code_create()
|
46
|
-
# return '\n'.join(self.mermaid_code)
|
47
|
-
#
|
48
|
-
# def code_create(self):
|
49
|
-
# with self as _:
|
50
|
-
# _.reset_code()
|
51
|
-
# _.add_line('graph LR')
|
52
|
-
# for node in _.nodes:
|
53
|
-
# _.add_line(node.code())
|
54
|
-
# _.add_line('')
|
55
|
-
# for edge in _.edges:
|
56
|
-
# _.add_line(edge.code())
|
57
|
-
# return self
|
58
|
-
#
|
59
|
-
# def code_markdown(self):
|
60
|
-
# self.code_create()
|
61
|
-
# markdown = ['# Mermaid Graph',
|
62
|
-
# "```mermaid" ,
|
63
|
-
# *self.mermaid_code,
|
64
|
-
# "```"]
|
65
|
-
#
|
66
|
-
# return '\n'.join(markdown)
|
67
|
-
#
|
68
|
-
# def convert_edges(self):
|
69
|
-
# new_edges = []
|
70
|
-
# for edge in self.edges:
|
71
|
-
# new_edges.append(Mermaid__Edge().cast(edge))
|
72
|
-
# self.edges = new_edges
|
73
|
-
# return self
|
74
|
-
#
|
75
|
-
# def convert_nodes(self):
|
76
|
-
# new_nodes = []
|
77
|
-
# for node in self.nodes:
|
78
|
-
# mermaid_node = Mermaid__Node().cast(node)
|
79
|
-
# new_nodes.append(mermaid_node)
|
80
|
-
# self.nodes = new_nodes
|
81
|
-
# return self
|
82
|
-
#
|
83
|
-
# def reset_code(self):
|
84
|
-
# self.mermaid_code = []
|
85
|
-
# return self
|
86
|
-
#
|
87
|
-
# def save(self, target_file=None):
|
88
|
-
# file_path = target_file or '/tmp/mermaid.md'
|
89
|
-
#
|
90
|
-
# with open(file_path, 'w') as file:
|
91
|
-
# file.write(self.code_markdown())
|
92
|
-
# return file_path
|
93
|
-
#
|
94
|
-
# def print_code(self):
|
95
|
-
# print(self.code())
|
@@ -1,65 +0,0 @@
|
|
1
|
-
from osbot_utils.graphs.mermaid.configs.Mermaid__Node__Config import Mermaid__Node__Config
|
2
|
-
from osbot_utils.graphs.mermaid.models.Mermaid__Node__Shape import Mermaid__Node__Shape
|
3
|
-
from osbot_utils.graphs.mgraph.MGraph__Node import MGraph__Node
|
4
|
-
|
5
|
-
LINE_PADDING = ' '
|
6
|
-
|
7
|
-
class Mermaid__Node(MGraph__Node):
|
8
|
-
|
9
|
-
config : Mermaid__Node__Config
|
10
|
-
|
11
|
-
def render_node(self, include_padding=True):
|
12
|
-
left_char, right_char = self.config.node_shape.value
|
13
|
-
|
14
|
-
if self.config.markdown:
|
15
|
-
label = f'`{self.label}`'
|
16
|
-
else:
|
17
|
-
label = self.label
|
18
|
-
|
19
|
-
|
20
|
-
if self.config.show_label is False:
|
21
|
-
node_code = f'{self.key}'
|
22
|
-
else:
|
23
|
-
if self.config.wrap_with_quotes is False:
|
24
|
-
node_code = f'{self.key}{left_char}{label}{right_char}'
|
25
|
-
else:
|
26
|
-
node_code = f'{self.key}{left_char}"{label}"{right_char}'
|
27
|
-
|
28
|
-
if include_padding:
|
29
|
-
node_code = f'{LINE_PADDING}{node_code}'
|
30
|
-
return node_code
|
31
|
-
|
32
|
-
def markdown(self, value=True):
|
33
|
-
self.config.markdown = value
|
34
|
-
return self
|
35
|
-
|
36
|
-
def shape(self, shape=None):
|
37
|
-
self.config.node_shape = Mermaid__Node__Shape.get_shape(shape)
|
38
|
-
return self
|
39
|
-
|
40
|
-
|
41
|
-
def shape_asymmetric (self): self.config.node_shape = Mermaid__Node__Shape.asymmetric ; return self
|
42
|
-
def shape_circle (self): self.config.node_shape = Mermaid__Node__Shape.circle ; return self
|
43
|
-
def shape_cylindrical (self): self.config.node_shape = Mermaid__Node__Shape.cylindrical ; return self
|
44
|
-
def shape_default (self): self.config.node_shape = Mermaid__Node__Shape.default ; return self
|
45
|
-
def shape_double_circle (self): self.config.node_shape = Mermaid__Node__Shape.double_circle ; return self
|
46
|
-
def shape_hexagon (self): self.config.node_shape = Mermaid__Node__Shape.hexagon ; return self
|
47
|
-
def shape_parallelogram (self): self.config.node_shape = Mermaid__Node__Shape.parallelogram ; return self
|
48
|
-
def shape_parallelogram_alt (self): self.config.node_shape = Mermaid__Node__Shape.parallelogram_alt ; return self
|
49
|
-
def shape_stadium (self): self.config.node_shape = Mermaid__Node__Shape.stadium ; return self
|
50
|
-
def shape_subroutine (self): self.config.node_shape = Mermaid__Node__Shape.subroutine ; return self
|
51
|
-
def shape_rectangle (self): self.config.node_shape = Mermaid__Node__Shape.rectangle ; return self
|
52
|
-
def shape_rhombus (self): self.config.node_shape = Mermaid__Node__Shape.rhombus ; return self
|
53
|
-
def shape_round_edges (self): self.config.node_shape = Mermaid__Node__Shape.round_edges ; return self
|
54
|
-
def shape_trapezoid (self): self.config.node_shape = Mermaid__Node__Shape.trapezoid ; return self
|
55
|
-
def shape_trapezoid_alt (self): self.config.node_shape = Mermaid__Node__Shape.trapezoid_alt ; return self
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
def wrap_with_quotes(self, value=True):
|
60
|
-
self.config.wrap_with_quotes = value
|
61
|
-
return self
|
62
|
-
|
63
|
-
def show_label(self, value=True):
|
64
|
-
self.config.show_label = value
|
65
|
-
return self
|
@@ -1,56 +0,0 @@
|
|
1
|
-
from typing import List
|
2
|
-
|
3
|
-
from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
|
4
|
-
from osbot_utils.graphs.mermaid.configs.Mermaid__Render__Config import Mermaid__Render__Config
|
5
|
-
from osbot_utils.graphs.mermaid.models.Mermaid__Diagram_Direction import Diagram__Direction
|
6
|
-
from osbot_utils.graphs.mermaid.models.Mermaid__Diagram__Type import Diagram__Type
|
7
|
-
|
8
|
-
|
9
|
-
class Mermaid__Renderer(Kwargs_To_Self):
|
10
|
-
config : Mermaid__Render__Config
|
11
|
-
mermaid_code : List
|
12
|
-
diagram_direction : Diagram__Direction = Diagram__Direction.LR
|
13
|
-
diagram_type : Diagram__Type = Diagram__Type.graph
|
14
|
-
|
15
|
-
|
16
|
-
def add_line(self, line):
|
17
|
-
self.mermaid_code.append(line)
|
18
|
-
return line
|
19
|
-
|
20
|
-
def code(self, nodes, edges):
|
21
|
-
self.code_create(nodes, edges)
|
22
|
-
return '\n'.join(self.mermaid_code)
|
23
|
-
|
24
|
-
def code_create(self, nodes, edges, recreate=False):
|
25
|
-
with self as _:
|
26
|
-
if recreate: # if recreate is True, reset the code
|
27
|
-
_.reset_code()
|
28
|
-
elif self.mermaid_code: # if the code has already been created, don't create it
|
29
|
-
return self # todo: find a better way to do this, namely around the concept of auto detecting (on change) when the recreation needs to be done (vs being able to use the previously calculated data)
|
30
|
-
for directive in _.config.directives:
|
31
|
-
_.add_line(f'%%{{{directive}}}%%')
|
32
|
-
_.add_line(self.graph_header())
|
33
|
-
if self.config.add_nodes:
|
34
|
-
for node in nodes:
|
35
|
-
node_code = node.render_node()
|
36
|
-
_.add_line(node_code)
|
37
|
-
if self.config.line_before_edges:
|
38
|
-
_.add_line('')
|
39
|
-
for edge in edges:
|
40
|
-
edge_code = edge.render_edge()
|
41
|
-
_.add_line(edge_code)
|
42
|
-
return self
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
def graph_header(self):
|
47
|
-
# if type(self.diagram_type.value) is str:
|
48
|
-
# value = self.diagram_type.value
|
49
|
-
# else:
|
50
|
-
# value = self.diagram_type.name
|
51
|
-
value = self.diagram_type.name
|
52
|
-
return f'{value} {self.diagram_direction.name}'
|
53
|
-
|
54
|
-
def reset_code(self):
|
55
|
-
self.mermaid_code = []
|
56
|
-
return self
|
@@ -1,9 +0,0 @@
|
|
1
|
-
from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
|
2
|
-
from osbot_utils.graphs.mermaid.models.Mermaid__Node__Shape import Mermaid__Node__Shape
|
3
|
-
|
4
|
-
|
5
|
-
class Mermaid__Node__Config(Kwargs_To_Self):
|
6
|
-
markdown : bool
|
7
|
-
node_shape : Mermaid__Node__Shape = Mermaid__Node__Shape.default
|
8
|
-
show_label : bool = True
|
9
|
-
wrap_with_quotes : bool = True # todo: add support for only using quotes when needed
|