Skip to content

Commit 613fa5e

Browse files
committed
core file
1 parent dc208b5 commit 613fa5e

File tree

2 files changed

+170
-1
lines changed

2 files changed

+170
-1
lines changed

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
Python-Hackpad-API
22
==================
33

4-
A simple wrapper library for the Hackpad API
4+
A simple wrapper library for the Hackpad API. [Hackpad API Documentation](https://hackpad.com/Public-Hackpad-API-Draft-nGhsrCJFlP7)
5+
6+
7+
Usage
8+
==================
9+
10+
temp = Hackpad('your_hackpad_subdomain','your_hackpad_client_id','your_hackpad_secret')
11+
my_hackpads = temp.list_all()
12+

hackpad.py

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
"""
2+
Simple wrapper for the Hackpad API v1.0
3+
API Documentation: https://hackpad.com/Public-Hackpad-API-Draft-nGhsrCJFlP7
4+
"""
5+
6+
import oauth2
7+
import requests
8+
import sys
9+
import time
10+
11+
from urlparse import urljoin
12+
13+
class Hackpad(object):
14+
def __init__(self, sub_domain='', consumer_key='', consumer_secret=''):
15+
self.sub_domain = sub_domain
16+
self.consumer_key = consumer_key
17+
self.consumer_secret = consumer_secret
18+
return
19+
20+
def create_new_hackpad(self, asUser='', content_type='text/plain'):
21+
api_link = 'pad/create'
22+
params = {}
23+
if asUser != '':
24+
params['asUser'] = asUser
25+
return self.do_api_request(api_link, 'POST', params, 'Hackpad Title\nHackpad contents.', content_type)
26+
27+
def get_pad_content(self, padId, revision='', response_format='txt', asUser=''):
28+
api_link = 'pad/%s/content' % padId
29+
if revision != '':
30+
api_link += revision
31+
api_link += '.%s' % format
32+
params = {}
33+
if asUser != '':
34+
params['asUser'] = asUser
35+
return self.do_api_request(api_link, 'GET', params)
36+
37+
def update_pad_content(self, padId, content='', asUser='', content_type='text/plain'):
38+
api_link = 'pad/%s/content' % padId
39+
params = {}
40+
if asUser != '':
41+
params['asUser'] = asUser
42+
return self.do_api_request(api_link, 'POST', params, content, content_type)
43+
44+
def search_for_pads(self, q='', start=0, limit=10, asUser=''):
45+
api_link = 'search'
46+
params = {'q':q, 'start':start, 'limit':limit}
47+
if asUser != '':
48+
params['asUser'] = asUser
49+
return self.do_api_request(api_link, 'GET', params)
50+
51+
def list_updated_pads(self, timestamp):
52+
api_link = 'edited-since%s' % timestamp
53+
params = {}
54+
return self.do_api_request(api_link, 'GET', params)
55+
56+
def pad_revisions(self, padId, asUser=''):
57+
api_link = 'pad/%s/revisions' % padId
58+
params = {}
59+
if asUser != '':
60+
params['asUser'] = asUser
61+
return self.do_api_request(api_link, 'GET', params)
62+
63+
def revert_pad(self, padId, revision, asUser=''):
64+
api_link = 'pad/%s/revert-to/%s' % (padId, revision)
65+
params = {}
66+
if asUser != '':
67+
params['asUser'] = asUser
68+
return self.do_api_request(api_link, 'POST', params)
69+
70+
def revoke_access(self, padId, user, asUser=''):
71+
api_link = 'pad/%s/revoke-access/%s' % (padId, user)
72+
params = {}
73+
if asUser != '':
74+
params['asUser'] = asUser
75+
return self.do_api_request(api_link, 'POST', params)
76+
77+
def pad_options(self, padId, asUser=''):
78+
api_link = 'pad/%s/options' % padId
79+
params = {}
80+
if asUser != '':
81+
params['asUser'] = asUser
82+
return self.do_api_request(api_link, 'GET', params)
83+
84+
def set_pad_options(self, padId, settings={}, asUser=''):
85+
api_link = 'pad/%s/options' % padId
86+
params = {}
87+
if asUser != '':
88+
params['asUser'] = asUser
89+
for key in settings.keys():
90+
params[key] = settings[key]
91+
return self.do_api_request(api_link, 'POST', params)
92+
93+
def user_settings(self, user, settings={}):
94+
api_link = 'user/%s/settings' % user
95+
params = {}
96+
for key in settings.keys():
97+
params[key] = settings[key]
98+
return self.do_api_request(api_link, 'POST', params)
99+
100+
def user_deletion(self, user):
101+
api_link = 'user/%s/remove' % user
102+
return self.do_api_request(api_link, 'POST')
103+
104+
def user_creation(self, name, email):
105+
api_link = 'user/create'
106+
params = {'email':email, 'name':name}
107+
return self.do_api_request(api_link, 'POST', params)
108+
109+
def list_all(self):
110+
api_link = 'pads/all'
111+
return self.do_api_request(api_link, 'GET')
112+
113+
def site_options(self):
114+
api_link = 'options'
115+
return self.do_api_request(api_link, 'GET')
116+
117+
def do_api_request(self, path, method, post_data={}, body='', content_type='text/plain'):
118+
hackpad = {}
119+
try:
120+
api_method = urljoin('https://%s.hackpad.com/api/1.0/' % self.sub_domain, path)
121+
params = {
122+
'oauth_version': "1.0",
123+
'oauth_nonce': oauth2.generate_nonce(),
124+
'oauth_timestamp': int(time.time()),
125+
}
126+
for key in post_data.keys():
127+
params[key] = post_data[key]
128+
consumer = oauth2.Consumer(self.consumer_key, self.consumer_secret)
129+
params['oauth_consumer_key'] = consumer.key
130+
req = oauth2.Request(method='GET', url=api_method, parameters=params)
131+
signature_method = oauth2.SignatureMethod_HMAC_SHA1()
132+
req.sign_request(signature_method, consumer, None)
133+
api_link = req.to_url()
134+
if method.lower() == 'post':
135+
r = requests.post(
136+
api_link,
137+
data=body,
138+
headers={'Content-Type': content_type},
139+
verify=False
140+
)
141+
hackpad = r.json
142+
else:
143+
if len(post_data.keys()) > 0:
144+
r = requests.get(
145+
api_link,
146+
data=post_data,
147+
headers={'Content-Type': 'text/plain'},
148+
verify=False
149+
)
150+
else:
151+
r = requests.get(
152+
api_link,
153+
headers={'Content-Type': 'text/plain'},
154+
verify=False
155+
)
156+
hackpad = r.json
157+
except:
158+
print sys.exc_info()[0]
159+
160+
return hackpad
161+

0 commit comments

Comments
 (0)