12
12
from stream .utils import validate_feed_slug , validate_user_id
13
13
from requests import Request
14
14
15
+ try :
16
+ from urllib .parse import urlparse
17
+ except ImportError :
18
+ from urlparse import urlparse
15
19
16
20
logger = logging .getLogger (__name__ )
17
21
@@ -51,13 +55,24 @@ def __init__(self, api_key, api_secret, app_id, version='v1.0', timeout=6.0, bas
51
55
self .timeout = timeout
52
56
self .location = location
53
57
58
+ self .base_domain_name = 'stream-io-api.com'
59
+ self .api_location = location
60
+ self .custom_api_port = None
61
+ self .protocol = 'https'
62
+
54
63
if os .environ .get ('LOCAL' ):
55
- self .base_url = 'http://localhost:8000/api/'
64
+ self .base_domain_name = 'localhost'
65
+ self .protocol = 'http'
66
+ self .custom_api_port = 8000
56
67
self .timeout = 20
57
68
elif base_url is not None :
58
- self .base_url = base_url
69
+ parsed_url = urlparse (base_url )
70
+ self .base_domain_name = parsed_url .hostname
71
+ self .protocol = parsed_url .scheme
72
+ self .custom_api_port = parsed_url .port
73
+ self .api_location = ""
59
74
elif location is not None :
60
- self .base_url = 'https://%s-api.stream-io-api.com/api/' % location
75
+ self .location = location
61
76
62
77
self .base_analytics_url = 'https://analytics.stream-io-api.com/analytics/'
63
78
@@ -107,23 +122,23 @@ def get_default_header(self):
107
122
}
108
123
return base_headers
109
124
110
- def get_full_url (self , relative_url ):
111
- url = self .base_url + self .version + '/' + relative_url
112
- return url
113
-
114
- def get_full_personal_url (self , relative_url ):
115
- base_url = self .base_url .split ('.' ) # company.getstream.io
116
- if len (base_url ) > 1 :
117
- DNS_change = base_url [0 ] + '-personalization'
118
- base_url [0 ] = DNS_change
119
- base_url = '.' .join (base_url )
125
+ def get_full_url (self , service_name , relative_url ):
126
+ if self .api_location :
127
+ hostname = '%s-%s.%s' % (self .api_location , service_name , self .base_domain_name )
128
+ elif service_name :
129
+ hostname = '%s.%s' % (service_name , self .base_domain_name )
120
130
else :
121
- base_url = self .base_url # if running on localhost
122
- url = base_url + 'personalization/' + relative_url + '/'
123
- return url
131
+ hostname = self .base_domain_name
132
+
133
+ if self .base_domain_name == 'localhost' :
134
+ hostname = 'localhost'
135
+
136
+ base_url = "%s://%s" % (self .protocol , hostname )
124
137
125
- def get_full_meta_url (self ):
126
- url = self .base_url + 'personalization/' + self .version + '/meta/'
138
+ if self .custom_api_port :
139
+ base_url = "%s:%s" % (base_url , self .custom_api_port )
140
+
141
+ url = base_url + '/' + service_name + '/' + self .version + '/' + relative_url
127
142
return url
128
143
129
144
def get_user_agent (self ):
@@ -150,7 +165,7 @@ def _make_signed_request(self, method_name, relative_url, params=None, data=None
150
165
headers ['Date' ] = date_header
151
166
default_params = self .get_default_params ()
152
167
default_params .update (params )
153
- url = self .get_full_url (relative_url )
168
+ url = self .get_full_url ('api' , relative_url )
154
169
serialized = serializer .dumps (data )
155
170
method = getattr (self .session , method_name )
156
171
if method_name in ['post' , 'put' ]:
@@ -176,7 +191,7 @@ def create_jwt_token(self, resource, action, feed_id=None, user_id=None):
176
191
payload ['user_id' ] = user_id
177
192
return jwt .encode (payload , self .api_secret ).decode ("utf-8" )
178
193
179
- def _make_request (self , method , relative_url , signature , personal = None , params = None , data = None ):
194
+ def _make_request (self , method , relative_url , signature , service_name = 'api' , params = None , data = None ):
180
195
params = params or {}
181
196
data = data or {}
182
197
serialized = None
@@ -185,15 +200,12 @@ def _make_request(self, method, relative_url, signature, personal=None, params=N
185
200
headers = self .get_default_header ()
186
201
headers ['Authorization' ] = signature
187
202
headers ['stream-auth-type' ] = 'jwt'
188
- if personal is not None :
189
- if personal == 'personal' :
190
- url = self .get_full_personal_url (relative_url )
191
- elif personal == 'meta' :
192
- url = self .get_full_meta_url ()
193
- else :
194
- raise Exception ("keyword 'personal' must be None, personal, or meta" )
195
- else :
196
- url = self .get_full_url (relative_url )
203
+
204
+ if not relative_url .endswith ('/' ):
205
+ relative_url += '/'
206
+
207
+ url = self .get_full_url (service_name , relative_url )
208
+
197
209
if method .__name__ in ['post' , 'put' , 'delete' ]:
198
210
serialized = serializer .dumps (data )
199
211
response = method (url , data = serialized , headers = headers ,
0 commit comments