osbot-utils 1.84.0__tar.gz → 1.86.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 (321) hide show
  1. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/PKG-INFO +2 -2
  2. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/README.md +1 -1
  3. osbot_utils-1.86.0/osbot_utils/decorators/methods/type_safe.py +12 -0
  4. osbot_utils-1.86.0/osbot_utils/helpers/Type_Safe_Method.py +111 -0
  5. osbot_utils-1.86.0/osbot_utils/version +1 -0
  6. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/pyproject.toml +1 -1
  7. osbot_utils-1.84.0/osbot_utils/version +0 -1
  8. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/LICENSE +0 -0
  9. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/__init__.py +0 -0
  10. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
  11. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
  12. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
  13. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/base_classes/Type_Safe.py +0 -0
  14. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/base_classes/Type_Safe__List.py +0 -0
  15. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/base_classes/__init__.py +0 -0
  16. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/context_managers/__init__.py +0 -0
  17. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/context_managers/async_invoke.py +0 -0
  18. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/context_managers/capture_duration.py +0 -0
  19. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
  20. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/context_managers/print_duration.py +0 -0
  21. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/__init__.py +0 -0
  22. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/classes/__init__.py +0 -0
  23. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/classes/singleton.py +0 -0
  24. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/lists/__init__.py +0 -0
  25. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
  26. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/lists/group_by.py +0 -0
  27. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/lists/index_by.py +0 -0
  28. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/methods/__init__.py +0 -0
  29. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/methods/cache.py +0 -0
  30. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
  31. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
  32. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
  33. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
  34. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
  35. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/methods/catch.py +0 -0
  36. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/methods/context.py +0 -0
  37. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
  38. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
  39. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
  40. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
  41. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
  42. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
  43. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/fluent/Fluent_List.py +0 -0
  44. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/fluent/__init__.py +0 -0
  45. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/__init__.py +0 -0
  46. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mermaid/Mermaid.py +0 -0
  47. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -0
  48. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -0
  49. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -0
  50. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -0
  51. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -0
  52. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -0
  53. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -0
  54. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -0
  55. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -0
  56. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -0
  57. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -0
  58. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mgraph/MGraph.py +0 -0
  59. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -0
  60. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -0
  61. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -0
  62. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -0
  63. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -0
  64. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -0
  65. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mgraph/MGraphs.py +0 -0
  66. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/graphs/mgraph/__init__.py +0 -0
  67. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/CFormat.py +0 -0
  68. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/CPrint.py +0 -0
  69. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
  70. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
  71. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
  72. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/Local_Cache.py +0 -0
  73. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/Local_Caches.py +0 -0
  74. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/Print_Table.py +0 -0
  75. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/Python_Audit.py +0 -0
  76. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/Random_Guid.py +0 -0
  77. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
  78. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/Random_Seed.py +0 -0
  79. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/Safe_Id.py +0 -0
  80. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
  81. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/Type_Registry.py +0 -0
  82. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
  83. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/__init__.py +0 -0
  84. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/Ast.py +0 -0
  85. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
  86. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
  87. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
  88. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
  89. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
  90. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
  91. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
  92. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/__init__.py +0 -0
  93. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
  94. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
  95. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
  96. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
  97. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
  98. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
  99. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
  100. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
  101. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
  102. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
  103. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
  104. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
  105. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
  106. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
  107. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
  108. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
  109. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
  110. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
  111. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
  112. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
  113. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
  114. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
  115. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
  116. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
  117. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
  118. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
  119. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
  120. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
  121. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
  122. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
  123. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
  124. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
  125. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
  126. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
  127. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
  128. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
  129. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
  130. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
  131. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
  132. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
  133. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
  134. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
  135. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
  136. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
  137. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
  138. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
  139. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
  140. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
  141. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
  142. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
  143. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
  144. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
  145. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
  146. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
  147. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
  148. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
  149. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
  150. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
  151. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
  152. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
  153. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
  154. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
  155. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
  156. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
  157. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
  158. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
  159. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
  160. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
  161. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
  162. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
  163. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
  164. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
  165. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
  166. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
  167. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
  168. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/flows/Flow.py +0 -0
  169. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/flows/Flow__Events.py +0 -0
  170. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/flows/Task.py +0 -0
  171. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/flows/__init__.py +0 -0
  172. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
  173. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
  174. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
  175. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
  176. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
  177. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
  178. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
  179. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
  180. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
  181. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/generators/Generator_Manager.py +0 -0
  182. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
  183. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +0 -0
  184. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/generators/__init__.py +0 -0
  185. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
  186. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
  187. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
  188. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
  189. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
  190. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
  191. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
  192. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
  193. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
  194. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
  195. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
  196. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
  197. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
  198. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
  199. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/html/__init__.py +0 -0
  200. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
  201. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
  202. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
  203. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
  204. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
  205. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
  206. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
  207. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
  208. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
  209. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
  210. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
  211. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
  212. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
  213. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
  214. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
  215. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
  216. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
  217. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
  218. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
  219. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
  220. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
  221. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
  222. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
  223. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
  224. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
  225. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
  226. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
  227. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
  228. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
  229. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
  230. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
  231. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
  232. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
  233. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
  234. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
  235. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
  236. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
  237. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
  238. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
  239. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
  240. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
  241. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
  242. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
  243. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
  244. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
  245. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
  246. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
  247. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
  248. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
  249. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
  250. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
  251. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
  252. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
  253. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
  254. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
  255. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
  256. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
  257. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
  258. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
  259. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
  260. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
  261. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
  262. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
  263. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
  264. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -0
  265. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
  266. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
  267. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
  268. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
  269. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
  270. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
  271. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
  272. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
  273. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/helpers/trace/__init__.py +0 -0
  274. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Catch.py +0 -0
  275. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
  276. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Duration.py +0 -0
  277. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Hook_Method.py +0 -0
  278. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
  279. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Log_To_String.py +0 -0
  280. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Logging.py +0 -0
  281. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Patch_Print.py +0 -0
  282. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Profiler.py +0 -0
  283. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Pytest.py +0 -0
  284. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Stderr.py +0 -0
  285. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Stdout.py +0 -0
  286. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
  287. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Temp_File.py +0 -0
  288. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Temp_Folder.py +0 -0
  289. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
  290. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
  291. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Temp_Zip.py +0 -0
  292. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
  293. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Unit_Test.py +0 -0
  294. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/Unzip_File.py +0 -0
  295. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/testing/__init__.py +0 -0
  296. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Assert.py +0 -0
  297. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Call_Stack.py +0 -0
  298. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Csv.py +0 -0
  299. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Dev.py +0 -0
  300. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Env.py +0 -0
  301. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Exceptions.py +0 -0
  302. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Files.py +0 -0
  303. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Functions.py +0 -0
  304. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Http.py +0 -0
  305. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Int.py +0 -0
  306. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Json.py +0 -0
  307. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Json_Cache.py +0 -0
  308. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Lists.py +0 -0
  309. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Misc.py +0 -0
  310. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Objects.py +0 -0
  311. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Png.py +0 -0
  312. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Process.py +0 -0
  313. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Python_Logger.py +0 -0
  314. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Regex.py +0 -0
  315. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Status.py +0 -0
  316. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Str.py +0 -0
  317. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Threads.py +0 -0
  318. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Toml.py +0 -0
  319. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Version.py +0 -0
  320. {osbot_utils-1.84.0 → osbot_utils-1.86.0}/osbot_utils/utils/Zip.py +0 -0
  321. {osbot_utils-1.84.0 → osbot_utils-1.86.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.84.0
3
+ Version: 1.86.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.84.0-blue)
26
+ ![Current Release](https://img.shields.io/badge/release-v1.86.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.84.0-blue)
5
+ ![Current Release](https://img.shields.io/badge/release-v1.86.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
 
@@ -0,0 +1,12 @@
1
+ import functools # For wrapping functions
2
+ from osbot_utils.helpers.Type_Safe_Method import Type_Safe_Method
3
+
4
+ def type_safe(func): # Main decorator function
5
+ @functools.wraps(func) # Preserve function metadata
6
+ def wrapper(*args, **kwargs): # Wrapper function
7
+ type_checker = Type_Safe_Method(func) # Create type checker instance
8
+ bound_args = type_checker.handle_type_safety(args, kwargs) # Validate type safety
9
+ return func(**bound_args.arguments) # Call original function
10
+
11
+ return wrapper # Return wrapped function
12
+
@@ -0,0 +1,111 @@
1
+ import inspect # For function introspection
2
+ from enum import Enum
3
+ from typing import get_args, get_origin, Optional, Union, List, Any, Dict # For type hinting utilities
4
+
5
+
6
+ class Type_Safe_Method: # Class to handle method type safety validation
7
+ def __init__(self, func): # Initialize with function
8
+ self.func = func # Store original function
9
+ self.sig = inspect.signature(func) # Get function signature
10
+ self.annotations = func.__annotations__ # Get type annotations
11
+
12
+ def handle_type_safety(self, args: tuple, kwargs: dict): # Main method to handle type safety
13
+ bound_args = self.bind_args(args, kwargs) # Bind arguments to parameters
14
+ for param_name, param_value in bound_args.arguments.items(): # Iterate through arguments
15
+ if param_name != 'self': # Skip self parameter
16
+ self.validate_parameter(param_name, param_value, bound_args) # Validate each parameter
17
+ return bound_args # Return bound arguments
18
+
19
+ def bind_args(self, args: tuple, kwargs: dict): # Bind args to parameters
20
+ bound_args = self.sig.bind(*args, **kwargs) # Bind arguments to signature
21
+ bound_args.apply_defaults() # Apply default values
22
+ return bound_args # Return bound arguments
23
+
24
+ def validate_parameter(self, param_name: str, param_value: Any, bound_args): # Validate a single parameter
25
+ if param_name in self.annotations: # Check if parameter is annotated
26
+ expected_type = self.annotations[param_name] # Get expected type
27
+ self.check_parameter_value(param_name, param_value, expected_type, bound_args)# Check value against type
28
+
29
+ def check_parameter_value(self, param_name: str, param_value: Any, # Check parameter value against expected type
30
+ expected_type: Any, bound_args): # Method parameters
31
+ is_optional = self.is_optional_type(expected_type) # Check if type is optional
32
+ has_default = self.has_default_value(param_name) # Check if has default value
33
+
34
+ if param_value is None: # Handle None value case
35
+ self.validate_none_value(param_name, is_optional, has_default) # Validate None value
36
+ return # Exit early
37
+
38
+ origin_type = get_origin(expected_type) # Get base type
39
+
40
+ if self.is_list_type(origin_type): # Check if list type
41
+ self.validate_list_type(param_name, param_value, expected_type) # Validate list
42
+ return # Exit early
43
+
44
+ if self.is_union_type(origin_type, is_optional): # Check if union type
45
+ self.validate_union_type(param_name, param_value, expected_type) # Validate union
46
+ return # Exit early
47
+
48
+ if self.try_basic_type_conversion(param_value, expected_type, param_name, # Try basic type conversion
49
+ bound_args): # Pass bound args
50
+ return # Exit if conversion successful
51
+
52
+ self.validate_direct_type(param_name, param_value, expected_type) # Direct type validation
53
+
54
+ def is_optional_type(self, type_hint: Any) -> bool: # Check if type is Optional
55
+ if get_origin(type_hint) is Union: # Check if Union type
56
+ return type(None) in get_args(type_hint) # Check if None is allowed
57
+ return False # Not optional
58
+
59
+ def has_default_value(self, param_name: str) -> bool: # Check if parameter has default value
60
+ return (param_name in self.sig.parameters and # Check parameter exists
61
+ self.sig.parameters[param_name].default is not inspect._empty) # Check has non-empty default
62
+
63
+ def validate_none_value(self, param_name: str, # Validate None value
64
+ is_optional: bool, has_default: bool): # Optional and default flags
65
+ if not (is_optional or has_default): # If neither optional nor default
66
+ raise ValueError(f"Parameter '{param_name}' is not optional but got None") # Raise error for None value
67
+
68
+ def is_list_type(self, origin_type: Any) -> bool: # Check if type is a List
69
+ return origin_type is list or origin_type is List # Check against list types
70
+
71
+ def validate_list_type(self, param_name: str, # Validate list type and contents
72
+ param_value: Any, expected_type: Any): # List parameters
73
+ if not isinstance(param_value, list): # Check if value is a list
74
+ raise ValueError(f"Parameter '{param_name}' expected a list but got {type(param_value)}") # Raise error if not list
75
+
76
+ item_type = get_args(expected_type)[0] # Get list item type
77
+ for i, item in enumerate(param_value): # Check each list item
78
+ if not isinstance(item, item_type): # Validate item type
79
+ raise ValueError(f"List item at index {i} expected type {item_type}, but got {type(item)}") # Raise error for invalid item
80
+
81
+ def is_union_type(self, origin_type: Any, is_optional: bool) -> bool: # Check if type is a Union
82
+ return origin_type is Union and not is_optional # Must be Union but not Optional
83
+
84
+ def validate_union_type(self, param_name: str, # Validate union type
85
+ param_value: Any, expected_type: Any): # Union parameters
86
+ args_types = get_args(expected_type) # Get allowed types
87
+ if not any(isinstance(param_value, arg_type) for arg_type in args_types): # Check if value matches any type
88
+ raise ValueError(f"Parameter '{param_name}' expected one of types {args_types}, but got {type(param_value)}") # Raise error if no match
89
+
90
+ def try_basic_type_conversion(self, param_value: Any, expected_type: Any, param_name: str,bound_args) -> bool: # Try to convert basic types
91
+ if type(param_value) in [int, str]: # Check if basic type
92
+ try: # Attempt conversion
93
+ converted_value = expected_type(param_value) # Convert value
94
+ bound_args.arguments[param_name] = converted_value # Update bound arguments
95
+ return True # Return success
96
+ except Exception: # Handle conversion failure
97
+ pass # Continue without conversion
98
+ elif isinstance(param_value, Enum): # Check if value is an Enum
99
+ try:
100
+ if issubclass(expected_type, str): # If expecting string type
101
+ bound_args.arguments[param_name] = param_value.value # Use enum's value
102
+ return True # Return success
103
+ except Exception: # Handle conversion failure
104
+ pass # Continue without conversion
105
+ return False # Return failure
106
+ # Return failure
107
+
108
+ def validate_direct_type(self, param_name: str, # Validate direct type match
109
+ param_value: Any, expected_type: Any): # Type parameters
110
+ if not isinstance(param_value, expected_type): # Check type match
111
+ raise ValueError(f"Parameter '{param_name}' expected type {expected_type}, but got {type(param_value)}") # Raise error if no match
@@ -0,0 +1 @@
1
+ v1.86.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "osbot_utils"
3
- version = "v1.84.0"
3
+ version = "v1.86.0"
4
4
  description = "OWASP Security Bot - Utils"
5
5
  authors = ["Dinis Cruz <dinis.cruz@owasp.org>"]
6
6
  license = "MIT"
@@ -1 +0,0 @@
1
- v1.84.0
File without changes