11import os
22import sys
33import time
4- import httplib
4+ try :
5+ import http .client as httplib
6+ except ImportError :
7+ import httplib
58import hmac
69import json
710import hashlib
8- import urllib
11+ try :
12+ from urllib .parse import quote
13+ except ImportError :
14+ from urllib import quote
915import re
1016import socket
1117
18+ if sys .version < '3' :
19+ text_type = unicode
20+ else :
21+ text_type = str
22+
1223host = 'api.pusherapp.com'
1324port = 80
1425app_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 ):
0 commit comments