osbot-utils 2.4.0__tar.gz → 2.6.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 (325) hide show
  1. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/PKG-INFO +2 -2
  2. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/README.md +1 -1
  3. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/type_safe/Type_Safe.py +1 -1
  4. osbot_utils-2.4.0/osbot_utils/type_safe/Type_Safe_Method.py → osbot_utils-2.6.0/osbot_utils/type_safe/Type_Safe__Method.py +40 -11
  5. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/type_safe/decorators/type_safe.py +2 -2
  6. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/type_safe/validators/Validator__Max.py +1 -1
  7. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/type_safe/validators/Validator__Min.py +1 -1
  8. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/type_safe/validators/Validator__One_Of.py +1 -1
  9. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/type_safe/validators/Validator__Regex.py +1 -1
  10. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Objects.py +3 -1
  11. osbot_utils-2.6.0/osbot_utils/version +1 -0
  12. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/pyproject.toml +1 -1
  13. osbot_utils-2.4.0/osbot_utils/version +0 -1
  14. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/LICENSE +0 -0
  15. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/__init__.py +0 -0
  16. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
  17. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
  18. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
  19. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/base_classes/__init__.py +0 -0
  20. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/context_managers/__init__.py +0 -0
  21. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/context_managers/async_invoke.py +0 -0
  22. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/context_managers/capture_duration.py +0 -0
  23. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
  24. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/context_managers/print_duration.py +0 -0
  25. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/__init__.py +0 -0
  26. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/classes/__init__.py +0 -0
  27. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/classes/singleton.py +0 -0
  28. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/lists/__init__.py +0 -0
  29. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
  30. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/lists/group_by.py +0 -0
  31. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/lists/index_by.py +0 -0
  32. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/methods/__init__.py +0 -0
  33. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/methods/cache.py +0 -0
  34. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
  35. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
  36. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
  37. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
  38. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
  39. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/methods/catch.py +0 -0
  40. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/methods/context.py +0 -0
  41. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
  42. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
  43. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
  44. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
  45. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
  46. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
  47. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/fluent/Fluent_List.py +0 -0
  48. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/fluent/__init__.py +0 -0
  49. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/CFormat.py +0 -0
  50. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/CPrint.py +0 -0
  51. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
  52. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
  53. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Guid.py +0 -0
  54. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
  55. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Local_Cache.py +0 -0
  56. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Local_Caches.py +0 -0
  57. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Print_Table.py +0 -0
  58. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Python_Audit.py +0 -0
  59. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Random_Guid.py +0 -0
  60. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
  61. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Random_Seed.py +0 -0
  62. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Safe_Id.py +0 -0
  63. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Str_ASCII.py +0 -0
  64. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
  65. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Type_Registry.py +0 -0
  66. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
  67. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/__init__.py +0 -0
  68. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/Ast.py +0 -0
  69. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
  70. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
  71. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
  72. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
  73. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
  74. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
  75. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
  76. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/__init__.py +0 -0
  77. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
  78. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
  79. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
  80. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
  81. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
  82. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
  83. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
  84. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
  85. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
  86. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
  87. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
  88. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
  89. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
  90. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
  91. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
  92. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
  93. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
  94. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
  95. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
  96. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
  97. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
  98. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
  99. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
  100. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
  101. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
  102. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
  103. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
  104. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
  105. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
  106. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
  107. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
  108. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
  109. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
  110. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
  111. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
  112. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
  113. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
  114. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
  115. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
  116. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
  117. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
  118. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
  119. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
  120. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
  121. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
  122. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
  123. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
  124. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
  125. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
  126. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
  127. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
  128. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
  129. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
  130. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
  131. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
  132. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
  133. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
  134. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
  135. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
  136. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
  137. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
  138. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
  139. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
  140. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
  141. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
  142. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
  143. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
  144. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
  145. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
  146. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
  147. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
  148. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
  149. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
  150. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
  151. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
  152. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/flows/Flow.py +0 -0
  153. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/flows/Flow__Events.py +0 -0
  154. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/flows/Task.py +0 -0
  155. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/flows/__init__.py +0 -0
  156. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
  157. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
  158. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
  159. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
  160. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
  161. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
  162. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
  163. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
  164. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
  165. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/generators/Generator_Manager.py +0 -0
  166. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
  167. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +0 -0
  168. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/generators/__init__.py +0 -0
  169. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
  170. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
  171. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
  172. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
  173. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
  174. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
  175. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
  176. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
  177. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
  178. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
  179. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
  180. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
  181. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
  182. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
  183. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/html/__init__.py +0 -0
  184. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
  185. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
  186. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
  187. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
  188. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
  189. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
  190. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
  191. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
  192. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
  193. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
  194. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
  195. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
  196. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
  197. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
  198. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
  199. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/python_compatibility/__init__.py +0 -0
  200. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/python_compatibility/python_3_8.py +0 -0
  201. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
  202. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
  203. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
  204. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
  205. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
  206. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
  207. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
  208. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
  209. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
  210. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
  211. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
  212. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
  213. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
  214. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
  215. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
  216. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
  217. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
  218. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
  219. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
  220. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
  221. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
  222. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
  223. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
  224. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
  225. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
  226. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
  227. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
  228. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
  229. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
  230. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
  231. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
  232. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
  233. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
  234. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
  235. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
  236. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
  237. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
  238. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
  239. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
  240. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
  241. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
  242. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
  243. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
  244. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
  245. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
  246. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
  247. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
  248. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
  249. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
  250. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
  251. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
  252. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
  253. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
  254. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
  255. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
  256. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
  257. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
  258. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/trace/__init__.py +0 -0
  259. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/xml/Xml__Attribute.py +0 -0
  260. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/xml/Xml__Element.py +0 -0
  261. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/xml/Xml__File.py +0 -0
  262. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/xml/Xml__File__Load.py +0 -0
  263. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/xml/Xml__File__To_Dict.py +0 -0
  264. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/xml/Xml__File__To_Xml.py +0 -0
  265. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/xml/__init__.py +0 -0
  266. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/xml/rss/RSS__Channel.py +0 -0
  267. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +0 -0
  268. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/xml/rss/RSS__Feed.py +0 -0
  269. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/xml/rss/RSS__Feed__Parser.py +0 -0
  270. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/xml/rss/RSS__Image.py +0 -0
  271. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/helpers/xml/rss/RSS__Item.py +0 -0
  272. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Catch.py +0 -0
  273. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
  274. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Duration.py +0 -0
  275. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Hook_Method.py +0 -0
  276. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
  277. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Log_To_String.py +0 -0
  278. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Logging.py +0 -0
  279. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Patch_Print.py +0 -0
  280. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Profiler.py +0 -0
  281. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Pytest.py +0 -0
  282. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Stderr.py +0 -0
  283. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Stdout.py +0 -0
  284. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
  285. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Temp_File.py +0 -0
  286. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Temp_Folder.py +0 -0
  287. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
  288. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
  289. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Temp_Zip.py +0 -0
  290. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
  291. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Unit_Test.py +0 -0
  292. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/Unzip_File.py +0 -0
  293. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/testing/__init__.py +0 -0
  294. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/type_safe/Type_Safe__Base.py +0 -0
  295. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/type_safe/Type_Safe__Dict.py +0 -0
  296. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/type_safe/Type_Safe__List.py +0 -0
  297. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/type_safe/__init__.py +0 -0
  298. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/type_safe/decorators/__init__.py +0 -0
  299. {osbot_utils-2.4.0/osbot_utils/type_safe → osbot_utils-2.6.0/osbot_utils/type_safe/validators}/Type_Safe__Validator.py +0 -0
  300. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/type_safe/validators/__init__.py +0 -0
  301. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Assert.py +0 -0
  302. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Call_Stack.py +0 -0
  303. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Csv.py +0 -0
  304. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Dev.py +0 -0
  305. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Env.py +0 -0
  306. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Exceptions.py +0 -0
  307. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Files.py +0 -0
  308. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Functions.py +0 -0
  309. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Http.py +0 -0
  310. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Int.py +0 -0
  311. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Json.py +0 -0
  312. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Json_Cache.py +0 -0
  313. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Lists.py +0 -0
  314. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Misc.py +0 -0
  315. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Png.py +0 -0
  316. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Process.py +0 -0
  317. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Python_Logger.py +0 -0
  318. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Regex.py +0 -0
  319. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Status.py +0 -0
  320. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Str.py +0 -0
  321. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Threads.py +0 -0
  322. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Toml.py +0 -0
  323. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Version.py +0 -0
  324. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/Zip.py +0 -0
  325. {osbot_utils-2.4.0 → osbot_utils-2.6.0}/osbot_utils/utils/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: osbot_utils
3
- Version: 2.4.0
3
+ Version: 2.6.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-v2.4.0-blue)
26
+ ![Current Release](https://img.shields.io/badge/release-v2.6.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-v2.4.0-blue)
5
+ ![Current Release](https://img.shields.io/badge/release-v2.6.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
 
@@ -88,7 +88,7 @@ class Type_Safe:
88
88
  from osbot_utils.utils.Objects import convert_to_value_from_obj_annotation
89
89
  from osbot_utils.utils.Objects import value_type_matches_obj_annotation_for_attr
90
90
  from osbot_utils.utils.Objects import value_type_matches_obj_annotation_for_union_and_annotated
91
- from osbot_utils.type_safe.Type_Safe__Validator import Type_Safe__Validator
91
+ from osbot_utils.type_safe.validators.Type_Safe__Validator import Type_Safe__Validator
92
92
 
93
93
  annotations = all_annotations(self)
94
94
  if not annotations: # can't do type safety checks if the class does not have annotations
@@ -1,9 +1,9 @@
1
1
  import inspect # For function introspection
2
- from enum import Enum
3
- from typing import get_args, get_origin, Union, List, Any # For type hinting utilities
2
+ from enum import Enum
3
+ from typing import get_args, get_origin, Union, List, Any, Dict # For type hinting utilities
4
4
 
5
5
 
6
- class Type_Safe_Method: # Class to handle method type safety validation
6
+ class Type_Safe__Method: # Class to handle method type safety validation
7
7
  def __init__(self, func): # Initialize with function
8
8
  self.func = func # Store original function
9
9
  self.sig = inspect.signature(func) # Get function signature
@@ -88,8 +88,10 @@ class Type_Safe_Method:
88
88
  def is_union_type(self, origin_type: Any, is_optional: bool) -> bool: # Check if type is a Union
89
89
  return origin_type is Union and not is_optional # Must be Union but not Optional
90
90
 
91
- def validate_union_type(self, param_name: str, # Validate union type
92
- param_value: Any, expected_type: Any): # Union parameters
91
+ def validate_union_type(self, param_name : str,
92
+ param_value : Any,
93
+ expected_type: Any): # validate Union type parameters
94
+
93
95
  args_types = get_args(expected_type) # Get allowed types
94
96
  if not any(isinstance(param_value, arg_type) for arg_type in args_types): # Check if value matches any type
95
97
  raise ValueError(f"Parameter '{param_name}' expected one of types {args_types}, but got {type(param_value)}") # Raise error if no match
@@ -110,10 +112,37 @@ class Type_Safe_Method:
110
112
  except Exception: # Handle conversion failure
111
113
  pass # Continue without conversion
112
114
  return False # Return failure
113
- # Return failure
115
+ # Return failure
116
+
117
+ def validate_direct_type(self, param_name: str, param_value: Any, expected_type: Any):
118
+ if expected_type is Any: # Handle typing.Any which accepts everything
119
+ return True
120
+
121
+ if param_value is None: # Handle None value case
122
+ is_optional = self.is_optional_type(expected_type) # Check if type is optional
123
+ has_default = self.has_default_value(param_name) # Check if has default value
124
+ self.validate_none_value(param_name, is_optional, has_default) # Validate None value
114
125
 
115
- def validate_direct_type(self, param_name: str, # Validate direct type match
116
- param_value: Any, expected_type: Any): # Type parameters
117
- if expected_type is not Any:
118
- if not isinstance(param_value, expected_type): # Check type match
119
- raise ValueError(f"Parameter '{param_name}' expected type {expected_type}, but got {type(param_value)}") # Raise error if no match
126
+ origin = get_origin(expected_type)
127
+
128
+ if origin is Union: # If it's a Union type
129
+ return True # there is another check that confirms it: todo: confirm this
130
+
131
+ if origin is not None: # If it's a generic type (like Dict, List, etc)
132
+ if origin in (dict, Dict): # Special handling for Dict
133
+ if not isinstance(param_value, dict):
134
+ raise ValueError(f"Parameter '{param_name}' expected dict but got {type(param_value)}")
135
+ key_type, value_type = get_args(expected_type)
136
+ for k, v in param_value.items():
137
+ if not isinstance(k, key_type):
138
+ raise ValueError(f"Dict key '{k}' expected type {key_type}, but got {type(k)}")
139
+ if not isinstance(v, value_type):
140
+ raise ValueError(f"Dict value for key '{k}' expected type {value_type}, but got {type(v)}")
141
+ return True
142
+ base_type = origin
143
+ else:
144
+ base_type = expected_type
145
+
146
+ if not isinstance(param_value, base_type):
147
+ raise ValueError(f"Parameter '{param_name}' expected type {expected_type}, but got {type(param_value)}")
148
+ return True
@@ -1,10 +1,10 @@
1
1
  import functools # For wrapping functions
2
- from osbot_utils.type_safe.Type_Safe_Method import Type_Safe_Method
2
+ from osbot_utils.type_safe.Type_Safe__Method import Type_Safe__Method
3
3
 
4
4
  def type_safe(func): # Main decorator function
5
5
  @functools.wraps(func) # Preserve function metadata
6
6
  def wrapper(*args, **kwargs): # Wrapper function
7
- type_checker = Type_Safe_Method(func) # Create type checker instance
7
+ type_checker = Type_Safe__Method(func) # Create type checker instance
8
8
  bound_args = type_checker.handle_type_safety(args, kwargs) # Validate type safety
9
9
  return func(**bound_args.arguments) # Call original function
10
10
 
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from osbot_utils.type_safe.Type_Safe__Validator import Type_Safe__Validator
2
+ from osbot_utils.type_safe.validators.Type_Safe__Validator import Type_Safe__Validator
3
3
 
4
4
 
5
5
  class Validator__Max(Type_Safe__Validator): # Validates that a numeric value is at most the specified maximum."""
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from osbot_utils.type_safe.Type_Safe__Validator import Type_Safe__Validator
2
+ from osbot_utils.type_safe.validators.Type_Safe__Validator import Type_Safe__Validator
3
3
 
4
4
  class Validator__Min(Type_Safe__Validator): # Validates that a value is at least the specified minimum. Works with any type that supports the < operator (numbers, strings, lists, etc.)
5
5
  min_value: Any
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from osbot_utils.type_safe.Type_Safe__Validator import Type_Safe__Validator
2
+ from osbot_utils.type_safe.validators.Type_Safe__Validator import Type_Safe__Validator
3
3
 
4
4
 
5
5
  class Validator__One_Of(Type_Safe__Validator): # Validates that a value is one of a set of allowed values."""
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from osbot_utils.type_safe.Type_Safe__Validator import Type_Safe__Validator
2
+ from osbot_utils.type_safe.validators.Type_Safe__Validator import Type_Safe__Validator
3
3
 
4
4
  class Validator__Regex(Type_Safe__Validator): # Validates that a string matches the specified regex pattern.
5
5
  pattern : str
@@ -25,7 +25,7 @@ if sys.version_info < (3, 8):
25
25
  else:
26
26
  return ()
27
27
  else:
28
- from typing import get_origin, get_args, List, Tuple, Dict, Type, _GenericAlias
28
+ from typing import get_origin, get_args, List, Tuple, Dict, Type, _GenericAlias, ForwardRef
29
29
 
30
30
 
31
31
  def are_types_compatible_for_assigment(source_type, target_type):
@@ -469,6 +469,8 @@ def value_type_matches_obj_annotation_for_attr(target, attr_name, value):
469
469
  origin_attr_type = get_origin(attr_type) # to handle when type definition contains a generic
470
470
  if origin_attr_type is type: # Add handling for Type[T]
471
471
  type_arg = get_args(attr_type)[0] # Get T from Type[T]
472
+ if isinstance(type_arg, (str, ForwardRef)): # Handle forward reference
473
+ type_arg = target.__class__ # If it's a forward reference, the target class should be the containing class
472
474
  return isinstance(value, type) and issubclass(value, type_arg) # Check that value is a type and is subclass of type_arg
473
475
  if origin_attr_type is Annotated: # if the type is Annotated
474
476
  args = get_args(attr_type)
@@ -0,0 +1 @@
1
+ v2.6.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "osbot_utils"
3
- version = "v2.4.0"
3
+ version = "v2.6.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
- v2.4.0
File without changes