39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
from watchdog.observers import Observer
|
||
from watchdog.events import FileSystemEventHandler
|
||
import asyncio
|
||
from utils.file_handler import FileHandler
|
||
from utils.readiness import check_ready
|
||
from utils.logger import logger
|
||
|
||
class Handler(FileSystemEventHandler):
|
||
def __init__(self, db, extensions, insert_event):
|
||
self.db = db
|
||
self.file_handler = FileHandler(extensions)
|
||
self.insert_event = insert_event
|
||
|
||
def on_created(self, event):
|
||
if event.is_directory:
|
||
return
|
||
ev = self.file_handler.handle_created(event.src_path)
|
||
if ev:
|
||
self.insert_event(self.db, ev)
|
||
asyncio.create_task(check_ready(self.db, ev.referenceId, ev.data.fileName, ev.data.fileUri, self.insert_event))
|
||
logger.info(f"➕ FileAddedEvent persisted for {ev.data.fileName}")
|
||
|
||
def on_deleted(self, event):
|
||
if event.is_directory:
|
||
return
|
||
ev = self.file_handler.handle_deleted(event.src_path)
|
||
if ev:
|
||
self.insert_event(self.db, ev)
|
||
logger.info(f"➖ FileRemovedEvent persisted for {ev.data.fileName}")
|
||
|
||
def start_observer(db, path, extensions, insert_event):
|
||
observer = Observer()
|
||
handler = Handler(db, extensions, insert_event)
|
||
observer.schedule(handler, path, recursive=True)
|
||
observer.start()
|
||
logger.info(f"👀 Watching path: {path}")
|
||
return observer
|
||
|