#!/usr/bin/env python3 -B # coding=utf-8 """ Copyright (C) 2022-2024 Plato Mavropoulos """ import os import subprocess from common.externals import get_szip_path from common.system import printer def check_bad_exit_code(exit_code): """ Check 7-Zip bad exit codes (0 OK, 1 Warning) """ if exit_code not in (0, 1): raise ValueError(f'Bad exit code: {exit_code}') def is_szip_supported(in_path, padding=0, args=None, check=False, silent=False): """ Check if file is 7-Zip supported """ try: if args is None: args = [] szip_c = [get_szip_path(), 't', in_path, *args, '-bso0', '-bse0', '-bsp0'] szip_t = subprocess.run(szip_c, check=False) if check: check_bad_exit_code(szip_t.returncode) except Exception as error: # pylint: disable=broad-except if not silent: printer(f'Error: 7-Zip could not check support for file {in_path}: {error}!', padding) return False return True def szip_decompress(in_path, out_path, in_name, padding=0, args=None, check=False, silent=False): """ Archive decompression via 7-Zip """ if not in_name: in_name = 'archive' try: if args is None: args = [] szip_c = [get_szip_path(), 'x', *args, '-aou', '-bso0', '-bse0', '-bsp0', f'-o{out_path}', in_path] szip_x = subprocess.run(szip_c, check=False) if check: check_bad_exit_code(szip_x.returncode) if not os.path.isdir(out_path): raise OSError(f'Extraction directory not found: {out_path}') except Exception as error: # pylint: disable=broad-except if not silent: printer(f'Error: 7-Zip could not extract {in_name} file {in_path}: {error}!', padding) return 1 if not silent: printer(f'Succesfull {in_name} decompression via 7-Zip!', padding) return 0