@@ -569,32 +569,39 @@ def _update_data(self, change):
569569 self .data = self ._get_data ()
570570
571571 def _get_data (self ):
572+ if 'type' not in self .data :
573+ # We can't apply a style we don't know what the data look like
574+ return self .data
575+
576+ datatype = self .data ['type' ]
577+
578+ style_callback = None
572579 if self .style_callback :
573- if self .data ['type' ] == 'Feature' :
574- if 'style' in self .data ['properties' ]:
575- self .data ['properties' ]['style' ].update (self .style_callback (self .data ))
576- else :
577- self .data ['properties' ]['style' ] = self .style_callback (self .data )
578- elif self .data ['type' ] == 'FeatureCollection' :
579- for feature in self .data ['features' ]:
580- if 'style' in feature ['properties' ]:
581- feature ['properties' ]['style' ].update (self .style_callback (feature ))
582- else :
583- feature ['properties' ]['style' ] = self .style_callback (feature )
580+ style_callback = self .style_callback
584581 elif self .style :
585- if self . data [ 'type' ] == 'Feature' :
586- if 'style' in self . data [ 'properties' ] :
587- self . data [ 'properties' ][ 'style' ]. update ( self . style )
588- else :
589- self . data [ 'properties' ][ 'style' ] = self . style
590- elif self . data [ 'type' ] == 'FeatureCollection ' :
591- for feature in self .data [ 'features' ]:
592- if 'style' in feature [ 'properties' ] :
593- feature [ 'properties' ][ 'style' ]. update ( self . style )
594- else :
595- feature [ 'properties' ][ 'style' ] = self . style
582+ style_callback = lambda feature : self . style
583+ else :
584+ # No style to apply
585+ return self . data
586+
587+ if datatype == 'Feature ' :
588+ self ._apply_style ( self . data , style_callback )
589+ elif datatype == 'FeatureCollection' :
590+ for feature in self . data [ 'features' ]:
591+ self . _apply_style ( feature , style_callback )
592+
596593 return self .data
597594
595+ def _apply_style (self , feature , style_callback ):
596+ if 'properties' not in feature :
597+ feature ['properties' ] = {}
598+
599+ properties = feature ['properties' ]
600+ if 'style' in properties :
601+ properties ['style' ].update (style_callback (feature ))
602+ else :
603+ properties ['style' ] = style_callback (feature )
604+
598605 def __init__ (self , ** kwargs ):
599606 super (GeoJSON , self ).__init__ (** kwargs )
600607 self .on_msg (self ._handle_m_msg )
0 commit comments