jhylands

Downloads manager

Jan 2nd, 2021
772
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.42 KB | None | 0 0
  1. #http://thepythoncorner.com/dev/how-to-create-a-watchdog-in-python-to-look-for-filesystem-changes/
  2. import os
  3. import time
  4. import logging
  5. from watchdog.observers import Observer
  6. from watchdog.events import PatternMatchingEventHandler
  7. from pathlib import Path
  8.  
  9. def get_extention(path):
  10.     """
  11.    Should return the extension in lower case
  12.    """
  13.     return path.suffix[1:].lower()
  14.  
  15. def is_file(path):
  16.     return path.is_file() and path.parent==Path(".")
  17.  
  18. def move_file_to_folder(src, dest):
  19.     src.rename(src.parent / dest / src.name)
  20.  
  21. IMAGE_EXTENTIONS = ["png","gif","jpg","jpeg","tif",]
  22. ARCHIVE_EXTENSIONS = ["zip","tar","gz","xz","lz","bz2"]
  23. TABULAR_DATA = ["csv", "xls", "xlsx"]
  24. SOFTWARE_EXTENSIONS = ["deb", "dmg", "exe", "msi", "iso", "jar"]
  25. MEDIA = ["mp3", "mp4", "wav"]
  26. SCRIPTS = ["py", "sh", "sql"]
  27. OFFICE = ["doc","dot","wbk","docx","docm","dotx","dotm","docb","xlt","xlm","xlsm","xltx","xltm","xlsb","xla","xlam","xll","xlw","ppt","pot","pps","pptx","pptm","potx","potm","ppam","ppsx","ppsm","sldx","sldm","odt", "fodt", "ods", "fods","odp", "fodp","odg", "fodg","odf"]
  28. def handle_file(path):
  29.     extension = get_extention(path)
  30.     if extension in IMAGE_EXTENTIONS:
  31.         move_file_to_folder(path, "images")
  32.     elif extension in ARCHIVE_EXTENSIONS:
  33.         move_file_to_folder(path, "archives")
  34.     elif extension in TABULAR_DATA:
  35.         move_file_to_folder(path, "CSV")
  36.     elif extension in SOFTWARE_EXTENSIONS:
  37.         move_file_to_folder(path, "software")
  38.     elif extension in MEDIA:
  39.         move_file_to_folder(path, "media")
  40.     elif extension in ["json", "pdf", "txt", "sql", "j2"]:
  41.         print("moving {} to {}".format(path, extension))
  42.         move_file_to_folder(path, extension)
  43.     elif extension in SCRIPTS and "manager" not in path.name:
  44.         move_file_to_folder(path, "scripts")
  45.     elif extension in OFFICE:
  46.         move_file_to_folder(path, "office")
  47.     else:
  48.         print("leaving {} where it is. {}".format(path, extension))
  49.  
  50. def on_created(event):
  51.     src = Path(event.src_path)
  52.     if is_file(src):
  53.         handle_file(src)
  54.     else:
  55.         print("hey, {} has been created!".format(event.src_path))
  56.  
  57. def on_deleted(event):
  58.     print("what the ! Someone deleted {}!".format(event.src_path))
  59.  
  60. def on_modified(event):
  61.     print("hey buddy, {} has been modified".format(event.src_path))
  62.  
  63. def on_moved(event):
  64.     print("ok ok ok, someone moved {} to {}".format(event.src_path, event.dest_path))
  65.  
  66. if __name__ == "__main__":
  67.     fs = [Path(f) for f in os.listdir(".")]
  68.     fs = [f for f in fs if is_file(f)]
  69.     [handle_file(f) for f in fs]
  70.     logging.basicConfig(level=logging.INFO,
  71.                         format='%(asctime)s - %(message)s',
  72.                         datefmt='%Y-%m-%d %H:%M:%S')
  73.     path = '.'
  74.     patterns = "*"
  75.     ignore_patterns = ""
  76.     ignore_directories = False
  77.     case_sensitive = True
  78.     my_event_handler = PatternMatchingEventHandler(patterns, ignore_patterns, ignore_directories, case_sensitive)
  79.     my_event_handler.on_created = on_created
  80.     my_event_handler.on_deleted = on_deleted
  81.     my_event_handler.on_modified = on_modified
  82.     my_event_handler.on_moved = on_moved
  83.     observer = Observer()
  84.     observer.schedule(my_event_handler, path, recursive=True)
  85.     observer.start()
  86.     try:
  87.         print("started")
  88.         while True:
  89.             time.sleep(1)
  90.     except KeyboardInterrupt:
  91.         observer.stop()
  92.     observer.join()
  93.  
Advertisement
Add Comment
Please, Sign In to add comment