You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
4.9 KiB
Python
169 lines
4.9 KiB
Python
import datetime, os, re
|
|
from bottle import error, route, run, static_file, template, TEMPLATE_PATH
|
|
|
|
loc = 'diary/entries/'
|
|
|
|
def list_headlines(articles):
|
|
result = []
|
|
text = []
|
|
|
|
for article in articles:
|
|
path = loc + article
|
|
|
|
with open(path) as f:
|
|
text = f.readlines()
|
|
|
|
b = []
|
|
b.append(path)
|
|
b.append(clean(text[0].replace('<br>','')))
|
|
result.append(b)
|
|
return result
|
|
|
|
def retrieve_article(page):
|
|
text = []
|
|
string = ""
|
|
with open(loc + str(page)) as f:
|
|
text = f.readlines()
|
|
for line in text:
|
|
string += line
|
|
return string
|
|
|
|
def list_snippets(articles):
|
|
limit = 4
|
|
total = len(articles)
|
|
result = []
|
|
|
|
for article in articles:
|
|
path = loc + article
|
|
text = []
|
|
a = []
|
|
length = 0
|
|
with open(loc + article) as f:
|
|
text = f.readlines()
|
|
length = len(text)
|
|
a.append(clean(text[0])) # title
|
|
content = snip_article(find_content(article, length), path)
|
|
|
|
if content.count('<ul>') > content.count('</ul>'):
|
|
content += '</ul>'
|
|
a.append(content) # snippet
|
|
a.append(text[1].replace('<br>','')) # timestamp
|
|
a.append('/' + path.replace('.tpl','')) # URL
|
|
a.append(clean(text[0]).replace(' ','+')) # social media title
|
|
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):
|
|
content = ""
|
|
with open(loc + article) as f:
|
|
for pos, line in enumerate(f):
|
|
if pos > 1 and pos < length:
|
|
content += line
|
|
return content
|
|
|
|
def clean(result):
|
|
result = result.replace('<br>','')
|
|
result = re.sub(r'<a href=.*?>', '', result)
|
|
result = result.replace('</a>','')
|
|
result = re.sub(r'<h\d>','',result)
|
|
result = re.sub(r'</h\d>','',result)
|
|
return result
|
|
|
|
def snip_article(article, path):
|
|
article = clean(article)
|
|
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(loc)
|
|
files.remove('raw')
|
|
return files
|
|
|
|
# Static
|
|
|
|
@route('/static/css/<filename:path>')
|
|
def serve_css(filename):
|
|
return static_file(filename, root='static/css')
|
|
|
|
@route('/static/img/<filename:path>')
|
|
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/<page:int>')
|
|
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)
|
|
|
|
@route('/diary/entries/<page:int>')
|
|
def entry(page):
|
|
"""diary entry"""
|
|
info = {'css': 'feature', 'title': 'blessfrey - developer diary', 'year': datetime.datetime.now(), 'entry': retrieve_article(page), 'header': "More Articles", 'dates': "Dates", 'articles': "Articles", 'latest': list_headlines(sort_files(gather_files())[0:5]), 'page': page}
|
|
abs_app_dir_path = os.path.dirname(os.path.realpath(__file__))
|
|
abs_views_path = os.path.join(abs_app_dir_path, 'views')
|
|
TEMPLATE_PATH.insert(0, abs_views_path )
|
|
return template(os.path.join(abs_views_path,'feature.tpl'), info)
|
|
|
|
@route('/box')
|
|
def box():
|
|
"""personal page"""
|
|
info = {'css': 'box', 'title': 'chimchooree\'s personal page', 'year': datetime.datetime.now()}
|
|
return template('box.tpl', info)
|
|
|
|
@route('/credits')
|
|
def credits():
|
|
"""credits page"""
|
|
info = {'css': 'box', 'title': 'blessfrey - credits', 'year': datetime.datetime.now()}
|
|
return template('credits.tpl', info)
|
|
|
|
@route('/contact')
|
|
def contact():
|
|
"""contact page"""
|
|
info = {'css': 'box', 'title': 'blessfrey - contact chimchooree', 'year': datetime.datetime.now()}
|
|
return template('contact.tpl', info)
|
|
|
|
if __name__ == '__main__':
|
|
run()
|