From 0e8174718df94bc8738cad63c57e6ce06fd9ae6e Mon Sep 17 00:00:00 2001 From: Hasshey Date: Sat, 1 Mar 2025 16:05:49 -0800 Subject: [PATCH 1/2] Added python script for dektop cleanup & readme --- desktop_cleanup/README.md | 16 ++++++++ desktop_cleanup/main.py | 82 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 desktop_cleanup/README.md create mode 100644 desktop_cleanup/main.py diff --git a/desktop_cleanup/README.md b/desktop_cleanup/README.md new file mode 100644 index 000000000..c871209d4 --- /dev/null +++ b/desktop_cleanup/README.md @@ -0,0 +1,16 @@ +# Script to automatically deletes/ lists all files recursively in desktop which havent been modified + +Script expect the user to pass limit in days beyond which the file if not modified would be listed/ deleted +depending on the arguments provided to the scipts + +## install requirements/dependencies: + +No external requirements/dependencies to be installed + +## how to use: + +call the program using: +`python main.py --limit --delete <1 or 0>` +--limit -> argument to specify the limit in days beyond which if modifications were not done, the file would be listed +--delete -> optional argument to specify whether to delete the files or not, takes values of 0 or 1, 0 to not delete, 1 +to delete \ No newline at end of file diff --git a/desktop_cleanup/main.py b/desktop_cleanup/main.py new file mode 100644 index 000000000..2131bac11 --- /dev/null +++ b/desktop_cleanup/main.py @@ -0,0 +1,82 @@ +import os +import argparse +import sys +import datetime +import logging + + +class DesktopCleaner: + + def __init__(self): + self._args = self.cli_parse() + self._desktop_path = self.get_desktop_path() + self.logger = logging.getLogger(__name__) + logging.basicConfig(filename='Log.log', filemode='w', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') + self._files_paths = [] + + @staticmethod + def cli_parse(): + arg_parser = argparse.ArgumentParser(prog='Desktop cleanup', description='Automation script to \ + clean up old desktop files') + arg_parser.add_argument("--delete", type=int, required=False, help='Flag to delete the files') + arg_parser.add_argument("--limit", type=int, required=True, help='No of days to check for') + return arg_parser.parse_args() + + @staticmethod + def get_desktop_path(): + _username_path = os.path.expanduser('~') + + if sys.platform == 'win32': + _username_path += '\\Desktop' + else: + _username_path += '/Desktop/New folder' + + return _username_path + + def delete_files(self): + self.logger.info(f"Deleting all the files \n") + for file_path in self._files_paths: + try: + os.remove(file_path) + self.logger.info(f"Deleted file {file_path} successfully\n") + except FileNotFoundError: + self.logger.error(f"{file_path} not found\n") + except PermissionError: + self.logger.error(f"User does not have permission to delete {file_path}\n") + except Exception as e: + self.logger.error(f"Error occurred - {e} for {file_path}\n") + + def scan_desktop(self): + + + for dirpath,_,files in os.walk(self._desktop_path): + self.logger.info("Walking through all files in desktop\n") + for file in files: + file_path = str(os.path.join(dirpath, file)) + file_details = os.stat(file_path) + + last_modified = datetime.datetime.fromtimestamp(file_details.st_mtime) + curr_time = datetime.datetime.now() + + delta_days = curr_time - last_modified + limit = self._args.limit + + if delta_days.days > limit: + self.logger.info(f"{file_path} is exceeding threshold - last modified {delta_days.days} ago\n") + self._files_paths.append(file_path) + + if self._args.delete and len(self._files_paths)>0: + self.delete_files() + elif len(self._files_paths) > 0: + self.logger.info(f"Delete option not selected - so only logging file names\n") + else: + self.logger.info(f"No files exceeding the limit\n") + +if __name__=='__main__': + + desktop_cleaner = DesktopCleaner() + desktop_cleaner.scan_desktop() + + + + From a1673d7a155d197123f0062611fc68ff67c9c59e Mon Sep 17 00:00:00 2001 From: Hasshey Date: Sat, 1 Mar 2025 16:26:04 -0800 Subject: [PATCH 2/2] flake8 Linting fixes --- desktop_cleanup/README.md | 2 +- desktop_cleanup/main.py | 35 +++++++++++++++++++---------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/desktop_cleanup/README.md b/desktop_cleanup/README.md index c871209d4..caa85793f 100644 --- a/desktop_cleanup/README.md +++ b/desktop_cleanup/README.md @@ -1,4 +1,4 @@ -# Script to automatically deletes/ lists all files recursively in desktop which havent been modified + Script expect the user to pass limit in days beyond which the file if not modified would be listed/ deleted depending on the arguments provided to the scipts diff --git a/desktop_cleanup/main.py b/desktop_cleanup/main.py index 2131bac11..2a8ab6c99 100644 --- a/desktop_cleanup/main.py +++ b/desktop_cleanup/main.py @@ -11,15 +11,22 @@ def __init__(self): self._args = self.cli_parse() self._desktop_path = self.get_desktop_path() self.logger = logging.getLogger(__name__) - logging.basicConfig(filename='Log.log', filemode='w', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') + logging.basicConfig(filename='Log.log', filemode='w', + level=logging.INFO, + format='%(asctime)s - %(levelname)s - %(message)s') self._files_paths = [] @staticmethod def cli_parse(): - arg_parser = argparse.ArgumentParser(prog='Desktop cleanup', description='Automation script to \ - clean up old desktop files') - arg_parser.add_argument("--delete", type=int, required=False, help='Flag to delete the files') - arg_parser.add_argument("--limit", type=int, required=True, help='No of days to check for') + arg_parser = argparse.ArgumentParser(prog='Desktop cleanup', + description='Automation script to clean up old desktop files') + arg_parser.add_argument("--delete", type=int, + required=False, + help='Flag to delete the files') + + arg_parser.add_argument("--limit", type=int, + required=True, + help='No of days to check for') return arg_parser.parse_args() @staticmethod @@ -34,7 +41,7 @@ def get_desktop_path(): return _username_path def delete_files(self): - self.logger.info(f"Deleting all the files \n") + self.logger.info("Deleting all the files \n") for file_path in self._files_paths: try: os.remove(file_path) @@ -48,8 +55,7 @@ def delete_files(self): def scan_desktop(self): - - for dirpath,_,files in os.walk(self._desktop_path): + for dirpath, _, files in os.walk(self._desktop_path): self.logger.info("Walking through all files in desktop\n") for file in files: file_path = str(os.path.join(dirpath, file)) @@ -65,18 +71,15 @@ def scan_desktop(self): self.logger.info(f"{file_path} is exceeding threshold - last modified {delta_days.days} ago\n") self._files_paths.append(file_path) - if self._args.delete and len(self._files_paths)>0: + if self._args.delete and len(self._files_paths) > 0: self.delete_files() elif len(self._files_paths) > 0: - self.logger.info(f"Delete option not selected - so only logging file names\n") + self.logger.info("Delete option not selected - so only logging file names\n") else: - self.logger.info(f"No files exceeding the limit\n") + self.logger.info("No files exceeding the limit\n") + -if __name__=='__main__': +if __name__ == '__main__': desktop_cleaner = DesktopCleaner() desktop_cleaner.scan_desktop() - - - -