@@ -156,6 +156,9 @@ class AuthFailure( Exception ):
156156 pass
157157
158158
159+ class outOfScope ( Exception ):
160+ pass
161+
159162class ClientAuth :
160163 """
161164 Request authentication and keep access token available through token method. Renew it automatically if necessary
@@ -188,7 +191,7 @@ def renew_token(self):
188191 "client_id" : self ._clientId ,
189192 "client_secret" : self ._clientSecret
190193 }
191- resp = postRequest (_AUTH_REQ , postParams )
194+ resp = postRequest ("authentication" , _AUTH_REQ , postParams )
192195 if self .refreshToken != resp ['refresh_token' ]:
193196 print ("New refresh token:" , resp ['refresh_token' ])
194197 self ._accessToken = resp ['access_token' ]
@@ -209,7 +212,7 @@ def __init__(self, authData):
209212 postParams = {
210213 "access_token" : authData .accessToken
211214 }
212- resp = postRequest (_GETSTATIONDATA_REQ , postParams )
215+ resp = postRequest ("Weather station" , _GETSTATIONDATA_REQ , postParams )
213216 self .rawData = resp ['body' ]
214217 self .devList = self .rawData ['devices' ]
215218 self .ownerMail = self .rawData ['user' ]['mail' ]
@@ -243,7 +246,7 @@ def __init__(self, authData, home=None):
243246 postParams = {
244247 "access_token" : self .getAuthToken
245248 }
246- resp = postRequest (_GETTHERMOSTATDATA_REQ , postParams )
249+ resp = postRequest ("Thermostat" , _GETTHERMOSTATDATA_REQ , postParams )
247250 self .rawData = resp ['body' ]['devices' ]
248251 if not self .rawData : raise NoDevice ("No thermostat available" )
249252 self .thermostatData = filter_home_data (self .rawData , home )
@@ -283,7 +286,7 @@ def __init__(self, authData, home=None, station=None):
283286 postParams = {
284287 "access_token" : self .getAuthToken
285288 }
286- resp = postRequest (_GETSTATIONDATA_REQ , postParams )
289+ resp = postRequest ("Weather station" , _GETSTATIONDATA_REQ , postParams )
287290 self .rawData = resp ['body' ]['devices' ]
288291 # Weather data
289292 if not self .rawData : raise NoDevice ("No weather station in any homes" )
@@ -400,7 +403,7 @@ def getMeasure(self, device_id, scale, mtype, module_id=None, date_begin=None, d
400403 if limit : postParams ['limit' ] = limit
401404 postParams ['optimize' ] = "true" if optimize else "false"
402405 postParams ['real_time' ] = "true" if real_time else "false"
403- return postRequest (_GETMEASURE_REQ , postParams )
406+ return postRequest ("Weather station" , _GETMEASURE_REQ , postParams )
404407
405408 def MinMaxTH (self , module = None , frame = "last24" ):
406409 s = self .default_station_data
@@ -454,7 +457,7 @@ def __init__(self, authData, home=None):
454457 postParams = {
455458 "access_token" : self .getAuthToken
456459 }
457- resp = postRequest (_GETHOMEDATA_REQ , postParams )
460+ resp = postRequest ("Home data" , _GETHOMEDATA_REQ , postParams )
458461 self .rawData = resp ['body' ]
459462 # Collect homes
460463 self .homes = { d ['id' ] : d for d in self .rawData ['homes' ] }
@@ -535,10 +538,10 @@ def cameraUrls(self, camera=None, home=None, cid=None):
535538 camera_data = self .cameraByName (camera = camera , home = home )
536539 if camera_data :
537540 vpn_url = camera_data ['vpn_url' ]
538- resp = postRequest (vpn_url + '/command/ping' )
541+ resp = postRequest ("Camera" , vpn_url + '/command/ping' )
539542 temp_local_url = resp ['local_url' ]
540543 try :
541- resp = postRequest (temp_local_url + '/command/ping' ,timeout = 1 )
544+ resp = postRequest ("Camera" , temp_local_url + '/command/ping' ,timeout = 1 )
542545 if resp and temp_local_url == resp ['local_url' ]:
543546 local_url = temp_local_url
544547 except : # On this particular request, vithout errors from previous requests, error is timeout
@@ -573,7 +576,7 @@ def getCameraPicture(self, image_id, key):
573576 "image_id" : image_id ,
574577 "key" : key
575578 }
576- resp = postRequest (_GETCAMERAPICTURE_REQ , postParams )
579+ resp = postRequest ("Camera" , _GETCAMERAPICTURE_REQ , postParams )
577580 image_type = imghdr .what ('NONE.FILE' ,resp )
578581 return resp , image_type
579582
@@ -607,7 +610,7 @@ def updateEvent(self, event=None, home=None):
607610 "home_id" : home_data ['id' ],
608611 "event_id" : event ['id' ]
609612 }
610- resp = postRequest (_GETEVENTSUNTIL_REQ , postParams )
613+ resp = postRequest ("Camera" , _GETEVENTSUNTIL_REQ , postParams )
611614 eventList = resp ['body' ]['events_list' ]
612615 for e in eventList :
613616 self .events [ e ['camera_id' ] ][ e ['time' ] ] = e
@@ -712,7 +715,7 @@ def presenceSetAction(self, camera=None, home=None, cid=None,
712715 "home_id" : camera ["home_id" ],
713716 "presence_settings[presence_record_%s]" % eventType : _PRES_DETECTION_SETUP .index (action )
714717 }
715- resp = postRequest (_POST_UPDATE_HOME_REQ , postParams )
718+ resp = postRequest ("Camera" , _POST_UPDATE_HOME_REQ , postParams )
716719 self .rawData = resp ['body' ]
717720
718721 def getLiveSnapshot (self , camera = None , home = None , cid = None ):
@@ -746,9 +749,9 @@ def filter_home_data(rawData, home):
746749
747750def cameraCommand (cameraUrl , commande , parameters = None , timeout = 3 ):
748751 url = cameraUrl + ( commande % parameters if parameters else commande )
749- return postRequest (url , timeout = timeout )
752+ return postRequest ("Camera" , url , timeout = timeout )
750753
751- def postRequest (url , params = None , timeout = 10 ):
754+ def postRequest (topic , url , params = None , timeout = 10 ):
752755 if PYTHON3 :
753756 req = urllib .request .Request (url )
754757 if params :
@@ -757,7 +760,10 @@ def postRequest(url, params=None, timeout=10):
757760 try :
758761 resp = urllib .request .urlopen (req , params , timeout = timeout ) if params else urllib .request .urlopen (req , timeout = timeout )
759762 except urllib .error .HTTPError as err :
760- logger .error ("code=%s, reason=%s, body=%s" % (err .code , err .reason , err .fp .read ()))
763+ if err .code == 403 :
764+ logger .warning ("Your current token scope do not allow access to %s" % topic )
765+ else :
766+ logger .error ("code=%s, reason=%s, body=%s" % (err .code , err .reason , err .fp .read ()))
761767 return None
762768 else :
763769 if params :
@@ -767,7 +773,10 @@ def postRequest(url, params=None, timeout=10):
767773 try :
768774 resp = urllib2 .urlopen (req , timeout = timeout )
769775 except urllib2 .HTTPError as err :
770- logger .error ("code=%s, reason=%s" % (err .code , err .reason ))
776+ if err .code == 403 :
777+ logger .warning ("Your current token scope do not allow access to %s" % topic )
778+ else :
779+ logger .error ("code=%s, reason=%s" % (err .code , err .reason ))
771780 return None
772781 data = b""
773782 for buff in iter (lambda : resp .read (65535 ), b'' ): data += buff
0 commit comments