Migrated from inotify to watchdog
This commit is contained in:
parent
a0ebf841c9
commit
c868d2f30f
|
@ -1,5 +1,4 @@
|
||||||
argh==0.26.1
|
argh==0.26.1
|
||||||
inotify==0.2.4
|
|
||||||
Jinja2==2.7.3
|
Jinja2==2.7.3
|
||||||
Markdown==2.6
|
Markdown==2.6
|
||||||
MarkupSafe==0.23
|
MarkupSafe==0.23
|
||||||
|
|
50
verdandi.py
50
verdandi.py
|
@ -3,14 +3,27 @@
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import SocketServer
|
import SocketServer
|
||||||
import inotify.adapters
|
|
||||||
|
|
||||||
|
from time import sleep
|
||||||
from jinja2 import Environment, FileSystemLoader
|
from jinja2 import Environment, FileSystemLoader
|
||||||
from SimpleHTTPServer import SimpleHTTPRequestHandler
|
from SimpleHTTPServer import SimpleHTTPRequestHandler
|
||||||
from multiprocessing import Process
|
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
|
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):
|
class Verdandi(object):
|
||||||
|
|
||||||
output_directory = OUTPUT_DIRECTORY
|
output_directory = OUTPUT_DIRECTORY
|
||||||
|
@ -64,23 +77,6 @@ class Verdandi(object):
|
||||||
|
|
||||||
|
|
||||||
def serve(self):
|
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():
|
def serve():
|
||||||
os.chdir(self.output_directory)
|
os.chdir(self.output_directory)
|
||||||
httpd = SocketServer.TCPServer((SERVE_BIND_ADDRESS, SERVE_PORT), SimpleHTTPRequestHandler)
|
httpd = SocketServer.TCPServer((SERVE_BIND_ADDRESS, SERVE_PORT), SimpleHTTPRequestHandler)
|
||||||
|
@ -88,9 +84,21 @@ class Verdandi(object):
|
||||||
httpd.serve_forever()
|
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 = Process(target=serve)
|
||||||
server_process.start()
|
server_process.start()
|
||||||
|
|
||||||
while True:
|
try:
|
||||||
if has_create_or_modify(content_watch) or has_create_or_modify(template_watch):
|
server_process.join()
|
||||||
self.generate_output()
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
|
||||||
|
observer.stop()
|
||||||
|
observer.join()
|
||||||
|
|
||||||
|
print "Be vigilant!"
|
||||||
|
|
Loading…
Reference in New Issue