1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
diff --git mythtv/bindings/python/tmdb3/tmdb3/request.py mythtv/bindings/python/tmdb3/tmdb3/request.py
index 2de4cd5..1b6663d 100644
--- src/mythtv/bindings/python/tmdb3/tmdb3/request.py
+++ src/mythtv/bindings/python/tmdb3/tmdb3/request.py
@@ -16,6 +16,7 @@ from urllib import urlencode
import urllib2
import json
import os
+import time
DEBUG = False
cache = Cache(filename='pytmdb3.cache')
@@ -113,21 +114,32 @@ class Request(urllib2.Request):
def readJSON(self):
"""Parse result from specified URL as JSON data."""
url = self.get_full_url()
- try:
- # catch HTTP error from open()
- data = json.load(self.open())
- except TMDBHTTPError, e:
+ tries = 0
+ while tries < 100:
try:
- # try to load whatever was returned
- data = json.loads(e.response)
- except:
- # cannot parse json, just raise existing error
+ # catch HTTP error from open()
+ data = json.load(self.open())
+ break
+ except TMDBHTTPError, e:
+ try:
+ # try to load whatever was returned
+ data = json.loads(e.response)
+ except:
+ # cannot parse json, just raise existing error
+ raise e
+ else:
+ # Check for error code of 25 which means we are doing more than 40 requests per 10 seconds
+ if data.get('status_code', 1) ==25:
+ # Sleep and retry query.
+ if DEBUG:
+ print 'Retry after {0} seconds'.format(max(float(e.headers['retry-after']),10))
+ time.sleep(max(float(e.headers['retry-after']),10))
+ continue
+ else:
+ # response parsed, try to raise error from TMDB
+ handle_status(data, url)
+ # no error from TMDB, just raise existing error
raise e
- else:
- # response parsed, try to raise error from TMDB
- handle_status(data, url)
- # no error from TMDB, just raise existing error
- raise e
handle_status(data, url)
if DEBUG:
import pprint
diff --git mythtv/bindings/python/tmdb3/tmdb3/tmdb_exceptions.py mythtv/bindings/python/tmdb3/tmdb3/tmdb_exceptions.py
index f85fbcf..5020c4a 100644
--- src/mythtv/bindings/python/tmdb3/tmdb3/tmdb_exceptions.py
+++ src/mythtv/bindings/python/tmdb3/tmdb3/tmdb_exceptions.py
@@ -96,6 +96,7 @@ class TMDBHTTPError(TMDBError):
def __init__(self, err):
self.httperrno = err.code
self.response = err.fp.read()
+ self.headers = err.headers
super(TMDBHTTPError, self).__init__(str(err))
|