this repo has no description
1#!/usr/bin/env python3 2 3from flask import Flask, request, jsonify 4from prometheus_client import Counter, make_wsgi_app 5from werkzeug.middleware.dispatcher import DispatcherMiddleware 6from werkzeug.datastructures import LanguageAccept 7 8from feed_manager import feed_manager 9 10feed_requests = Counter('feed_requests', 'requests by feed URI', ['feed']) 11 12app = Flask(__name__) 13 14@app.route('/xrpc/app.bsky.feed.getFeedSkeleton') 15def get_feed_skeleton(): 16 try: 17 limit = int(request.args.get('limit', 50)) 18 except ValueError: 19 limit = 50 20 21 if 'nz-interesting' in request.args['feed']: 22 offset = request.args.get('cursor') 23 else: 24 try: 25 offset = int(request.args.get('cursor', 0)) 26 except ValueError: 27 offset = 0 28 29 feed_uri = request.args['feed'] 30 if feed_uri.endswith('-dev'): 31 feed_uri = feed_uri.replace('-dev', '') 32 else: 33 (prefix, sep, rkey) = feed_uri.rpartition('/') 34 feed_requests.labels(rkey).inc() 35 36 if request.args.getlist('langs'): 37 req_langs = request.args.getlist('langs') 38 langs = LanguageAccept([(l, 1) for l in req_langs]) 39 else: 40 langs = request.accept_languages 41 42 if request.args.get('debug', '0') == '1': 43 headers = {'Content-Type': 'text/plain; charset=utf-8'} 44 debug = feed_manager.serve_feed(feed_uri, limit, offset, langs, debug=True) 45 return debug, headers 46 47 posts = feed_manager.serve_feed(feed_uri, limit, offset, langs, debug=False) 48 if isinstance(posts, dict): 49 return posts 50 51 if len(posts) < limit: 52 return dict(feed=[dict(post=uri) for uri in posts]) 53 else: 54 offset += len(posts) 55 return dict(cursor=str(offset), feed=[dict(post=uri) for uri in posts]) 56 57app.wsgi_app = DispatcherMiddleware(app.wsgi_app, { 58 '/metrics': make_wsgi_app() 59}) 60 61if __name__ == '__main__': 62 from feedweb_utils import did_doc 63 app.add_url_rule('/.well-known/did.json', view_func=did_doc) 64 65 app.run(debug=True)