From c868d2f30fa2dc4f305d9c09af3d9ec6ffba0486 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Fri, 11 Nov 2016 01:29:06 +0100 Subject: [PATCH] Migrated from inotify to watchdog --- requirements.txt | 1 - verdandi.py | 50 ++++++++++++++++++++++++++++-------------------- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/requirements.txt b/requirements.txt index 1924b5f..dde865a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,4 @@ argh==0.26.1 -inotify==0.2.4 Jinja2==2.7.3 Markdown==2.6 MarkupSafe==0.23 diff --git a/verdandi.py b/verdandi.py index 6670b13..0f667d4 100644 --- a/verdandi.py +++ b/verdandi.py @@ -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!"