CMLAB-Cleaner/main.py

89 lines
2.5 KiB
Python

'''
Clean the direction in CML Server (tmp2 or home directory)
Suppose that the CLEAN_PATH may seems like this.
And we will only check the directories & files under the user directory with "depth=1"
CLEAN_PATH
|
+---- user1 (user directory)
| |
| +--- file1 (depth=1, will be check)
| |
| +--- Project1 (depth=1, will be check)
| | |
| | +--- subset1-1 (depth=2, won't be check)
| |
| +--- Project2 (depth=1)
| |
| +--- subset2-1 (depth=2)
| |
| +--- subset2-2 (depth=2)
|
+---- user2 (user directory)
|
+--- Project1 (depth=1)
|
+--- subset1-1 (depth=2)
'''
from src.mailer import Mailer
from src.cleaner import Cleaner
import os
from constant import KEEP_FILES, WHITE_LIST, DATE, GOOGLE_OWNER, MAIL_MESSAGE
GOOGLE_CODE = os.environ['GOOGLE_CODE']
def get_master():
ans = []
for year in os.listdir(f'/home/master/'):
if os.path.isdir(f'/home/master/{year}'):
for user in os.listdir(f'/home/master/{year}'):
ans.append(f'/home/master/{year}/{user}')
return ans
def get_phd():
ans = []
for dir_name in os.listdir(f'/home/phd/'):
if dir_name.isnumeric():
year = dir_name
for user in os.listdir(f'/home/phd/{year}'):
ans.append(f'/home/phd/{year}/{user}')
else:
ans.append(f'/home/phd/{dir_name}')
return ans
def get_ra():
ans = []
for user in os.listdir(f'/home/ra/'):
ans.append(f'/home/ra/{user}')
return ans
def get_extra():
ans = []
for user in os.listdir(f'/home/extra/'):
ans.append(f'/home/extra/{user}')
return ans
def main(clean_type, test=True, notify_stage=True):
mailer = Mailer(GOOGLE_OWNER, GOOGLE_CODE)
if clean_type == 'home':
student_list = []
# find all student's path
for student_type in ['master', 'phd', 'ra', 'extra']:
func = globals()[f'get_{student_type}']
student_list += func()
# start clean
for index, student_dir in enumerate(student_list):
print(f'{index+1}/{len(student_list)} {student_dir}')
cleaner = Cleaner(student_dir, "2024-02-01", mailer, WHITE_LIST, KEEP_FILES, MAIL_MESSAGE)
cleaner.run(test=test, notify_stage=notify_stage)
if __name__ == "__main__":
main('home', test=True, notify_stage=False)