osbot-utils 1.28.0__tar.gz → 1.30.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 (294) hide show
  1. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/PKG-INFO +2 -2
  2. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/README.md +1 -1
  3. osbot_utils-1.30.0/osbot_utils/helpers/Hashicorp_Secrets.py +101 -0
  4. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/Zip_Bytes.py +34 -8
  5. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/trace/Trace_Call.py +2 -2
  6. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Temp_Folder.py +7 -0
  7. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Env.py +2 -2
  8. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Files.py +1 -1
  9. osbot_utils-1.30.0/osbot_utils/utils/Regex.py +25 -0
  10. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Zip.py +4 -1
  11. osbot_utils-1.30.0/osbot_utils/version +1 -0
  12. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/pyproject.toml +1 -1
  13. osbot_utils-1.28.0/osbot_utils/version +0 -1
  14. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/LICENSE +0 -0
  15. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/__init__.py +0 -0
  16. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
  17. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
  18. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
  19. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/base_classes/Type_Safe.py +0 -0
  20. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/base_classes/Type_Safe__List.py +0 -0
  21. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/base_classes/__init__.py +0 -0
  22. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/context_managers/__init__.py +0 -0
  23. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/context_managers/capture_duration.py +0 -0
  24. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
  25. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/__init__.py +0 -0
  26. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/classes/__init__.py +0 -0
  27. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/classes/singleton.py +0 -0
  28. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/lists/__init__.py +0 -0
  29. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
  30. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/lists/group_by.py +0 -0
  31. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/lists/index_by.py +0 -0
  32. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/methods/__init__.py +0 -0
  33. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/methods/cache.py +0 -0
  34. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
  35. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
  36. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
  37. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
  38. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
  39. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/methods/catch.py +0 -0
  40. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/methods/context.py +0 -0
  41. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
  42. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
  43. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
  44. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
  45. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
  46. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
  47. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/fluent/Fluent_List.py +0 -0
  48. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/fluent/__init__.py +0 -0
  49. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/__init__.py +0 -0
  50. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mermaid/Mermaid.py +0 -0
  51. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -0
  52. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -0
  53. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -0
  54. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -0
  55. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -0
  56. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -0
  57. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -0
  58. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -0
  59. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -0
  60. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -0
  61. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -0
  62. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mgraph/MGraph.py +0 -0
  63. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -0
  64. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -0
  65. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -0
  66. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -0
  67. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -0
  68. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -0
  69. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mgraph/MGraphs.py +0 -0
  70. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/graphs/mgraph/__init__.py +0 -0
  71. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/CFormat.py +0 -0
  72. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/CPrint.py +0 -0
  73. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
  74. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/Local_Cache.py +0 -0
  75. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/Local_Caches.py +0 -0
  76. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/Print_Table.py +0 -0
  77. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/Python_Audit.py +0 -0
  78. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/Random_Seed.py +0 -0
  79. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/Type_Registry.py +0 -0
  80. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/__init__.py +0 -0
  81. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/Ast.py +0 -0
  82. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
  83. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
  84. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
  85. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
  86. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
  87. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
  88. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
  89. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/__init__.py +0 -0
  90. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
  91. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
  92. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
  93. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
  94. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
  95. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
  96. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
  97. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
  98. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
  99. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
  100. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
  101. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
  102. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
  103. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
  104. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
  105. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
  106. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
  107. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
  108. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
  109. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
  110. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
  111. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
  112. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
  113. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
  114. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
  115. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
  116. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
  117. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
  118. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
  119. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
  120. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
  121. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
  122. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
  123. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
  124. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
  125. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
  126. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
  127. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
  128. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
  129. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
  130. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
  131. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
  132. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
  133. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
  134. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
  135. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
  136. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
  137. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
  138. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
  139. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
  140. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
  141. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
  142. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
  143. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
  144. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
  145. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
  146. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
  147. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
  148. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
  149. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
  150. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
  151. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
  152. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
  153. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
  154. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
  155. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
  156. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
  157. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
  158. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
  159. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
  160. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
  161. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
  162. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
  163. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
  164. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
  165. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/flows/Flow.py +0 -0
  166. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/flows/Task.py +0 -0
  167. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/flows/__init__.py +0 -0
  168. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
  169. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
  170. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
  171. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
  172. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
  173. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
  174. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
  175. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
  176. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
  177. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
  178. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
  179. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
  180. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
  181. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
  182. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/html/__init__.py +0 -0
  183. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
  184. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
  185. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
  186. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
  187. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
  188. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
  189. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
  190. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
  191. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
  192. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
  193. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
  194. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
  195. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
  196. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
  197. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
  198. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
  199. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
  200. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
  201. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
  202. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
  203. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
  204. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
  205. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
  206. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
  207. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
  208. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
  209. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
  210. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
  211. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
  212. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
  213. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
  214. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
  215. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
  216. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
  217. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
  218. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
  219. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
  220. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
  221. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
  222. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
  223. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
  224. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
  225. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
  226. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
  227. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
  228. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
  229. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
  230. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
  231. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
  232. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
  233. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
  234. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ssh/SSH.py +0 -0
  235. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
  236. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ssh/SSH__Execute.py +0 -0
  237. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
  238. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
  239. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +0 -0
  240. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
  241. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
  242. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
  243. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
  244. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -0
  245. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
  246. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
  247. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
  248. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
  249. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
  250. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
  251. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
  252. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
  253. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/helpers/trace/__init__.py +0 -0
  254. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Catch.py +0 -0
  255. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Duration.py +0 -0
  256. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Hook_Method.py +0 -0
  257. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
  258. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Log_To_String.py +0 -0
  259. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Logging.py +0 -0
  260. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Patch_Print.py +0 -0
  261. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Profiler.py +0 -0
  262. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Pytest.py +0 -0
  263. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Stderr.py +0 -0
  264. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Stdout.py +0 -0
  265. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Temp_Env_Vars.py +0 -0
  266. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Temp_File.py +0 -0
  267. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
  268. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
  269. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Temp_Zip.py +0 -0
  270. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
  271. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Unit_Test.py +0 -0
  272. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/Unzip_File.py +0 -0
  273. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/testing/__init__.py +0 -0
  274. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Assert.py +0 -0
  275. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Call_Stack.py +0 -0
  276. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Csv.py +0 -0
  277. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Dev.py +0 -0
  278. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Exceptions.py +0 -0
  279. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Functions.py +0 -0
  280. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Http.py +0 -0
  281. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Int.py +0 -0
  282. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Json.py +0 -0
  283. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Json_Cache.py +0 -0
  284. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Lists.py +0 -0
  285. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Misc.py +0 -0
  286. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Objects.py +0 -0
  287. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Png.py +0 -0
  288. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Process.py +0 -0
  289. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Python_Logger.py +0 -0
  290. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Status.py +0 -0
  291. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Str.py +0 -0
  292. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Toml.py +0 -0
  293. {osbot_utils-1.28.0 → osbot_utils-1.30.0}/osbot_utils/utils/Version.py +0 -0
  294. {osbot_utils-1.28.0 → osbot_utils-1.30.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.28.0
3
+ Version: 1.30.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.28.0-blue)
25
+ ![Current Release](https://img.shields.io/badge/release-v1.30.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.28.0-blue)
5
+ ![Current Release](https://img.shields.io/badge/release-v1.30.0-blue)
6
6
  [![codecov](https://codecov.io/gh/owasp-sbot/OSBot-Utils/graph/badge.svg?token=GNVW0COX1N)](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
7
7
 
8
8
 
@@ -0,0 +1,101 @@
1
+ from osbot_utils.utils.Env import get_env
2
+ from osbot_utils.base_classes.Type_Safe import Type_Safe
3
+ from osbot_utils.utils.Lists import list_index_by
4
+ from osbot_utils.utils.Misc import list_set
5
+
6
+ ENV_VAR__HCP_ACCESS_TOKEN = 'HCP_ACCESS_TOKEN'
7
+ ENV_VAR__HCP_APP_NAME = 'HCP_APP_NAME'
8
+ ENV_VAR__HCP_CLIENT_ID = 'HCP_CLIENT_ID'
9
+ ENV_VAR__HCP_CLIENT_SECRET = 'HCP_CLIENT_SECRET'
10
+ ENV_VAR__HCP_ORGANIZATION_ID = 'HCP_ORGANIZATION_ID'
11
+ ENV_VAR__HCP_PROJECT_ID = 'HCP_PROJECT_ID'
12
+
13
+ class Hashicorp_Secrets(Type_Safe):
14
+
15
+ # helper methods
16
+ def hcp__auth_details(self):
17
+ client_id = get_env(ENV_VAR__HCP_CLIENT_ID)
18
+ client_secret = get_env(ENV_VAR__HCP_CLIENT_SECRET)
19
+ return client_id, client_secret
20
+
21
+ def hcp__access_token(self): # todo: refactor to remove dependency on requests package (which is not part of the OSBOt_utils project)
22
+ import requests
23
+
24
+ access_token = get_env(ENV_VAR__HCP_ACCESS_TOKEN) # todo: add better way to detect when the access token as expired
25
+ if not access_token:
26
+
27
+ client_id, client_secret = self.hcp__auth_details()
28
+ token_url = 'https://auth.idp.hashicorp.com/oauth2/token'
29
+ payload = { 'client_id' : client_id ,
30
+ 'client_secret' : client_secret ,
31
+ 'grant_type' : 'client_credentials' ,
32
+ 'audience' : 'https://api.hashicorp.cloud' }
33
+
34
+ response = requests.post(token_url, data=payload) # todo: refactor into requests_post method
35
+ if response.status_code == 200:
36
+ access_token = response.json().get('access_token')
37
+ return access_token
38
+
39
+ def hcp__enabled(self):
40
+ if self.hcp__organization_id():
41
+ if self.hcp__project_id():
42
+ return True
43
+ return False
44
+
45
+ def hcp__app_name(self):
46
+ return get_env(ENV_VAR__HCP_APP_NAME)
47
+
48
+ def hcp__organization_id(self):
49
+ return get_env(ENV_VAR__HCP_ORGANIZATION_ID)
50
+
51
+ def hcp__project_id(self):
52
+ return get_env(ENV_VAR__HCP_PROJECT_ID)
53
+
54
+ def requests_get(self, path, data_field=None):
55
+ import requests
56
+
57
+ organization_id = self.hcp__organization_id()
58
+ project_id = self.hcp__project_id()
59
+ headers = {'Authorization': f"Bearer { self.hcp__access_token()}" }
60
+ url = f"https://api.cloud.hashicorp.com/secrets/2023-06-13/organizations/{organization_id}/projects/{project_id}/{path}"
61
+ response = requests.get(url, headers=headers)
62
+ if response.status_code == 200:
63
+ json_data = response.json()
64
+ if data_field is None:
65
+ data_field = path
66
+ return json_data.get(data_field)
67
+ return {}
68
+
69
+ # API methods
70
+ def app_secrets(self, app_name=None):
71
+ if app_name is None:
72
+ app_name = self.hcp__app_name()
73
+ path_secrets = f'apps/{app_name}/secrets'
74
+ app_secrets = self.requests_get(path_secrets, 'secrets')
75
+ return app_secrets
76
+
77
+ def app_secrets_open(self, app_name=None):
78
+ if app_name is None:
79
+ app_name = self.hcp__app_name()
80
+ path_secrets = f'apps/{app_name}/open'
81
+ app_secrets = self.requests_get(path_secrets, 'secrets')
82
+ return app_secrets
83
+
84
+ def app_secrets_names(self, app_name=None):
85
+ app_secrets = self.app_secrets(app_name)
86
+ return list_set(list_index_by(app_secrets, 'name'))
87
+
88
+ def app_secrets_values(self, app_name=None):
89
+ secrets_values = {}
90
+ app_secrets = self.app_secrets_open(app_name)
91
+ for app_secret in app_secrets:
92
+ secret_name = app_secret.get('name' )
93
+ secret_value = app_secret.get('version', {}).get('value')
94
+ secrets_values[secret_name] = secret_value
95
+ return secrets_values
96
+
97
+
98
+
99
+ def apps(self):
100
+ return self.requests_get('apps')
101
+
@@ -1,16 +1,20 @@
1
1
  from osbot_utils.base_classes.Type_Safe import Type_Safe
2
2
  from osbot_utils.utils.Dev import pprint
3
3
  from osbot_utils.utils.Files import files_list, file_create_from_bytes, temp_file, parent_folder, parent_folder_create
4
+ from osbot_utils.utils.Regex import list__match_regex, list__match_regexes
4
5
  from osbot_utils.utils.Zip import zip_bytes_empty, zip_bytes__files, zip_bytes__add_file, zip_bytes__add_files, \
5
6
  zip_bytes__replace_files, zip_bytes__replace_file, zip_bytes__file_list, zip_bytes__file, \
6
- zip_bytes__add_file__from_disk, zip_bytes__add_files__from_disk, zip_files, zip_file__files
7
+ zip_bytes__add_file__from_disk, zip_bytes__add_files__from_disk, zip_files, zip_file__files, zip_bytes__remove_files
7
8
 
8
9
 
9
10
  class Zip_Bytes(Type_Safe):
10
- zip_bytes : bytes
11
+ zip_bytes : bytes = None
11
12
 
12
- def __enter__(self):
13
+ def __init__(self):
14
+ super().__init__()
13
15
  self.zip_bytes = zip_bytes_empty()
16
+
17
+ def __enter__(self):
14
18
  return self
15
19
 
16
20
  def __exit__(self, exc_type, exc_val, exc_tb):
@@ -20,7 +24,9 @@ class Zip_Bytes(Type_Safe):
20
24
  self.zip_bytes = zip_bytes__add_file(self.zip_bytes, file_path, file_contents)
21
25
  return self
22
26
 
23
- def add_file__from_disk(self, base_path, file_to_add):
27
+ def add_file__from_disk(self, file_to_add, base_path=None):
28
+ if base_path is None:
29
+ base_path = parent_folder(file_to_add)
24
30
  self.zip_bytes = zip_bytes__add_file__from_disk(self.zip_bytes, base_path, file_to_add)
25
31
  return self
26
32
 
@@ -28,14 +34,22 @@ class Zip_Bytes(Type_Safe):
28
34
  self.zip_bytes = zip_bytes__add_files(self.zip_bytes, files_to_add)
29
35
  return self
30
36
 
31
- def add_files__from_disk(self, base_path, files_to_add):
32
- self.zip_bytes = zip_bytes__add_files__from_disk(self.zip_bytes, base_path, files_to_add)
37
+ def add_files__from_disk(self, base_path, files_to_add, path_prefix=None):
38
+ self.zip_bytes = zip_bytes__add_files__from_disk(self.zip_bytes, base_path, files_to_add, path_prefix=path_prefix)
33
39
  return self
34
40
 
35
- def add_folder__from_disk(self, base_path, folder_to_add, pattern="*"):
36
- files_to_add = files_list(folder_to_add, pattern=pattern)
41
+ def add_folder__from_disk(self, folder_to_add, *patterns):
42
+ base_path = folder_to_add
43
+ all_files_in_folder = files_list(folder_to_add)
44
+ files_to_add = list__match_regexes(all_files_in_folder, *patterns)
37
45
  return self.add_files__from_disk(base_path, files_to_add)
38
46
 
47
+ def add_folder__from_disk__with_prefix(self, folder_to_add, path_prefix, *patterns):
48
+ base_path = folder_to_add
49
+ all_files_in_folder = files_list(folder_to_add)
50
+ files_to_add = list__match_regexes(all_files_in_folder, *patterns)
51
+ return self.add_files__from_disk(base_path, files_to_add, path_prefix=path_prefix)
52
+
39
53
  def add_from_zip_file(self, path_zip_file):
40
54
  files_to_add = zip_file__files(path_zip_file)
41
55
  self.add_files(files_to_add)
@@ -47,15 +61,27 @@ class Zip_Bytes(Type_Safe):
47
61
  def file(self, file_path):
48
62
  return zip_bytes__file(self.zip_bytes, file_path)
49
63
 
64
+ def file_paths(self):
65
+ return self.files_list()
66
+
50
67
  def files(self):
51
68
  return zip_bytes__files(self.zip_bytes)
52
69
 
53
70
  def files_list(self):
54
71
  return zip_bytes__file_list(self.zip_bytes)
55
72
 
73
+ def list(self):
74
+ return self.files_list()
75
+
56
76
  def print_files_list(self):
57
77
  pprint(self.files_list())
58
78
  return self
79
+
80
+ def remove_files(self, *patterns):
81
+ files_to_remove = list__match_regexes(self.files_list(), *patterns)
82
+ self.zip_bytes = zip_bytes__remove_files(self.zip_bytes, files_to_remove)
83
+ return self
84
+
59
85
  def replace_files(self, files_to_replace):
60
86
  self.zip_bytes = zip_bytes__replace_files(self.zip_bytes, files_to_replace)
61
87
  return self
@@ -11,8 +11,8 @@ from osbot_utils.helpers.trace.Trace_Call__View_Model import Trace_Call__V
11
11
 
12
12
 
13
13
  def trace_calls(title = None , print_traces = True , show_locals = False, source_code = False ,
14
- ignore = None , include = None , show_path = False, duration_bigger_than = 0 , trace_depth=0,
15
- max_string = None , show_types = False, show_duration = False ,# show_caller = False , # todo: add back when show_caller is working again
14
+ ignore = None , include = None , show_path = False, duration_bigger_than = 0 ,
15
+ trace_depth = 0 , max_string = None , show_types = False, show_duration = False , # show_caller = False , # todo: add back when show_caller is working again
16
16
  show_class = False, contains = None , show_internals = False, enabled = True ,
17
17
  extra_data = False, show_lines = False, print_lines = False, show_types_padding = None , duration_padding=None):
18
18
  def decorator(func):
@@ -96,6 +96,13 @@ class Temp_Folder:
96
96
  file_path = path_combine(self.full_path, target_file)
97
97
  return file_contents(file_path)
98
98
 
99
+ def files_contents(self):
100
+ result = {}
101
+ for file_path in self.files():
102
+ full_path = path_combine(self.full_path, file_path)
103
+ result[file_path] = file_contents(full_path)
104
+ return result
105
+
99
106
  def files(self, show_parent_folder=False, include_folders=False):
100
107
  all_files = files_recursive(self.path(), include_folders=include_folders)
101
108
  if show_parent_folder:
@@ -6,10 +6,10 @@ from osbot_utils.utils.Files import all_parent_folders, file_exists
6
6
  from osbot_utils.utils.Misc import list_set
7
7
  from osbot_utils.utils.Str import strip_quotes
8
8
 
9
- def env__home_root():
9
+ def env__home_root(): # todo: this should be refatored to be env__home__is__root
10
10
  return os.getenv('HOME') == '/root'
11
11
 
12
- def env__terminal_xterm():
12
+ def env__terminal_xterm(): # todo: this should be refatored to be env__terminal__is__xterm
13
13
  return os.getenv('TERM') == 'xterm'
14
14
 
15
15
  def env__not_terminal_xterm():
@@ -81,7 +81,7 @@ class Files:
81
81
  return glob.glob(path_pattern, recursive=recursive)
82
82
 
83
83
  @staticmethod
84
- def files(path, pattern= '*.*', only_files=True):
84
+ def files(path, pattern= '*', only_files=True):
85
85
  result = []
86
86
  for file in Path(path).rglob(pattern):
87
87
  if only_files and is_not_file(file):
@@ -0,0 +1,25 @@
1
+ import re
2
+
3
+ from osbot_utils.utils.Status import status_error
4
+
5
+
6
+ def list__match_regex(target, pattern):
7
+ return list__match_regexes(target, [pattern])
8
+
9
+ def list__match_regexes(target, *patterns):
10
+ if len (patterns) == 0:
11
+ return target
12
+ compiled_patterns = []
13
+ for pattern in patterns:
14
+ try:
15
+ compiled_patterns.append(re.compile(pattern)) # todo: find better way to handle regex errors
16
+ except Exception as error:
17
+ return status_error(message='Error compiling pattern: {pattern}', error=error)
18
+ matched_files = []
19
+ if target and type(target) is list:
20
+ for file in target:
21
+ for compiled_pattern in compiled_patterns:
22
+ if compiled_pattern.match(file):
23
+ matched_files.append(file)
24
+ break
25
+ return matched_files
@@ -52,14 +52,17 @@ def zip_bytes__add_file(zip_bytes, zip_file_path, file_contents):
52
52
  def zip_bytes__add_file__from_disk(zip_bytes, base_path, file_to_add):
53
53
  return zip_bytes__add_files__from_disk(zip_bytes, base_path, files_to_add=[file_to_add])
54
54
 
55
- def zip_bytes__add_files__from_disk(zip_bytes, base_path, files_to_add, replace_files=True):
55
+ def zip_bytes__add_files__from_disk(zip_bytes, base_path, files_to_add, replace_files=True, path_prefix=None):
56
56
  zip_files_to_add = {}
57
57
  if base_path[:-1] != '/':
58
58
  base_path += "/"
59
+
59
60
  for file_to_add in files_to_add:
60
61
  if file_exists(file_to_add):
61
62
  file_contents = file_contents_as_bytes(file_to_add)
62
63
  zip_file_path = file_to_add.replace(base_path, '')
64
+ if path_prefix:
65
+ zip_file_path = path_prefix + zip_file_path
63
66
  zip_files_to_add[zip_file_path] = file_contents
64
67
 
65
68
  if replace_files:
@@ -0,0 +1 @@
1
+ v1.30.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "osbot_utils"
3
- version = "v1.28.0"
3
+ version = "v1.30.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.28.0
File without changes