Skip to content

Instantly share code, notes, and snippets.

@optixx
Created January 16, 2014 12:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save optixx/8454411 to your computer and use it in GitHub Desktop.
Save optixx/8454411 to your computer and use it in GitHub Desktop.
OAuthRequest Wrapper for desk.com
import oauth2 as oauth
import time
import simplejson
import httplib2
import logging
import pprint
logger = logging.getLogger("model")
class OAuthRequest(object):
def __init__(self, key, secret, token, token_secret):
self.consumer = oauth.Consumer(key=key, secret=secret)
self.token = oauth.Token(key=token, secret=token_secret)
self.h = httplib2.Http(disable_ssl_certificate_validation=True)
def req(self, method, url, data):
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
params = {
'oauth_version': "1.0",
'oauth_nonce': str(oauth.generate_nonce()),
'oauth_timestamp': str(int(time.time())),
'oauth_token': self.token.key,
'oauth_consumer_key': self.consumer.key,
}
signature_method = oauth.SignatureMethod_HMAC_SHA1()
logger.info(
"Oauth method=%s url=%s data=%s",
method,
url,
pprint.pformat(data),
)
if method == "GET":
req = oauth.Request(
method=method,
url=url,
parameters=dict(params.items() + data.items())
)
req.sign_request(signature_method, self.consumer, self.token)
resp, content = self.h.request(
req.to_url(),
method,
headers=headers
)
else:
req = oauth.Request(
method=method,
url=url,
parameters=params
)
req.sign_request(signature_method, self.consumer, self.token)
resp, content = self.h.request(
url,
method,
headers=dict(req.to_header().items() + headers.items()),
body=simplejson.dumps(data))
if resp['status'] in ['200', '201']:
data = simplejson.loads(content)
logger.info("Oauth status=%s data=%s", resp['status'], pprint.pformat(data))
return data
else:
logger.info("Oauth status=%s", resp['status'])
return False
def get(self, url, data):
return self.req("GET", url, data)
def post(self, url, data):
return self.req("POST", url, data)
def put(self, url, data):
return self.req("PUT", url, data)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment