#!/usr/bin/env python3 import sys import traceback import os from threading import Thread import time from datetime import datetime import constants import renderer import renderer import renderer_catalog import chooser import logging import trigger_catalog import utils def filter_news_during_dinnertime(page): now = datetime.now() is_dinnertime = now.hour >= 17 and now.hour <= 20 return (not is_dinnertime or not ("cnn" in page or "news" in page or "mynorthwest" in page or "seattle" in page or "stranger" in page or "twitter" in page or "wsj" in page)) def thread_change_current(): page_chooser = chooser.weighted_random_chooser_with_triggers( trigger_catalog.get_triggers(), [ filter_news_during_dinnertime ]) swap_page_target = 0 last_page = "" while True: now = time.time() (page, triggered) = page_chooser.choose_next_page() if triggered: print('chooser[%s] - WE ARE TRIGGERED.' % utils.timestamp()) if page != last_page: print('chooser[%s] - EMERGENCY PAGE %s LOAD NEEDED' % ( utils.timestamp(), page)) try: f = open(os.path.join(constants.pages_dir, 'current.shtml'), 'w') emit_wrapped(f, page) f.close() except: print('chooser[%s] - page does not exist?!' % ( utils.timestamp())) continue last_page = page swap_page_target = now + constants.refresh_period_sec # Also notify XMLHTTP clients that they need to refresh now. path = os.path.join(constants.pages_dir, 'reload_immediately.html') f = open(path, 'w') f.write('Reload, suckers!') f.close() # Fix this hack... maybe read the webserver logs and see if it # actually was picked up? time.sleep(0.750) os.remove(path) elif now >= swap_page_target: if (page == last_page): print(('chooser[%s] - nominal choice got the same page...' % ( utils.timestamp()))) continue print('chooser[%s] - nominal choice of %s' % (utils.timestamp(), page)) try: f = open(os.path.join(constants.pages_dir, 'current.shtml'), 'w') emit_wrapped(f, page) f.close() except: print('chooser[%s] - page does not exist?!' % (utils.timestamp())) continue last_page = page swap_page_target = now + constants.refresh_period_sec time.sleep(1) def pick_background_color(): now = datetime.now() if now.hour <= 6 or now.hour >= 21: return "E6B8B8" elif now.hour == 7 or now.hour == 20: return "EECDCD" else: return "FFFFFF" def emit_wrapped(f, filename): age = utils.describe_age_of_file_briefly("pages/%s" % filename) bgcolor = pick_background_color() f.write("""
|
|
|
%s @ %s ago. |