diff options
author | Krzysztof Klinikowski <kkszysiu@gmail.com> | 2010-09-05 23:26:42 +0200 |
---|---|---|
committer | Krzysztof Klinikowski <kkszysiu@gmail.com> | 2010-09-05 23:26:42 +0200 |
commit | 9f7c58fe538f6d2054393797f0fc671b78cd14c4 (patch) | |
tree | b348c75c6ab2259902c5f046a4fc603f2eef351b | |
parent | 4662147a7dbee50cc8af366b028085abc56899d8 (diff) |
Fixes in GaduApi class once again (just because "programmers" from GG written poor and weak code, dammit)
-rw-r--r-- | sunshine/lqsoft/gaduapi.py | 70 |
1 files changed, 61 insertions, 9 deletions
diff --git a/sunshine/lqsoft/gaduapi.py b/sunshine/lqsoft/gaduapi.py index 99ec850..ec31567 100644 --- a/sunshine/lqsoft/gaduapi.py +++ b/sunshine/lqsoft/gaduapi.py @@ -19,7 +19,7 @@ import sys import urllib import logging -#__all__ = ['SunshineGaduAPI'] +debug_mode = False logger = logging.getLogger('Sunshine.GaduAPI') @@ -38,6 +38,8 @@ try: except: logger.info("oAuth module can't be loaded") oauth_loaded = False + +import xml.etree.ElementTree as ET import json import mimetools import mimetypes @@ -113,6 +115,8 @@ class GG_Oauth(object): # def requestToken(self): + if debug_mode: + logger.info("requestToken") oauth_request = oauth.OAuthRequest.from_consumer_and_token(self.consumer, http_method='POST', http_url=REQUEST_TOKEN_URL) # create an oauth request oauth_request.sign_request(self._signature_method, self.consumer, None) # the request knows how to generate a signature auth_header = oauth_request.to_header() @@ -136,14 +140,28 @@ class GG_Oauth(object): d.addErrback(self.cbShutdown) def cbRequestToken(self, response): + if debug_mode: + logger.info("cbRequestToken") + mimetype = response.headers.getRawHeaders('Content-Type', 'text/xml') finished = Deferred() response.deliverBody(BeginningPrinter(finished)) - finished.addCallback(self.cbRequestTokenSuccess) + finished.addCallback(self.cbRequestTokenSuccess, mimetype[0]) finished.addErrback(self.cbShutdown) return finished - def cbRequestTokenSuccess(self, result): - content = json.loads(result)['result'] + def cbRequestTokenSuccess(self, result, mimetype): + if debug_mode: + logger.info("cbRequestTokenSuccess result: %s, mime: %s" % (result, mimetype)) + content = {} + if mimetype == 'application/json': + content = json.loads(result)['result'] + elif mimetype == 'text/xml': + xml = ET.fromstring(result) + content['oauth_token'] = xml.find("oauth_token").text + content['oauth_token_secret'] = xml.find("oauth_token_secret").text + else: + logger.info("cbRequestTokenSuccess failed: unknown mimetype.") + return oauth_token = oauth.OAuthToken(content['oauth_token'], content['oauth_token_secret']) @@ -168,6 +186,8 @@ class GG_Oauth(object): d.addErrback(self.cbShutdown) def cbTokenAuthorised(self, result, oauth_token): + if debug_mode: + logger.info("cbTokenAuthorised") oauth_request = oauth.OAuthRequest.from_consumer_and_token(self.consumer, token=oauth_token, http_method='POST', http_url=ACCESS_TOKEN_URL) # create an oauth request oauth_request.sign_request(self._signature_method, self.consumer, oauth_token) # the request knows how to generate a signature auth_header = oauth_request.to_header() @@ -189,14 +209,28 @@ class GG_Oauth(object): d.addErrback(self.cbShutdown) def requestAccessToken(self, response, oauth_token): + if debug_mode: + logger.info("requestAccessToken") + mimetype = response.headers.getRawHeaders('Content-Type', 'text/xml') finished = Deferred() response.deliverBody(BeginningPrinter(finished)) - finished.addCallback(self.accessTokenReceived, oauth_token) + finished.addCallback(self.accessTokenReceived, oauth_token, mimetype[0]) finished.addErrback(self.cbShutdown) return finished - def accessTokenReceived(self, result, oauth_token): - content = json.loads(result)['result'] + def accessTokenReceived(self, result, oauth_token, mimetype): + if debug_mode: + logger.info("accessTokenReceived result: %s, mimetype: %s" % (result, mimetype)) + content = {} + if mimetype == 'application/json': + content = json.loads(result)['result'] + elif mimetype == 'text/xml': + xml = ET.fromstring(result) + content['oauth_token'] = xml.find("oauth_token").text + content['oauth_token_secret'] = xml.find("oauth_token_secret").text + else: + logger.info("accessTokenReceived failed: unknown mimetype.") + return self.access_token = oauth.OAuthToken(content['oauth_token'], content['oauth_token_secret']) self.expire_token = time.time()+36000 @@ -235,6 +269,8 @@ class GG_Oauth(object): return boundary, body def putAvatar(self, data, ext): + if debug_mode: + logger.info("accessTokenReceived") url = str(PUT_AVATAR_URL % self.uin) oauth_request = oauth.OAuthRequest.from_consumer_and_token(self.consumer, token=self.access_token, http_method='PUT', http_url=url) # create an oauth request @@ -267,6 +303,8 @@ class GG_Oauth(object): logger.info("New avatar should be uploaded now.") def fetchUserInfo(self, uin): + if debug_mode: + logger.info("fetchUserInfo") url = str(GET_INFO_URL % uin) oauth_request = oauth.OAuthRequest.from_consumer_and_token(self.consumer, token=self.access_token, http_method='GET', http_url=url) # create an oauth request @@ -290,6 +328,8 @@ class GG_Oauth(object): d.addErrback(self.cbShutdown) def fetchUserInfoSuccess(self, response): + if debug_mode: + logger.info("fetchUserInfoSuccess") finished = Deferred() response.deliverBody(BeginningPrinter(finished)) finished.addCallback(self.onUserInfoRecv) @@ -297,6 +337,8 @@ class GG_Oauth(object): return finished def onUserInfoRecv(self, result): + if debug_mode: + logger.info("onUserInfoRecv") content = json.loads(result)['result'] self.onUserInfo(content) @@ -304,16 +346,20 @@ class GG_Oauth(object): pass def cbShutdown(self, reason): - logger.info("Something went wrong.") - print 'cbShutdown: ', reason + logger.info("Something went wrong: %s" % (reason)) + #print 'cbShutdown: ', reason def checkTokenForAvatar(self, data, ext): + if debug_mode: + logger.info("checkTokenForAvatar") #print 'checkTokenForAvatar' if int(time.time()) <= self.expire_token and self.access_token != None: self.putAvatar(data, ext) self.__loopingcall.stop() def checkTokenForUserInfo(self, uin): + if debug_mode: + logger.info("checkTokenForUserInfo") if int(time.time()) <= self.expire_token and self.access_token != None: self.fetchUserInfo(uin) self.__loopingcall.stop() @@ -322,6 +368,8 @@ class GG_Oauth(object): self.requestToken() def uploadAvatar(self, data, ext): + if debug_mode: + logger.info("uploadAvatar") if int(time.time()) <= self.expire_token and self.access_token != None: self.putAvatar(data, ext) else: @@ -330,6 +378,8 @@ class GG_Oauth(object): self.__loopingcall.start(1.0) def getUserInfo(self, uin): + if debug_mode: + logger.info("getUserInfo") if int(time.time()) <= self.expire_token and self.access_token != None: self.fetchUserInfo(uin) else: @@ -338,6 +388,8 @@ class GG_Oauth(object): self.__loopingcall.start(1.0) def getUserInfoDeffered(self, uin): + if debug_mode: + logger.info("getUserInfoDeffered") d = Deferred() if int(time.time()) <= self.expire_token and self.access_token != None: d.addCallback(self.onUserInfoRecv) |