diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2021-02-05 12:27:32 +0100 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2021-02-05 12:27:32 +0100 |
| commit | 904a033ae738e1c351f8fef71e2ec2418fc4db3d (patch) | |
| tree | 3de4980582c109c4f0d19111a2b88eafec9b9b36 /minishell_test/sandbox.py | |
| parent | a3e983f78dc4cbcf6f75f78fa2b3c57e09cd1b2b (diff) | |
| download | minishell_test-904a033ae738e1c351f8fef71e2ec2418fc4db3d.tar.gz minishell_test-904a033ae738e1c351f8fef71e2ec2418fc4db3d.tar.bz2 minishell_test-904a033ae738e1c351f8fef71e2ec2418fc4db3d.zip | |
Renaming src -> minishell_test for package name, Renaming main.py -> __main__.py for package execution with python -m
Diffstat (limited to 'minishell_test/sandbox.py')
| -rw-r--r-- | minishell_test/sandbox.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/minishell_test/sandbox.py b/minishell_test/sandbox.py new file mode 100644 index 0000000..bd49d1e --- /dev/null +++ b/minishell_test/sandbox.py @@ -0,0 +1,48 @@ +# ############################################################################ # +# # +# ::: :::::::: # +# sandbox.py :+: :+: :+: # +# +:+ +:+ +:+ # +# By: charles <me@cacharle.xyz> +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2020/09/11 13:48:07 by charles #+# #+# # +# Updated: 2021/01/31 03:59:30 by charles ### ########.fr # +# # +# ############################################################################ # + +import os +import glob +import shutil +import subprocess +from contextlib import contextmanager + +import config + + +def create(): + """Create a new sandbox directory""" + try: + os.mkdir(config.SANDBOX_PATH) + except OSError: + pass + + +def remove(): + """Remove the sandbox directory + Brute force rm -rf if clean removal doesn't work due to permissions. + """ + try: + shutil.rmtree(config.SANDBOX_PATH) + except PermissionError: + subprocess.run(["chmod", "777", *glob.glob(config.SANDBOX_PATH + "/*")], check=True) + subprocess.run(["rm", "-rf", config.SANDBOX_PATH], check=True) + except FileNotFoundError: + pass + + +@contextmanager +def context(): + """Sandbox context manager""" + create() + yield + remove() |
