Skip to content

Commit f84651c

Browse files
committed
Merge pull request #27 from mbrrg/master
Python 3 support
2 parents 841803f + 7a81ba1 commit f84651c

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

pusher/__init__.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
11
import os
22
import sys
33
import time
4-
import httplib
4+
try:
5+
import http.client as httplib
6+
except ImportError:
7+
import httplib
58
import hmac
69
import json
710
import hashlib
8-
import urllib
11+
try:
12+
from urllib.parse import quote
13+
except ImportError:
14+
from urllib import quote
915
import re
1016
import socket
1117

18+
if sys.version < '3':
19+
text_type = unicode
20+
else:
21+
text_type = str
22+
1223
host = 'api.pusherapp.com'
1324
port = 80
1425
app_id = None
@@ -49,7 +60,7 @@ def __init__(self, app_id=None, key=None, secret=None, host=None, port=None, enc
4960
self._channels = {}
5061

5162
def __getitem__(self, key):
52-
if not self._channels.has_key(key):
63+
if key not in self._channels:
5364
return self._make_channel(key)
5465
return self._channels[key]
5566

@@ -63,7 +74,7 @@ def __init__(self, name, pusher):
6374
self.name = str(name)
6475
if not channel_name_re.match(self.name):
6576
raise NameError("Invalid channel id: %s" % self.name)
66-
self.path = '/apps/%s/channels/%s/events' % (self.pusher.app_id, urllib.quote(self.name))
77+
self.path = '/apps/%s/channels/%s/events' % (self.pusher.app_id, quote(self.name))
6778

6879
def trigger(self, event, data={}, socket_id=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
6980
json_data = json.dumps(data, cls=self.pusher.encoder)
@@ -84,22 +95,22 @@ def trigger(self, event, data={}, socket_id=None, timeout=socket._GLOBAL_DEFAULT
8495
def signed_query(self, event, json_data, socket_id):
8596
query_string = self.compose_querystring(event, json_data, socket_id)
8697
string_to_sign = "POST\n%s\n%s" % (self.path, query_string)
87-
signature = hmac.new(self.pusher.secret, string_to_sign, hashlib.sha256).hexdigest()
98+
signature = hmac.new(self.pusher.secret.encode('utf-8'), string_to_sign.encode('utf-8'), hashlib.sha256).hexdigest()
8899
return "%s&auth_signature=%s" % (query_string, signature)
89100

90101
def compose_querystring(self, event, json_data, socket_id):
91102
hasher = hashlib.md5()
92-
hasher.update(json_data)
103+
hasher.update(json_data.encode('UTF-8'))
93104
hash_str = hasher.hexdigest()
94105
ret = "auth_key=%s&auth_timestamp=%s&auth_version=1.0&body_md5=%s&name=%s" % (self.pusher.key, int(time.time()), hash_str, event)
95106
if socket_id:
96-
ret += "&socket_id=" + unicode(socket_id)
107+
ret += "&socket_id=" + text_type(socket_id)
97108
return ret
98109

99110
def send_request(self, signed_path, data_string, timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
100-
http = httplib.HTTPConnection(self.pusher.host, self.pusher.port, timeout=timeout)
101-
http.request('POST', signed_path, data_string, {'Content-Type': 'application/json'})
102-
resp = http.getresponse()
111+
client = httplib.HTTPConnection(self.pusher.host, self.pusher.port, timeout=timeout)
112+
client.request('POST', signed_path, data_string, {'Content-Type': 'application/json'})
113+
resp = client.getresponse()
103114
return resp.status, resp.read()
104115

105116
def authenticate(self, socket_id, custom_data=None):

pusher/acceptance_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import unittest, re, httplib, time, cgi
1+
import unittest
22
from nose.tools import *
33

44
import sys
@@ -32,4 +32,4 @@ def test_trigger_with_data_value_containing_percent(self):
3232
channel = my_pusher['test-channel']
3333
result = channel.trigger('test-event', {'message': "fish %"})
3434

35-
eq_(result, True)
35+
eq_(result, True)

0 commit comments

Comments
 (0)