import datetime, os, re
from bottle import error, route, run, static_file, template
# make article-to-html work with entries
# make index work with entries - later, they can be differentiated into features and weeklies with tags or title or whatever
def list_headlines(articles):
head = count_lines('entries/raw/res/head.txt')
result = []
text = []
for article in articles:
path = 'entries/' + article
with open(path) as f:
text = f.readlines()
b = []
b.append(path)
b.append(clean(text[head].replace('
',''), path))
result.append(b)
return result
def list_snippets(articles):
limit = 4
total = len(articles)
head = count_lines('entries/raw/res/head.txt')
tail = count_lines('entries/raw/res/tail.txt')
result = []
for article in articles:
path = 'entries/' + article
text = []
a = []
length = 0
with open('entries/' + article) as f:
text = f.readlines()
length = len(text)
a.append(text[head])
content = snip_article(find_content(article, length, head, tail), path)
if content.count('
'):
content += ''
a.append(content)
a.append(text[head + 1].replace('
',''))
a.append("social")
a.append(path)
result.append(a)
return result
def count_lines(fname):
with open(fname) as f:
for linenum, line in enumerate(f,1):
pass
return linenum
def find_content(article, length, head, tail):
content = ""
with open('entries/' + article) as f:
for pos, line in enumerate(f):
if pos > head + 1 and pos < length - tail:
content += line
return content
def clean(result, path):
result = result.replace('
','')
result = re.sub(r'', '', result)
result = result.replace('','')
result = re.sub(r'','',result)
result = re.sub(r'','',result)
return result
def snip_article(article, path):
article = clean(article, path)
limit = 300
result = article[0:min(len(article),limit)]
result = result.rsplit(' ',1)[0]
# cut off after 5 lines, too?
return result + " ... "
def sort_files(files):
files.sort(reverse=True)
return files#list(reversed(files))
def gather_files():
files = os.listdir('entries/')
files.remove('raw')
return files
# Static
@route('/static/css/')
def serve_css(filename):
return static_file(filename, root='static/css')
@route('/static/img/')
def serve_img(filename):
return static_file(filename, root='static/img')
# Routes
@error(404)
def error404(error):
return "unfortunately, a 404 error"
@route('/')
def index():
"""home page"""
info = {'css': 'index', 'news': list_headlines(sort_files(gather_files())[0:10]), 'title': 'chimchooree\'s dev space - blessfrey', 'year': datetime.datetime.now()}
return template('index.tpl', info)
@route('/game')
def game():
"""game page"""
info = {'css': 'game', 'title': 'blessfrey - about the game', 'year': datetime.datetime.now()}
return template('game.tpl', info)
@route('/presskit')
def presskit():
"""press page"""
info = {'css': 'presskit', 'title': 'blessfrey - presskit', 'year': datetime.datetime.now()}
return template('presskit.tpl', info)
@route('/diary')
def diary2():
return diary(0)
@route('/diary/')
def diary(page):
"""diary page"""
assert isinstance(page, int)
info = {'css': 'diary', 'title': 'blessfrey - developer diary', 'year': datetime.datetime.now(), 'snippets': list_snippets(sort_files(gather_files())), 'latest': list_headlines(sort_files(gather_files())[0:5]), 'total': len(gather_files()), 'limit': 4, 'cluster': 3, 'page': page}
return template('diary.tpl', info)
if __name__ == '__main__':
run()