osbot-utils 1.21.0__tar.gz → 1.23.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 (290) hide show
  1. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/PKG-INFO +2 -2
  2. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/README.md +1 -1
  3. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/Local_Cache.py +5 -1
  4. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/SSH.py +11 -2
  5. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/SSH__Execute.py +13 -4
  6. osbot_utils-1.23.0/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +14 -0
  7. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Env.py +11 -9
  8. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Files.py +6 -1
  9. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Misc.py +3 -0
  10. osbot_utils-1.23.0/osbot_utils/version +1 -0
  11. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/pyproject.toml +1 -1
  12. osbot_utils-1.21.0/osbot_utils/version +0 -1
  13. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/LICENSE +0 -0
  14. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/__init__.py +0 -0
  15. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
  16. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
  17. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
  18. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/base_classes/Type_Safe.py +0 -0
  19. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/base_classes/Type_Safe__List.py +0 -0
  20. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/base_classes/__init__.py +0 -0
  21. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/context_managers/__init__.py +0 -0
  22. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/context_managers/capture_duration.py +0 -0
  23. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
  24. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/__init__.py +0 -0
  25. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/classes/__init__.py +0 -0
  26. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/classes/singleton.py +0 -0
  27. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/lists/__init__.py +0 -0
  28. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
  29. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/lists/group_by.py +0 -0
  30. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/lists/index_by.py +0 -0
  31. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/__init__.py +0 -0
  32. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/cache.py +0 -0
  33. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
  34. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
  35. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
  36. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
  37. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
  38. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/catch.py +0 -0
  39. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/context.py +0 -0
  40. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
  41. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
  42. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
  43. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
  44. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
  45. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
  46. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/fluent/Fluent_List.py +0 -0
  47. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/fluent/__init__.py +0 -0
  48. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/__init__.py +0 -0
  49. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/Mermaid.py +0 -0
  50. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -0
  51. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -0
  52. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -0
  53. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -0
  54. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -0
  55. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -0
  56. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -0
  57. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -0
  58. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -0
  59. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -0
  60. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -0
  61. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph.py +0 -0
  62. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -0
  63. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -0
  64. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -0
  65. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -0
  66. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -0
  67. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -0
  68. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraphs.py +0 -0
  69. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/__init__.py +0 -0
  70. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/CFormat.py +0 -0
  71. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/CPrint.py +0 -0
  72. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
  73. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/Local_Caches.py +0 -0
  74. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/Print_Table.py +0 -0
  75. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/Python_Audit.py +0 -0
  76. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/Random_Seed.py +0 -0
  77. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/Type_Registry.py +0 -0
  78. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/__init__.py +0 -0
  79. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Ast.py +0 -0
  80. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
  81. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
  82. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
  83. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
  84. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
  85. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
  86. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
  87. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/__init__.py +0 -0
  88. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
  89. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
  90. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
  91. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
  92. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
  93. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
  94. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
  95. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
  96. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
  97. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
  98. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
  99. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
  100. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
  101. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
  102. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
  103. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
  104. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
  105. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
  106. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
  107. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
  108. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
  109. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
  110. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
  111. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
  112. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
  113. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
  114. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
  115. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
  116. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
  117. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
  118. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
  119. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
  120. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
  121. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
  122. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
  123. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
  124. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
  125. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
  126. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
  127. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
  128. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
  129. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
  130. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
  131. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
  132. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
  133. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
  134. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
  135. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
  136. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
  137. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
  138. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
  139. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
  140. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
  141. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
  142. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
  143. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
  144. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
  145. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
  146. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
  147. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
  148. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
  149. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
  150. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
  151. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
  152. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
  153. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
  154. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
  155. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
  156. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
  157. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
  158. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
  159. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
  160. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
  161. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
  162. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
  163. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/flows/Flow.py +0 -0
  164. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/flows/Task.py +0 -0
  165. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/flows/__init__.py +0 -0
  166. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
  167. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
  168. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
  169. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
  170. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
  171. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
  172. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
  173. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
  174. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
  175. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
  176. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
  177. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
  178. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
  179. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
  180. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/__init__.py +0 -0
  181. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
  182. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
  183. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
  184. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
  185. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
  186. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
  187. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
  188. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
  189. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
  190. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
  191. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
  192. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
  193. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
  194. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
  195. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
  196. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
  197. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
  198. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
  199. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
  200. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
  201. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
  202. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
  203. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
  204. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
  205. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
  206. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
  207. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
  208. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
  209. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
  210. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
  211. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
  212. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
  213. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
  214. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
  215. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
  216. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
  217. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
  218. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
  219. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
  220. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
  221. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
  222. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
  223. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
  224. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
  225. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
  226. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
  227. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
  228. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
  229. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
  230. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
  231. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
  232. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
  233. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
  234. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
  235. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
  236. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
  237. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
  238. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
  239. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
  240. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -0
  241. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
  242. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
  243. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
  244. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
  245. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
  246. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
  247. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
  248. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
  249. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/__init__.py +0 -0
  250. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Catch.py +0 -0
  251. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Duration.py +0 -0
  252. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Hook_Method.py +0 -0
  253. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
  254. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Log_To_String.py +0 -0
  255. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Logging.py +0 -0
  256. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Patch_Print.py +0 -0
  257. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Profiler.py +0 -0
  258. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Pytest.py +0 -0
  259. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Stderr.py +0 -0
  260. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Stdout.py +0 -0
  261. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Temp_File.py +0 -0
  262. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Temp_Folder.py +0 -0
  263. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
  264. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
  265. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Temp_Zip.py +0 -0
  266. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
  267. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Unit_Test.py +0 -0
  268. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Unzip_File.py +0 -0
  269. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/__init__.py +0 -0
  270. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Assert.py +0 -0
  271. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Call_Stack.py +0 -0
  272. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Csv.py +0 -0
  273. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Dev.py +0 -0
  274. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Exceptions.py +0 -0
  275. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Functions.py +0 -0
  276. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Http.py +0 -0
  277. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Int.py +0 -0
  278. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Json.py +0 -0
  279. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Json_Cache.py +0 -0
  280. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Lists.py +0 -0
  281. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Objects.py +0 -0
  282. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Png.py +0 -0
  283. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Process.py +0 -0
  284. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Python_Logger.py +0 -0
  285. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Status.py +0 -0
  286. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Str.py +0 -0
  287. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Toml.py +0 -0
  288. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Version.py +0 -0
  289. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Zip.py +0 -0
  290. {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: osbot_utils
3
- Version: 1.21.0
3
+ Version: 1.23.0
4
4
  Summary: OWASP Security Bot - Utils
5
5
  Home-page: https://github.com/owasp-sbot/OSBot-Utils
6
6
  License: MIT
@@ -22,7 +22,7 @@ Description-Content-Type: text/markdown
22
22
 
23
23
  Powerful Python util methods and classes that simplify common apis and tasks.
24
24
 
25
- ![Current Release](https://img.shields.io/badge/release-v1.21.0-blue)
25
+ ![Current Release](https://img.shields.io/badge/release-v1.23.0-blue)
26
26
  [![codecov](https://codecov.io/gh/owasp-sbot/OSBot-Utils/graph/badge.svg?token=GNVW0COX1N)](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
27
27
 
28
28
 
@@ -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-v1.21.0-blue)
5
+ ![Current Release](https://img.shields.io/badge/release-v1.23.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,7 +1,8 @@
1
1
  from osbot_utils.utils.Misc import list_set
2
2
  from osbot_utils.utils.Dev import pprint
3
3
  from osbot_utils.decorators.methods.cache_on_self import cache_on_self
4
- from osbot_utils.utils.Files import current_temp_folder, path_combine, create_folder, safe_file_name, file_exists, file_delete
4
+ from osbot_utils.utils.Files import current_temp_folder, path_combine, create_folder, safe_file_name, file_exists, \
5
+ file_delete, file_size
5
6
  from osbot_utils.utils.Json import json_save_file, json_load_file
6
7
 
7
8
 
@@ -32,6 +33,9 @@ class Local_Cache:
32
33
  def cache_exists(self):
33
34
  return file_exists(self.path_cache_file())
34
35
 
36
+ def cache_file_size(self):
37
+ return file_size(self.path_cache_file())
38
+
35
39
  def create(self):
36
40
  if not self.cache_exists():
37
41
  self.save()
@@ -1,16 +1,20 @@
1
1
  from osbot_utils.base_classes.Kwargs_To_Self import Kwargs_To_Self
2
+ from osbot_utils.base_classes.Type_Safe import Type_Safe
2
3
  from osbot_utils.decorators.methods.cache_on_self import cache_on_self
3
4
  from osbot_utils.helpers.ssh.SCP import SCP
4
5
  from osbot_utils.helpers.ssh.SSH__Execute import SSH__Execute
5
6
  from osbot_utils.helpers.ssh.SSH__Linux import SSH__Linux
7
+ from osbot_utils.helpers.ssh.SSH__Linux__Amazon import SSH__Linux__Amazon
6
8
  from osbot_utils.helpers.ssh.SSH__Python import SSH__Python
7
9
 
8
- class SSH(Kwargs_To_Self):
10
+ class SSH(Type_Safe): # todo: add ip_address to global vars here, and when that is done, add the wait_for_ssh method (that exists in EC2_Instance)
9
11
 
10
12
  def setup(self):
11
13
  self.ssh_execute().setup()
12
14
  return self
13
15
 
16
+ def exec(self,command):
17
+ return self.ssh_execute().execute_command(command)
14
18
  @cache_on_self
15
19
  def scp(self):
16
20
  kwargs = self.ssh_execute().__locals__() # get the current ssh config details
@@ -25,6 +29,11 @@ class SSH(Kwargs_To_Self):
25
29
  def ssh_linux(self):
26
30
  return SSH__Linux(ssh_execute = self.ssh_execute())
27
31
 
32
+ @cache_on_self
33
+ def ssh_linux_amazon(self):
34
+ return SSH__Linux__Amazon(ssh_execute=self.ssh_execute())
35
+
28
36
  @cache_on_self
29
37
  def ssh_python(self):
30
- return SSH__Python(ssh_execute = self.ssh_execute(), ssh_linux = self.ssh_linux())
38
+ return SSH__Python(ssh_execute = self.ssh_execute(), ssh_linux = self.ssh_linux())
39
+
@@ -21,6 +21,7 @@ class SSH__Execute(Type_Safe):
21
21
  ssh_key_file : str
22
22
  ssh_key_user : str
23
23
  strict_host_check : bool = False
24
+ print_after_exec : bool = False
24
25
 
25
26
  # execution & other commands # todo refactor into separate class
26
27
  def exec(self, command):
@@ -29,7 +30,7 @@ class SSH__Execute(Type_Safe):
29
30
  def exec__print(self, command):
30
31
  result = self.execute_command__return_stdout(command)
31
32
  self.print_header_for_command(command)
32
- print(result)
33
+ self.print_status__stderr__stdout(result)
33
34
  return result
34
35
 
35
36
  def execute_command(self, command):
@@ -38,13 +39,15 @@ class SSH__Execute(Type_Safe):
38
39
  with capture_duration() as duration:
39
40
  result = start_process("ssh", ssh_args) # execute command using subprocess.run(...)
40
41
  result['duration'] = duration.data()
42
+ if self.print_after_exec:
43
+ self.print_status__stderr__stdout(result)
41
44
  return result
42
45
  return status_error(error='in execute_command not all required vars were setup')
43
46
 
44
47
  def execute_command__print(self, command):
45
48
  self.print_header_for_command(command)
46
49
  result = self.execute_command(command)
47
- pprint(result)
50
+ self.print_status__stderr__stdout(result)
48
51
  return result
49
52
 
50
53
  def execute_ssh_args(self):
@@ -142,8 +145,14 @@ class SSH__Execute(Type_Safe):
142
145
  # pprint(self.ls(path))
143
146
  # return self
144
147
 
145
- def print_exec(self, command=''):
146
- return self.exec__print(command)
148
+ def print_status__stderr__stdout(self, result):
149
+ print()
150
+ print( '┌──────────────────────────────────────────')
151
+ print(f'├ command: {result.get("command") }')
152
+ print(f'│ status : {result.get("status" ).strip()}')
153
+ print(f'│ stderr : {result.get("stderr" ).strip()}')
154
+ print(f'│ stdout : {result.get("stdout" ).strip()}')
155
+ return self
147
156
 
148
157
  def print_header_for_command(self, command):
149
158
  print('\n')
@@ -0,0 +1,14 @@
1
+ from osbot_utils.helpers.ssh.SSH__Linux import SSH__Linux
2
+
3
+
4
+ class SSH__Linux__Amazon(SSH__Linux):
5
+
6
+ def install_python3(self):
7
+ execute_commands = ('sudo yum install -y python3.11 && '
8
+ 'curl -O https://bootstrap.pypa.io/get-pip.py && '
9
+ 'sudo python3.11 get-pip.py' )
10
+
11
+ return self.ssh_execute.execute_command__return_stdout(execute_commands)
12
+
13
+ def pip_install(self, package_name):
14
+ return self.ssh_execute.execute_command__return_stdout(f'pip3.11 install {package_name}')
@@ -63,30 +63,32 @@ def env_unload_from_file(path):
63
63
  if key in os.environ: # Remove the environment variable if it exists
64
64
  del os.environ[key]
65
65
 
66
+ def find_dotenv_file(start_path=None, env_file_to_find='.env'):
67
+ directories = all_parent_folders(path=start_path, include_path=True) # Define the possible directories to search for the .env file (which is this and all parent folders)
68
+ for directory in directories: # Iterate through the directories and load the .env file if found
69
+ env_path = os.path.join(directory,env_file_to_find) # Define the path to the .env file
70
+ if os.path.exists(env_path): # If we found one
71
+ return env_path # return the path to the .env file
72
+
66
73
  def in_github_action():
67
74
  return os.getenv('GITHUB_ACTIONS') == 'true'
68
75
 
69
76
  def in_python_debugger():
70
77
  if sys.gettrace() is not None: # Check for a trace function
71
78
  return True
72
-
73
79
  pycharm_hosted = os.getenv('PYCHARM_HOSTED') == '1' # Check for PyCharm specific environment variables and other potential indicators
74
80
  pydevd_load_values_async = os.getenv('PYDEVD_LOAD_VALUES_ASYNC') is not None
75
81
  if pycharm_hosted and pydevd_load_values_async:
76
82
  return True
77
-
78
83
  return False
79
84
 
80
85
  def load_dotenv(dotenv_path=None, override=False):
81
- if dotenv_path: # If a specific dotenv path is provided, load from it
86
+ if dotenv_path: # If a specific dotenv path is provided, load from it
82
87
  env_load_from_file(dotenv_path, override)
83
88
  else:
84
- directories = all_parent_folders(include_path=True) # Define the possible directories to search for the .env file (which is this and all parent folders)
85
- for directory in directories: # Iterate through the directories and load the .env file if found
86
- env_path = os.path.join(directory, '.env') # Define the path to the .env file
87
- if os.path.exists(env_path): # If we found one
88
- env_load_from_file(env_path, override) # Process it
89
- break # Stop after loading the first .env file # Stop after loading the first .env file
89
+ env_file = find_dotenv_file()
90
+ if env_file:
91
+ env_load_from_file(env_file, override) # Process it
90
92
 
91
93
 
92
94
  def not_in_github_action():
@@ -315,8 +315,10 @@ class Files:
315
315
  return abspath(join(parent_path,sub_path))
316
316
 
317
317
  @staticmethod
318
- def parent_folder(path):
318
+ def parent_folder(path, use_full_path=False):
319
319
  if path:
320
+ if use_full_path:
321
+ path = file_full_path(path)
320
322
  return os.path.dirname(path)
321
323
 
322
324
  @staticmethod
@@ -429,6 +431,8 @@ class Files:
429
431
  return path
430
432
 
431
433
  # todo: refactor the methods above into static methods (as bellow)
434
+ def absolute_path(path):
435
+ return abspath(path)
432
436
 
433
437
  def all_parent_folders(path=None, include_path=False):
434
438
  if path is None:
@@ -498,6 +502,7 @@ file_create_gz = Files.write_gz
498
502
  file_exists = Files.exists
499
503
  file_extension = Files.file_extension
500
504
  file_extension_fix = Files.file_extension_fix
505
+ file_full_path = absolute_path
501
506
  file_lines = Files.lines
502
507
  file_lines_gz = Files.lines_gz
503
508
  file_md5 = Files.contents_md5
@@ -384,6 +384,9 @@ def random_text(prefix:str=None,length:int=12, lowercase=False):
384
384
  def random_uuid():
385
385
  return str(uuid.uuid4())
386
386
 
387
+ def random_uuid_short():
388
+ return str(uuid.uuid4())[0:6]
389
+
387
390
  def remove(target_string, string_to_remove): # todo: refactor to str_*
388
391
  return replace(target_string, string_to_remove, '')
389
392
 
@@ -0,0 +1 @@
1
+ v1.23.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "osbot_utils"
3
- version = "v1.21.0"
3
+ version = "v1.23.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
- v1.21.0
File without changes