@@ -8,19 +8,18 @@ def main():
88 args = parse_arguments ()
99 check_directory (args .directory_path )
1010
11- # log if verbose is enabled
12- log_format = "%(message)s" # This will only log the message content, without any prefix
13- logging .basicConfig (level = logging .INFO if args .verbose else logging .WARNING , format = log_format )
11+ setup_logging (args .verbose )
1412
1513 organize_directory (args .directory_path )
1614 # Catch any exceptions that may occur
17- except ValueError as e :
15+ except Exception as e :
1816 print (e )
1917
2018def parse_arguments ():
19+ # Parse the arguments from cli, order is irrelevant
2120 parser = argparse .ArgumentParser (description = "Organize files in a directory based on their extensions." )
22- parser .add_argument ("directory_path" , type = str , help = "Path of the directory to be organized" )
23- parser .add_argument ("-v" , "--verbose" , action = "store_true" , help = "Enable verbose output" )
21+ parser .add_argument ("directory_path" , type = str , help = "Path of the directory to be organized" ) # Required argument
22+ parser .add_argument ("-v" , "--verbose" , action = "store_true" , help = "Enable verbose output" ) # Optional argument
2423 return parser .parse_args ()
2524
2625def check_directory (directory_path ):
@@ -33,15 +32,20 @@ def check_directory(directory_path):
3332 if not os .access (directory_path , os .W_OK ):
3433 raise ValueError (f"'{ directory_path } ' is not writable." )
3534
35+ def setup_logging (verbose ):
36+ log_level = logging .INFO if verbose else logging .WARNING
37+ log_format = "%(message)s"
38+ logging .basicConfig (level = log_level , format = log_format )
39+
3640def organize_directory (directory_path ):
3741 categories = {
38- "Music" : (".mp3" , ".wav" , ".flac" , ".m4a" , ".aac" , ".ogg" , ".oga" ".wma" , ".mid" ),
39- "Videos" : (".mp4" , ".avi" , ".mkv" , ".mpeg" , ".wmv" , ".vob" , ".flv" , ".mov" , ".3gp" , ".webm" ),
40- "Source Files" : (".py" , ".c" , ".cpp" , ".java" , ".js" , ".cs" , ".html" , ".css" , ".php" , ".json" , ".xml" , ".sql" , ".db" ),
41- "Executables" : (".exe" , ".msi" , ".sh" , ".bat" , ".apk" , ".jar" , ".deb" , ".run" , ".bin" , ".dmg" , ".iso" ),
42- "Pictures" : (".jpg" , ".jpeg" , ".png" , ".gif" , ".bmp" , ".svg" , ".webp" , ".psd" , ".ai" , ".ico" ),
43- "Documents" : (".pdf" , ".doc" , ".docx" , ".xls" , ".xlsx" , ".ppt" , ".pptx" , ".txt" , ".md" , ".odt" , ".ods" , ".odp" , ".csv" , ".rtf" ),
44- "Compressed" : (".zip" , ".rar" , ".tar" , ".gz" , ".7z" , ".bz2" , ".xz" , ".z" , ".lz" ),
42+ "Music" : (".mp3" , ".wav" , ".flac" , ".m4a" , ".aac" , ".ogg" , ".oga" , ".wma" , ".mid" , ),
43+ "Videos" : (".mp4" , ".avi" , ".mkv" , ".mpeg" , ".wmv" , ".vob" , ".flv" , ".mov" , ".3gp" , ".webm" , ),
44+ "Source Files" : (".py" , ".c" , ".cpp" , ".java" , ".js" , ".cs" , ".html" , ".css" , ".php" , ".json" , ".xml" , ".sql" , ".db" , ),
45+ "Executables" : (".exe" , ".msi" , ".sh" , ".bat" , ".apk" , ".jar" , ".deb" , ".run" , ".bin" , ".dmg" , ".iso" , ),
46+ "Pictures" : (".jpg" , ".jpeg" , ".png" , ".gif" , ".bmp" , ".svg" , ".webp" , ".psd" , ".ai" , ".ico" , ),
47+ "Documents" : (".pdf" , ".doc" , ".docx" , ".xls" , ".xlsx" , ".ppt" , ".pptx" , ".txt" , ".md" , ".odt" , ".ods" , ".odp" , ".csv" , ".rtf" , ),
48+ "Compressed" : (".zip" , ".rar" , ".tar" , ".gz" , ".7z" , ".bz2" , ".xz" , ".z" , ".lz" , ),
4549 "Torrents" : (".torrent" ,),
4650 }
4751
0 commit comments