Skip to content

Commit 8e2d606

Browse files
committed
[Change] Warning only message in case of scope issue
1 parent 0288e68 commit 8e2d606

File tree

2 files changed

+26
-17
lines changed

2 files changed

+26
-17
lines changed

lnetatmo.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ class AuthFailure( Exception ):
156156
pass
157157

158158

159+
class outOfScope( Exception ):
160+
pass
161+
159162
class 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

747750
def 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

setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
setup(
66
name='lnetatmo',
7-
version='3.0.2',
7+
version='3.0.3',
88
classifiers=[
99
'Development Status :: 5 - Production/Stable',
1010
'Intended Audience :: Developers',
@@ -17,7 +17,7 @@
1717
scripts=[],
1818
data_files=[],
1919
url='https://github.com/philippelt/netatmo-api-python',
20-
download_url='https://github.com/philippelt/netatmo-api-python/archive/v3.0.2.tar.gz',
20+
download_url='https://github.com/philippelt/netatmo-api-python/archive/v3.0.3.tar.gz',
2121
license='GPL V3',
2222
description='Simple API to access Netatmo weather station data from any python script.'
2323
)

0 commit comments

Comments
 (0)