Added inotify code for autorebuild
Made menuitem and news feed drop state on initial None message
This commit is contained in:
parent
871cab9621
commit
fdd2cd139d
|
@ -7,30 +7,29 @@ class MenuItemMixin(MessageMixin):
|
||||||
menu_label = None
|
menu_label = None
|
||||||
menu_parent = None
|
menu_parent = None
|
||||||
url = "index.html"
|
url = "index.html"
|
||||||
|
|
||||||
menu_items = None
|
menu_items = None
|
||||||
|
|
||||||
def process_message(self, message):
|
def process_message(self, message):
|
||||||
other_messages = super(MenuItemMixin, self).process_message(message)
|
other_messages = super(MenuItemMixin, self).process_message(message)
|
||||||
|
|
||||||
if message == None:
|
if message == None:
|
||||||
return other_messages + [{'type': 'menu_add_item',
|
self.menu_items = {}
|
||||||
'title' : self.menu_title,
|
return other_messages + [{'type': 'menu_add_item',
|
||||||
|
'title' : self.menu_title,
|
||||||
'parent' : self.menu_parent,
|
'parent' : self.menu_parent,
|
||||||
'label' : self.menu_label,
|
'label' : self.menu_label,
|
||||||
'url' : self.url}]
|
'url' : self.url}]
|
||||||
|
|
||||||
elif message['type'] == 'menu_add_item':
|
elif message['type'] == 'menu_add_item':
|
||||||
if self.menu_items == None:
|
|
||||||
self.menu_items = {}
|
|
||||||
|
|
||||||
label = message['label']
|
label = message['label']
|
||||||
if label in self.menu_items.keys():
|
if label in self.menu_items.keys():
|
||||||
print '[Warn] Depulicate menu item label: %s in %s' % (label, self.menu_label)
|
print '[Warn] Depulicate menu item label: %s in %s' % (label, self.menu_label)
|
||||||
return other_messages
|
return other_messages
|
||||||
|
|
||||||
self.menu_items[label] = {}
|
self.menu_items[label] = {}
|
||||||
|
|
||||||
for key in ['title', 'parent', 'label', 'url']:
|
for key in ['title', 'parent', 'label', 'url']:
|
||||||
self.menu_items[label][key] = message[key]
|
self.menu_items[label][key] = message[key]
|
||||||
|
|
||||||
|
@ -41,14 +40,14 @@ class MenuItemMixin(MessageMixin):
|
||||||
path = [self.menu_label]
|
path = [self.menu_label]
|
||||||
while self.menu_items[path[0]]['parent'] != None:
|
while self.menu_items[path[0]]['parent'] != None:
|
||||||
path = [self.menu_items[path[0]]['parent']] + path
|
path = [self.menu_items[path[0]]['parent']] + path
|
||||||
|
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
|
||||||
def get_menu_level(self, parent):
|
def get_menu_level(self, parent):
|
||||||
return filter(lambda x: x['parent'] == parent, self.menu_items.values())
|
return filter(lambda x: x['parent'] == parent, self.menu_items.values())
|
||||||
|
|
||||||
|
|
||||||
def generate_levels(self, path):
|
def generate_levels(self, path):
|
||||||
level = path[0]
|
level = path[0]
|
||||||
next_level = None
|
next_level = None
|
||||||
|
@ -69,16 +68,16 @@ class MenuItemMixin(MessageMixin):
|
||||||
res += '</li>'
|
res += '</li>'
|
||||||
else:
|
else:
|
||||||
res += '<li><a href="/%s">%s</a></li>' % (item['url'], item['title'])
|
res += '<li><a href="/%s">%s</a></li>' % (item['url'], item['title'])
|
||||||
|
|
||||||
res += '</ul>'
|
res += '</ul>'
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def generate_menu(self):
|
def generate_menu(self):
|
||||||
|
|
||||||
path = self.get_menu_path()
|
path = self.get_menu_path()
|
||||||
|
|
||||||
return self.generate_levels([None] + path)
|
return self.generate_levels([None] + path)
|
||||||
|
|
||||||
|
|
||||||
def get_context(self):
|
def get_context(self):
|
||||||
|
@ -87,4 +86,3 @@ class MenuItemMixin(MessageMixin):
|
||||||
context['menu'] = self.generate_menu()
|
context['menu'] = self.generate_menu()
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,9 @@ class NewsFeed(MenuItemMixin, TemplateMixin, AssetsMixin):
|
||||||
def process_message(self, message):
|
def process_message(self, message):
|
||||||
other_messages = super(NewsFeed, self).process_message(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:
|
if message['feed_id'] == self.news_feed_id:
|
||||||
self.items += [message['item']]
|
self.items += [message['item']]
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
inotify==0.2.4
|
||||||
Jinja2==2.7.3
|
Jinja2==2.7.3
|
||||||
Markdown==2.6
|
Markdown==2.6
|
||||||
MarkupSafe==0.23
|
MarkupSafe==0.23
|
||||||
Pillow==3.1.0
|
Pillow==3.1.0
|
||||||
python-dateutil==2.4.2
|
python-dateutil==2.4.2
|
||||||
six==1.10.0
|
six==1.10.0
|
||||||
wheel==0.24.0
|
|
||||||
|
|
45
verdandi.py
45
verdandi.py
|
@ -3,23 +3,22 @@
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import SocketServer
|
import SocketServer
|
||||||
|
import inotify.adapters
|
||||||
|
|
||||||
from jinja2 import Environment, FileSystemLoader
|
from jinja2 import Environment, FileSystemLoader
|
||||||
from SimpleHTTPServer import SimpleHTTPRequestHandler
|
from SimpleHTTPServer import SimpleHTTPRequestHandler
|
||||||
|
from multiprocessing import Process
|
||||||
|
|
||||||
|
from constants import CONTENT_DIRECTORY, OUTPUT_DIRECTORY, TEMPLATE_DIRECTORY, SERVE_PORT, SERVE_BIND_ADDRESS
|
||||||
|
|
||||||
from constants import OUTPUT_DIRECTORY, TEMPLATE_DIRECTORY, SERVE_PORT, SERVE_BIND_ADDRESS
|
|
||||||
|
|
||||||
class Verdandi(object):
|
class Verdandi(object):
|
||||||
|
|
||||||
template_directory = TEMPLATE_DIRECTORY
|
|
||||||
output_directory = OUTPUT_DIRECTORY
|
output_directory = OUTPUT_DIRECTORY
|
||||||
modules = []
|
modules = []
|
||||||
|
|
||||||
|
|
||||||
def __init__(self):
|
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):
|
def send_message(self, message):
|
||||||
|
@ -52,12 +51,46 @@ class Verdandi(object):
|
||||||
|
|
||||||
|
|
||||||
def run(self):
|
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.pass_messages()
|
||||||
self.collect_assets()
|
self.collect_assets()
|
||||||
self.render()
|
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)
|
os.chdir(self.output_directory)
|
||||||
httpd = SocketServer.TCPServer((SERVE_BIND_ADDRESS, SERVE_PORT), SimpleHTTPRequestHandler)
|
httpd = SocketServer.TCPServer((SERVE_BIND_ADDRESS, SERVE_PORT), SimpleHTTPRequestHandler)
|
||||||
print "Serving under %s:%d" % (SERVE_BIND_ADDRESS, SERVE_PORT)
|
print "Serving under %s:%d" % (SERVE_BIND_ADDRESS, SERVE_PORT)
|
||||||
httpd.serve_forever()
|
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()
|
||||||
|
|
Loading…
Reference in New Issue