1212from stream .utils import validate_feed_slug , validate_user_id
1313from requests import Request
1414
15+ try :
16+ from urllib .parse import urlparse
17+ except ImportError :
18+ from urlparse import urlparse
1519
1620logger = logging .getLogger (__name__ )
1721
@@ -51,13 +55,24 @@ def __init__(self, api_key, api_secret, app_id, version='v1.0', timeout=6.0, bas
5155 self .timeout = timeout
5256 self .location = location
5357
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+
5463 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
5667 self .timeout = 20
5768 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 = ""
5974 elif location is not None :
60- self .base_url = 'https://%s-api.stream-io-api.com/api/' % location
75+ self .location = location
6176
6277 self .base_analytics_url = 'https://analytics.stream-io-api.com/analytics/'
6378
@@ -107,23 +122,23 @@ def get_default_header(self):
107122 }
108123 return base_headers
109124
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 )
120130 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 )
124137
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
127142 return url
128143
129144 def get_user_agent (self ):
@@ -150,7 +165,7 @@ def _make_signed_request(self, method_name, relative_url, params=None, data=None
150165 headers ['Date' ] = date_header
151166 default_params = self .get_default_params ()
152167 default_params .update (params )
153- url = self .get_full_url (relative_url )
168+ url = self .get_full_url ('api' , relative_url )
154169 serialized = serializer .dumps (data )
155170 method = getattr (self .session , method_name )
156171 if method_name in ['post' , 'put' ]:
@@ -176,7 +191,7 @@ def create_jwt_token(self, resource, action, feed_id=None, user_id=None):
176191 payload ['user_id' ] = user_id
177192 return jwt .encode (payload , self .api_secret ).decode ("utf-8" )
178193
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 ):
180195 params = params or {}
181196 data = data or {}
182197 serialized = None
@@ -185,15 +200,12 @@ def _make_request(self, method, relative_url, signature, personal=None, params=N
185200 headers = self .get_default_header ()
186201 headers ['Authorization' ] = signature
187202 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+
197209 if method .__name__ in ['post' , 'put' , 'delete' ]:
198210 serialized = serializer .dumps (data )
199211 response = method (url , data = serialized , headers = headers ,
0 commit comments