22import base64
33import json
44import urllib
5-
5+ from urllib . parse import urljoin
66TEXT_RESPONSE = 1
77FULL_RESPONSE = 2
88JSON_RESPONSE = 3
99
1010class OFSC :
1111
12+ API_PORTAL = "https://api.etadirect.com"
1213
13- def __init__ (self , clientID , companyName , secret ):
14+ def __init__ (self , clientID , companyName , secret , baseUrl = API_PORTAL ):
1415 self .headers = {}
1516 self .clientID = clientID
1617 self .companyName = companyName
18+ self .baseUrl = baseUrl
1719 # Calculate Authorization
1820 mypass = base64 .b64encode (bytes (clientID + "@" + companyName + ":" + secret , 'utf-8' ))
1921 self .headers ["Authorization" ] = "Basic " + mypass .decode ('utf-8' )
@@ -22,7 +24,8 @@ def __init__ (self, clientID, companyName, secret):
2224
2325 # OFSC Function Library
2426 def get_activities (self , params , response_type = TEXT_RESPONSE ):
25- response = requests .get ('https://api.etadirect.com/rest/ofscCore/v1/activities' , headers = self .headers , params = params )
27+ url = urljoin (self .baseUrl , "/rest/ofscCore/v1/activities" )
28+ response = requests .get (url , headers = self .headers , params = params )
2629 if response_type == FULL_RESPONSE :
2730 return response
2831 elif response_type == JSON_RESPONSE :
@@ -31,7 +34,8 @@ def get_activities (self, params, response_type=TEXT_RESPONSE):
3134 return response .text
3235
3336 def get_activity (self , activity_id , response_type = TEXT_RESPONSE ):
34- response = requests .get ('https://api.etadirect.com/rest/ofscCore/v1/activities/' + str (activity_id ), headers = self .headers )
37+ url = urljoin (self .baseUrl , "/rest/ofscCore/v1/activities/{}" .format (activity_id ))
38+ response = requests .get (url , headers = self .headers )
3539 #print (response.status_code)
3640 if response_type == FULL_RESPONSE :
3741 return response
@@ -41,7 +45,8 @@ def get_activity (self, activity_id, response_type=TEXT_RESPONSE):
4145 return response .text
4246
4347 def update_activity (self , activity_id , data , response_type = TEXT_RESPONSE ):
44- response = requests .patch ('https://api.etadirect.com/rest/ofscCore/v1/activities/' + str (activity_id ), headers = self .headers , data = data )
48+ url = urljoin (self .baseUrl , "/rest/ofscCore/v1/activities/{}" .format (activity_id ))
49+ response = requests .patch (url , headers = self .headers , data = data )
4550 #print (response.status_code)
4651 if response_type == FULL_RESPONSE :
4752 return response
@@ -51,7 +56,8 @@ def update_activity (self, activity_id, data, response_type=TEXT_RESPONSE):
5156 return response .text
5257
5358 def move_activity (self , activity_id , data , response_type = TEXT_RESPONSE ):
54- response = requests .post ('https://api.etadirect.com/rest/ofscCore/v1/activities/' + str (activity_id ) + '/custom-actions/move' , headers = self .headers , data = data )
59+ url = urljoin (self .baseUrl , "/rest/ofscCore/v1/activities/{}/custom-actions/move" .format (activity_id ))
60+ response = requests .post (url , headers = self .headers , data = data )
5561 #print (response.status_code)
5662 if response_type == FULL_RESPONSE :
5763 return response
@@ -61,7 +67,8 @@ def move_activity (self, activity_id, data, response_type=TEXT_RESPONSE):
6167 return response .text
6268
6369 def get_subscriptions (self , response_type = TEXT_RESPONSE ):
64- response = requests .get ('https://api.etadirect.com/rest/ofscCore/v1/events/subscriptions' , headers = self .headers )
70+ url = urljoin (self .baseUrl , "/rest/ofscCore/v1/events/subscriptions" )
71+ response = requests .get (url , headers = self .headers )
6572 if response_type == FULL_RESPONSE :
6673 return response
6774 elif response_type == JSON_RESPONSE :
@@ -70,7 +77,8 @@ def get_subscriptions(self, response_type=TEXT_RESPONSE):
7077 return response .text
7178
7279 def create_subscription (self , data , response_type = TEXT_RESPONSE ):
73- response = requests .post ('https://api.etadirect.com/rest/ofscCore/v1/events/subscriptions' , headers = self .headers , data = data )
80+ url = urljoin (self .baseUrl , "/rest/ofscCore/v1/events/subscriptions" )
81+ response = requests .post (url , headers = self .headers , data = data )
7482 if response_type == FULL_RESPONSE :
7583 return response
7684 elif response_type == JSON_RESPONSE :
@@ -79,7 +87,8 @@ def create_subscription(self, data, response_type=TEXT_RESPONSE):
7987 return response .text
8088
8189 def get_subscription_details (self , subscription_id , response_type = TEXT_RESPONSE ):
82- response = requests .get ('https://api.etadirect.com/rest/ofscCore/v1/events/subscriptions/{}' .format (str (subscription_id )), headers = self .headers )
90+ url = urljoin (self .baseUrl , "/rest/ofscCore/v1/events/subscriptions/{}" .format (str (subscription_id )))
91+ response = requests .get (url , headers = self .headers )
8392 if response_type == FULL_RESPONSE :
8493 return response
8594 elif response_type == JSON_RESPONSE :
@@ -88,6 +97,7 @@ def get_subscription_details(self, subscription_id, response_type=TEXT_RESPONSE)
8897 return response .text
8998
9099 def get_events (self , params , response_type = TEXT_RESPONSE ):
100+ url = urljoin (self .baseUrl , "rest/ofscCore/v1/events" )
91101 response = requests .get ('https://api.etadirect.com/rest/ofscCore/v1/events' , headers = self .headers , params = params )
92102 if response_type == FULL_RESPONSE :
93103 return response
@@ -97,6 +107,7 @@ def get_events(self, params, response_type=TEXT_RESPONSE):
97107 return response .text
98108
99109 def get_resource (self , resource_id , inventories = False , workSkills = False , workZones = False , workSchedules = False , response_type = TEXT_RESPONSE ):
110+ url = urljoin (self .baseUrl , "/rest/ofscCore/v1/resources/{}" .format (str (resource_id )))
100111 data = {}
101112 expand = ""
102113 if inventories :
@@ -120,7 +131,7 @@ def get_resource(self, resource_id, inventories=False, workSkills=False, workZon
120131 if len (expand ) > 0 :
121132 data ['expand' ] = expand
122133
123- response = requests .get ('https://api.etadirect.com/rest/ofscCore/v1/resources/{}' . format ( str ( resource_id )) , params = data , headers = self .headers )
134+ response = requests .get (url , params = data , headers = self .headers )
124135
125136 if response_type == FULL_RESPONSE :
126137 return response
@@ -130,9 +141,10 @@ def get_resource(self, resource_id, inventories=False, workSkills=False, workZon
130141 return response .text
131142
132143 def get_position_history (self , resource_id ,date ,response_type = TEXT_RESPONSE ):
144+ url = urljoin (self .baseUrl , "/rest/ofscCore/v1/resources/{}/positionHistory" .format (str (resource_id )))
133145 params = {}
134146 params ['date' ] = date
135- response = requests .get ('https://api.etadirect.com/rest/ofscCore/v1/resources/{}/positionHistory' . format ( str ( resource_id )) , params = params , headers = self .headers )
147+ response = requests .get (url , params = params , headers = self .headers )
136148
137149 if response_type == FULL_RESPONSE :
138150 return response
@@ -142,10 +154,11 @@ def get_position_history(self, resource_id,date,response_type=TEXT_RESPONSE):
142154 return response .text
143155
144156 def get_resource_route (self , resource_id , date , activityFields = None , offset = 0 , limit = 100 , response_type = TEXT_RESPONSE ):
157+ url = urljoin (self .baseUrl , "/rest/ofscCore/v1/resources/{}/routes/{}" .format (str (resource_id ), date ))
145158 params = {}
146159 if activityFields is not None :
147160 params ['activityFields' ] = activityFields
148- response = requests .get ('https://api.etadirect.com/rest/ofscCore/v1/resources/{}/routes/{}' . format ( str ( resource_id ), date ) , params = params , headers = self .headers )
161+ response = requests .get (url , params = params , headers = self .headers )
149162
150163 if response_type == FULL_RESPONSE :
151164 return response
@@ -155,6 +168,7 @@ def get_resource_route(self, resource_id, date, activityFields = None, offset=0,
155168 return response .text
156169
157170 def get_resource_descendants (self , resource_id , resourceFields = None , offset = 0 , limit = 100 , inventories = False , workSkills = False , workZones = False , workSchedules = False , response_type = TEXT_RESPONSE ):
171+ url = urljoin (self .baseUrl , "/rest/ofscCore/v1/resources/{}/descendants" .format (str (resource_id )))
158172 # Calculate expand
159173 params = {}
160174 expand = ""
@@ -184,7 +198,7 @@ def get_resource_descendants(self, resource_id, resourceFields=None, offset=0,
184198 params ['limit' ] = limit
185199 params ['offset' ]= offset
186200
187- response = requests .get ('https://api.etadirect.com/rest/ofscCore/v1/resources/{}/descendants' . format ( str ( resource_id )) , params = params , headers = self .headers )
201+ response = requests .get (url , params = params , headers = self .headers )
188202
189203 if response_type == FULL_RESPONSE :
190204 return response
@@ -198,12 +212,13 @@ def get_resource_descendants(self, resource_id, resourceFields=None, offset=0,
198212 capacityHeaders = capacityAreasFields .split ("," )+ additionalCapacityFields
199213
200214 def get_capacity_areas (self , expand = "parent" , fields = capacityAreasFields , status = "active" , queryType = "area" , response_type = FULL_RESPONSE ):
215+ url = urljoin (self .baseUrl , "/rest/ofscMetadata/v1/capacityAreas" )
201216 params = {}
202217 params ["expand" ] = expand
203218 params ["fields" ] = fields
204219 params ["status" ] = status
205220 params ["type" ] = queryType
206- response = requests .get ('https://api.etadirect.com/rest/ofscMetadata/v1/capacityAreas' , params = params , headers = self .headers )
221+ response = requests .get (url , params = params , headers = self .headers )
207222 if response_type == FULL_RESPONSE :
208223 return response
209224 elif response_type == JSON_RESPONSE :
@@ -213,7 +228,8 @@ def get_capacity_areas (self, expand="parent", fields=capacityAreasFields, statu
213228
214229 def get_capacity_area (self ,label , response_type = FULL_RESPONSE ):
215230 encoded_label = urllib .parse .quote_plus (label )
216- response = requests .get ('https://api.etadirect.com/rest/ofscMetadata/v1/capacityAreas/{}' .format (encoded_label ), headers = self .headers )
231+ url = urljoin (self .baseUrl , "/rest/ofscMetadata/v1/capacityAreas/{}" .format (encoded_label ))
232+ response = requests .get (url , headers = self .headers )
217233 if response_type == FULL_RESPONSE :
218234 return response
219235 elif response_type == JSON_RESPONSE :
0 commit comments