11import sys
2- import pyinotify
32import asyncio
43import traceback
54import logging
65import time
7- from asgiref .sync import async_to_sync
86from asyncio import Future
7+ from watchdog .observers import Observer
8+ from watchdog .events import FileSystemEventHandler
99from .loader import load_node
1010from .git import GitRepo
1111from .broker import BrokerClient
1616logger = logging .getLogger ('core.builder' )
1717
1818
19- class Builder (pyinotify . ProcessEvent ):
19+ class Builder (FileSystemEventHandler ):
2020 """Monitors .py files and generate STLs, and exit on any change"""
2121 def __init__ (self , path ):
2222 super ().__init__ ()
2323 self .path = path
2424
2525 self .repo = GitRepo (path )
2626 self .file_changed = Future ()
27- self .wm = pyinotify .WatchManager ()
28-
29- loop = asyncio .get_event_loop ()
30- pyinotify .AsyncioNotifier (self .wm , loop , default_proc_fun = self )
27+ self .observer = Observer ()
3128
3229 def start (self ):
3330 task = self ._start ()
34- loop = asyncio .get_event_loop ()
35- loop .run_until_complete (task )
31+ self . loop = asyncio .get_event_loop ()
32+ self . loop .run_until_complete (task )
3633
3734 async def _start (self ):
3835 logger .info ('START' )
@@ -58,8 +55,9 @@ async def _start(self):
5855 sys .exit (0 )
5956
6057 for path in self .node .files :
61- mask = pyinotify .IN_CLOSE_WRITE
62- self .wm .add_watch (path , mask )
58+ self .observer .schedule (self , path , recursive = False )
59+
60+ self .observer .start ()
6361
6462 try :
6563 await self .generate_stl ()
@@ -101,8 +99,8 @@ async def rollback(self, error_message):
10199 self .repo .revert_last_commit ()
102100 sys .exit (0 )
103101
104- def process_default (self , event ):
105- if not event .maskname == 'IN_CLOSE_WRITE' :
102+ def on_modified (self , event ):
103+ if event .is_directory :
106104 return
107- logging .info (f'{ event .pathname } changed, reloading' )
108- self .file_changed .set_result ( True )
105+ logging .info (f'{ event .src_path } changed, reloading' )
106+ self .loop . call_soon_threadsafe ( self . file_changed .set_result , True )
0 commit comments