this repo has no description

feat: drop popular feed

Changed files
-58
feeds
-2
feed_manager.py
··· 2 2 3 3 from feeds.battle import BattleFeed 4 4 from feeds.rapidfire import RapidFireFeed 5 - from feeds.popular import PopularFeed 6 5 from feeds.homeruns import HomeRunsTeamFeed 7 6 from feeds.norazone_interesting import NoraZoneInteresting 8 7 from feeds.sevendirtywords import SevenDirtyWordsFeed ··· 52 51 pass 53 52 54 53 feed_manager = FeedManager() 55 - feed_manager.register(PopularFeed)
-56
feeds/popular.py
··· 1 - import logging 2 - 3 - import apsw 4 - import apsw.ext 5 - 6 - from . import BaseFeed 7 - 8 - class PopularFeed(BaseFeed): 9 - FEED_URI = 'at://did:plc:4nsduwlpivpuur4mqkbfvm6a/app.bsky.feed.generator/popular' 10 - 11 - def __init__(self): 12 - # use the posts from the most-liked feed for this 13 - self.db_cnx = apsw.Connection('db/mostliked.db') 14 - self.db_cnx.pragma('foreign_keys', True) 15 - self.db_cnx.pragma('journal_mode', 'WAL') 16 - 17 - def process_commit(self, commit): 18 - pass 19 - 20 - def commit_changes(self): 21 - pass 22 - 23 - def generate_sql(self, limit, offset, langs): 24 - bindings = [] 25 - sql = """ 26 - select posts.uri, create_ts, likes, lang, unixepoch('now') - create_ts as age_seconds, 27 - exp( -1 * ( ( unixepoch('now') - create_ts ) / 1800.0 ) ) as decay, 28 - likes * exp( -1 * ( ( unixepoch('now') - create_ts ) / 1800.0 ) ) as score 29 - from posts 30 - left join langs on posts.uri = langs.uri 31 - where 32 - """ 33 - if not '*' in langs: 34 - lang_values = list(langs.values()) 35 - bindings.extend(lang_values) 36 - sql += " OR ".join(['lang = ?'] * len(lang_values)) 37 - else: 38 - sql += " 1=1 " 39 - sql += """ 40 - order by score desc 41 - limit ? offset ? 42 - """ 43 - bindings.extend([limit, offset]) 44 - return sql, bindings 45 - 46 - def serve_feed(self, limit, offset, langs): 47 - sql, bindings = self.generate_sql(limit, offset, langs) 48 - cur = self.db_cnx.execute(sql, bindings) 49 - return [row[0] for row in cur] 50 - 51 - def serve_feed_debug(self, limit, offset, langs): 52 - sql, bindings = self.generate_sql(limit, offset, langs) 53 - return apsw.ext.format_query_table( 54 - self.db_cnx, sql, bindings, 55 - string_sanitize=2, text_width=9999, use_unicode=True 56 - )