Migrated from inotify to watchdog

This commit is contained in:
Sebastian 2016-11-11 01:29:06 +01:00
parent a0ebf841c9
commit c868d2f30f
2 changed files with 29 additions and 22 deletions

View File

@ -1,5 +1,4 @@
argh==0.26.1
inotify==0.2.4
Jinja2==2.7.3
Markdown==2.6
MarkupSafe==0.23

View File

@ -3,14 +3,27 @@
import os
import sys
import SocketServer
import inotify.adapters
from time import sleep
from jinja2 import Environment, FileSystemLoader
from SimpleHTTPServer import SimpleHTTPRequestHandler
from multiprocessing import Process
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from constants import CONTENT_DIRECTORY, OUTPUT_DIRECTORY, TEMPLATE_DIRECTORY, SERVE_PORT, SERVE_BIND_ADDRESS
class DirectoryObserver(FileSystemEventHandler):
def __init__(self, verdandi):
self._verdandi = verdandi
def on_any_event(self, event):
print "File changed: %s" % event.src_path
self._verdandi.generate_output()
class Verdandi(object):
output_directory = OUTPUT_DIRECTORY
@ -64,23 +77,6 @@ class Verdandi(object):
def serve(self):
def has_create_or_modify(watch):
result = False
for event in watch.event_gen():
if event == None:
break
result = result or ('IN_CREATE' in event[1])
result = result or ('IN_DELETE' in event[1])
result = result or ('IN_MODIFY' in event[1])
return result
content_watch = inotify.adapters.InotifyTree(CONTENT_DIRECTORY)
template_watch = inotify.adapters.InotifyTree(TEMPLATE_DIRECTORY)
def serve():
os.chdir(self.output_directory)
httpd = SocketServer.TCPServer((SERVE_BIND_ADDRESS, SERVE_PORT), SimpleHTTPRequestHandler)
@ -88,9 +84,21 @@ class Verdandi(object):
httpd.serve_forever()
event_handler = DirectoryObserver(self)
observer = Observer()
observer.schedule(event_handler, CONTENT_DIRECTORY, recursive=True)
observer.schedule(event_handler, TEMPLATE_DIRECTORY, recursive=True)
observer.start()
server_process = Process(target=serve)
server_process.start()
while True:
if has_create_or_modify(content_watch) or has_create_or_modify(template_watch):
self.generate_output()
try:
server_process.join()
except KeyboardInterrupt:
pass
observer.stop()
observer.join()
print "Be vigilant!"