Skip to content

Commit 4fa945c

Browse files
authored
Merge pull request #1017 from Hasshey/829-dekstop-cleaner
Script for Issue #829
2 parents 4c7646b + a1673d7 commit 4fa945c

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed

desktop_cleanup/README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
3+
Script expect the user to pass limit in days beyond which the file if not modified would be listed/ deleted
4+
depending on the arguments provided to the scipts
5+
6+
## install requirements/dependencies:
7+
8+
No external requirements/dependencies to be installed
9+
10+
## how to use:
11+
12+
call the program using:
13+
`python main.py --limit <limit in days> --delete <1 or 0>`
14+
--limit -> argument to specify the limit in days beyond which if modifications were not done, the file would be listed
15+
--delete -> optional argument to specify whether to delete the files or not, takes values of 0 or 1, 0 to not delete, 1
16+
to delete

desktop_cleanup/main.py

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import os
2+
import argparse
3+
import sys
4+
import datetime
5+
import logging
6+
7+
8+
class DesktopCleaner:
9+
10+
def __init__(self):
11+
self._args = self.cli_parse()
12+
self._desktop_path = self.get_desktop_path()
13+
self.logger = logging.getLogger(__name__)
14+
logging.basicConfig(filename='Log.log', filemode='w',
15+
level=logging.INFO,
16+
format='%(asctime)s - %(levelname)s - %(message)s')
17+
self._files_paths = []
18+
19+
@staticmethod
20+
def cli_parse():
21+
arg_parser = argparse.ArgumentParser(prog='Desktop cleanup',
22+
description='Automation script to clean up old desktop files')
23+
arg_parser.add_argument("--delete", type=int,
24+
required=False,
25+
help='Flag to delete the files')
26+
27+
arg_parser.add_argument("--limit", type=int,
28+
required=True,
29+
help='No of days to check for')
30+
return arg_parser.parse_args()
31+
32+
@staticmethod
33+
def get_desktop_path():
34+
_username_path = os.path.expanduser('~')
35+
36+
if sys.platform == 'win32':
37+
_username_path += '\\Desktop'
38+
else:
39+
_username_path += '/Desktop/New folder'
40+
41+
return _username_path
42+
43+
def delete_files(self):
44+
self.logger.info("Deleting all the files \n")
45+
for file_path in self._files_paths:
46+
try:
47+
os.remove(file_path)
48+
self.logger.info(f"Deleted file {file_path} successfully\n")
49+
except FileNotFoundError:
50+
self.logger.error(f"{file_path} not found\n")
51+
except PermissionError:
52+
self.logger.error(f"User does not have permission to delete {file_path}\n")
53+
except Exception as e:
54+
self.logger.error(f"Error occurred - {e} for {file_path}\n")
55+
56+
def scan_desktop(self):
57+
58+
for dirpath, _, files in os.walk(self._desktop_path):
59+
self.logger.info("Walking through all files in desktop\n")
60+
for file in files:
61+
file_path = str(os.path.join(dirpath, file))
62+
file_details = os.stat(file_path)
63+
64+
last_modified = datetime.datetime.fromtimestamp(file_details.st_mtime)
65+
curr_time = datetime.datetime.now()
66+
67+
delta_days = curr_time - last_modified
68+
limit = self._args.limit
69+
70+
if delta_days.days > limit:
71+
self.logger.info(f"{file_path} is exceeding threshold - last modified {delta_days.days} ago\n")
72+
self._files_paths.append(file_path)
73+
74+
if self._args.delete and len(self._files_paths) > 0:
75+
self.delete_files()
76+
elif len(self._files_paths) > 0:
77+
self.logger.info("Delete option not selected - so only logging file names\n")
78+
else:
79+
self.logger.info("No files exceeding the limit\n")
80+
81+
82+
if __name__ == '__main__':
83+
84+
desktop_cleaner = DesktopCleaner()
85+
desktop_cleaner.scan_desktop()

0 commit comments

Comments
 (0)