From a8d74ba082404bac016b210d151fb2d46cbd54d9 Mon Sep 17 00:00:00 2001 From: James Taylor Date: Thu, 20 Dec 2018 01:11:50 -0800 Subject: Correctly handle case where channel doesn't exist --- http_errors.py | 11 +++++++++++ server.py | 6 +++++- youtube/channel.py | 6 ++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 http_errors.py diff --git a/http_errors.py b/http_errors.py new file mode 100644 index 0000000..975e0d4 --- /dev/null +++ b/http_errors.py @@ -0,0 +1,11 @@ +class Error4xx(Exception): + pass +class Error404(Error4xx): + pass + +class Error5xx(Exception): + pass +class Error500(Error5xx): + pass +class Error502(Error5xx): + pass diff --git a/server.py b/server.py index beab5c0..fc9a731 100644 --- a/server.py +++ b/server.py @@ -4,6 +4,7 @@ import gevent.socket from gevent.pywsgi import WSGIServer from youtube.youtube import youtube +import http_errors import urllib import socket import socks @@ -114,7 +115,10 @@ def site_dispatch(env, start_response): yield error_code('404 Not Found', start_response) return - + except http_errors.Error404 as e: + start_response('404 Not Found', ()) + yield str(e).encode('utf-8') + except socket.error as e: start_response('502 Bad Gateway', ()) print(str(e)) diff --git a/youtube/channel.py b/youtube/channel.py index 8c44700..d246495 100644 --- a/youtube/channel.py +++ b/youtube/channel.py @@ -1,6 +1,7 @@ import base64 import youtube.common as common from youtube.common import default_multi_get, URL_ORIGIN, get_thumbnail_url, video_id +import http_errors import urllib import json from string import Template @@ -193,6 +194,11 @@ def channel_videos_html(polymer_json, current_page=1, current_sort=3, number_of_ for alert in response['alerts']: result += alert['alertRenderer']['text']['simpleText'] + '\n' return result + elif 'errors' in response['responseContext']: + for error in response['responseContext']['errors']['error']: + if error['code'] == 'INVALID_VALUE' and error['location'] == 'browse_id': + raise http_errors.Error404('This channel does not exist') + raise else: raise channel_url = microformat['urlCanonical'].rstrip('/') -- cgit v1.2.3