
These occur when too many requests are coming from a Tor exit node. Before, there would be an error page with an exception instructing users to report the issue. But this is an expected and persistent issue.
50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
from youtube import util
|
|
import flask
|
|
import settings
|
|
import traceback
|
|
from sys import exc_info
|
|
yt_app = flask.Flask(__name__)
|
|
yt_app.url_map.strict_slashes = False
|
|
|
|
|
|
yt_app.add_url_rule('/settings', 'settings_page', settings.settings_page, methods=['POST', 'GET'])
|
|
|
|
@yt_app.route('/')
|
|
def homepage():
|
|
return flask.render_template('home.html', title="Youtube local")
|
|
|
|
|
|
theme_names = {
|
|
0: 'light_theme',
|
|
1: 'gray_theme',
|
|
2: 'dark_theme',
|
|
}
|
|
|
|
@yt_app.context_processor
|
|
def inject_theme_preference():
|
|
return {
|
|
'theme_path': '/youtube.com/static/' + theme_names[settings.theme] + '.css',
|
|
}
|
|
|
|
@yt_app.template_filter('commatize')
|
|
def commatize(num):
|
|
if num is None:
|
|
return ''
|
|
if isinstance(num, str):
|
|
num = int(num)
|
|
return '{:,}'.format(num)
|
|
|
|
@yt_app.errorhandler(500)
|
|
def error_page(e):
|
|
if (exc_info()[0] == util.FetchError
|
|
and exc_info()[1].code == '429'
|
|
and settings.route_tor
|
|
):
|
|
error_message = ('Error: Youtube blocked the request because the Tor'
|
|
' exit node is overcrowded. Try getting a new exit node by'
|
|
' restarting the Tor Browser.')
|
|
if exc_info()[1].ip:
|
|
error_message += ' Exit node IP address: ' + exc_info()[1].ip
|
|
return flask.render_template('error.html', error_message=error_message), 502
|
|
return flask.render_template('error.html', traceback=traceback.format_exc()), 500
|