@@ -269,8 +269,11 @@ def online(self):
269269
270270 @property
271271 def structure (self ):
272- return Structure (self ._device ['structure_id' ],
273- self ._nest_api )
272+ if 'structure_id' in self ._device :
273+ return Structure (self ._device ['structure_id' ],
274+ self ._nest_api )
275+ else :
276+ return None
274277
275278 @property
276279 def where (self ):
@@ -299,7 +302,7 @@ def where(self, value):
299302
300303 @property
301304 def description (self ):
302- return self ._device [ 'name_long' ]
305+ return self ._device . get ( 'name_long' )
303306
304307 @property
305308 def is_thermostat (self ):
@@ -321,7 +324,7 @@ def is_thermostat(self):
321324
322325 @property
323326 def _device (self ):
324- return self ._devices [ THERMOSTATS ][ self ._serial ]
327+ return self ._devices . get ( THERMOSTATS , {}). get ( self ._serial , {})
325328
326329 @property
327330 def _shared (self ):
@@ -335,7 +338,7 @@ def _track(self):
335338
336339 @property
337340 def software_version (self ):
338- return self ._device [ 'software_version' ]
341+ return self ._device . get ( 'software_version' )
339342
340343 @property
341344 def fan (self ):
@@ -509,7 +512,7 @@ def _round_temp(self, temp):
509512
510513 @property
511514 def temperature_scale (self ):
512- return self ._device [ 'temperature_scale' ]
515+ return self ._device . get ( 'temperature_scale' )
513516
514517 @property
515518 def is_locked (self ):
@@ -552,11 +555,11 @@ def temperature(self, value):
552555 @property
553556 def target (self ):
554557 if self .mode == 'heat-cool' :
555- low = self ._device [ self ._temp_key ('target_temperature_low' )]
556- high = self ._device [ self ._temp_key ('target_temperature_high' )]
558+ low = self ._device . get ( self ._temp_key ('target_temperature_low' ))
559+ high = self ._device . get ( self ._temp_key ('target_temperature_high' ))
557560 return LowHighTuple (low , high )
558561
559- return self ._device [ self ._temp_key ('target_temperature' )]
562+ return self ._device . get ( self ._temp_key ('target_temperature' ))
560563
561564 @target .setter
562565 def target (self , value ):
@@ -677,7 +680,7 @@ def is_smoke_co_alarm(self):
677680
678681 @property
679682 def _device (self ):
680- return self ._devices [ SMOKE_CO_ALARMS ][ self ._serial ]
683+ return self ._devices . get ( SMOKE_CO_ALARMS , {}). get ( self ._serial , {})
681684
682685 @property
683686 def auto_away (self ):
@@ -1104,7 +1107,7 @@ def is_camera(self):
11041107
11051108 @property
11061109 def _device (self ):
1107- return self ._devices [ CAMERAS ][ self ._serial ]
1110+ return self ._devices . get ( CAMERAS , {}). get ( self ._serial , {})
11081111
11091112 @property
11101113 def ongoing_event (self ):
@@ -1348,7 +1351,8 @@ def web_url(http://github.com/self):
13481351class Structure (NestBase ):
13491352 @property
13501353 def _structure (self ):
1351- return self ._nest_api ._status [STRUCTURES ][self ._serial ]
1354+ return self ._nest_api ._status .get (
1355+ STRUCTURES , {}).get (self ._serial , {})
13521356
13531357 def __repr__ (self ):
13541358 return str (self ._structure )
@@ -1889,15 +1893,15 @@ def _status(self):
18891893
18901894 @property
18911895 def _metadata (self ):
1892- return self ._status [ METADATA ]
1896+ return self ._status . get ( METADATA , {})
18931897
18941898 @property
18951899 def client_version (self ):
1896- return self ._metadata [ 'client_version' ]
1900+ return self ._metadata . get ( 'client_version' )
18971901
18981902 @property
18991903 def _devices (self ):
1900- return self ._status [ DEVICES ]
1904+ return self ._status . get ( DEVICES , {})
19011905
19021906 @property
19031907 def devices (self ):
@@ -1929,7 +1933,7 @@ def cameras(self):
19291933 @property
19301934 def structures (self ):
19311935 return [Structure (stid , self )
1932- for stid in self ._status [ STRUCTURES ] ]
1936+ for stid in self ._status . get ( STRUCTURES , []) ]
19331937
19341938 @property
19351939 def urls (self ):
0 commit comments