]> jfr.im git - z_archive/twitter.git/blobdiff - twitter/api.py
Add a new response class that handles json dicts.
[z_archive/twitter.git] / twitter / api.py
index ad0df9a809af52f5d76cc5aaaeea42c82a464d49..b7ba19857e3939586b14eb5b85f521f7f20507ac 100644 (file)
@@ -70,12 +70,18 @@ class TwitterResponse(object):
 # Multiple inheritance makes my inner Java nerd cry. Why can't I just
 # add arbitrary attributes to list or str objects?! Guido, we need to
 # talk.
-class TwitterJsonResponse(TwitterResponse, list):
+class TwitterJsonListResponse(TwitterResponse, list):
     __doc__ = """Twitter JSON Response
     """ + TwitterResponse.__doc__
     def __init__(self, lst, headers):
         TwitterResponse.__init__(self, headers)
         list.__init__(self, lst)
+class TwitterJsonDictResponse(TwitterResponse, dict):
+    __doc__ = """Twitter JSON Response
+    """ + TwitterResponse.__doc__
+    def __init__(self, d, headers):
+        TwitterResponse.__init__(self, headers)
+        dict.__init__(self, d)
 
 class TwitterXmlResponse(TwitterResponse, str):
     __doc__ = """Twitter XML Response
@@ -148,8 +154,11 @@ class TwitterCall(object):
         try:
             handle = urllib2.urlopen(req)
             if "json" == self.format:
-                return TwitterJsonResponse(json.loads(handle.read()),
-                                           handle.headers)
+                res = json.loads(handle.read())
+                response_cls = (
+                    TwitterJsonListResponse if type(res) is list
+                    else TwitterJsonDictResponse)
+                return response_cls(res, handle.headers)
             else:
                 r = TwitterXmlResponse(handle.read())
                 r.headers = handle.headers
@@ -279,5 +288,6 @@ class Twitter(TwitterCall):
             secure=secure, uriparts=uriparts)
 
 
-__all__ = ["Twitter", "TwitterError", "TwitterHTTPError", "TwitterJsonResponse",
+__all__ = ["Twitter", "TwitterError", "TwitterHTTPError",
+           "TwitterJsonListResponse", "TwitterJsonDictResponse",
            "TwitterXmlResponse"]