osbot-utils 2.3.0__tar.gz → 2.5.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.3.0 → osbot_utils-2.5.0}/PKG-INFO +2 -2
  2. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/README.md +1 -1
  3. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Guid.py +0 -1
  4. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/type_safe/Type_Safe.py +11 -3
  5. osbot_utils-2.3.0/osbot_utils/type_safe/Type_Safe_Method.py → osbot_utils-2.5.0/osbot_utils/type_safe/Type_Safe__Method.py +1 -1
  6. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/type_safe/decorators/type_safe.py +2 -2
  7. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/type_safe/validators/Validator__Max.py +1 -1
  8. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/type_safe/validators/Validator__Min.py +1 -1
  9. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/type_safe/validators/Validator__One_Of.py +1 -1
  10. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/type_safe/validators/Validator__Regex.py +1 -1
  11. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Objects.py +20 -3
  12. osbot_utils-2.5.0/osbot_utils/version +1 -0
  13. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/pyproject.toml +1 -1
  14. osbot_utils-2.3.0/osbot_utils/version +0 -1
  15. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/LICENSE +0 -0
  16. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/__init__.py +0 -0
  17. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
  18. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
  19. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
  20. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/base_classes/__init__.py +0 -0
  21. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/context_managers/__init__.py +0 -0
  22. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/context_managers/async_invoke.py +0 -0
  23. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/context_managers/capture_duration.py +0 -0
  24. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
  25. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/context_managers/print_duration.py +0 -0
  26. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/__init__.py +0 -0
  27. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/classes/__init__.py +0 -0
  28. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/classes/singleton.py +0 -0
  29. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/lists/__init__.py +0 -0
  30. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
  31. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/lists/group_by.py +0 -0
  32. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/lists/index_by.py +0 -0
  33. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/methods/__init__.py +0 -0
  34. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/methods/cache.py +0 -0
  35. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
  36. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
  37. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
  38. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
  39. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
  40. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/methods/catch.py +0 -0
  41. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/methods/context.py +0 -0
  42. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
  43. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
  44. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
  45. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
  46. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
  47. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
  48. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/fluent/Fluent_List.py +0 -0
  49. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/fluent/__init__.py +0 -0
  50. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/CFormat.py +0 -0
  51. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/CPrint.py +0 -0
  52. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
  53. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
  54. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
  55. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Local_Cache.py +0 -0
  56. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Local_Caches.py +0 -0
  57. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Print_Table.py +0 -0
  58. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Python_Audit.py +0 -0
  59. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Random_Guid.py +0 -0
  60. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
  61. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Random_Seed.py +0 -0
  62. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Safe_Id.py +0 -0
  63. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Str_ASCII.py +0 -0
  64. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
  65. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Type_Registry.py +0 -0
  66. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
  67. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/__init__.py +0 -0
  68. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/Ast.py +0 -0
  69. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
  70. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
  71. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
  72. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
  73. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
  74. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
  75. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
  76. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/__init__.py +0 -0
  77. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
  78. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
  79. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
  80. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
  81. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
  82. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
  83. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
  84. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
  85. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
  86. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
  87. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
  88. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
  89. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
  90. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
  91. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
  92. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
  93. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
  94. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
  95. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
  96. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
  97. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
  98. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
  99. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
  100. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
  101. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
  102. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
  103. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
  104. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
  105. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
  106. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
  107. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
  108. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
  109. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
  110. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
  111. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
  112. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
  113. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
  114. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
  115. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
  116. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
  117. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
  118. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
  119. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
  120. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
  121. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
  122. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
  123. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
  124. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
  125. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
  126. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
  127. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
  128. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
  129. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
  130. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
  131. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
  132. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
  133. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
  134. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
  135. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
  136. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
  137. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
  138. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
  139. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
  140. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
  141. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
  142. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
  143. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
  144. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
  145. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
  146. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
  147. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
  148. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
  149. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
  150. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
  151. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
  152. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/flows/Flow.py +0 -0
  153. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/flows/Flow__Events.py +0 -0
  154. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/flows/Task.py +0 -0
  155. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/flows/__init__.py +0 -0
  156. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
  157. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
  158. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
  159. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
  160. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
  161. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
  162. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
  163. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
  164. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
  165. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/generators/Generator_Manager.py +0 -0
  166. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
  167. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +0 -0
  168. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/generators/__init__.py +0 -0
  169. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
  170. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
  171. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
  172. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
  173. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
  174. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
  175. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
  176. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
  177. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
  178. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
  179. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
  180. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
  181. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
  182. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
  183. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/html/__init__.py +0 -0
  184. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
  185. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
  186. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
  187. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
  188. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
  189. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
  190. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
  191. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
  192. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
  193. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
  194. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
  195. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
  196. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
  197. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
  198. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
  199. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/python_compatibility/__init__.py +0 -0
  200. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/python_compatibility/python_3_8.py +0 -0
  201. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
  202. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
  203. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
  204. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
  205. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
  206. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
  207. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
  208. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
  209. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
  210. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
  211. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
  212. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
  213. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
  214. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
  215. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
  216. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
  217. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
  218. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
  219. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
  220. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
  221. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
  222. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
  223. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
  224. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
  225. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
  226. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
  227. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
  228. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
  229. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
  230. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
  231. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
  232. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
  233. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
  234. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
  235. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
  236. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
  237. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
  238. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
  239. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
  240. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
  241. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
  242. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
  243. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
  244. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
  245. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
  246. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
  247. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
  248. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
  249. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
  250. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
  251. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
  252. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
  253. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
  254. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
  255. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
  256. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
  257. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
  258. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/trace/__init__.py +0 -0
  259. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/xml/Xml__Attribute.py +0 -0
  260. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/xml/Xml__Element.py +0 -0
  261. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/xml/Xml__File.py +0 -0
  262. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/xml/Xml__File__Load.py +0 -0
  263. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/xml/Xml__File__To_Dict.py +0 -0
  264. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/xml/Xml__File__To_Xml.py +0 -0
  265. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/xml/__init__.py +0 -0
  266. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/xml/rss/RSS__Channel.py +0 -0
  267. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +0 -0
  268. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/xml/rss/RSS__Feed.py +0 -0
  269. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/xml/rss/RSS__Feed__Parser.py +0 -0
  270. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/xml/rss/RSS__Image.py +0 -0
  271. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/helpers/xml/rss/RSS__Item.py +0 -0
  272. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Catch.py +0 -0
  273. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
  274. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Duration.py +0 -0
  275. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Hook_Method.py +0 -0
  276. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
  277. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Log_To_String.py +0 -0
  278. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Logging.py +0 -0
  279. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Patch_Print.py +0 -0
  280. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Profiler.py +0 -0
  281. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Pytest.py +0 -0
  282. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Stderr.py +0 -0
  283. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Stdout.py +0 -0
  284. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
  285. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Temp_File.py +0 -0
  286. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Temp_Folder.py +0 -0
  287. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
  288. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
  289. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Temp_Zip.py +0 -0
  290. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
  291. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Unit_Test.py +0 -0
  292. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/Unzip_File.py +0 -0
  293. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/testing/__init__.py +0 -0
  294. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/type_safe/Type_Safe__Base.py +0 -0
  295. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/type_safe/Type_Safe__Dict.py +0 -0
  296. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/type_safe/Type_Safe__List.py +0 -0
  297. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/type_safe/__init__.py +0 -0
  298. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/type_safe/decorators/__init__.py +0 -0
  299. {osbot_utils-2.3.0/osbot_utils/type_safe → osbot_utils-2.5.0/osbot_utils/type_safe/validators}/Type_Safe__Validator.py +0 -0
  300. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/type_safe/validators/__init__.py +0 -0
  301. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Assert.py +0 -0
  302. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Call_Stack.py +0 -0
  303. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Csv.py +0 -0
  304. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Dev.py +0 -0
  305. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Env.py +0 -0
  306. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Exceptions.py +0 -0
  307. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Files.py +0 -0
  308. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Functions.py +0 -0
  309. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Http.py +0 -0
  310. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Int.py +0 -0
  311. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Json.py +0 -0
  312. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Json_Cache.py +0 -0
  313. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Lists.py +0 -0
  314. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Misc.py +0 -0
  315. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Png.py +0 -0
  316. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Process.py +0 -0
  317. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Python_Logger.py +0 -0
  318. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Regex.py +0 -0
  319. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Status.py +0 -0
  320. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Str.py +0 -0
  321. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Threads.py +0 -0
  322. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Toml.py +0 -0
  323. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Version.py +0 -0
  324. {osbot_utils-2.3.0 → osbot_utils-2.5.0}/osbot_utils/utils/Zip.py +0 -0
  325. {osbot_utils-2.3.0 → osbot_utils-2.5.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.3.0
3
+ Version: 2.5.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.3.0-blue)
26
+ ![Current Release](https://img.shields.io/badge/release-v2.5.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.3.0-blue)
5
+ ![Current Release](https://img.shields.io/badge/release-v2.5.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
 
@@ -1,5 +1,4 @@
1
1
  import uuid
2
-
3
2
  from osbot_utils.utils.Misc import is_guid
4
3
 
5
4
  GUID__NAMESPACE = uuid.UUID('2cfec064-537a-4ff7-8fdc-2fc9e2606f3d')
@@ -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
@@ -142,7 +142,7 @@ class Type_Safe:
142
142
  from enum import EnumMeta
143
143
  from osbot_utils.utils.Objects import obj_is_type_union_compatible
144
144
 
145
- IMMUTABLE_TYPES = (bool, int, float, complex, str, tuple, frozenset, bytes, NoneType, EnumMeta)
145
+ IMMUTABLE_TYPES = (bool, int, float, complex, str, tuple, frozenset, bytes, NoneType, EnumMeta, type)
146
146
 
147
147
 
148
148
  kwargs = {}
@@ -172,7 +172,15 @@ class Type_Safe:
172
172
  if var_value is not None: # allow None assignments on ctor since that is a valid use case
173
173
  if get_origin(var_type) is Annotated:
174
174
  continue
175
- if var_type and not isinstance(var_value, var_type): # check type
175
+ if get_origin(var_type) is type: # Special handling for Type[T]
176
+ if not isinstance(var_value, type):
177
+ exception_message = f"variable '{var_name}' is defined as Type[T] but has value '{var_value}' which is not a type"
178
+ raise ValueError(exception_message)
179
+ type_arg = get_args(var_type)[0]
180
+ if not issubclass(var_value, type_arg):
181
+ exception_message = f"variable '{var_name}' is defined as {var_type} but value {var_value} is not a subclass of {type_arg}"
182
+ raise ValueError(exception_message)
183
+ elif var_type and not isinstance(var_value, var_type): # check type
176
184
  exception_message = f"variable '{var_name}' is defined as type '{var_type}' but has value '{var_value}' of type '{type(var_value)}'"
177
185
  raise ValueError(exception_message)
178
186
  if var_type not in IMMUTABLE_TYPES and var_name.startswith('__') is False: # if var_type is not one of the IMMUTABLE_TYPES or is an __ internal
@@ -3,7 +3,7 @@ from enum import Enum
3
3
  from typing import get_args, get_origin, Union, List, Any # 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
@@ -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
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):
@@ -128,6 +128,16 @@ def convert_to_value_from_obj_annotation(target, attr_name, value):
128
128
  if hasattr(obj_annotations,'get'):
129
129
  attribute_annotation = obj_annotations.get(attr_name)
130
130
  if attribute_annotation:
131
+ origin = get_origin(attribute_annotation) # Add handling for Type[T] annotations
132
+ if origin is type and isinstance(value, str):
133
+ try: # Convert string path to actual type
134
+ if len(value.rsplit('.', 1)) > 1:
135
+ module_name, class_name = value.rsplit('.', 1)
136
+ module = __import__(module_name, fromlist=[class_name])
137
+ return getattr(module, class_name)
138
+ except (ValueError, ImportError, AttributeError) as e:
139
+ raise ValueError(f"Could not convert '{value}' to type: {str(e)}")
140
+
131
141
  if attribute_annotation in TYPE_SAFE__CONVERT_VALUE__SUPPORTED_TYPES: # for now hard-coding this to just these types until we understand the side effects
132
142
  return attribute_annotation(value)
133
143
  return value
@@ -373,6 +383,8 @@ def obj_is_type_union_compatible(var_type, compatible_types):
373
383
  from typing import Union
374
384
 
375
385
  origin = get_origin(var_type)
386
+ if isinstance(var_type, _GenericAlias) and origin is type: # Add handling for Type[T]
387
+ return type in compatible_types # Allow if 'type' is in compatible types
376
388
  if origin is Union: # For Union types, including Optionals
377
389
  args = get_args(var_type) # Get the argument types
378
390
  for arg in args: # Iterate through each argument in the Union
@@ -454,8 +466,13 @@ def value_type_matches_obj_annotation_for_attr(target, attr_name, value):
454
466
  annotations = all_annotations(target)
455
467
  attr_type = annotations.get(attr_name)
456
468
  if attr_type:
457
- origin_attr_type = get_origin(attr_type) # to handle when type definition contains a generic
458
- if origin_attr_type is Annotated: # if the type is Annotated
469
+ origin_attr_type = get_origin(attr_type) # to handle when type definition contains a generic
470
+ if origin_attr_type is type: # Add handling for Type[T]
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
474
+ return isinstance(value, type) and issubclass(value, type_arg) # Check that value is a type and is subclass of type_arg
475
+ if origin_attr_type is Annotated: # if the type is Annotated
459
476
  args = get_args(attr_type)
460
477
  origin_attr_type = args[0]
461
478
 
@@ -0,0 +1 @@
1
+ v2.5.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "osbot_utils"
3
- version = "v2.3.0"
3
+ version = "v2.5.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.3.0
File without changes