this repo has no description

Add support for feed pattern wildcards and general cleanup

- feed_manager.serve_feed now uses fnmatchcase to find backing feedgen
- feed_manager.serve_feed_debug has been merged into serve_feed with a new debug keyword
- don't track dev feed requests in Prometheus

+30 -19
+18 -7
feed_manager.py
··· 1 + from fnmatch import fnmatchcase 2 + 1 3 from feeds.battle import BattleFeed 2 4 from feeds.rapidfire import RapidFireFeed 3 5 from feeds.popular import PopularFeed ··· 13 15 for feed in self.feeds.values(): 14 16 feed.process_commit(commit) 15 17 16 - def serve_feed(self, feed_uri, limit, offset, langs): 17 - feed = self.feeds.get(feed_uri) 18 - if feed is not None: 19 - return feed.serve_feed(limit, offset, langs) 18 + def serve_feed(self, feed_uri, limit, offset, langs, debug=False): 19 + for pattern, feed in self.feeds.items(): 20 + if fnmatchcase(feed_uri, pattern): 21 + break 22 + else: 23 + raise Exception('no matching feed pattern found') 24 + 25 + if '*' in pattern and debug: 26 + return feed.serve_wildcard_feed_debug(feed_uri, limit, offset, langs) 27 + 28 + elif '*' in pattern and not debug: 29 + return feed.serve_wildcard_feed(feed_uri, limit, offset, langs) 20 30 21 - def serve_feed_debug(self, feed_uri, limit, offset, langs): 22 - feed = self.feeds.get(feed_uri) 23 - if feed is not None: 31 + elif '*' not in pattern and debug: 24 32 return feed.serve_feed_debug(limit, offset, langs) 33 + 34 + elif '*' not in pattern and not debug: 35 + return feed.serve_feed(limit, offset, langs) 25 36 26 37 def commit_changes(self): 27 38 for feed in self.feeds.values():
+12 -12
feedweb.py
··· 25 25 except ValueError: 26 26 offset = 0 27 27 28 - if request.args['feed'].endswith('-dev'): 29 - feed_uri = request.args['feed'].replace('-dev', '') 28 + feed_uri = request.args['feed'] 29 + if feed_uri.endswith('-dev'): 30 + feed_uri = feed_uri.replace('-dev', '') 30 31 else: 31 - feed_uri = request.args['feed'] 32 - 33 - feed_requests.labels(feed_uri).inc() 32 + (prefix, sep, rkey) = feed_uri.rpartition('/') 33 + feed_requests.labels(rkey).inc() 34 34 35 - langs = request.accept_languages 35 + if request.args.getlist('langs'): 36 + req_langs = request.args.getlist('langs') 37 + langs = LanguageAccept([(l, 1) for l in req_langs]) 38 + else: 39 + langs = request.accept_languages 36 40 37 41 if request.args.get('debug', '0') == '1': 38 - if request.args.getlist('langs'): 39 - req_langs = request.args.getlist('langs') 40 - langs = LanguageAccept([(l, 1) for l in req_langs]) 41 - 42 42 headers = {'Content-Type': 'text/plain; charset=utf-8'} 43 - debug = feed_manager.serve_feed_debug(feed_uri, limit, offset, langs) 43 + debug = feed_manager.serve_feed(feed_uri, limit, offset, langs, debug=True) 44 44 return debug, headers 45 45 46 - posts = feed_manager.serve_feed(feed_uri, limit, offset, langs) 46 + posts = feed_manager.serve_feed(feed_uri, limit, offset, langs, debug=False) 47 47 offset += len(posts) 48 48 49 49 return dict(cursor=str(offset), feed=[dict(post=uri) for uri in posts])