def call(self, relative_path, params={}, header_auth=False, post=False): path = "%s%s" % (self.apiroot, relative_path) resp = None if self.cache: keys = [path, json.dumps(params)] if self.token and self.secret: keys.extend([self.token, self.secret]) resp = self.cache.fetch(keys) if resp: return resp.text if self.token and self.secret: oauth_hook = TwitterOAuthHandler.hook(access_token=self.token, access_token_secret=self.secret, header_auth=header_auth) client = requests.session(hooks={'pre_request': oauth_hook}) else: client = requests if post: resp = client.post(path, data=params) else: resp = client.get(path, params=params) try: resp.raise_for_status() except requests.HTTPError: logger.exception(resp.text) raise # make cachable (picklable and read-repeatable) vesion of response if self.cache: cacheresp = CacheResponse() cacheresp.headers = resp.headers cacheresp.encoding = resp.encoding cacheresp.status_code = resp.status_code cacheresp.text = resp.text self.cache.store(keys, cacheresp) return resp.text
def get_access_token(cls, request_token, request_secret, oauth_verifier): oauth_hook = cls.hook(access_token=request_token, access_token_secret=request_secret, header_auth=True) client = requests.session(hooks={'pre_request': oauth_hook}) response = client.post(ACCESS_TOKEN_URL, {'oauth_verifier': oauth_verifier}) response.raise_for_status() response = dict(parse_qsl(response.content)) user_token, user_secret, user_id, screen_name = (response['oauth_token'], response['oauth_token_secret'], response['user_id'], response['screen_name']) return (user_token, user_secret, user_id, screen_name)
def get_request_token(cls, callback_url): oauth_hook = cls.hook(header_auth=True) client = requests.session(hooks={'pre_request': oauth_hook}) response = client.post(REQUEST_TOKEN_URL, {'oauth_callback': callback_url}) response.raise_for_status() response = dict(parse_qsl(response.content)) token, secret = (response['oauth_token'], response['oauth_token_secret']) redirect_url = "%s?oauth_token=%s" % (AUTHORIZE_URL, token) return (token, secret, redirect_url)