osbot-utils 2.60.0__tar.gz → 2.62.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 (438) hide show
  1. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/PKG-INFO +2 -2
  2. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/README.md +1 -1
  3. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Random_Guid.py +4 -4
  4. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Safe_Id.py +7 -3
  5. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Timestamp_Now.py +2 -1
  6. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_float/Safe_Float.py +5 -3
  7. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_int/Safe_Int.py +4 -4
  8. osbot_utils-2.60.0/osbot_utils/helpers/safe_int/Safe_Int__UInt.py → osbot_utils-2.62.0/osbot_utils/helpers/safe_int/Safe_UInt.py +1 -1
  9. osbot_utils-2.62.0/osbot_utils/helpers/safe_int/Safe_UInt__Byte.py +10 -0
  10. osbot_utils-2.62.0/osbot_utils/helpers/safe_int/Safe_UInt__FileSize.py +19 -0
  11. osbot_utils-2.62.0/osbot_utils/helpers/safe_int/Safe_UInt__Percentage.py +10 -0
  12. osbot_utils-2.62.0/osbot_utils/helpers/safe_int/Safe_UInt__Port.py +11 -0
  13. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_str/Safe_Str.py +3 -2
  14. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/Type_Safe__Base.py +19 -2
  15. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/Type_Safe__Dict.py +19 -5
  16. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/Type_Safe__List.py +3 -0
  17. osbot_utils-2.62.0/osbot_utils/type_safe/Type_Safe__Primitive.py +28 -0
  18. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/shared/Type_Safe__Validation.py +5 -1
  19. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Set_Attr.py +4 -1
  20. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Objects.py +3 -1
  21. osbot_utils-2.62.0/osbot_utils/version +1 -0
  22. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/pyproject.toml +1 -1
  23. osbot_utils-2.60.0/osbot_utils/helpers/safe_int/Safe_Int__Byte.py +0 -11
  24. osbot_utils-2.60.0/osbot_utils/helpers/safe_int/Safe_Int__FileSize.py +0 -19
  25. osbot_utils-2.60.0/osbot_utils/helpers/safe_int/Safe_Int__Percentage.py +0 -10
  26. osbot_utils-2.60.0/osbot_utils/helpers/safe_int/Safe_Int__Port.py +0 -11
  27. osbot_utils-2.60.0/osbot_utils/version +0 -1
  28. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/LICENSE +0 -0
  29. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/__init__.py +0 -0
  30. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
  31. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
  32. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
  33. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/base_classes/__init__.py +0 -0
  34. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/context_managers/__init__.py +0 -0
  35. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/context_managers/async_invoke.py +0 -0
  36. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
  37. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/__init__.py +0 -0
  38. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/classes/__init__.py +0 -0
  39. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/classes/singleton.py +0 -0
  40. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/lists/__init__.py +0 -0
  41. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
  42. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/lists/group_by.py +0 -0
  43. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/lists/index_by.py +0 -0
  44. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/methods/__init__.py +0 -0
  45. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/methods/cache.py +0 -0
  46. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
  47. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
  48. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
  49. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
  50. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
  51. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/methods/catch.py +0 -0
  52. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/methods/context.py +0 -0
  53. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
  54. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
  55. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
  56. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
  57. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
  58. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
  59. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/fluent/Fluent_List.py +0 -0
  60. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/fluent/__init__.py +0 -0
  61. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/CFormat.py +0 -0
  62. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/CPrint.py +0 -0
  63. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Dependency_Manager.py +0 -0
  64. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
  65. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Guid.py +0 -0
  66. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Hashicorp_Secrets.py +0 -0
  67. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Local_Cache.py +0 -0
  68. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Local_Caches.py +0 -0
  69. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Obj_Id.py +0 -0
  70. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Print_Table.py +0 -0
  71. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Python_Audit.py +0 -0
  72. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Random_Guid_Short.py +0 -0
  73. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Random_Seed.py +0 -0
  74. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Str_ASCII.py +0 -0
  75. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Type_Registry.py +0 -0
  76. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/Zip_Bytes.py +0 -0
  77. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/__init__.py +0 -0
  78. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/Ast.py +0 -0
  79. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
  80. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
  81. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
  82. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
  83. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
  84. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
  85. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
  86. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/__init__.py +0 -0
  87. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
  88. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
  89. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
  90. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
  91. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
  92. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
  93. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
  94. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
  95. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
  96. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
  97. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
  98. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
  99. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
  100. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
  101. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
  102. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
  103. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
  104. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
  105. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
  106. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
  107. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
  108. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
  109. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
  110. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
  111. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
  112. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
  113. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
  114. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
  115. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
  116. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
  117. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
  118. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
  119. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
  120. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
  121. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
  122. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
  123. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
  124. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
  125. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
  126. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
  127. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
  128. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
  129. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
  130. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
  131. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
  132. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
  133. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
  134. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
  135. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
  136. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
  137. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
  138. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
  139. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
  140. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
  141. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
  142. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
  143. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
  144. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
  145. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
  146. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
  147. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
  148. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
  149. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
  150. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
  151. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
  152. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
  153. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
  154. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
  155. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
  156. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
  157. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
  158. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
  159. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
  160. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
  161. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/duration/Duration.py +0 -0
  162. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/duration/__init__.py +0 -0
  163. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/duration/decorators/__init__.py +0 -0
  164. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/duration/decorators/capture_duration.py +0 -0
  165. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/duration/decorators/duration.py +0 -0
  166. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/duration/decorators/print_duration.py +0 -0
  167. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/duration/schemas/Schema__Duration.py +0 -0
  168. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/duration/schemas/__init__.py +0 -0
  169. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/Flow.py +0 -0
  170. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/Task.py +0 -0
  171. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/__init__.py +0 -0
  172. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/actions/Flow__Data.py +0 -0
  173. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/actions/Flow__Events.py +0 -0
  174. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/actions/Flow__Stats__Collector.py +0 -0
  175. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/actions/Task__Stats__Collector.py +0 -0
  176. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/actions/__init__.py +0 -0
  177. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/decorators/__init__.py +0 -0
  178. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/decorators/flow.py +0 -0
  179. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/decorators/task.py +0 -0
  180. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/models/Flow_Run__Config.py +0 -0
  181. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/models/Flow_Run__Event.py +0 -0
  182. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py +0 -0
  183. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py +0 -0
  184. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/models/Schema__Flow__Artifact.py +0 -0
  185. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/models/Schema__Flow__Result.py +0 -0
  186. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/models/__init__.py +0 -0
  187. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/schemas/Schema__Flow.py +0 -0
  188. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Data.py +0 -0
  189. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Event.py +0 -0
  190. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Event__Data.py +0 -0
  191. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Log.py +0 -0
  192. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Stats.py +0 -0
  193. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Status.py +0 -0
  194. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/schemas/Schema__Flow__Task__Data.py +0 -0
  195. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/schemas/Schema__Task__Stats.py +0 -0
  196. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/flows/schemas/__init__.py +0 -0
  197. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/generators/Generator_Context_Manager.py +0 -0
  198. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/generators/Generator_Manager.py +0 -0
  199. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/generators/Model__Generator_State.py +0 -0
  200. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/generators/Model__Generator_Target.py +0 -0
  201. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/generators/__init__.py +0 -0
  202. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/CSS_Dict__To__Css.py +0 -0
  203. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Html_Dict__To__Html.py +0 -0
  204. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Html_Dict__To__Html_Document.py +0 -0
  205. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Html_Dict__To__Html_Tags.py +0 -0
  206. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Html__To__Html_Dict.py +0 -0
  207. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Html__To__Html_Document.py +0 -0
  208. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Html__To__Html_Tag.py +0 -0
  209. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
  210. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
  211. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
  212. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
  213. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
  214. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
  215. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
  216. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
  217. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
  218. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/Tag__Text.py +0 -0
  219. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/__init__.py +0 -0
  220. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/schemas/Schema__Html_Document.py +0 -0
  221. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/schemas/Schema__Html_Node.py +0 -0
  222. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/schemas/Schema__Html_Node__Data.py +0 -0
  223. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/schemas/Schema__Html_Node__Data__Type.py +0 -0
  224. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/html/schemas/__init__.py +0 -0
  225. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/__init__.py +0 -0
  226. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/actions/LLM_Request__Execute.py +0 -0
  227. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/actions/Type_Safe__Schema_For__LLMs.py +0 -0
  228. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/actions/__init__.py +0 -0
  229. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/builders/LLM_Request__Builder.py +0 -0
  230. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/builders/LLM_Request__Builder__Open_AI.py +0 -0
  231. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/builders/LLM_Request__Factory.py +0 -0
  232. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/builders/__init__.py +0 -0
  233. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/cache/LLM_Cache__Path_Generator.py +0 -0
  234. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/cache/LLM_Request__Cache.py +0 -0
  235. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/cache/LLM_Request__Cache__File_System.py +0 -0
  236. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/cache/LLM_Request__Cache__Storage.py +0 -0
  237. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/cache/Virtual_Storage__Local__Folder.py +0 -0
  238. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/cache/Virtual_Storage__Sqlite.py +0 -0
  239. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/cache/__init__.py +0 -0
  240. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/platforms/__init__.py +0 -0
  241. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/platforms/open_ai/API__LLM__Open_AI.py +0 -0
  242. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/platforms/open_ai/__init__.py +0 -0
  243. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Cache__Index.py +0 -0
  244. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request.py +0 -0
  245. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Data.py +0 -0
  246. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Function_Call.py +0 -0
  247. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Message__Content.py +0 -0
  248. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Message__Role.py +0 -0
  249. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Response.py +0 -0
  250. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/schemas/Schema__LLM_Response__Cache.py +0 -0
  251. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/llms/schemas/__init__.py +0 -0
  252. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
  253. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
  254. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
  255. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
  256. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
  257. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
  258. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
  259. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
  260. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
  261. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Execute_Method.py +0 -0
  262. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
  263. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
  264. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
  265. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
  266. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
  267. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/python_compatibility/__init__.py +0 -0
  268. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/python_compatibility/python_3_8.py +0 -0
  269. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_float/Safe_Float__Engineering.py +0 -0
  270. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_float/Safe_Float__Money.py +0 -0
  271. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_float/Safe_Float__Percentage_Exact.py +0 -0
  272. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_float/__init__.py +0 -0
  273. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_int/__init__.py +0 -0
  274. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_str/Safe_Str__File__Name.py +0 -0
  275. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_str/Safe_Str__File__Path.py +0 -0
  276. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_str/Safe_Str__Hash.py +0 -0
  277. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_str/Safe_Str__Text.py +0 -0
  278. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_str/Safe_Str__Text__Dangerous.py +0 -0
  279. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_str/Safe_Str__Url.py +0 -0
  280. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_str/__init__.py +0 -0
  281. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_str/http/Safe_Str__Html.py +0 -0
  282. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_str/http/Safe_Str__Http__Content_Type.py +0 -0
  283. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_str/http/Safe_Str__Http__ETag.py +0 -0
  284. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_str/http/Safe_Str__Http__Last_Modified.py +0 -0
  285. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_str/http/Safe_Str__Http__Text.py +0 -0
  286. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/safe_str/http/__init__.py +0 -0
  287. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
  288. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
  289. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
  290. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
  291. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
  292. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
  293. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
  294. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
  295. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
  296. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
  297. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
  298. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
  299. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
  300. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
  301. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
  302. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
  303. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
  304. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
  305. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB.py +0 -0
  306. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
  307. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
  308. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
  309. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
  310. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
  311. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
  312. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
  313. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
  314. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
  315. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
  316. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
  317. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
  318. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
  319. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
  320. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
  321. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
  322. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
  323. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
  324. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
  325. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
  326. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
  327. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
  328. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
  329. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
  330. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
  331. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
  332. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
  333. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
  334. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
  335. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
  336. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
  337. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
  338. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
  339. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
  340. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
  341. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
  342. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
  343. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
  344. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/trace/__init__.py +0 -0
  345. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/xml/Xml__Attribute.py +0 -0
  346. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/xml/Xml__Element.py +0 -0
  347. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/xml/Xml__File.py +0 -0
  348. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/xml/Xml__File__Load.py +0 -0
  349. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/xml/Xml__File__To_Dict.py +0 -0
  350. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/xml/Xml__File__To_Xml.py +0 -0
  351. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/xml/__init__.py +0 -0
  352. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/xml/rss/RSS__Channel.py +0 -0
  353. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/xml/rss/RSS__Enclosure.py +0 -0
  354. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/xml/rss/RSS__Feed.py +0 -0
  355. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/xml/rss/RSS__Feed__Parser.py +0 -0
  356. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/xml/rss/RSS__Image.py +0 -0
  357. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/helpers/xml/rss/RSS__Item.py +0 -0
  358. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Catch.py +0 -0
  359. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Custom_Handler_For_Http_Tests.py +0 -0
  360. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Hook_Method.py +0 -0
  361. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
  362. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Log_To_String.py +0 -0
  363. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Logging.py +0 -0
  364. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Patch_Print.py +0 -0
  365. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Profiler.py +0 -0
  366. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Pytest.py +0 -0
  367. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Stderr.py +0 -0
  368. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Stdout.py +0 -0
  369. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
  370. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Temp_File.py +0 -0
  371. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Temp_Folder.py +0 -0
  372. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
  373. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
  374. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Temp_Zip.py +0 -0
  375. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
  376. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Unit_Test.py +0 -0
  377. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/Unzip_File.py +0 -0
  378. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/__init__.py +0 -0
  379. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/performance/Performance_Measure__Session.py +0 -0
  380. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/performance/__init__.py +0 -0
  381. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Measurement.py +0 -0
  382. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/performance/models/Model__Performance_Measure__Result.py +0 -0
  383. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/testing/performance/models/__init__.py +0 -0
  384. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/Type_Safe.py +0 -0
  385. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/Type_Safe__Method.py +0 -0
  386. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/Type_Safe__Set.py +0 -0
  387. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/Type_Safe__Tuple.py +0 -0
  388. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/__init__.py +0 -0
  389. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/decorators/__init__.py +0 -0
  390. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/decorators/type_safe.py +0 -0
  391. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/methods/__init__.py +0 -0
  392. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/methods/type_safe_property.py +0 -0
  393. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/shared/Type_Safe__Annotations.py +0 -0
  394. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/shared/Type_Safe__Cache.py +0 -0
  395. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/shared/Type_Safe__Convert.py +0 -0
  396. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/shared/Type_Safe__Json_Compressor.py +0 -0
  397. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/shared/Type_Safe__Json_Compressor__Type_Registry.py +0 -0
  398. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/shared/Type_Safe__Not_Cached.py +0 -0
  399. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/shared/Type_Safe__Raise_Exception.py +0 -0
  400. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/shared/Type_Safe__Shared__Variables.py +0 -0
  401. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/shared/__init__.py +0 -0
  402. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Class_Kwargs.py +0 -0
  403. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Default_Kwargs.py +0 -0
  404. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Default_Value.py +0 -0
  405. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py +0 -0
  406. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/steps/Type_Safe__Step__Init.py +0 -0
  407. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/steps/__init__.py +0 -0
  408. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/validators/Type_Safe__Validator.py +0 -0
  409. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/validators/Validator__Max.py +0 -0
  410. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/validators/Validator__Min.py +0 -0
  411. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/validators/Validator__One_Of.py +0 -0
  412. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/validators/Validator__Regex.py +0 -0
  413. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/type_safe/validators/__init__.py +0 -0
  414. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Assert.py +0 -0
  415. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Call_Stack.py +0 -0
  416. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Csv.py +0 -0
  417. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Dev.py +0 -0
  418. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Env.py +0 -0
  419. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Exceptions.py +0 -0
  420. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Files.py +0 -0
  421. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Functions.py +0 -0
  422. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Http.py +0 -0
  423. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Int.py +0 -0
  424. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Json.py +0 -0
  425. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Json_Cache.py +0 -0
  426. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Lists.py +0 -0
  427. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Misc.py +0 -0
  428. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Png.py +0 -0
  429. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Process.py +0 -0
  430. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Python_Logger.py +0 -0
  431. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Regex.py +0 -0
  432. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Status.py +0 -0
  433. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Str.py +0 -0
  434. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Threads.py +0 -0
  435. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Toml.py +0 -0
  436. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Version.py +0 -0
  437. {osbot_utils-2.60.0 → osbot_utils-2.62.0}/osbot_utils/utils/Zip.py +0 -0
  438. {osbot_utils-2.60.0 → osbot_utils-2.62.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.60.0
3
+ Version: 2.62.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.60.0-blue)
26
+ ![Current Release](https://img.shields.io/badge/release-v2.62.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.60.0-blue)
5
+ ![Current Release](https://img.shields.io/badge/release-v2.62.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,6 @@
1
+ from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
1
2
 
2
-
3
- class Random_Guid(str):
3
+ class Random_Guid(Type_Safe__Primitive, str):
4
4
  def __new__(cls, value=None):
5
5
  from osbot_utils.utils.Misc import random_guid, is_guid
6
6
 
@@ -10,5 +10,5 @@ class Random_Guid(str):
10
10
  return str.__new__(cls, value)
11
11
  raise ValueError(f'in Random_Guid: value provided was not a Guid: {value}')
12
12
 
13
- def __str__(self):
14
- return self
13
+ # def __str__(self):
14
+ # return self
@@ -1,14 +1,18 @@
1
+ from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
1
2
  from osbot_utils.utils.Misc import random_id_short
2
3
  from osbot_utils.utils.Str import safe_id
3
4
 
4
5
  SAFE_ID__MAX_LENGTH = 512
5
6
 
6
- class Safe_Id(str):
7
+ class Safe_Id(Type_Safe__Primitive, str):
7
8
  def __new__(cls, value=None, max_length=SAFE_ID__MAX_LENGTH):
8
9
  if value is None:
9
10
  value = safe_id(random_id_short('safe-id'))
10
11
  sanitized_value = safe_id(value, max_length=max_length)
11
12
  return str.__new__(cls, sanitized_value)
12
13
 
13
- def __str__(self):
14
- return self
14
+ # def __str__(self):
15
+ # return self
16
+
17
+
18
+ # note: here is the regex applied on safe_id: REGEX__SAFE_ID_REGEX = re.compile(r'[^a-zA-Z0-9_-]')
@@ -1,5 +1,6 @@
1
+ from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
1
2
 
2
- class Timestamp_Now(int):
3
+ class Timestamp_Now(Type_Safe__Primitive, int):
3
4
  def __new__(cls, value=None):
4
5
  from osbot_utils.utils.Misc import timestamp_now
5
6
 
@@ -1,8 +1,10 @@
1
1
  import math
2
- from decimal import Decimal, ROUND_HALF_UP, InvalidOperation
3
- from typing import Optional, Union
2
+ from decimal import Decimal, ROUND_HALF_UP, InvalidOperation
3
+ from typing import Optional, Union
4
+ from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
4
5
 
5
- class Safe_Float(float): # Base class for type-safe floats with validation rules
6
+
7
+ class Safe_Float(Type_Safe__Primitive, float): # Base class for type-safe floats with validation rules
6
8
 
7
9
  min_value : Optional[float] = None
8
10
  max_value : Optional[float] = None
@@ -1,9 +1,9 @@
1
- from typing import Optional, Union
1
+ from typing import Optional, Union
2
+ from osbot_utils.helpers.safe_float.Safe_Float import Safe_Float
3
+ from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
2
4
 
3
- from osbot_utils.helpers.safe_float.Safe_Float import Safe_Float
4
5
 
5
-
6
- class Safe_Int(int): # Base class for type-safe integers with validation rules
6
+ class Safe_Int(Type_Safe__Primitive, int): # Base class for type-safe integers with validation rules
7
7
 
8
8
  min_value : Optional[int] = None # Minimum allowed value (inclusive)
9
9
  max_value : Optional[int] = None # Maximum allowed value (inclusive)
@@ -1,6 +1,6 @@
1
1
  from osbot_utils.helpers.safe_int.Safe_Int import Safe_Int
2
2
 
3
- class Safe_Int__UInt(Safe_Int): # Unsigned Integer - only accepts non-negative integer values
3
+ class Safe_UInt(Safe_Int): # Unsigned Integer - only accepts non-negative integer values
4
4
 
5
5
  min_value = 0 # Unsigned means >= 0
6
6
  max_value = None # No upper limit by default
@@ -0,0 +1,10 @@
1
+ from osbot_utils.helpers.safe_int.Safe_UInt import Safe_UInt
2
+
3
+ TYPE_SAFE_UINT__BYTE__MIN_VALUE = 0
4
+ TYPE_SAFE_UINT__BYTE__MAX_VALUE = 255
5
+
6
+ class Safe_UInt__Byte(Safe_UInt): # Single byte value (0-255)
7
+
8
+ min_value = TYPE_SAFE_UINT__BYTE__MIN_VALUE
9
+ max_value = TYPE_SAFE_UINT__BYTE__MAX_VALUE
10
+ allow_bool = False
@@ -0,0 +1,19 @@
1
+ from osbot_utils.helpers.safe_int.Safe_UInt import Safe_UInt
2
+
3
+ TYPE_SAFE_UINT__FILE_SIZE__MIN_VALUE = 0
4
+ TYPE_SAFE_UINT__FILE_SIZE__MAX_VALUE = 2 ** 63 - 1 # Max file size on most systems
5
+
6
+ class Safe_UInt__FileSize(Safe_UInt): # File size in bytes
7
+
8
+ min_value = TYPE_SAFE_UINT__FILE_SIZE__MIN_VALUE
9
+ max_value = TYPE_SAFE_UINT__FILE_SIZE__MAX_VALUE
10
+ allow_bool = False
11
+
12
+ def to_kb(self) -> float:
13
+ return self / 1024
14
+
15
+ def to_mb(self) -> float:
16
+ return self / (1024 * 1024)
17
+
18
+ def to_gb(self) -> float:
19
+ return self / (1024 * 1024 * 1024)
@@ -0,0 +1,10 @@
1
+ from osbot_utils.helpers.safe_int.Safe_UInt import Safe_UInt
2
+
3
+ TYPE_SAFE_UINT__PERCENTAGE__MIN_VALUE = 0
4
+ TYPE_SAFE_UINT__PERCENTAGE__MAX_VALUE = 100
5
+
6
+ class Safe_UInt__Percentage(Safe_UInt): # Percentage value (0-100)
7
+
8
+ min_value = TYPE_SAFE_UINT__PERCENTAGE__MIN_VALUE
9
+ max_value = TYPE_SAFE_UINT__PERCENTAGE__MAX_VALUE
10
+ allow_bool = False
@@ -0,0 +1,11 @@
1
+ from osbot_utils.helpers.safe_int.Safe_UInt import Safe_UInt
2
+
3
+ TYPE_SAFE_UINT__PORT__MIN_VALUE = 0
4
+ TYPE_SAFE_UINT__PORT__MAX_VALUE = 65535
5
+
6
+ class Safe_UInt__Port(Safe_UInt): # Network port number (0-65535)
7
+
8
+ min_value = TYPE_SAFE_UINT__PORT__MIN_VALUE
9
+ max_value = TYPE_SAFE_UINT__PORT__MAX_VALUE
10
+ allow_bool = False
11
+ allow_none = False # don't allow 0 as port value since that is a really weird value for a port
@@ -1,10 +1,11 @@
1
1
  import re
2
- from typing import Optional
2
+ from typing import Optional
3
+ from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
3
4
 
4
5
  TYPE_SAFE__STR__REGEX__SAFE_STR = re.compile(r'[^a-zA-Z0-9]') # Only allow alphanumerics and numbers
5
6
  TYPE_SAFE__STR__MAX_LENGTH = 512
6
7
 
7
- class Safe_Str(str):
8
+ class Safe_Str(Type_Safe__Primitive, str):
8
9
  max_length : int = TYPE_SAFE__STR__MAX_LENGTH
9
10
  regex : re.Pattern = TYPE_SAFE__STR__REGEX__SAFE_STR
10
11
  replacement_char : str = '_'
@@ -104,8 +104,25 @@ class Type_Safe__Base:
104
104
  actual_type_name = type_str(type(item))
105
105
  raise TypeError(f"Expected '{expected_type_name}', but got '{actual_type_name}'")
106
106
 
107
- # def json(self):
108
- # pass
107
+ def try_convert(self, value, expected_type): # Try to convert value to expected type using Type_Safe conversion logic.
108
+
109
+ if expected_type is Any: # Handle Any type
110
+ return value
111
+
112
+ origin = type_safe_cache.get_origin(expected_type) # Handle subscripted generics (like Callable, Union, etc.)
113
+ if origin is not None:
114
+ return value # Can't convert generic types, let type check handle it
115
+
116
+ if isinstance(value, expected_type): # If already correct type, return as-is
117
+ return value
118
+
119
+ if isinstance(expected_type, type) and type(value) in [str, int, float]: # For types that are subclasses of built-ins (like Safe_Id extends str)
120
+ if issubclass(expected_type, type(value)): # Only convert if the value's type is a base class of expected_type. e.g., str → Safe_Id (ok), but not int → str (not ok)
121
+ return expected_type(value) # convert value to expected_type
122
+
123
+
124
+ # Return original if no conversion possible
125
+ return value
109
126
 
110
127
  # todo: see if we should/can move this to the Objects.py file
111
128
  def type_str(tp):
@@ -1,4 +1,5 @@
1
1
  from typing import Type
2
+ from osbot_utils.type_safe.Type_Safe__List import Type_Safe__List
2
3
  from osbot_utils.type_safe.Type_Safe__Base import Type_Safe__Base
3
4
 
4
5
  class Type_Safe__Dict(Type_Safe__Base, dict):
@@ -8,15 +9,22 @@ class Type_Safe__Dict(Type_Safe__Base, dict):
8
9
  self.expected_key_type = expected_key_type
9
10
  self.expected_value_type = expected_value_type
10
11
 
11
- def __setitem__(self, key, value): # Check type-safety before allowing assignment.
12
+ def __getitem__(self, key):
13
+ try:
14
+ return super().__getitem__(key) # First try direct lookup
15
+ except KeyError:
16
+ converted_key = self.try_convert(key, self.expected_key_type) # Try converting the key
17
+ return super().__getitem__(converted_key) # and compare again
18
+
19
+ def __setitem__(self, key, value): # Check type-safety before allowing assignment.
20
+ key = self.try_convert(key , self.expected_key_type )
21
+ value = self.try_convert(value, self.expected_value_type)
12
22
  self.is_instance_of_type(key , self.expected_key_type)
13
23
  self.is_instance_of_type(value, self.expected_value_type)
14
24
  super().__setitem__(key, value)
15
25
 
16
- # def __repr__(self):
17
- # key_type_name = type_str(self.expected_key_type)
18
- # value_type_name = type_str(self.expected_value_type)
19
- # return f"dict[{key_type_name}, {value_type_name}] with {len(self)} entries"
26
+ def __enter__(self): return self
27
+ def __exit__ (self, type, value, traceback): pass
20
28
 
21
29
  def json(self): # Convert the dictionary to a JSON-serializable format.
22
30
  from osbot_utils.type_safe.Type_Safe import Type_Safe # can only import this here to avoid circular imports
@@ -38,3 +46,9 @@ class Type_Safe__Dict(Type_Safe__Base, dict):
38
46
  else: # Regular values can be used as-is
39
47
  result[key] = value
40
48
  return result
49
+
50
+ def keys(self) -> Type_Safe__List:
51
+ return Type_Safe__List(self.expected_key_type, super().keys())
52
+
53
+ def values(self) -> Type_Safe__List:
54
+ return Type_Safe__List(self.expected_value_type, super().values())
@@ -10,6 +10,9 @@ class Type_Safe__List(Type_Safe__Base, list):
10
10
  expected_type_name = type_str(self.expected_type)
11
11
  return f"list[{expected_type_name}] with {len(self)} elements"
12
12
 
13
+ def __enter__(self): return self
14
+ def __exit__ (self, type, value, traceback): pass
15
+
13
16
  def append(self, item):
14
17
  from osbot_utils.type_safe.Type_Safe import Type_Safe
15
18
  if type(self.expected_type) is type and issubclass(self.expected_type, Type_Safe) and type(item) is dict: # if self.expected_type is Type_Safe and we have a dict
@@ -0,0 +1,28 @@
1
+ class Type_Safe__Primitive:
2
+
3
+ __primitive_base__ = None # Cache the primitive base type at class level
4
+
5
+ def __init_subclass__(cls, **kwargs):
6
+ super().__init_subclass__(**kwargs)
7
+ for base in cls.__mro__: # Find and cache the primitive base type when the class is created
8
+ if base in (str, int, float): # for now, we only support str, int, float
9
+ cls.__primitive_base__ = base
10
+ break
11
+
12
+ def __eq__(self, other):
13
+ if type(self) is type(other): # Same type → compare values
14
+ return super().__eq__(other)
15
+ if self.__primitive_base__ and type(other) is self.__primitive_base__: # Compare with cached primitive base type
16
+ return super().__eq__(other)
17
+ return False # Different types → not equal
18
+
19
+ def __ne__(self, other):
20
+ return not self.__eq__(other)
21
+
22
+ def __hash__(self): # Include type in hash to maintain hash/eq contract , This works for str, int, float subclasses
23
+ return hash((type(self).__name__, super().__hash__()))
24
+
25
+ def __repr__(self): # Enhanced repr to show type information in assertions
26
+ value_repr = super().__repr__()
27
+ return f"{type(self).__name__}({value_repr})"
28
+
@@ -4,6 +4,7 @@ import types
4
4
  import typing
5
5
  from enum import EnumMeta
6
6
  from typing import Any, Annotated, Optional, get_args, get_origin, ForwardRef, Type, Dict, _GenericAlias
7
+ from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
7
8
  from osbot_utils.type_safe.shared.Type_Safe__Annotations import type_safe_annotations
8
9
  from osbot_utils.type_safe.shared.Type_Safe__Cache import type_safe_cache
9
10
  from osbot_utils.type_safe.shared.Type_Safe__Shared__Variables import IMMUTABLE_TYPES
@@ -33,6 +34,9 @@ class Type_Safe__Validation:
33
34
  return True
34
35
  if target_type is typing.Any:
35
36
  return True
37
+ if isinstance(target_type, type) and issubclass(target_type,Type_Safe__Primitive):
38
+ if source_type in (int, float, str):
39
+ return True
36
40
  return False
37
41
 
38
42
  def are_types_magic_mock(self, source_type, target_type):
@@ -277,7 +281,7 @@ class Type_Safe__Validation:
277
281
  actual_type = value
278
282
  else:
279
283
  actual_type = type(value)
280
- raise ValueError(f"Invalid type for attribute '{name}'. Expected '{expected_type}' but got '{actual_type}'")
284
+ raise ValueError(f"Invalid type for attribute '{name}'. Expected '{expected_type}' but got '{actual_type}'") from None
281
285
 
282
286
  # todo: see if need to add cache support to this method (it looks like this method is not called very often)
283
287
  def validate_type_immutability(self, var_name: str, var_type: Any) -> None: # Validates that type is immutable or in supported format
@@ -1,4 +1,5 @@
1
1
  from typing import get_origin, Annotated, get_args
2
+ from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
2
3
  from osbot_utils.type_safe.shared.Type_Safe__Cache import type_safe_cache
3
4
  from osbot_utils.type_safe.shared.Type_Safe__Convert import type_safe_convert
4
5
  from osbot_utils.type_safe.shared.Type_Safe__Validation import type_safe_validation
@@ -9,7 +10,9 @@ class Type_Safe__Step__Set_Attr:
9
10
  def resolve_value(self, _self, annotations, name, value):
10
11
  if type(value) is dict:
11
12
  value = self.resolve_value__dict(_self, name, value)
12
- elif type(value) in [int, str]: # for now only a small number of str and int classes are supported (until we understand the full implications of this)
13
+ elif isinstance(annotations.get(name), type) and issubclass(annotations.get(name), Type_Safe__Primitive) and type(value) in (int, str, float):
14
+ return annotations.get(name)(value)
15
+ elif type(value) in (int, str): # for now only a small number of str and int classes are supported (until we understand the full implications of this)
13
16
  value = self.resolve_value__int_str(_self, name, value)
14
17
  else:
15
18
  value = self.resolve_value__from_origin(value)
@@ -272,7 +272,9 @@ def serialize_to_dict(obj):
272
272
  from enum import Enum
273
273
  from typing import List
274
274
 
275
- if isinstance(obj, (str, int, float, bool, bytes, Decimal)) or obj is None: # todo: add support for objects like datetime
275
+ if hasattr(obj, '__primitive_base__') and isinstance(obj, (str, int, float)):
276
+ return obj.__primitive_base__(obj)
277
+ elif isinstance(obj, (str, int, float, bool, bytes, Decimal)) or obj is None: # todo: add support for objects like datetime
276
278
  return obj
277
279
  elif isinstance(obj, Enum):
278
280
  return obj.name
@@ -0,0 +1 @@
1
+ v2.62.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "osbot_utils"
3
- version = "v2.60.0"
3
+ version = "v2.62.0"
4
4
  description = "OWASP Security Bot - Utils"
5
5
  authors = ["Dinis Cruz <dinis.cruz@owasp.org>"]
6
6
  license = "MIT"
@@ -1,11 +0,0 @@
1
- from osbot_utils.helpers.safe_int.Safe_Int import Safe_Int
2
-
3
- TYPE_SAFE_INT__BYTE__MIN_VALUE = 0
4
- TYPE_SAFE_INT__BYTE__MAX_VALUE = 255
5
-
6
- class Safe_Int__Byte(Safe_Int):
7
- """Single byte value (0-255)"""
8
-
9
- min_value = TYPE_SAFE_INT__BYTE__MIN_VALUE
10
- max_value = TYPE_SAFE_INT__BYTE__MAX_VALUE
11
- allow_bool = False
@@ -1,19 +0,0 @@
1
- from osbot_utils.helpers.safe_int.Safe_Int import Safe_Int
2
-
3
- TYPE_SAFE_INT__FILE_SIZE__MIN_VALUE = 0
4
- TYPE_SAFE_INT__FILE_SIZE__MAX_VALUE = 2**63 - 1 # Max file size on most systems
5
-
6
- class Safe_Int__FileSize(Safe_Int): # File size in bytes
7
-
8
- min_value = TYPE_SAFE_INT__FILE_SIZE__MIN_VALUE
9
- max_value = TYPE_SAFE_INT__FILE_SIZE__MAX_VALUE
10
- allow_bool = False
11
-
12
- def to_kb(self) -> float:
13
- return self / 1024
14
-
15
- def to_mb(self) -> float:
16
- return self / (1024 * 1024)
17
-
18
- def to_gb(self) -> float:
19
- return self / (1024 * 1024 * 1024)
@@ -1,10 +0,0 @@
1
- from osbot_utils.helpers.safe_int.Safe_Int import Safe_Int
2
-
3
- TYPE_SAFE_INT__PERCENTAGE__MIN_VALUE = 0
4
- TYPE_SAFE_INT__PERCENTAGE__MAX_VALUE = 100
5
-
6
- class Safe_Int__Percentage(Safe_Int): # Percentage value (0-100)
7
-
8
- min_value = TYPE_SAFE_INT__PERCENTAGE__MIN_VALUE
9
- max_value = TYPE_SAFE_INT__PERCENTAGE__MAX_VALUE
10
- allow_bool = False
@@ -1,11 +0,0 @@
1
- from osbot_utils.helpers.safe_int.Safe_Int import Safe_Int
2
-
3
- TYPE_SAFE_INT__PORT__MIN_VALUE = 0
4
- TYPE_SAFE_INT__PORT__MAX_VALUE = 65535
5
-
6
- class Safe_Int__Port(Safe_Int): # Network port number (0-65535)
7
-
8
- min_value = TYPE_SAFE_INT__PORT__MIN_VALUE
9
- max_value = TYPE_SAFE_INT__PORT__MAX_VALUE
10
- allow_bool = False
11
- allow_none = False # don't allow 0 as port value since that is a really weird value for a port
@@ -1 +0,0 @@
1
- v2.60.0
File without changes