Repository navigation
Expand file tree
/
Copy path_common.py
More file actions
78 lines (61 loc) · 2.05 KB
/
Copy path_common.py
File metadata and controls
78 lines (61 loc) · 2.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import ctypes
import glob
import os
import shutil
import sys
from mtlogger import logger
ALL_FILES_PATTERN = '*'
def run_as_admin():
if os.name == 'nt' and not ctypes.windll.shell32.IsUserAnAdmin():
params = ' '.join([f'"{arg}"' for arg in sys.argv])
ctypes.windll.shell32.ShellExecuteW(
None, 'runas', sys.executable, params, None, 1
)
sys.exit(0)
def delete_children_for_dirs(dir_patterns, file_patterns=None):
if file_patterns is None:
file_patterns = [ALL_FILES_PATTERN]
for dir_pattern in dir_patterns:
delete_children_for_dir(dir_pattern, file_patterns)
def delete_children_for_dir(dir_pattern, file_patterns=None):
if file_patterns is None:
file_patterns = [ALL_FILES_PATTERN]
logger.log(f'Cleaning "{dir_pattern}"...')
dir_path = os.path.expandvars(dir_pattern)
matching_dirs = [path for path in glob.glob(dir_path) if os.path.isdir(path)]
failed = False
if not matching_dirs:
logger.warn(f'{dir_pattern} directory not found. Skipping...\n')
return False
for matching_dir in matching_dirs:
try:
items = [
item_path
for file_pattern in file_patterns
for item_path in glob.glob(os.path.join(matching_dir, file_pattern))
]
except Exception as ex:
logger.error(f'Could not list "{matching_dir}": {ex}')
failed = True
continue
for item_path in items:
try:
if os.path.isfile(item_path):
os.remove(item_path)
elif os.path.isdir(item_path):
shutil.rmtree(item_path)
logger.debug(f'Deleted "{item_path}"')
except Exception as ex:
message = f'Could not delete "{item_path}":\n {ex}'
if getattr(ex, 'winerror', None) == 32:
message = message.replace('by another process: ', '\n ')
logger.warn(message)
else:
logger.error(message)
failed = True
continue
if failed:
logger.warn(f' Finished cleaning "{dir_pattern}" with errors.\n')
else:
logger.success(f'Finished cleaning "{dir_pattern}".\n')
return not failed