监视文件夹的更改并在 db 中保存路径

问题描述 投票:0回答:1

文件夹中添加文件时,路径保存在Db中

我发现有一个叫看门狗的包但是如何将它与快速API集成。是我还找不到的。

我对原始帖子的代码进行了一些修改,以便在快速 API 启动时开始监控

from fastapi import FastAPI , Depends
from sqlalchemy.orm import Session
from session import get_session
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
app = FastAPI()

class MyHandler(FileSystemEventHandler):
    db: Session

    def __init__(self, target_folder_path, db: Session = Depends(get_session)):
        super().__init__()
        self.target_folder_path = target_folder_path
        self.db = db

    def on_created(self, event):
        print(f"File {event.src_path} has been created in {self.target_folder_path}")

    def on_modified(self, event):
        print(f"File {event.src_path} has been modified in {self.target_folder_path}")


class WatchdogThread:
    def __init__(self, target_folder_path):
        self.observer = Observer()
        self.target_folder_path = target_folder_path

    def start(self):
        event_handler = MyHandler(self.target_folder_path)
        self.observer.schedule(event_handler, self.target_folder_path, recursive=True)
        print(f"Starting the folder monitoring for {self.target_folder_path}")
        self.observer.start()

    def stop(self):
        self.observer.stop()
        print(f"Stopping the folder monitoring for {self.target_folder_path}")
        self.observer.join()

target_folder_path = "/monitored"

watchdog_thread = WatchdogThread(target_folder_path)

# added this to start the monitoring.
@app.on_event("startup")
async def startup_event():
    watchdog_thread.start()


@app.on_event("shutdown")
async def shutdown_event():
    watchdog_thread.stop()

def main():
    uvicorn.run("app.main:app", host="0.0.0.0", port=8000, access_log=True, reload=True)


if __name__ == "__main__":
    main()


#Docker-compose 
volumes:
      - ${TARGET_FOLDER_PARENT_PATH}:/monitored:rw
python fastapi watchdog python-watchdog
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.