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.
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/PKG-INFO +2 -2
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/README.md +1 -1
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/Local_Cache.py +5 -1
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/SSH.py +11 -2
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/SSH__Execute.py +13 -4
- osbot_utils-1.23.0/osbot_utils/helpers/ssh/SSH__Linux__Amazon.py +14 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Env.py +11 -9
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Files.py +6 -1
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Misc.py +3 -0
- osbot_utils-1.23.0/osbot_utils/version +1 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/pyproject.toml +1 -1
- osbot_utils-1.21.0/osbot_utils/version +0 -1
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/LICENSE +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/base_classes/Cache_Pickle.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/base_classes/Kwargs_To_Disk.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/base_classes/Kwargs_To_Self.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/base_classes/Type_Safe.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/base_classes/Type_Safe__List.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/base_classes/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/context_managers/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/context_managers/capture_duration.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/context_managers/disable_root_loggers.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/classes/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/classes/singleton.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/lists/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/lists/filter_list.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/lists/group_by.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/lists/index_by.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/cache.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/cache_on_function.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/cache_on_self.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/cache_on_tmp.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/capture_exception.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/capture_status.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/catch.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/context.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/depreciated.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/function_type_check.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/obj_as_context.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/remove_return_value.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/required_fields.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/fluent/Fluent_Dict.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/fluent/Fluent_List.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/fluent/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/Mermaid.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/Mermaid__Edge.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/Mermaid__Graph.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/Mermaid__Node.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/Mermaid__Renderer.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Edge__Config.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Node__Config.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/configs/Mermaid__Render__Config.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/examples/Mermaid_Examples__FlowChart.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram_Direction.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/models/Mermaid__Diagram__Type.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph__Config.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph__Data.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph__Edge.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph__Node.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph__Serializer.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraphs.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/CFormat.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/CPrint.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/Dict_To_Attr.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/Local_Caches.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/Print_Table.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/Python_Audit.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/Random_Seed.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/Type_Registry.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Ast.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Ast_Base.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Ast_Data.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Ast_Load.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Ast_Merge.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Ast_Node.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Ast_Visit.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/Call_Tree.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Add.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Alias.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_And.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Argument.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Arguments.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Assert.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Assign.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Attribute.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Aug_Assign.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Bin_Op.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Bool_Op.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Break.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Call.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Class_Def.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Compare.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Constant.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Continue.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Dict.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Eq.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Expr.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_For.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Function_Def.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Gt.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_GtE.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_If.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_If_Exp.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Import.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Import_From.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_In.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Is.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Is_Not.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Keyword.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Lambda.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_List.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_List_Comp.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Load.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Lt.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_LtE.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Mod.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Module.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Mult.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Name.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Not.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Not_Eq.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Not_In.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Or.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Pass.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Pow.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Raise.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Return.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Set.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Slice.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Starred.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Store.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Sub.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Subscript.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Try.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Tuple.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Unary_Op.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_While.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_With.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_With_Item.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Yield.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Actions.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Config.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Data.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Row.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/Cache__Requests__Table.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/flows/Flow.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/flows/Task.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/flows/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Dict_To_Css.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Dict_To_Html.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Dict_To_Tags.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Html_To_Dict.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Html_To_Tag.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__Base.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__Body.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__Div.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__H.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__HR.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__Head.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__Html.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__Link.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/Tag__Style.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/html/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/Event__Queue.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/PubSub__Client.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/PubSub__Room.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/PubSub__Server.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/PubSub__Sqlite.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Connect.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Disconnect.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Join_Room.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Leave_Room.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__Event__Message.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/pubsub/schemas/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Sqlite__Cursor.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Sqlite__Database.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Sqlite__Field.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Sqlite__Globals.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Sqlite__Table.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Sqlite__Table__Create.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/Schema__Table__Requests.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Patch.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Sqlite.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__Cache__Requests__Table.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/cache/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/domains/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/domains/schemas/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/models/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/sample_data/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/sql_builder/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/sqlite/tables/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/SCP.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/SSH__Cache__Requests.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/SSH__Health_Check.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/SSH__Linux.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/SSH__Python.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/TestCase__SSH.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ssh/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Config.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Graph.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Handler.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Print_Lines.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Print_Traces.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Stack.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Stack_Node.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__Stats.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Call__View_Model.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/Trace_Files.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/trace/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Catch.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Duration.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Hook_Method.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Log_To_Queue.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Log_To_String.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Logging.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Patch_Print.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Profiler.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Pytest.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Stderr.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Stdout.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Temp_File.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Temp_Folder.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Temp_Sys_Path.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Temp_Web_Server.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Temp_Zip.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Temp_Zip_In_Memory.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Unit_Test.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/Unzip_File.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/testing/__init__.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Assert.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Call_Stack.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Csv.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Dev.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Exceptions.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Functions.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Http.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Int.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Json.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Json_Cache.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Lists.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Objects.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Png.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Process.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Python_Logger.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Status.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Str.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Toml.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Version.py +0 -0
- {osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/utils/Zip.py +0 -0
- {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.
|
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
|
-

|
26
26
|
[](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
|
-

|
6
6
|
[](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
|
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(
|
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
|
-
|
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
|
-
|
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
|
146
|
-
|
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:
|
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
|
-
|
85
|
-
|
86
|
-
|
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 +0,0 @@
|
|
1
|
-
v1.21.0
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/context_managers/disable_root_loggers.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/cache_on_function.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/capture_exception.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/function_type_check.py
RENAMED
File without changes
|
File without changes
|
{osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/decorators/methods/remove_return_value.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mermaid/models/Mermaid__Node__Shape.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/graphs/mgraph/MGraph__Random_Graphs.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Comprehension.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Except_Handler.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osbot_utils-1.21.0 → osbot_utils-1.23.0}/osbot_utils/helpers/ast/nodes/Ast_Generator_Exp.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|