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()