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.
Files changed (347) hide show
  1. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/PKG-INFO +2 -2
  2. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/README.md +1 -1
  3. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/Type_Safe.py +9 -7
  4. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/Type_Safe__Dict.py +1 -1
  5. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Guid.py +1 -1
  6. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +1 -0
  7. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Objects.py +33 -22
  8. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Str.py +4 -4
  9. osbot_utils-1.95.0/osbot_utils/version +1 -0
  10. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/pyproject.toml +1 -1
  11. osbot_utils-1.93.0/osbot_utils/graphs/mermaid/Mermaid.py +0 -75
  12. osbot_utils-1.93.0/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -49
  13. osbot_utils-1.93.0/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -95
  14. osbot_utils-1.93.0/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -65
  15. osbot_utils-1.93.0/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -56
  16. osbot_utils-1.93.0/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -7
  17. osbot_utils-1.93.0/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -9
  18. osbot_utils-1.93.0/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -7
  19. osbot_utils-1.93.0/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -98
  20. osbot_utils-1.93.0/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -9
  21. osbot_utils-1.93.0/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -16
  22. osbot_utils-1.93.0/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -30
  23. osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraph.py +0 -55
  24. osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -7
  25. osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -139
  26. osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -24
  27. osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -32
  28. osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -27
  29. osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -42
  30. osbot_utils-1.93.0/osbot_utils/graphs/mgraph/MGraphs.py +0 -12
  31. osbot_utils-1.93.0/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -26
  32. osbot_utils-1.93.0/osbot_utils/testing/__init__.py +0 -0
  33. osbot_utils-1.93.0/osbot_utils/utils/__init__.py +0 -0
  34. osbot_utils-1.93.0/osbot_utils/version +0 -1
  35. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/LICENSE +0 -0
  36. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/__init__.py +0 -0
  37. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
  38. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
  39. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
  40. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/Type_Safe__Base.py +0 -0
  41. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/Type_Safe__List.py +0 -0
  42. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/base_classes/__init__.py +0 -0
  43. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/context_managers/__init__.py +0 -0
  44. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/context_managers/async_invoke.py +0 -0
  45. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/context_managers/capture_duration.py +0 -0
  46. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
  47. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/context_managers/print_duration.py +0 -0
  48. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/__init__.py +0 -0
  49. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/classes/__init__.py +0 -0
  50. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/classes/singleton.py +0 -0
  51. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/lists/__init__.py +0 -0
  52. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
  53. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/lists/group_by.py +0 -0
  54. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/lists/index_by.py +0 -0
  55. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/__init__.py +0 -0
  56. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/cache.py +0 -0
  57. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
  58. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
  59. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
  60. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
  61. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
  62. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/catch.py +0 -0
  63. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/context.py +0 -0
  64. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
  65. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
  66. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
  67. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
  68. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
  69. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/decorators/methods/type_safe.py +0 -0
  70. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
  71. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/fluent/Fluent_List.py +0 -0
  72. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/fluent/__init__.py +0 -0
  73. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/CFormat.py +0 -0
  74. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/CPrint.py +0 -0
  75. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
  76. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
  77. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
  78. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Local_Cache.py +0 -0
  79. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Local_Caches.py +0 -0
  80. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Print_Table.py +0 -0
  81. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Python_Audit.py +0 -0
  82. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Random_Guid.py +0 -0
  83. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
  84. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Random_Seed.py +0 -0
  85. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Safe_Id.py +0 -0
  86. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Str_ASCII.py +0 -0
  87. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
  88. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Type_Registry.py +0 -0
  89. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Type_Safe_Method.py +0 -0
  90. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
  91. {osbot_utils-1.93.0/osbot_utils/graphs → osbot_utils-1.95.0/osbot_utils/helpers}/__init__.py +0 -0
  92. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Ast.py +0 -0
  93. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
  94. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
  95. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
  96. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
  97. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
  98. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
  99. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
  100. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/__init__.py +0 -0
  101. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
  102. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
  103. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
  104. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
  105. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
  106. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
  107. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
  108. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
  109. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
  110. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
  111. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
  112. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
  113. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
  114. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
  115. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
  116. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
  117. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
  118. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
  119. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
  120. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
  121. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
  122. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
  123. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
  124. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
  125. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
  126. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
  127. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
  128. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
  129. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
  130. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
  131. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
  132. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
  133. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
  134. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
  135. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
  136. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
  137. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
  138. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
  139. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
  140. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
  141. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
  142. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
  143. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
  144. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
  145. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
  146. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
  147. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
  148. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
  149. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
  150. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
  151. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
  152. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
  153. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
  154. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
  155. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
  156. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
  157. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
  158. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
  159. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
  160. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
  161. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
  162. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
  163. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
  164. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
  165. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
  166. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
  167. {osbot_utils-1.93.0/osbot_utils/graphs/mgraph → osbot_utils-1.95.0/osbot_utils/helpers/ast/nodes}/__init__.py +0 -0
  168. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
  169. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
  170. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
  171. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
  172. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
  173. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
  174. {osbot_utils-1.93.0/osbot_utils/helpers → osbot_utils-1.95.0/osbot_utils/helpers/cache_requests}/__init__.py +0 -0
  175. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
  176. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/Flow.py +0 -0
  177. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/Flow__Events.py +0 -0
  178. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/Task.py +0 -0
  179. {osbot_utils-1.93.0/osbot_utils/helpers/ast/nodes → osbot_utils-1.95.0/osbot_utils/helpers/flows}/__init__.py +0 -0
  180. {osbot_utils-1.93.0/osbot_utils/helpers/cache_requests → osbot_utils-1.95.0/osbot_utils/helpers/flows/decorators}/__init__.py +0 -0
  181. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
  182. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
  183. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
  184. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
  185. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
  186. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
  187. {osbot_utils-1.93.0/osbot_utils/helpers/flows → osbot_utils-1.95.0/osbot_utils/helpers/flows/models}/__init__.py +0 -0
  188. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
  189. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/generators/Generator_Manager.py +0 -0
  190. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
  191. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +0 -0
  192. {osbot_utils-1.93.0/osbot_utils/helpers/flows/decorators → osbot_utils-1.95.0/osbot_utils/helpers/generators}/__init__.py +0 -0
  193. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
  194. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
  195. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
  196. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
  197. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
  198. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
  199. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
  200. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
  201. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
  202. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
  203. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
  204. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
  205. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
  206. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
  207. {osbot_utils-1.93.0/osbot_utils/helpers/flows/models → osbot_utils-1.95.0/osbot_utils/helpers/html}/__init__.py +0 -0
  208. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
  209. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
  210. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
  211. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
  212. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
  213. {osbot_utils-1.93.0/osbot_utils/helpers/generators → osbot_utils-1.95.0/osbot_utils/helpers/pubsub}/__init__.py +0 -0
  214. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
  215. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
  216. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
  217. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
  218. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
  219. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
  220. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
  221. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
  222. {osbot_utils-1.93.0/osbot_utils/helpers/html → osbot_utils-1.95.0/osbot_utils/helpers/pubsub/schemas}/__init__.py +0 -0
  223. {osbot_utils-1.93.0/osbot_utils/helpers/pubsub → osbot_utils-1.95.0/osbot_utils/helpers/python_compatibility}/__init__.py +0 -0
  224. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/python_compatibility/python_3_8.py +0 -0
  225. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
  226. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
  227. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
  228. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
  229. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
  230. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
  231. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
  232. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
  233. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
  234. {osbot_utils-1.93.0/osbot_utils/helpers/pubsub/schemas → osbot_utils-1.95.0/osbot_utils/helpers/sqlite}/__init__.py +0 -0
  235. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
  236. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
  237. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
  238. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
  239. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
  240. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
  241. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
  242. {osbot_utils-1.93.0/osbot_utils/helpers/python_compatibility → osbot_utils-1.95.0/osbot_utils/helpers/sqlite/cache}/__init__.py +0 -0
  243. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
  244. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
  245. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
  246. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
  247. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
  248. {osbot_utils-1.93.0/osbot_utils/helpers/sqlite → osbot_utils-1.95.0/osbot_utils/helpers/sqlite/domains}/__init__.py +0 -0
  249. {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
  250. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
  251. {osbot_utils-1.93.0/osbot_utils/helpers/sqlite/domains → osbot_utils-1.95.0/osbot_utils/helpers/sqlite/models}/__init__.py +0 -0
  252. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
  253. {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
  254. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
  255. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
  256. {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
  257. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
  258. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
  259. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
  260. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
  261. {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
  262. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
  263. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
  264. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
  265. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
  266. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
  267. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
  268. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
  269. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
  270. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
  271. {osbot_utils-1.93.0/osbot_utils/helpers/sqlite/sql_builder → osbot_utils-1.95.0/osbot_utils/helpers/ssh}/__init__.py +0 -0
  272. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
  273. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
  274. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
  275. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
  276. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
  277. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
  278. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
  279. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
  280. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
  281. {osbot_utils-1.93.0/osbot_utils/helpers/sqlite/tables → osbot_utils-1.95.0/osbot_utils/helpers/trace}/__init__.py +0 -0
  282. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/type_safe/Type_Safe__Validator.py +0 -0
  283. {osbot_utils-1.93.0/osbot_utils/helpers/ssh → osbot_utils-1.95.0/osbot_utils/helpers/type_safe}/__init__.py +0 -0
  284. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/type_safe/validators/Validator__Max.py +0 -0
  285. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/type_safe/validators/Validator__Min.py +0 -0
  286. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/type_safe/validators/Validator__One_Of.py +0 -0
  287. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/type_safe/validators/Validator__Regex.py +0 -0
  288. {osbot_utils-1.93.0/osbot_utils/helpers/trace → osbot_utils-1.95.0/osbot_utils/helpers/type_safe/validators}/__init__.py +0 -0
  289. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/Xml__Attribute.py +0 -0
  290. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/Xml__Element.py +0 -0
  291. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/Xml__File.py +0 -0
  292. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/Xml__File__Load.py +0 -0
  293. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/Xml__File__To_Dict.py +0 -0
  294. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/Xml__File__To_Xml.py +0 -0
  295. {osbot_utils-1.93.0/osbot_utils/helpers/type_safe → osbot_utils-1.95.0/osbot_utils/helpers/xml}/__init__.py +0 -0
  296. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/rss/RSS__Channel.py +0 -0
  297. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +0 -0
  298. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/rss/RSS__Feed.py +0 -0
  299. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/rss/RSS__Feed__Parser.py +0 -0
  300. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/rss/RSS__Image.py +0 -0
  301. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/helpers/xml/rss/RSS__Item.py +0 -0
  302. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Catch.py +0 -0
  303. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
  304. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Duration.py +0 -0
  305. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Hook_Method.py +0 -0
  306. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
  307. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Log_To_String.py +0 -0
  308. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Logging.py +0 -0
  309. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Patch_Print.py +0 -0
  310. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Profiler.py +0 -0
  311. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Pytest.py +0 -0
  312. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Stderr.py +0 -0
  313. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Stdout.py +0 -0
  314. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
  315. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Temp_File.py +0 -0
  316. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Temp_Folder.py +0 -0
  317. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
  318. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
  319. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Temp_Zip.py +0 -0
  320. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
  321. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Unit_Test.py +0 -0
  322. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/testing/Unzip_File.py +0 -0
  323. {osbot_utils-1.93.0/osbot_utils/helpers/type_safe/validators → osbot_utils-1.95.0/osbot_utils/testing}/__init__.py +0 -0
  324. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Assert.py +0 -0
  325. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Call_Stack.py +0 -0
  326. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Csv.py +0 -0
  327. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Dev.py +0 -0
  328. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Env.py +0 -0
  329. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Exceptions.py +0 -0
  330. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Files.py +0 -0
  331. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Functions.py +0 -0
  332. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Http.py +0 -0
  333. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Int.py +0 -0
  334. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Json.py +0 -0
  335. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Json_Cache.py +0 -0
  336. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Lists.py +0 -0
  337. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Misc.py +0 -0
  338. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Png.py +0 -0
  339. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Process.py +0 -0
  340. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Python_Logger.py +0 -0
  341. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Regex.py +0 -0
  342. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Status.py +0 -0
  343. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Threads.py +0 -0
  344. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Toml.py +0 -0
  345. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Version.py +0 -0
  346. {osbot_utils-1.93.0 → osbot_utils-1.95.0}/osbot_utils/utils/Zip.py +0 -0
  347. {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.93.0
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
- ![Current Release](https://img.shields.io/badge/release-v1.93.0-blue)
26
+ ![Current Release](https://img.shields.io/badge/release-v1.95.0-blue)
27
27
  [![codecov](https://codecov.io/gh/owasp-sbot/OSBot-Utils/graph/badge.svg?token=GNVW0COX1N)](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
- ![Current Release](https://img.shields.io/badge/release-v1.93.0-blue)
5
+ ![Current Release](https://img.shields.io/badge/release-v1.95.0-blue)
6
6
  [![codecov](https://codecov.io/gh/owasp-sbot/OSBot-Utils/graph/badge.svg?token=GNVW0COX1N)](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 # todo: remove test mocking requirement for this to be here (instead of on the respective method)
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
- if not hasattr(self, '__annotations__'): # can't do type safety checks if the class does not have annotations
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 (self, name, value)
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 '{self.__annotations__.get(name)}' but got '{type(value)}'")
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 self.__annotations__.get(name) : # don't allow previously set variables to be set to None
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(self.__annotations__, 'get'):
117
- annotation = self.__annotations__.get(name)
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) # Generate a UUID5 using the namespace and 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 import SimpleNamespace
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
- if hasattr(target, '__annotations__'):
446
- obj_annotations = target.__annotations__
447
- if hasattr(obj_annotations,'get'):
448
- attr_type = obj_annotations.get(attr_name)
449
- if attr_type:
450
- origin_attr_type = get_origin(attr_type) # to handle when type definion contains an generic
451
- if origin_attr_type is typing.Union:
452
- args = get_args(attr_type)
453
- 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] )
454
- attr_type = args[0]
455
- origin_attr_type = get_origin(attr_type)
456
-
457
- if origin_attr_type:
458
- attr_type = origin_attr_type
459
- value_type = type(value)
460
- if are_types_compatible_for_assigment(source_type=value_type, target_type=attr_type):
461
- return True
462
- if are_types_magic_mock(source_type=value_type, target_type=attr_type):
463
- return True
464
- return value_type is attr_type
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 type(ansi_text) is str:
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 type(ansi_text) is str:
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 type(ansis_texts) is list:
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 type(target) is str:
101
+ if isinstance(target, str):
102
102
  return target.strip()
103
103
  return ""
104
104
 
@@ -0,0 +1 @@
1
+ v1.95.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "osbot_utils"
3
- version = "v1.93.0"
3
+ version = "v1.95.0"
4
4
  description = "OWASP Security Bot - Utils"
5
5
  authors = ["Dinis Cruz <dinis.cruz@owasp.org>"]
6
6
  license = "MIT"
@@ -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,7 +0,0 @@
1
- from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
2
-
3
-
4
- class Mermaid__Edge__Config(Kwargs_To_Self):
5
- edge_mode : str
6
- output_node_from : bool = False
7
- output_node_to : bool = False
@@ -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
@@ -1,7 +0,0 @@
1
- from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
2
-
3
-
4
- class Mermaid__Render__Config(Kwargs_To_Self):
5
- add_nodes : bool = True
6
- directives : list
7
- line_before_edges : bool = True