Source code for microraiden.examples.demo_resources.fortunes
import random
from microraiden.proxy.resources import Expensive
from flask import make_response, request, render_template_string
import io
import os
import logging
log = logging.getLogger(__name__)
[docs]class Fortunes:
def __init__(self, fortunes_file):
with io.open(fortunes_file, 'r', encoding='utf8') as fp:
self.quotes = Fortunes.load(fp)
[docs] @staticmethod
def load(fp):
ret = []
quote = ''
for line in fp:
if line.strip() == '%':
ret.append(quote)
quote = ''
else:
quote += line
return ret
[docs] def get(self):
log.error("%d" % len(self.quotes))
return random.choice(self.quotes) # nosec
[docs]class PaywalledFortune(Expensive):
def __init__(self, filepath, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fortunes = Fortunes(filepath)
with open(os.path.join(os.path.dirname(__file__), 'templates', 'fortunes.html')) as fp:
self.template = fp.read()
[docs] def get(self, url):
fortune = self.fortunes.get()
if 'text/html' in request.accept_mimetypes:
if '―' in fortune:
fortune, author = [f.strip() for f in fortune.rsplit('―', 1)]
else:
fortune, author = fortune, ''
fortune = fortune.replace('\n', ' ').strip()
headers = {'Content-Type': 'text/html; charset=utf-8'}
return render_template_string(
self.template,
fortune=fortune,
author=author,
back_url='/',
), 200, headers
else:
headers = {'Content-Type': 'text/plain; charset=utf-8'}
return make_response(fortune, 200, headers)