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

Changed files
+30 -19
+18 -7
feed_manager.py
···
+
from fnmatch import fnmatchcase
+
from feeds.battle import BattleFeed
from feeds.rapidfire import RapidFireFeed
from feeds.popular import PopularFeed
···
for feed in self.feeds.values():
feed.process_commit(commit)
-
def serve_feed(self, feed_uri, limit, offset, langs):
-
feed = self.feeds.get(feed_uri)
-
if feed is not None:
-
return feed.serve_feed(limit, offset, langs)
+
def serve_feed(self, feed_uri, limit, offset, langs, debug=False):
+
for pattern, feed in self.feeds.items():
+
if fnmatchcase(feed_uri, pattern):
+
break
+
else:
+
raise Exception('no matching feed pattern found')
+
+
if '*' in pattern and debug:
+
return feed.serve_wildcard_feed_debug(feed_uri, limit, offset, langs)
+
+
elif '*' in pattern and not debug:
+
return feed.serve_wildcard_feed(feed_uri, limit, offset, langs)
-
def serve_feed_debug(self, feed_uri, limit, offset, langs):
-
feed = self.feeds.get(feed_uri)
-
if feed is not None:
+
elif '*' not in pattern and debug:
return feed.serve_feed_debug(limit, offset, langs)
+
+
elif '*' not in pattern and not debug:
+
return feed.serve_feed(limit, offset, langs)
def commit_changes(self):
for feed in self.feeds.values():
+12 -12
feedweb.py
···
except ValueError:
offset = 0
-
if request.args['feed'].endswith('-dev'):
-
feed_uri = request.args['feed'].replace('-dev', '')
+
feed_uri = request.args['feed']
+
if feed_uri.endswith('-dev'):
+
feed_uri = feed_uri.replace('-dev', '')
else:
-
feed_uri = request.args['feed']
-
-
feed_requests.labels(feed_uri).inc()
+
(prefix, sep, rkey) = feed_uri.rpartition('/')
+
feed_requests.labels(rkey).inc()
-
langs = request.accept_languages
+
if request.args.getlist('langs'):
+
req_langs = request.args.getlist('langs')
+
langs = LanguageAccept([(l, 1) for l in req_langs])
+
else:
+
langs = request.accept_languages
if request.args.get('debug', '0') == '1':
-
if request.args.getlist('langs'):
-
req_langs = request.args.getlist('langs')
-
langs = LanguageAccept([(l, 1) for l in req_langs])
-
headers = {'Content-Type': 'text/plain; charset=utf-8'}
-
debug = feed_manager.serve_feed_debug(feed_uri, limit, offset, langs)
+
debug = feed_manager.serve_feed(feed_uri, limit, offset, langs, debug=True)
return debug, headers
-
posts = feed_manager.serve_feed(feed_uri, limit, offset, langs)
+
posts = feed_manager.serve_feed(feed_uri, limit, offset, langs, debug=False)
offset += len(posts)
return dict(cursor=str(offset), feed=[dict(post=uri) for uri in posts])