aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Taylor <user234683@users.noreply.github.com>2018-12-20 01:11:50 -0800
committerJames Taylor <user234683@users.noreply.github.com>2018-12-20 01:11:50 -0800
commita8d74ba082404bac016b210d151fb2d46cbd54d9 (patch)
treedd8f6409edf999ec2ea0f0b1d2e05453dce3f949
parent9d1c688310849f897c5fc7b3f37ab3ddeac67a9b (diff)
downloadyt-local-a8d74ba082404bac016b210d151fb2d46cbd54d9.tar.lz
yt-local-a8d74ba082404bac016b210d151fb2d46cbd54d9.tar.xz
yt-local-a8d74ba082404bac016b210d151fb2d46cbd54d9.zip
Correctly handle case where channel doesn't exist
-rw-r--r--http_errors.py11
-rw-r--r--server.py6
-rw-r--r--youtube/channel.py6
3 files changed, 22 insertions, 1 deletions
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('/')