X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;ds=inline;f=reddit_renderer.py;h=192bc206e75b860661816837d396afc3059ac6b1;hb=477c84bcdefc573278ec8ed8974d5be8baac562d;hp=097bd82f55f44dc85508eb54cef2037e0c1b27d3;hpb=c06bfef53f70551e7920bc4facce27f47b89e2ba;p=kiosk.git diff --git a/reddit_renderer.py b/reddit_renderer.py index 097bd82..192bc20 100644 --- a/reddit_renderer.py +++ b/reddit_renderer.py @@ -1,20 +1,22 @@ #!/usr/bin/env python3 -import praw -import random -from typing import Callable, Dict, List +import logging +from typing import Callable, Dict, Iterable, List, Set + +import praw # type: ignore -import constants import file_writer import grab_bag import page_builder import profanity_filter import renderer -import renderer_catalog -import secrets +import kiosk_secrets as secrets + + +logger = logging.getLogger(__file__) -class reddit_renderer(renderer.debuggable_abstaining_renderer): +class reddit_renderer(renderer.abstaining_renderer): """A renderer to pull text content from reddit.""" def __init__( @@ -24,9 +26,9 @@ class reddit_renderer(renderer.debuggable_abstaining_renderer): *, min_votes: int = 20, font_size: int = 24, - additional_filters: List[Callable[[str], bool]] = [], + additional_filters: Iterable[Callable[[str], bool]] = [], ): - super(reddit_renderer, self).__init__(name_to_timeout_dict, True) + super().__init__(name_to_timeout_dict) self.subreddit_list = subreddit_list self.praw = praw.Reddit( client_id=secrets.reddit_client_id, @@ -36,52 +38,52 @@ class reddit_renderer(renderer.debuggable_abstaining_renderer): self.min_votes = min_votes self.font_size = font_size self.messages = grab_bag.grab_bag() - self.filters = [profanity_filter.profanity_filter().contains_bad_words] + self.filters: List[Callable[..., bool]] = [ + profanity_filter.ProfanityFilter().contains_bad_word + ] self.filters.extend(additional_filters) - self.deduper = set() - - def debug_prefix(self) -> str: - x = "" - for subreddit in self.subreddit_list: - x += f"{subreddit} " - return f"reddit({x.strip()})" + self.deduper: Set[str] = set() def periodic_render(self, key: str) -> bool: - self.debug_print('called for "%s"' % key) + logger.debug('called for "%s"' % key) if key == "Scrape": return self.scrape_reddit() elif key == "Shuffle": return self.shuffle_messages() else: - raise error("Unexpected operation") + raise Exception("Unexpected operation") def append_message(self, messages: List[str]) -> None: for msg in messages: - if msg.title in self.deduper: + title = str(msg.title) + if title in self.deduper: continue filtered = "" - for filter in self.filters: - if filter(msg.title) is True: - filtered = filter.__name__ + for filt in self.filters: + if filt(title) is True: + filtered = filt.__name__ break if filtered != "": - print(f'Filter {filtered} struck down "{msg.title}"') + logger.info( + f'Filter {filtered} struck down "{title}"' + ) continue if msg.ups < self.min_votes: - print(f'"{msg.title}" doesn\'t have enough upvotes to be interesting') + logger.debug( + f'"{title}" doesn\'t have enough upvotes to be interesting' + ) continue - try: - self.deduper.add(msg.title) - content = f"{msg.ups}" - if ( + self.deduper.add(title) + content = f"{msg.ups}" + if ( msg.thumbnail != "self" and msg.thumbnail != "default" and msg.thumbnail != "" - ): - content = f'' - self.messages.add( - f""" + ): + content = f'' + self.messages.add( +f"""
- {msg.title} ({msg.author}) + {title} ({msg.author}) |