Skip to content

Commit

Permalink
Added inotify code for autorebuild
Browse files Browse the repository at this point in the history
Made menuitem and news feed drop state on initial None message
  • Loading branch information
LongHairedHacker committed Apr 22, 2016
1 parent 871cab9 commit fdd2cd1
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 26 deletions.
34 changes: 16 additions & 18 deletions mixins/menuitemmixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,29 @@ class MenuItemMixin(MessageMixin):
menu_label = None
menu_parent = None
url = "index.html"

menu_items = None

def process_message(self, message):
other_messages = super(MenuItemMixin, self).process_message(message)

if message == None:
return other_messages + [{'type': 'menu_add_item',
'title' : self.menu_title,
self.menu_items = {}
return other_messages + [{'type': 'menu_add_item',
'title' : self.menu_title,
'parent' : self.menu_parent,
'label' : self.menu_label,
'url' : self.url}]

elif message['type'] == 'menu_add_item':
if self.menu_items == None:
self.menu_items = {}

elif message['type'] == 'menu_add_item':

label = message['label']
if label in self.menu_items.keys():
print '[Warn] Depulicate menu item label: %s in %s' % (label, self.menu_label)
return other_messages

self.menu_items[label] = {}

for key in ['title', 'parent', 'label', 'url']:
self.menu_items[label][key] = message[key]

Expand All @@ -41,14 +40,14 @@ def get_menu_path(self):
path = [self.menu_label]
while self.menu_items[path[0]]['parent'] != None:
path = [self.menu_items[path[0]]['parent']] + path

return path


def get_menu_level(self, parent):
return filter(lambda x: x['parent'] == parent, self.menu_items.values())


def generate_levels(self, path):
level = path[0]
next_level = None
Expand All @@ -69,16 +68,16 @@ def generate_levels(self, path):
res += '</li>'
else:
res += '<li><a href="/%s">%s</a></li>' % (item['url'], item['title'])

res += '</ul>'

return res

def generate_menu(self):

path = self.get_menu_path()
return self.generate_levels([None] + path)

return self.generate_levels([None] + path)


def get_context(self):
Expand All @@ -87,4 +86,3 @@ def get_context(self):
context['menu'] = self.generate_menu()

return context

4 changes: 3 additions & 1 deletion modules/newsfeed.py
Original file line number Diff line number Diff line change
Expand Up @@ -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']]

Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -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
45 changes: 39 additions & 6 deletions verdandi.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -52,12 +51,46 @@ def render(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.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()

0 comments on commit fdd2cd1

Please sign in to comment.