X-Git-Url: https://jfr.im/git/z_archive/twitter.git/blobdiff_plain/aef72b31d8e84c39435b720f6124db71109e3f9e..afa71268458f4c96e101729cc99b3c3b1421e650:/twitter/api.py diff --git a/twitter/api.py b/twitter/api.py index ad0df9a..6271821 100644 --- a/twitter/api.py +++ b/twitter/api.py @@ -67,19 +67,22 @@ class TwitterResponse(object): return int(self.headers.getheader('X-RateLimit-Reset')) -# 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): - __doc__ = """Twitter JSON Response - """ + TwitterResponse.__doc__ - def __init__(self, lst, headers): - TwitterResponse.__init__(self, headers) - list.__init__(self, lst) +def wrap_response(response, headers): + response_typ = type(response) + if response_typ is bool: + # HURF DURF MY NAME IS PYTHON AND I CAN'T SUBCLASS bool. + response_typ = int + + class WrappedTwitterResponse(response_typ, TwitterResponse): + __doc__ = TwitterResponse.__doc__ + + def __init__(self, response): + if response_typ is not int: + response_typ.__init__(self, response) + TwitterResponse.__init__(self, headers) + + return WrappedTwitterResponse(response) -class TwitterXmlResponse(TwitterResponse, str): - __doc__ = """Twitter XML Response - """ + TwitterResponse.__doc__ class TwitterCall(object): @@ -148,12 +151,10 @@ 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()) + return wrap_response(res, handle.headers) else: - r = TwitterXmlResponse(handle.read()) - r.headers = handle.headers - return r + return wrap_response(str(handle.read()), handle.headers) except urllib2.HTTPError, e: if (e.code == 304): return [] @@ -279,5 +280,4 @@ class Twitter(TwitterCall): secure=secure, uriparts=uriparts) -__all__ = ["Twitter", "TwitterError", "TwitterHTTPError", "TwitterJsonResponse", - "TwitterXmlResponse"] +__all__ = ["Twitter", "TwitterError", "TwitterHTTPError", "TwitterResponse"]