Added inotify code for autorebuild

Made menuitem and news feed drop state on initial None message
This commit is contained in:
Sebastian 2016-04-22 22:29:08 +02:00
parent 871cab9621
commit fdd2cd139d
4 changed files with 59 additions and 26 deletions

View File

@ -14,6 +14,7 @@ class MenuItemMixin(MessageMixin):
other_messages = super(MenuItemMixin, self).process_message(message)
if message == None:
self.menu_items = {}
return other_messages + [{'type': 'menu_add_item',
'title' : self.menu_title,
'parent' : self.menu_parent,
@ -21,8 +22,6 @@ class MenuItemMixin(MessageMixin):
'url' : self.url}]
elif message['type'] == 'menu_add_item':
if self.menu_items == None:
self.menu_items = {}
label = message['label']
if label in self.menu_items.keys():
@ -87,4 +86,3 @@ class MenuItemMixin(MessageMixin):
context['menu'] = self.generate_menu()
return context

View File

@ -29,7 +29,9 @@ class NewsFeed(MenuItemMixin, TemplateMixin, AssetsMixin):
def process_message(self, message):
other_messages = super(NewsFeed, self).process_message(message)
if message != None and message['type'] == 'news_feed_item':
if message == None:
self.items = []
elif message['type'] == 'news_feed_item':
if message['feed_id'] == self.news_feed_id:
self.items += [message['item']]

View File

@ -1,7 +1,7 @@
inotify==0.2.4
Jinja2==2.7.3
Markdown==2.6
MarkupSafe==0.23
Pillow==3.1.0
python-dateutil==2.4.2
six==1.10.0
wheel==0.24.0

View File

@ -3,23 +3,22 @@
import os
import sys
import SocketServer
import inotify.adapters
from jinja2 import Environment, FileSystemLoader
from SimpleHTTPServer import SimpleHTTPRequestHandler
from multiprocessing import Process
from constants import OUTPUT_DIRECTORY, TEMPLATE_DIRECTORY, SERVE_PORT, SERVE_BIND_ADDRESS
from constants import CONTENT_DIRECTORY, OUTPUT_DIRECTORY, TEMPLATE_DIRECTORY, SERVE_PORT, SERVE_BIND_ADDRESS
class Verdandi(object):
template_directory = TEMPLATE_DIRECTORY
output_directory = OUTPUT_DIRECTORY
modules = []
def __init__(self):
self.jinja_env = Environment(loader=FileSystemLoader(self.template_directory))
self.jinja_env = Environment(loader=FileSystemLoader(TEMPLATE_DIRECTORY))
def send_message(self, message):
@ -52,12 +51,46 @@ class Verdandi(object):
def run(self):
self.generate_output()
if len(sys.argv) > 1 and sys.argv[1] == 'serve':
self.serve()
def generate_output(self):
self.pass_messages()
self.collect_assets()
self.render()
if len(sys.argv) > 1 and sys.argv[1] == 'serve':
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)
print "Serving under %s:%d" % (SERVE_BIND_ADDRESS, SERVE_PORT)
httpd.serve_forever()
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()