Skip to content

Commit c50b79b

Browse files
author
Paul Dillinger
committed
Convert entire project to use spaces instead of tabs per http://legacy.python.org/dev/peps/pep-0008/#tabs-or-spaces
1 parent eda6041 commit c50b79b

File tree

9 files changed

+945
-828
lines changed

9 files changed

+945
-828
lines changed

emots.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@
1515
hipchat = HypChat(AUTH_TOKEN)
1616

1717
with open('emots.html', 'w') as html:
18-
html.write("""
18+
html.write("""
1919
<!DOCTYPE html>
2020
<html>
2121
<head>
2222
<title>HipChat Emoticons</title>
2323
</head>
2424
<body>
2525
""")
26-
for emot in hipchat.emoticons().contents():
27-
html.write("""
26+
for emot in hipchat.emoticons().contents():
27+
html.write("""
2828
<img src="{url}" alt="{shortcut}" title="{shortcut}">
2929
""".format(**emot))
3030

31-
html.write("""
31+
html.write("""
3232
</body>
3333
</html>""")

histtest.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
AUTH_TOKEN = config.get('HipChat', 'token')
99

1010
if 'HIPCHAT_TOKEN' in os.environ:
11-
AUTH_TOKEN = os.environ['HIPCHAT_TOKEN']
11+
AUTH_TOKEN = os.environ['HIPCHAT_TOKEN']
1212

1313
hipchat = HypChat(AUTH_TOKEN)
1414

@@ -19,4 +19,4 @@
1919
hist = room.history(datetime.datetime.utcnow(), maxResults=500)
2020
fullhist = []
2121
for item in hist.contents():
22-
print item['message']
22+
print item['message']

hypchat/__init__.py

+134-130
Original file line numberDiff line numberDiff line change
@@ -9,143 +9,147 @@
99
from .requests import Requests, BearerAuth, HttpTooManyRequests
1010
from .restobject import Linker
1111

12+
1213
class RateLimitWarning(Warning):
13-
"""
14-
This token has been rate limited. Waiting for the next reset.
15-
"""
14+
"""
15+
This token has been rate limited. Waiting for the next reset.
16+
"""
17+
1618

1719
def jsonify(obj):
18-
if isinstance(obj, datetime.datetime):
19-
return obj.isoformat()
20-
elif isinstance(obj, set):
21-
return list(obj)
22-
else:
23-
raise TypeError("Can't JSONify objects of type %s" % type(obj).__name__)
20+
if isinstance(obj, datetime.datetime):
21+
return obj.isoformat()
22+
elif isinstance(obj, set):
23+
return list(obj)
24+
else:
25+
raise TypeError("Can't JSONify objects of type %s" % type(obj).__name__)
26+
2427

2528
class _requests(Requests):
26-
def __init__(self, *p, **kw):
27-
super(_requests, self).__init__(*p, **kw)
28-
self.rl_remaining = 99999
29-
self.rl_reset = 0
30-
self.dump_reqs = '__HYPCHAT_DEBUG_REQUESTS__' in os.environ
31-
32-
@staticmethod
33-
def _data(data, kwargs):
34-
if isinstance(data, six.string_types):
35-
return data
36-
elif data is not None:
37-
kwargs.setdefault('headers',{})['Content-Type'] = 'application/json'
38-
rv = json.dumps(data, default=jsonify)
39-
return rv
40-
41-
def _rl_sleep(self, until):
42-
t = until - time.time()
43-
if t > 0:
44-
warnings.warn("HipChat has been rate limited; Waiting %0.1fs for the next reset." % t, RateLimitWarning)
45-
time.sleep(t)
46-
47-
def request(self, method, url, **kwargs):
48-
if self.dump_reqs:
49-
print >> sys.stderr, "REQUEST", method, url
50-
while True:
51-
try:
52-
if self.rl_remaining <= 0:
53-
# We're out of requests, chill
54-
self._rl_sleep(self.rl_reset)
55-
resp = super(_requests, self).request(method, url, **kwargs)
56-
except HttpTooManyRequests as e:
57-
self.rl_remaining = int(e.response.headers['x-ratelimit-remaining'])
58-
if not self.rl_remaining:
59-
self.rl_reset = float(e.response.headers['x-ratelimit-reset'])
60-
continue # Try the request again
61-
else:
62-
raise
63-
else:
64-
self.rl_remaining = int(resp.headers['x-ratelimit-remaining'])
65-
self.rl_reset = float(resp.headers['x-ratelimit-reset'])
66-
return resp
67-
68-
def post(self, url, data=None, **kwargs):
69-
data = self._data(data, kwargs)
70-
return super(_requests, self).post(url, data=data, **kwargs)
71-
72-
def patch(self, url, data=None, **kwargs):
73-
data = self._data(data, kwargs)
74-
return super(_requests, self).patch(url, data=data, **kwargs)
75-
76-
def put(self, url, data=None, **kwargs):
77-
data = self._data(data, kwargs)
78-
return super(_requests, self).put(url, data=data, **kwargs)
29+
def __init__(self, *p, **kw):
30+
super(_requests, self).__init__(*p, **kw)
31+
self.rl_remaining = 99999
32+
self.rl_reset = 0
33+
self.dump_reqs = '__HYPCHAT_DEBUG_REQUESTS__' in os.environ
34+
35+
@staticmethod
36+
def _data(data, kwargs):
37+
if isinstance(data, six.string_types):
38+
return data
39+
elif data is not None:
40+
kwargs.setdefault('headers', {})['Content-Type'] = 'application/json'
41+
rv = json.dumps(data, default=jsonify)
42+
return rv
43+
44+
def _rl_sleep(self, until):
45+
t = until - time.time()
46+
if t > 0:
47+
warnings.warn("HipChat has been rate limited; Waiting %0.1fs for the next reset." % t, RateLimitWarning)
48+
time.sleep(t)
49+
50+
def request(self, method, url, **kwargs):
51+
if self.dump_reqs:
52+
print >> sys.stderr, "REQUEST", method, url
53+
while True:
54+
try:
55+
if self.rl_remaining <= 0:
56+
# We're out of requests, chill
57+
self._rl_sleep(self.rl_reset)
58+
resp = super(_requests, self).request(method, url, **kwargs)
59+
except HttpTooManyRequests as e:
60+
self.rl_remaining = int(e.response.headers['x-ratelimit-remaining'])
61+
if not self.rl_remaining:
62+
self.rl_reset = float(e.response.headers['x-ratelimit-reset'])
63+
continue # Try the request again
64+
else:
65+
raise
66+
else:
67+
self.rl_remaining = int(resp.headers['x-ratelimit-remaining'])
68+
self.rl_reset = float(resp.headers['x-ratelimit-reset'])
69+
return resp
70+
71+
def post(self, url, data=None, **kwargs):
72+
data = self._data(data, kwargs)
73+
return super(_requests, self).post(url, data=data, **kwargs)
74+
75+
def patch(self, url, data=None, **kwargs):
76+
data = self._data(data, kwargs)
77+
return super(_requests, self).patch(url, data=data, **kwargs)
78+
79+
def put(self, url, data=None, **kwargs):
80+
data = self._data(data, kwargs)
81+
return super(_requests, self).put(url, data=data, **kwargs)
7982

8083

8184
__all__ = ('HypChat',)
8285

86+
8387
class HypChat(object):
84-
def __init__(self, token, endpoint='https://api.hipchat.com', verify=True):
85-
self._requests = _requests(auth=BearerAuth(token), verify=verify)
86-
self.capabilities = Linker('{0}/v2/capabilities'.format(endpoint), _requests=self._requests)
87-
self.emoticons = Linker('{0}/v2/emoticon'.format(endpoint), _requests=self._requests)
88-
self.rooms = Linker('{0}/v2/room'.format(endpoint), _requests=self._requests)
89-
self.users_url = '{0}/v2/user'.format(endpoint)
90-
self.endpoint = endpoint
91-
92-
def users(self, **ops):
93-
"""users([guests=bool], [deleted=bool]) -> UserCollection
94-
95-
Returns a collection of users, with the following keyword options:
96-
* guests: If True, return active guests
97-
* deleted: If True, return deleted users
98-
"""
99-
params = {}
100-
if ops.get('guests', False):
101-
params['include-guests'] = 'true'
102-
if ops.get('deleted', False):
103-
params['include-deleted'] = 'true'
104-
resp = self._requests.get(self.users_url, params=params)
105-
return Linker._obj_from_text(resp.text, self._requests)
106-
107-
108-
def fromurl(self, url, **kwargs):
109-
return Linker(url, _requests=self._requests)(**kwargs)
110-
111-
def create_room(self, name, owner=Ellipsis, privacy='public', guest_access=True):
112-
"""
113-
Creates a new room.
114-
"""
115-
data={
116-
'name': name,
117-
'privacy': privacy,
118-
'guest_access': guest_access,
119-
}
120-
if owner is not Ellipsis:
121-
if owner is None:
122-
data['owner_user_id'] = owner
123-
else:
124-
data['owner_user_id'] = owner['id']
125-
resp = self._requests.post(self.rooms.url, data=data)
126-
return Linker._obj_from_text(resp.text, self._requests)
127-
128-
def create_user(self, name, email, title='', mention_name='', is_group_admin=False, timezone='UTC', password=''):
129-
"""
130-
Creates a new user.
131-
"""
132-
data={
133-
'name': name,
134-
'email': email,
135-
'title': title,
136-
'mention_name': mention_name,
137-
'is_group_admin': is_group_admin,
138-
'timezone': timezone, # TODO: Support timezone objects
139-
'password': password,
140-
}
141-
resp = self._requests.post(self.users_url, data=data)
142-
return Linker._obj_from_text(resp.text, self._requests)
143-
144-
def get_room(self, id_or_name, **kwargs):
145-
return self.fromurl('{0}/v2/room/{1}'.format(self.endpoint, id_or_name), **kwargs)
146-
147-
def get_user(self, id_or_email, **kwargs):
148-
return self.fromurl('{0}/v2/user/{1}'.format(self.endpoint, id_or_email), **kwargs)
149-
150-
def get_emoticon(self, id_or_shortcut, **kwargs):
151-
return self.fromurl('{0}/v2/emoticon/{1}'.format(self.endpoint, id_or_shortcut), **kwargs)
88+
def __init__(self, token, endpoint='https://api.hipchat.com', verify=True):
89+
self._requests = _requests(auth=BearerAuth(token), verify=verify)
90+
self.capabilities = Linker('{0}/v2/capabilities'.format(endpoint), _requests=self._requests)
91+
self.emoticons = Linker('{0}/v2/emoticon'.format(endpoint), _requests=self._requests)
92+
self.rooms = Linker('{0}/v2/room'.format(endpoint), _requests=self._requests)
93+
self.users_url = '{0}/v2/user'.format(endpoint)
94+
self.endpoint = endpoint
95+
96+
def users(self, **ops):
97+
"""users([guests=bool], [deleted=bool]) -> UserCollection
98+
99+
Returns a collection of users, with the following keyword options:
100+
* guests: If True, return active guests
101+
* deleted: If True, return deleted users
102+
"""
103+
params = {}
104+
if ops.get('guests', False):
105+
params['include-guests'] = 'true'
106+
if ops.get('deleted', False):
107+
params['include-deleted'] = 'true'
108+
resp = self._requests.get(self.users_url, params=params)
109+
return Linker._obj_from_text(resp.text, self._requests)
110+
111+
112+
def fromurl(self, url, **kwargs):
113+
return Linker(url, _requests=self._requests)(**kwargs)
114+
115+
def create_room(self, name, owner=Ellipsis, privacy='public', guest_access=True):
116+
"""
117+
Creates a new room.
118+
"""
119+
data = {
120+
'name': name,
121+
'privacy': privacy,
122+
'guest_access': guest_access,
123+
}
124+
if owner is not Ellipsis:
125+
if owner is None:
126+
data['owner_user_id'] = owner
127+
else:
128+
data['owner_user_id'] = owner['id']
129+
resp = self._requests.post(self.rooms.url, data=data)
130+
return Linker._obj_from_text(resp.text, self._requests)
131+
132+
def create_user(self, name, email, title='', mention_name='', is_group_admin=False, timezone='UTC', password=''):
133+
"""
134+
Creates a new user.
135+
"""
136+
data = {
137+
'name': name,
138+
'email': email,
139+
'title': title,
140+
'mention_name': mention_name,
141+
'is_group_admin': is_group_admin,
142+
'timezone': timezone, # TODO: Support timezone objects
143+
'password': password,
144+
}
145+
resp = self._requests.post(self.users_url, data=data)
146+
return Linker._obj_from_text(resp.text, self._requests)
147+
148+
def get_room(self, id_or_name, **kwargs):
149+
return self.fromurl('{0}/v2/room/{1}'.format(self.endpoint, id_or_name), **kwargs)
150+
151+
def get_user(self, id_or_email, **kwargs):
152+
return self.fromurl('{0}/v2/user/{1}'.format(self.endpoint, id_or_email), **kwargs)
153+
154+
def get_emoticon(self, id_or_shortcut, **kwargs):
155+
return self.fromurl('{0}/v2/emoticon/{1}'.format(self.endpoint, id_or_shortcut), **kwargs)

hypchat/__main__.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
AUTH_TOKEN = os.environ['HIPCHAT_TOKEN']
1313

1414
else:
15-
print('Authorization token not detected! The token is pulled from '\
15+
print('Authorization token not detected! The token is pulled from ' \
1616
'~/.hypchat, /etc/hypchat, or the environment variable HIPCHAT_TOKEN.')
1717
sys.exit(1)
1818

@@ -36,7 +36,9 @@
3636

3737
try:
3838
import IPython
39+
3940
IPython.embed()
4041
except ImportError:
4142
import code
43+
4244
code.interact(local=locals())

0 commit comments

Comments
 (0)