1
1
import os
2
2
import sys
3
3
import time
4
- import httplib
4
+ try :
5
+ import http .client as httplib
6
+ except ImportError :
7
+ import httplib
5
8
import hmac
6
9
import json
7
10
import hashlib
8
- import urllib
11
+ try :
12
+ from urllib .parse import quote
13
+ except ImportError :
14
+ from urllib import quote
9
15
import re
10
16
import socket
11
17
18
+ if sys .version < '3' :
19
+ text_type = unicode
20
+ else :
21
+ text_type = str
22
+
12
23
host = 'api.pusherapp.com'
13
24
port = 80
14
25
app_id = None
@@ -45,7 +56,7 @@ def __init__(self, app_id=None, key=None, secret=None, host=None, port=None, enc
45
56
self ._channels = {}
46
57
47
58
def __getitem__ (self , key ):
48
- if not self ._channels . has_key ( key ) :
59
+ if key not in self ._channels :
49
60
return self ._make_channel (key )
50
61
return self ._channels [key ]
51
62
@@ -59,7 +70,7 @@ def __init__(self, name, pusher):
59
70
self .name = str (name )
60
71
if not channel_name_re .match (self .name ):
61
72
raise NameError ("Invalid channel id: %s" % self .name )
62
- self .path = '/apps/%s/channels/%s/events' % (self .pusher .app_id , urllib . quote (self .name ))
73
+ self .path = '/apps/%s/channels/%s/events' % (self .pusher .app_id , quote (self .name ))
63
74
64
75
def trigger (self , event , data = {}, socket_id = None , timeout = socket ._GLOBAL_DEFAULT_TIMEOUT ):
65
76
json_data = json .dumps (data , cls = self .pusher .encoder )
@@ -80,22 +91,22 @@ def trigger(self, event, data={}, socket_id=None, timeout=socket._GLOBAL_DEFAULT
80
91
def signed_query (self , event , json_data , socket_id ):
81
92
query_string = self .compose_querystring (event , json_data , socket_id )
82
93
string_to_sign = "POST\n %s\n %s" % (self .path , query_string )
83
- signature = hmac .new (self .pusher .secret , string_to_sign , hashlib .sha256 ).hexdigest ()
94
+ signature = hmac .new (self .pusher .secret . encode ( 'utf-8' ) , string_to_sign . encode ( 'utf-8' ) , hashlib .sha256 ).hexdigest ()
84
95
return "%s&auth_signature=%s" % (query_string , signature )
85
96
86
97
def compose_querystring (self , event , json_data , socket_id ):
87
98
hasher = hashlib .md5 ()
88
- hasher .update (json_data )
99
+ hasher .update (json_data . encode ( 'UTF-8' ) )
89
100
hash_str = hasher .hexdigest ()
90
101
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 )
91
102
if socket_id :
92
- ret += "&socket_id=" + unicode (socket_id )
103
+ ret += "&socket_id=" + text_type (socket_id )
93
104
return ret
94
105
95
106
def send_request (self , signed_path , data_string , timeout = socket ._GLOBAL_DEFAULT_TIMEOUT ):
96
- http = httplib .HTTPConnection (self .pusher .host , self .pusher .port , timeout = timeout )
97
- http .request ('POST' , signed_path , data_string , {'Content-Type' : 'application/json' })
98
- resp = http .getresponse ()
107
+ client = httplib .HTTPConnection (self .pusher .host , self .pusher .port , timeout = timeout )
108
+ client .request ('POST' , signed_path , data_string , {'Content-Type' : 'application/json' })
109
+ resp = client .getresponse ()
99
110
return resp .status , resp .read ()
100
111
101
112
def authenticate (self , socket_id , custom_data = None ):
0 commit comments