summaryrefslogtreecommitdiffstats
path: root/abs/core/mythtv/stable-0.27/mythtv/tmdb3_query_limit.2.diff
blob: 7b4453702e27208f2927c74befed70464407e133 (plain)
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))