osbot-utils 2.12.0__tar.gz → 2.14.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 (348) hide show
  1. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/PKG-INFO +2 -2
  2. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/README.md +1 -1
  3. osbot_utils-2.14.0/osbot_utils/helpers/Obj_Id.py +29 -0
  4. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/performance/Performance_Measure__Session.py +23 -3
  5. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Convert.py +11 -9
  6. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Validation.py +4 -1
  7. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Class_Kwargs.py +11 -8
  8. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py +11 -1
  9. osbot_utils-2.14.0/osbot_utils/version +1 -0
  10. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/pyproject.toml +1 -1
  11. osbot_utils-2.12.0/osbot_utils/version +0 -1
  12. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/LICENSE +0 -0
  13. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/__init__.py +0 -0
  14. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
  15. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
  16. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
  17. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/base_classes/__init__.py +0 -0
  18. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/context_managers/__init__.py +0 -0
  19. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/context_managers/async_invoke.py +0 -0
  20. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/context_managers/capture_duration.py +0 -0
  21. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
  22. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/context_managers/print_duration.py +0 -0
  23. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/__init__.py +0 -0
  24. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/classes/__init__.py +0 -0
  25. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/classes/singleton.py +0 -0
  26. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/lists/__init__.py +0 -0
  27. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
  28. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/lists/group_by.py +0 -0
  29. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/lists/index_by.py +0 -0
  30. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/__init__.py +0 -0
  31. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/cache.py +0 -0
  32. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
  33. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
  34. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
  35. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
  36. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
  37. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/catch.py +0 -0
  38. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/context.py +0 -0
  39. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
  40. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
  41. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
  42. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
  43. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
  44. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
  45. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/fluent/Fluent_List.py +0 -0
  46. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/fluent/__init__.py +0 -0
  47. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/CFormat.py +0 -0
  48. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/CPrint.py +0 -0
  49. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
  50. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
  51. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Guid.py +0 -0
  52. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
  53. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Local_Cache.py +0 -0
  54. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Local_Caches.py +0 -0
  55. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Print_Table.py +0 -0
  56. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Python_Audit.py +0 -0
  57. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Random_Guid.py +0 -0
  58. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
  59. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Random_Seed.py +0 -0
  60. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Safe_Id.py +0 -0
  61. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Str_ASCII.py +0 -0
  62. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Timestamp_Now.py +0 -0
  63. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Type_Registry.py +0 -0
  64. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
  65. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/__init__.py +0 -0
  66. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Ast.py +0 -0
  67. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
  68. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
  69. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
  70. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
  71. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
  72. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
  73. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
  74. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/__init__.py +0 -0
  75. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
  76. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
  77. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
  78. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
  79. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
  80. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
  81. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
  82. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
  83. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
  84. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
  85. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
  86. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
  87. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
  88. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
  89. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
  90. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
  91. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
  92. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
  93. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
  94. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
  95. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
  96. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
  97. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
  98. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
  99. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
  100. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
  101. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
  102. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
  103. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
  104. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
  105. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
  106. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
  107. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
  108. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
  109. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
  110. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
  111. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
  112. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
  113. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
  114. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
  115. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
  116. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
  117. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
  118. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
  119. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
  120. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
  121. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
  122. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
  123. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
  124. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
  125. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
  126. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
  127. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
  128. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
  129. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
  130. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
  131. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
  132. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
  133. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
  134. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
  135. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
  136. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
  137. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
  138. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
  139. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
  140. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
  141. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
  142. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
  143. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
  144. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
  145. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
  146. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
  147. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
  148. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
  149. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
  150. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/Flow.py +0 -0
  151. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/Flow__Events.py +0 -0
  152. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/Task.py +0 -0
  153. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/__init__.py +0 -0
  154. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
  155. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
  156. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
  157. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
  158. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
  159. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
  160. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
  161. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
  162. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
  163. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/generators/Generator_Manager.py +0 -0
  164. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
  165. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +0 -0
  166. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/generators/__init__.py +0 -0
  167. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
  168. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
  169. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
  170. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
  171. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
  172. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
  173. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
  174. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
  175. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
  176. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
  177. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
  178. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
  179. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
  180. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
  181. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/html/__init__.py +0 -0
  182. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
  183. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
  184. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
  185. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
  186. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
  187. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
  188. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
  189. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
  190. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
  191. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
  192. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
  193. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
  194. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
  195. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
  196. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
  197. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/python_compatibility/__init__.py +0 -0
  198. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/python_compatibility/python_3_8.py +0 -0
  199. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
  200. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
  201. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
  202. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
  203. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
  204. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
  205. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
  206. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
  207. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
  208. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
  209. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
  210. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
  211. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
  212. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
  213. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
  214. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
  215. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
  216. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
  217. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
  218. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
  219. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
  220. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
  221. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
  222. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
  223. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
  224. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
  225. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
  226. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
  227. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
  228. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
  229. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
  230. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
  231. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
  232. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
  233. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
  234. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
  235. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
  236. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
  237. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
  238. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
  239. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
  240. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
  241. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
  242. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
  243. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
  244. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
  245. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
  246. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
  247. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
  248. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
  249. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
  250. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
  251. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
  252. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
  253. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
  254. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
  255. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
  256. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/trace/__init__.py +0 -0
  257. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/Xml__Attribute.py +0 -0
  258. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/Xml__Element.py +0 -0
  259. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/Xml__File.py +0 -0
  260. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/Xml__File__Load.py +0 -0
  261. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/Xml__File__To_Dict.py +0 -0
  262. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/Xml__File__To_Xml.py +0 -0
  263. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/__init__.py +0 -0
  264. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/rss/RSS__Channel.py +0 -0
  265. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +0 -0
  266. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/rss/RSS__Feed.py +0 -0
  267. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/rss/RSS__Feed__Parser.py +0 -0
  268. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/rss/RSS__Image.py +0 -0
  269. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/helpers/xml/rss/RSS__Item.py +0 -0
  270. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Catch.py +0 -0
  271. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
  272. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Duration.py +0 -0
  273. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Hook_Method.py +0 -0
  274. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
  275. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Log_To_String.py +0 -0
  276. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Logging.py +0 -0
  277. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Patch_Print.py +0 -0
  278. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Profiler.py +0 -0
  279. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Pytest.py +0 -0
  280. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Stderr.py +0 -0
  281. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Stdout.py +0 -0
  282. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
  283. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Temp_File.py +0 -0
  284. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Temp_Folder.py +0 -0
  285. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
  286. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
  287. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Temp_Zip.py +0 -0
  288. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
  289. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Unit_Test.py +0 -0
  290. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/Unzip_File.py +0 -0
  291. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/__init__.py +0 -0
  292. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/performance/__init__.py +0 -0
  293. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Measurement.py +0 -0
  294. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Result.py +0 -0
  295. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/testing/performance/models/__init__.py +0 -0
  296. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/Type_Safe.py +0 -0
  297. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/Type_Safe__Base.py +0 -0
  298. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/Type_Safe__Dict.py +0 -0
  299. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/Type_Safe__List.py +0 -0
  300. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/Type_Safe__Method.py +0 -0
  301. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/__init__.py +0 -0
  302. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/decorators/__init__.py +0 -0
  303. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/decorators/type_safe.py +0 -0
  304. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/methods/__init__.py +0 -0
  305. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/methods/type_safe_property.py +0 -0
  306. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Annotations.py +0 -0
  307. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Cache.py +0 -0
  308. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Not_Cached.py +0 -0
  309. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Raise_Exception.py +0 -0
  310. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/Type_Safe__Shared__Variables.py +0 -0
  311. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/shared/__init__.py +0 -0
  312. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Default_Kwargs.py +0 -0
  313. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Default_Value.py +0 -0
  314. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Init.py +0 -0
  315. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Set_Attr.py +0 -0
  316. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/steps/__init__.py +0 -0
  317. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/validators/Type_Safe__Validator.py +0 -0
  318. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/validators/Validator__Max.py +0 -0
  319. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/validators/Validator__Min.py +0 -0
  320. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/validators/Validator__One_Of.py +0 -0
  321. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/validators/Validator__Regex.py +0 -0
  322. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/type_safe/validators/__init__.py +0 -0
  323. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Assert.py +0 -0
  324. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Call_Stack.py +0 -0
  325. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Csv.py +0 -0
  326. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Dev.py +0 -0
  327. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Env.py +0 -0
  328. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Exceptions.py +0 -0
  329. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Files.py +0 -0
  330. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Functions.py +0 -0
  331. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Http.py +0 -0
  332. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Int.py +0 -0
  333. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Json.py +0 -0
  334. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Json_Cache.py +0 -0
  335. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Lists.py +0 -0
  336. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Misc.py +0 -0
  337. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Objects.py +0 -0
  338. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Png.py +0 -0
  339. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Process.py +0 -0
  340. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Python_Logger.py +0 -0
  341. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Regex.py +0 -0
  342. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Status.py +0 -0
  343. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Str.py +0 -0
  344. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Threads.py +0 -0
  345. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Toml.py +0 -0
  346. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Version.py +0 -0
  347. {osbot_utils-2.12.0 → osbot_utils-2.14.0}/osbot_utils/utils/Zip.py +0 -0
  348. {osbot_utils-2.12.0 → osbot_utils-2.14.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.12.0
3
+ Version: 2.14.0
4
4
  Summary: OWASP Security Bot - Utils
5
5
  License: MIT
6
6
  Author: Dinis Cruz
@@ -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.12.0-blue)
26
+ ![Current Release](https://img.shields.io/badge/release-v2.14.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.12.0-blue)
5
+ ![Current Release](https://img.shields.io/badge/release-v2.14.0-blue)
6
6
  [![codecov](https://codecov.io/gh/owasp-sbot/OSBot-Utils/graph/badge.svg?token=GNVW0COX1N)](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
7
7
 
8
8
 
@@ -0,0 +1,29 @@
1
+ import random
2
+
3
+ _hex_table = [f"{i:02x}" for i in range(256)]
4
+
5
+ def is_obj_id(value: str):
6
+ var_type = type(value)
7
+ if var_type is Obj_Id:
8
+ return True
9
+ if var_type is str:
10
+ if len(value) == 8: # todo: add efficient check if we only have hex values
11
+ return True
12
+ return False
13
+
14
+ def new_obj_id():
15
+ return hex(random.getrandbits(32))[2:].zfill(8) # slice off '0x' and pad
16
+
17
+ class Obj_Id(str):
18
+ def __new__(cls, value: str=None):
19
+ if value:
20
+ if is_obj_id(value):
21
+ obj_id = value
22
+ else:
23
+ raise ValueError(f'in Obj_Id: value provided was not a valid Obj_Id: {value}')
24
+ else:
25
+ obj_id = new_obj_id()
26
+ return super().__new__(cls, obj_id) # Return a new instance of Guid initialized with the string version of the UUID
27
+
28
+ def __str__(self):
29
+ return self
@@ -11,6 +11,7 @@ MEASURE__INVOCATION__LOOPS = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377,
11
11
  class Performance_Measure__Session(Type_Safe):
12
12
  result : Model__Performance_Measure__Result = None # Current measurement result
13
13
  assert_enabled: bool = True
14
+ padding : int = 30
14
15
 
15
16
  def calculate_raw_score(self, times: List[int]) -> int: # Calculate raw performance score
16
17
  if len(times) < 3: # Need at least 3 values for stability
@@ -89,11 +90,11 @@ class Performance_Measure__Session(Type_Safe):
89
90
  print(f"Median : {measurement.median_time:,}ns")
90
91
  print(f"StdDev : {measurement.stddev_time:,.2f}ns")
91
92
 
92
- def print(self, padding=12 ): # Print measurement results
93
+ def print(self): # Print measurement results
93
94
  if not self.result:
94
95
  print("No measurements taken yet")
95
96
  return
96
- print(f"{self.result.name:{padding}} | score: {self.result.final_score:7,d} ns | raw: {self.result.raw_score:7,d} ns") # Print name and normalized score
97
+ print(f"{self.result.name:{self.padding}} | score: {self.result.final_score:7,d} ns | raw: {self.result.raw_score:7,d} ns") # Print name and normalized score
97
98
 
98
99
  return self
99
100
 
@@ -105,4 +106,23 @@ class Performance_Measure__Session(Type_Safe):
105
106
  new_expected_time = last_expected_time * 5 # using last_expected_time * 5 as the upper limit (since these tests are significantly slowed in GitHUb Actions)
106
107
  assert last_expected_time <= self.result.final_score <= new_expected_time, f"Performance changed for {self.result.name}: expected {last_expected_time} < {self.result.final_score:,d}ns, expected {new_expected_time}"
107
108
  else:
108
- assert self.result.final_score in expected_time, f"Performance changed for {self.result.name}: got {self.result.final_score:,d}ns, expected {expected_time}"
109
+ assert self.result.final_score in expected_time, f"Performance changed for {self.result.name}: got {self.result.final_score:,d}ns, expected {expected_time}"
110
+
111
+ def assert_time(self, *expected_time: int): # Assert that the final score matches the expected normalized time"""
112
+ if self.assert_enabled is False:
113
+ return
114
+ if in_github_action():
115
+ last_expected_time = expected_time[-1] + 100 # +100 in case it is 0
116
+ new_expected_time = last_expected_time * 5 # using last_expected_time * 5 as the upper limit (since these tests are significantly slowed in GitHUb Actions)
117
+ assert last_expected_time <= self.result.final_score <= new_expected_time, f"Performance changed for {self.result.name}: expected {last_expected_time} < {self.result.final_score:,d}ns, expected {new_expected_time}"
118
+ else:
119
+ assert self.result.final_score in expected_time, f"Performance changed for {self.result.name}: got {self.result.final_score:,d}ns, expected {expected_time}"
120
+
121
+ def assert_time__less_than(self, max_time: int): # Assert that the final score matches the expected normalized time"""
122
+ if self.assert_enabled is False:
123
+ return
124
+ if in_github_action():
125
+ max_time = max_time * 5 # adjust for GitHub's slowness
126
+
127
+ assert self.result.final_score <= max_time, f"Performance changed for {self.result.name}: got {self.result.final_score:,d}ns, expected less than {max_time}ns"
128
+
@@ -20,8 +20,9 @@ class Type_Safe__Convert:
20
20
  from osbot_utils.helpers.Random_Guid import Random_Guid
21
21
  from osbot_utils.helpers.Safe_Id import Safe_Id
22
22
  from osbot_utils.helpers.Str_ASCII import Str_ASCII
23
+ from osbot_utils.helpers.Obj_Id import Obj_Id
23
24
 
24
- TYPE_SAFE__CONVERT_VALUE__SUPPORTED_TYPES = [Guid, Random_Guid, Safe_Id, Str_ASCII, Timestamp_Now]
25
+ TYPE_SAFE__CONVERT_VALUE__SUPPORTED_TYPES = [Guid, Random_Guid, Safe_Id, Str_ASCII, Timestamp_Now, Obj_Id]
25
26
 
26
27
  if target is not None and attr_name is not None:
27
28
  if hasattr(target, '__annotations__'):
@@ -31,16 +32,17 @@ class Type_Safe__Convert:
31
32
  if attribute_annotation:
32
33
  origin = type_safe_cache.get_origin(attribute_annotation) # Add handling for Type[T] annotations
33
34
  if origin is type and isinstance(value, str):
34
- try: # Convert string path to actual type
35
- if len(value.rsplit('.', 1)) > 1:
36
- module_name, class_name = value.rsplit('.', 1)
37
- module = __import__(module_name, fromlist=[class_name])
38
- return getattr(module, class_name)
39
- except (ValueError, ImportError, AttributeError) as e:
40
- raise ValueError(f"Could not convert '{value}' to type: {str(e)}")
41
-
35
+ return self.get_class_from_class_name(value)
42
36
  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
43
37
  return attribute_annotation(value)
44
38
  return value
45
39
 
40
+ def get_class_from_class_name(self, value):
41
+ try: # Convert string path to actual type
42
+ if len(value.rsplit('.', 1)) > 1:
43
+ module_name, class_name = value.rsplit('.', 1)
44
+ module = __import__(module_name, fromlist=[class_name])
45
+ return getattr(module, class_name)
46
+ except (ValueError, ImportError, AttributeError) as e:
47
+ raise ValueError(f"Could not convert '{value}' to type: {str(e)}")
46
48
  type_safe_convert = Type_Safe__Convert()
@@ -228,7 +228,10 @@ class Type_Safe__Validation:
228
228
 
229
229
  if is_invalid:
230
230
  expected_type = annotations.get(name)
231
- actual_type = type(value)
231
+ if type(value) is type:
232
+ actual_type = value
233
+ else:
234
+ actual_type = type(value)
232
235
  raise ValueError(f"Invalid type for attribute '{name}'. Expected '{expected_type}' but got '{actual_type}'")
233
236
 
234
237
  # todo: see if need to add cache support to this method (it looks like this method is not called very often)
@@ -1,9 +1,10 @@
1
- from typing import Dict, Any, Type
2
- from osbot_utils.helpers.Random_Guid import Random_Guid
3
- from osbot_utils.type_safe.shared.Type_Safe__Cache import Type_Safe__Cache, type_safe_cache
4
- from osbot_utils.type_safe.shared.Type_Safe__Shared__Variables import IMMUTABLE_TYPES
5
- from osbot_utils.type_safe.shared.Type_Safe__Validation import type_safe_validation
6
- from osbot_utils.type_safe.steps.Type_Safe__Step__Default_Value import type_safe_step_default_value
1
+ from typing import Dict, Any, Type
2
+ from osbot_utils.helpers.Obj_Id import Obj_Id
3
+ from osbot_utils.helpers.Random_Guid import Random_Guid
4
+ from osbot_utils.type_safe.shared.Type_Safe__Cache import Type_Safe__Cache, type_safe_cache
5
+ from osbot_utils.type_safe.shared.Type_Safe__Shared__Variables import IMMUTABLE_TYPES
6
+ from osbot_utils.type_safe.shared.Type_Safe__Validation import type_safe_validation
7
+ from osbot_utils.type_safe.steps.Type_Safe__Step__Default_Value import type_safe_step_default_value
7
8
 
8
9
 
9
10
 
@@ -43,8 +44,10 @@ class Type_Safe__Step__Class_Kwargs:
43
44
  match = all(isinstance(value, IMMUTABLE_TYPES) for value in kwargs.values())
44
45
 
45
46
  if match: # check for special cases that we can't cache (like Random_Guid)
46
- if Random_Guid in list(dict(annotations).values()): # todo: need to add the other special cases (like Timestamp_Now)
47
-
47
+ annotations_types = list(dict(annotations).values())
48
+ if Random_Guid in annotations_types: # todo: need to add the other special cases (like Timestamp_Now)
49
+ return False
50
+ if Obj_Id in annotations_types: # we can't cache Obj_id, since this would give us the same ID everutime
48
51
  return False
49
52
  return match
50
53
 
@@ -8,6 +8,7 @@ from osbot_utils.helpers.Random_Guid import Random_Guid
8
8
  from osbot_utils.helpers.Random_Guid_Short import Random_Guid_Short
9
9
  from osbot_utils.type_safe.shared.Type_Safe__Annotations import type_safe_annotations
10
10
  from osbot_utils.type_safe.shared.Type_Safe__Cache import type_safe_cache
11
+ from osbot_utils.type_safe.shared.Type_Safe__Convert import type_safe_convert
11
12
  from osbot_utils.utils.Objects import enum_from_value
12
13
  from osbot_utils.helpers.Safe_Id import Safe_Id
13
14
  from osbot_utils.helpers.Timestamp_Now import Timestamp_Now
@@ -43,7 +44,13 @@ class Type_Safe__Step__From_Json:
43
44
  raise ValueError(f"Attribute '{key}' not found in '{_self.__class__.__name__}'")
44
45
  else:
45
46
  continue
46
- if type_safe_annotations.obj_attribute_annotation(_self, key) == type: # Handle type objects
47
+ annotation = type_safe_annotations.obj_attribute_annotation(_self, key)
48
+ annotation_origin = type_safe_cache.get_origin(annotation)
49
+
50
+
51
+ if annotation == type: # Handle type objects
52
+ value = self.deserialize_type__using_value(value)
53
+ elif annotation_origin == type: # Handle type objects inside ForwardRef
47
54
  value = self.deserialize_type__using_value(value)
48
55
  elif type_safe_annotations.obj_is_attribute_annotation_of_type(_self, key, dict): # handle the case when the value is a dict
49
56
  value = self.deserialize_dict__using_key_value_annotations(_self, key, value)
@@ -117,6 +124,9 @@ class Type_Safe__Step__From_Json:
117
124
  if type(dict_value) == value_class: # if the value is already the target, then just use it
118
125
  new__dict_value = dict_value
119
126
  elif issubclass(value_class, Type_Safe):
127
+ if 'node_type' in dict_value:
128
+ value_class = type_safe_convert.get_class_from_class_name(dict_value['node_type'])
129
+
120
130
  new__dict_value = self.deserialize_from_dict(value_class(), dict_value)
121
131
  elif value_class is Any:
122
132
  new__dict_value = dict_value
@@ -0,0 +1 @@
1
+ v2.14.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "osbot_utils"
3
- version = "v2.12.0"
3
+ version = "v2.14.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.12.0
File without changes