git.fiddlerwoaroof.com
main.py
2588d43a
 import feedparser
 from flask import Flask, url_for, redirect, request, render_template, make_response
 import jinja_filters
 import json
 import logging
 import random
 
 app = Flask(__name__)
 app.template_filter('mesc')(jinja_filters.markdown_quote)
 
 def count_chars(word):
     special = set('ijltf')
     return sum( (0.5 if l in special else 1) for l in word )
 
 def divide_entries(entries):
     def chars_to_lines(entry):
         title, _, __, is_head, _ = entry
         divisor = 30 if is_head else 43
         char_count = len(title)
         line_count = char_count / divisor
         line_count = max(line_count, 1) # everything always takes at least one line
         return line_count
 
     tagged_entries = [(chars_to_lines(x), x) for x in entries] # 36: no. chars in line
     total_lines = sum(x for x,_ in tagged_entries)
     target_lines = total_lines / 3
 
     #target_chars = total_chars / 3
     #average_chars = total_chars // len(entries)
 
     #target_ents = len(entries) / 3
     #average_target_chars = average_chars * target_ents
 
     #print(target_chars, average_target_chars)
 
     #target_chars = (target_chars*2 + average_target_chars*3) // 5
 
     #print(target_chars)
 
     columns = [[]]
     accum = 0
     print()
     for n, entry in tagged_entries:
         accum += n
         if (
             (accum > target_lines and len(columns) < 3)
         ):
             columns.append([])
             print(accum)
             accum = accum - target_lines
         columns[-1].append(entry)
     print(accum)
     return columns
 
 import redis
 import blog_puller
 def get_columns(urls):
     r = redis.Redis()
     feeds = blog_puller.Feeds(urls, r)
     entries = []
     for feed in feeds.feeds:
         entries.append( (feed.title, feed.link, False, True, None) )
         for entry in feed.entries:
             entries.append( (entry.title, entry.url, entry.sep, False, None) )
 
     return divide_entries(entries)
 
 
 def get_blogs():
     with open('blogs.json') as f:
         blogs = json.load(f)
     columns = get_columns(blogs)
     for x in columns:
         a,b,_,d, e = x.pop()
         x.append( (a,b,False,d, e) )
     return columns
 
 @app.route("/")
 def main(idx=0):
     return render_template('main.html', columns=get_blogs())
 
 @app.route("/<fn>.md")
 @app.route("/.md")
 def markdown(idx=0, fn=None):
     return  make_response(render_template('markdown.md', columns=get_blogs()),
                 200, {'Content-Type': 'text/markdown; charset=utf-8'})
 
 @app.route("/toolbar/<path:url>")
 def toolbar(url):
     return render_template('toolbar.html', url=url)
 
 @app.route("/show/<path:url>")
 def ope(url=None):
     if url is not None:
         resp = make_response(render_template('frame.html', target_site=url), 200)
         resp.headers['X-Frame-Options'] = 'GOFORIT'
         return resp
     else:
         return 'not found'
 
b80fb8d4
 app.run('172.16.1.2', port=8080, debug=True)