Skip to content

Commit bff337f

Browse files
authored
Merge pull request #573 from martinRenou/cleaning_getdata_geojson
Refactor GeoJSON._get_data
2 parents 90d0c4f + 6e3662e commit bff337f

File tree

2 files changed

+30
-23
lines changed

2 files changed

+30
-23
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@ script:
2727
- test -d $CONDA_PREFIX/share/jupyter/nbextensions/jupyter-leaflet
2828
- test -f $CONDA_PREFIX/share/jupyter/nbextensions/jupyter-leaflet/extension.js
2929
- test -f $CONDA_PREFIX/share/jupyter/nbextensions/jupyter-leaflet/index.js
30-
- flake8 ipyleaflet --ignore=E501
30+
- flake8 ipyleaflet --ignore=E501,E731

ipyleaflet/leaflet.py

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)