I have an endpoint in my python fast api and whenver the frontend connects to it, I want to listen for changes on a specific file stored in the temporary directory of the system. I am using watch dog, but I am not able to make it work it, its just not sending any message on changes :-
class LogFileEventHandler(FileSystemEventHandler):
def __init__(self, websocket: WebSocket, videoId: str):
self.websocket = websocket
self.videoId = videoId
async def on_modified(self, event):
if event.src_path.endswith(f"log_{self.videoId}.txt"):
logFile = os.path.join(temp_dir, f"log_{self.videoId}.txt")
with open(logFile, "r") as file:
content = file.read()
# Send file content to WebSocket
await self.websocket.send_text(content)
@router.websocket("/logs")
async def websocket_endpoint(websocket: WebSocket, videoId: str = Query(...)):
await manager.connect(websocket)
print(f" Client connected: {websocket.client.host}")
# Create event handler and observer
event_handler = LogFileEventHandler(websocket, videoId)
observer = Observer()
observer.schedule(event_handler, temp_dir, recursive=False)
observer.start()
try:
while True:
try:
data = await websocket.receive_json()
except RuntimeError:
break
except WebSocketDisconnect:
print(f"Client disconnected: {websocket.client.host}")
manager.disconnect(websocket)
observer.stop()
observer.join()
New contributor
Zaid is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
2