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