osbot-utils 2.1.0__tar.gz → 2.3.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.1.0 → osbot_utils-2.3.0}/PKG-INFO +3 -3
  2. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/README.md +1 -1
  3. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +3 -4
  4. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +7 -13
  5. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/xml/rss/RSS__Channel.py +1 -1
  6. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/type_safe/Type_Safe.py +21 -10
  7. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/type_safe/Type_Safe_Method.py +12 -4
  8. osbot_utils-2.3.0/osbot_utils/utils/__init__.py +0 -0
  9. osbot_utils-2.3.0/osbot_utils/version +1 -0
  10. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/pyproject.toml +1 -1
  11. osbot_utils-2.1.0/osbot_utils/version +0 -1
  12. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/LICENSE +0 -0
  13. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/__init__.py +0 -0
  14. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
  15. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
  16. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
  17. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/base_classes/__init__.py +0 -0
  18. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/context_managers/__init__.py +0 -0
  19. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/context_managers/async_invoke.py +0 -0
  20. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/context_managers/capture_duration.py +0 -0
  21. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
  22. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/context_managers/print_duration.py +0 -0
  23. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/__init__.py +0 -0
  24. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/classes/__init__.py +0 -0
  25. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/classes/singleton.py +0 -0
  26. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/lists/__init__.py +0 -0
  27. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
  28. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/lists/group_by.py +0 -0
  29. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/lists/index_by.py +0 -0
  30. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/methods/__init__.py +0 -0
  31. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/methods/cache.py +0 -0
  32. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
  33. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
  34. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
  35. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
  36. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
  37. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/methods/catch.py +0 -0
  38. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/methods/context.py +0 -0
  39. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
  40. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
  41. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
  42. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
  43. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
  44. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
  45. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/fluent/Fluent_List.py +0 -0
  46. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/fluent/__init__.py +0 -0
  47. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/CFormat.py +0 -0
  48. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/CPrint.py +0 -0
  49. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
  50. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
  51. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Guid.py +0 -0
  52. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
  53. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Local_Cache.py +0 -0
  54. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Local_Caches.py +0 -0
  55. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Print_Table.py +0 -0
  56. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Python_Audit.py +0 -0
  57. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Random_Guid.py +0 -0
  58. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
  59. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Random_Seed.py +0 -0
  60. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Safe_Id.py +0 -0
  61. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Str_ASCII.py +0 -0
  62. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
  63. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Type_Registry.py +0 -0
  64. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
  65. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/__init__.py +0 -0
  66. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/Ast.py +0 -0
  67. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
  68. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
  69. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
  70. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
  71. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
  72. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
  73. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
  74. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/__init__.py +0 -0
  75. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
  76. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
  77. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
  78. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
  79. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
  80. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
  81. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
  82. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
  83. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
  84. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
  85. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
  86. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
  87. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
  88. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
  89. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
  90. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
  91. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
  92. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
  93. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
  94. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
  95. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
  96. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
  97. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
  98. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
  99. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
  100. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
  101. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
  102. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
  103. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
  104. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
  105. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
  106. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
  107. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
  108. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
  109. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
  110. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
  111. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
  112. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
  113. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
  114. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
  115. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
  116. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
  117. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
  118. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
  119. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
  120. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
  121. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
  122. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
  123. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
  124. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
  125. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
  126. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
  127. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
  128. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
  129. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
  130. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
  131. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
  132. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
  133. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
  134. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
  135. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
  136. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
  137. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
  138. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
  139. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
  140. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
  141. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
  142. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
  143. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
  144. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
  145. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
  146. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
  147. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
  148. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
  149. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
  150. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/flows/Flow.py +0 -0
  151. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/flows/Flow__Events.py +0 -0
  152. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/flows/Task.py +0 -0
  153. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/flows/__init__.py +0 -0
  154. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
  155. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
  156. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
  157. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
  158. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
  159. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
  160. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
  161. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
  162. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
  163. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/generators/Generator_Manager.py +0 -0
  164. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
  165. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +0 -0
  166. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/generators/__init__.py +0 -0
  167. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
  168. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
  169. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
  170. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
  171. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
  172. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
  173. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
  174. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
  175. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
  176. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
  177. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
  178. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
  179. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
  180. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
  181. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/html/__init__.py +0 -0
  182. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
  183. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
  184. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
  185. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
  186. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
  187. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
  188. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
  189. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
  190. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
  191. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
  192. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
  193. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
  194. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
  195. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
  196. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
  197. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/python_compatibility/__init__.py +0 -0
  198. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/python_compatibility/python_3_8.py +0 -0
  199. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
  200. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
  201. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
  202. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
  203. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
  204. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
  205. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
  206. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
  207. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
  208. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
  209. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
  210. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
  211. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
  212. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
  213. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
  214. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
  215. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
  216. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
  217. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
  218. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
  219. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
  220. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
  221. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
  222. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
  223. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
  224. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
  225. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
  226. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
  227. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
  228. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
  229. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
  230. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
  231. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
  232. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
  233. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
  234. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
  235. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
  236. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
  237. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
  238. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
  239. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
  240. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
  241. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
  242. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
  243. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
  244. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
  245. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
  246. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
  247. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
  248. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
  249. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
  250. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
  251. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
  252. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
  253. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
  254. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/trace/__init__.py +0 -0
  255. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/xml/Xml__Attribute.py +0 -0
  256. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/xml/Xml__Element.py +0 -0
  257. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/xml/Xml__File.py +0 -0
  258. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/xml/Xml__File__Load.py +0 -0
  259. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/xml/Xml__File__To_Dict.py +0 -0
  260. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/xml/Xml__File__To_Xml.py +0 -0
  261. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/xml/__init__.py +0 -0
  262. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +0 -0
  263. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/xml/rss/RSS__Feed.py +0 -0
  264. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/xml/rss/RSS__Feed__Parser.py +0 -0
  265. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/xml/rss/RSS__Image.py +0 -0
  266. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/helpers/xml/rss/RSS__Item.py +0 -0
  267. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Catch.py +0 -0
  268. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
  269. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Duration.py +0 -0
  270. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Hook_Method.py +0 -0
  271. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
  272. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Log_To_String.py +0 -0
  273. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Logging.py +0 -0
  274. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Patch_Print.py +0 -0
  275. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Profiler.py +0 -0
  276. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Pytest.py +0 -0
  277. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Stderr.py +0 -0
  278. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Stdout.py +0 -0
  279. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
  280. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Temp_File.py +0 -0
  281. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Temp_Folder.py +0 -0
  282. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
  283. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
  284. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Temp_Zip.py +0 -0
  285. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
  286. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Unit_Test.py +0 -0
  287. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/Unzip_File.py +0 -0
  288. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/testing/__init__.py +0 -0
  289. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/type_safe/Type_Safe__Base.py +0 -0
  290. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/type_safe/Type_Safe__Dict.py +0 -0
  291. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/type_safe/Type_Safe__List.py +0 -0
  292. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/type_safe/Type_Safe__Validator.py +0 -0
  293. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/type_safe/__init__.py +0 -0
  294. {osbot_utils-2.1.0/osbot_utils/type_safe/validators → osbot_utils-2.3.0/osbot_utils/type_safe/decorators}/__init__.py +0 -0
  295. {osbot_utils-2.1.0/osbot_utils/decorators/methods → osbot_utils-2.3.0/osbot_utils/type_safe/decorators}/type_safe.py +0 -0
  296. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/type_safe/validators/Validator__Max.py +0 -0
  297. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/type_safe/validators/Validator__Min.py +0 -0
  298. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/type_safe/validators/Validator__One_Of.py +0 -0
  299. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/type_safe/validators/Validator__Regex.py +0 -0
  300. {osbot_utils-2.1.0/osbot_utils/utils → osbot_utils-2.3.0/osbot_utils/type_safe/validators}/__init__.py +0 -0
  301. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Assert.py +0 -0
  302. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Call_Stack.py +0 -0
  303. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Csv.py +0 -0
  304. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Dev.py +0 -0
  305. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Env.py +0 -0
  306. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Exceptions.py +0 -0
  307. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Files.py +0 -0
  308. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Functions.py +0 -0
  309. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Http.py +0 -0
  310. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Int.py +0 -0
  311. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Json.py +0 -0
  312. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Json_Cache.py +0 -0
  313. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Lists.py +0 -0
  314. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Misc.py +0 -0
  315. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Objects.py +0 -0
  316. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Png.py +0 -0
  317. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Process.py +0 -0
  318. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Python_Logger.py +0 -0
  319. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Regex.py +0 -0
  320. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Status.py +0 -0
  321. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Str.py +0 -0
  322. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Threads.py +0 -0
  323. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Toml.py +0 -0
  324. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Version.py +0 -0
  325. {osbot_utils-2.1.0 → osbot_utils-2.3.0}/osbot_utils/utils/Zip.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: osbot_utils
3
- Version: 2.1.0
3
+ Version: 2.3.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.1.0-blue)
26
+ ![Current Release](https://img.shields.io/badge/release-v2.3.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.1.0-blue)
5
+ ![Current Release](https://img.shields.io/badge/release-v2.3.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,6 +1,5 @@
1
1
  import inspect
2
- from typing import List
3
-
2
+ from typing import List
4
3
  from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
5
4
  from osbot_utils.decorators.lists.filter_list import filter_list
6
5
  from osbot_utils.helpers.sqlite.Sqlite__Field import Sqlite__Field
@@ -17,8 +16,8 @@ class Sqlite__Table__Create(Kwargs_To_Self):
17
16
  self.set_default_fields()
18
17
 
19
18
  def add_field(self, field_data: dict):
20
- sqlite_field = Sqlite__Field.from_json(field_data)
21
- if sqlite_field:
19
+ if field_data and isinstance(field_data, dict):
20
+ sqlite_field = Sqlite__Field.from_json(field_data)
22
21
  self.fields.append(sqlite_field)
23
22
  return True
24
23
  return False
@@ -1,16 +1,10 @@
1
- from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
2
- from osbot_utils.decorators.methods.cache_on_self import cache_on_self
3
- from osbot_utils.helpers.sqlite.Sqlite__Database import Sqlite__Database
4
- from osbot_utils.helpers.sqlite.Sqlite__Table import Sqlite__Table
5
- from osbot_utils.helpers.sqlite.Sqlite__Table__Create import Sqlite__Table__Create
6
- from osbot_utils.helpers.sqlite.domains.Sqlite__DB__Json import Sqlite__DB__Json
7
- from osbot_utils.testing.Duration import duration, Duration
8
- from osbot_utils.utils.Dev import pprint
9
- from osbot_utils.utils.Files import current_temp_folder, path_combine, folder_create, file_exists, file_not_exists, \
10
- file_contents
11
- from osbot_utils.utils.Http import GET, GET_to_file
12
- from osbot_utils.utils.Json import json_loads, json_from_file, json_dump, json_file_create, json_file_load
13
- from osbot_utils.utils.Objects import obj_info
1
+ from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
2
+ from osbot_utils.decorators.methods.cache_on_self import cache_on_self
3
+ from osbot_utils.helpers.sqlite.Sqlite__Database import Sqlite__Database
4
+ from osbot_utils.helpers.sqlite.domains.Sqlite__DB__Json import Sqlite__DB__Json
5
+ from osbot_utils.utils.Files import current_temp_folder, path_combine, folder_create, file_not_exists
6
+ from osbot_utils.utils.Http import GET_to_file
7
+ from osbot_utils.utils.Json import json_from_file, json_file_create, json_file_load
14
8
 
15
9
  URL__CHINOOK_JSON = 'https://github.com/lerocha/chinook-database/releases/download/v1.4.5/ChinookData.json'
16
10
  FILE_NAME__CHINOOK_DATA_JSON = 'ChinookData.json'
@@ -1,5 +1,5 @@
1
1
  from typing import Any, Dict, List
2
- from osbot_utils.type_safe.Type_Safe import Type_Safe
2
+ from osbot_utils.type_safe.Type_Safe import Type_Safe
3
3
  from osbot_utils.helpers.xml.rss.RSS__Image import RSS__Image
4
4
  from osbot_utils.helpers.xml.rss.RSS__Item import RSS__Item
5
5
 
@@ -24,7 +24,7 @@ if sys.version_info < (3, 8): # pragma
24
24
  else:
25
25
  return ()
26
26
  else:
27
- from typing import get_origin, get_args, ForwardRef
27
+ from typing import get_origin, get_args, ForwardRef, Any
28
28
  from osbot_utils.helpers.python_compatibility.python_3_8 import Annotated
29
29
 
30
30
  if sys.version_info >= (3, 10):
@@ -117,12 +117,16 @@ class Type_Safe:
117
117
  # todo: refactor this to separate method
118
118
  if hasattr(annotations, 'get'):
119
119
  annotation = annotations.get(name)
120
- if annotation and get_origin(annotation) is Annotated:
121
- annotation_args = get_args(annotation)
122
- target_type = annotation_args[0]
123
- for attribute in annotation_args[1:]:
124
- if isinstance(attribute, Type_Safe__Validator):
125
- attribute.validate(value=value, field_name=name, target_type=target_type)
120
+ if annotation:
121
+ annotation_origin = get_origin(annotation)
122
+ if annotation_origin is Annotated:
123
+ annotation_args = get_args(annotation)
124
+ target_type = annotation_args[0]
125
+ for attribute in annotation_args[1:]:
126
+ if isinstance(attribute, Type_Safe__Validator):
127
+ attribute.validate(value=value, field_name=name, target_type=target_type)
128
+ elif annotation_origin is dict:
129
+ value = self.deserialize_dict__using_key_value_annotations(name, value)
126
130
 
127
131
  super().__setattr__(name, value)
128
132
 
@@ -341,8 +345,12 @@ class Type_Safe:
341
345
  else:
342
346
  new__dict_key = key_class(dict_key)
343
347
 
344
- if issubclass(value_class, Type_Safe):
348
+ if type(dict_value) == value_class: # if the value is already the target, then just use it
349
+ new__dict_value = dict_value
350
+ elif issubclass(value_class, Type_Safe):
345
351
  new__dict_value = value_class().deserialize_from_dict(dict_value)
352
+ elif value_class is Any:
353
+ new__dict_value = dict_value
346
354
  else:
347
355
  new__dict_value = value_class(dict_value)
348
356
  new_value[new__dict_key] = new__dict_value
@@ -353,7 +361,7 @@ class Type_Safe:
353
361
  def deserialize_from_dict(self, data, raise_on_not_found=False):
354
362
  from decimal import Decimal
355
363
  from enum import EnumMeta
356
- from osbot_utils.type_safe.Type_Safe__List import Type_Safe__List
364
+ from osbot_utils.type_safe.Type_Safe__List import Type_Safe__List
357
365
  from osbot_utils.helpers.Random_Guid import Random_Guid
358
366
  from osbot_utils.helpers.Random_Guid_Short import Random_Guid_Short
359
367
  from osbot_utils.utils.Objects import obj_is_attribute_annotation_of_type
@@ -362,6 +370,9 @@ class Type_Safe:
362
370
  from osbot_utils.helpers.Safe_Id import Safe_Id
363
371
  from osbot_utils.helpers.Timestamp_Now import Timestamp_Now
364
372
 
373
+ if hasattr(data, 'items') is False:
374
+ raise ValueError(f"Expected a dictionary, but got '{type(data)}'")
375
+
365
376
  for key, value in data.items():
366
377
  if hasattr(self, key) and isinstance(getattr(self, key), Type_Safe):
367
378
  getattr(self, key).deserialize_from_dict(value) # if the attribute is a Type_Safe object, then also deserialize it
@@ -432,7 +443,7 @@ class Type_Safe:
432
443
  json_data = json_parse(json_data)
433
444
  if json_data: # if there is no data or is {} then don't create an object (since this could be caused by bad data being provided)
434
445
  return cls().deserialize_from_dict(json_data,raise_on_not_found=raise_on_not_found)
435
- return None
446
+ return cls()
436
447
 
437
448
  # todo: see if it is possible to add recursive protection to this logic
438
449
  def serialize_to_dict(obj):
@@ -1,15 +1,22 @@
1
1
  import inspect # For function introspection
2
2
  from enum import Enum
3
- from typing import get_args, get_origin, Optional, Union, List, Any, Dict # For type hinting utilities
3
+ from typing import get_args, get_origin, Union, List, Any # For type hinting utilities
4
4
 
5
5
 
6
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
10
- self.annotations = func.__annotations__ # Get type annotations
10
+ self.annotations = func.__annotations__ # Get function annotations
11
+
12
+ def check_for_any_use(self):
13
+ for param_name, type_hint in self.annotations.items():
14
+ if type_hint is any: # Detect incorrect usage of lowercase any
15
+ raise ValueError(f"Parameter '{param_name}' uses lowercase 'any' instead of 'Any' from typing module. "
16
+ f"Please use 'from typing import Any' and annotate as '{param_name}: Any'")
11
17
 
12
18
  def handle_type_safety(self, args: tuple, kwargs: dict): # Main method to handle type safety
19
+ self.check_for_any_use()
13
20
  bound_args = self.bind_args(args, kwargs) # Bind arguments to parameters
14
21
  for param_name, param_value in bound_args.arguments.items(): # Iterate through arguments
15
22
  if param_name != 'self': # Skip self parameter
@@ -107,5 +114,6 @@ class Type_Safe_Method:
107
114
 
108
115
  def validate_direct_type(self, param_name: str, # Validate direct type match
109
116
  param_value: Any, expected_type: Any): # Type parameters
110
- if not isinstance(param_value, expected_type): # Check type match
111
- raise ValueError(f"Parameter '{param_name}' expected type {expected_type}, but got {type(param_value)}") # Raise error if no match
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
File without changes
@@ -0,0 +1 @@
1
+ v2.3.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "osbot_utils"
3
- version = "v2.1.0"
3
+ version = "v2.3.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.1.0
File without changes