From 71abcfef1bbf84d07e1c1b5469b40ab4ff9c0ee6 Mon Sep 17 00:00:00 2001 From: Filipe Fernandes Date: Fri, 9 Nov 2018 16:59:53 -0200 Subject: [PATCH 01/10] fix #928 --- folium/features.py | 44 ++++++++++++++++++++++---------------- folium/plugins/heat_map.py | 3 ++- folium/utilities.py | 10 ++++----- folium/vector_layers.py | 2 +- 4 files changed, 33 insertions(+), 26 deletions(-) diff --git a/folium/features.py b/folium/features.py index 29bac8afcc..67010a69f3 100644 --- a/folium/features.py +++ b/folium/features.py @@ -10,22 +10,28 @@ import json import warnings -import requests -import numpy as np - from branca.colormap import LinearColormap, StepColormap from branca.element import (Element, Figure, JavascriptLink, MacroElement) -from branca.utilities import (_locations_tolist, _parse_size, image_to_url, - none_max, none_min, color_brewer) +from branca.utilities import ( + _iter_tolist, + _parse_size, + color_brewer, + image_to_url, + none_max, + none_min, +) from folium.folium import Map from folium.map import (FeatureGroup, Icon, Layer, Marker, Tooltip) - from folium.utilities import get_bounds from folium.vector_layers import PolyLine from jinja2 import Template +import numpy as np + +import requests + from six import binary_type, text_type @@ -84,7 +90,7 @@ def __init__(self, location, color='black', opacity=1, weight=2, fill_color='blue', fill_opacity=1, number_of_sides=4, rotation=0, radius=15, popup=None, tooltip=None): super(RegularPolygonMarker, self).__init__( - _locations_tolist(location), + _iter_tolist(location), popup=popup, tooltip=tooltip ) self._name = 'RegularPolygonMarker' @@ -684,18 +690,18 @@ def __init__(self, fields, aliases=None, labels=True, super(GeoJsonTooltip, self).__init__( text='', style=style, sticky=sticky, **kwargs ) - self._name = "GeoJsonTooltip" + self._name = 'GeoJsonTooltip' - assert isinstance(fields, (list, tuple)), "Please pass a list or " \ - "tuple to fields." + assert isinstance(fields, (list, tuple)), 'Please pass a list or ' \ + 'tuple to fields.' if aliases is not None: assert isinstance(aliases, (list, tuple)) - assert len(fields) == len(aliases), "fields and aliases must have" \ - " the same length." - assert isinstance(labels, bool), "labels requires a boolean value." - assert isinstance(localize, bool), "localize must be bool." - assert 'permanent' not in kwargs, "The `permanent` option does not " \ - "work with GeoJsonTooltip." + assert len(fields) == len(aliases), 'fields and aliases must have' \ + ' the same length.' + assert isinstance(labels, bool), 'labels requires a boolean value.' + assert isinstance(localize, bool), 'localize must be bool.' + assert 'permanent' not in kwargs, 'The `permanent` option does not ' \ + 'work with GeoJsonTooltip.' self.fields = fields self.aliases = aliases @@ -703,7 +709,7 @@ def __init__(self, fields, aliases=None, labels=True, self.localize = localize if style: assert isinstance(style, str), \ - "Pass a valid inline HTML style property string to style." + 'Pass a valid inline HTML style property string to style.' # noqa outside of type checking. self.style = style @@ -720,8 +726,8 @@ def render(self, **kwargs): 'than a GeoJson or TopoJson object.') keys = tuple(x for x in keys if x not in ('style', 'highlight')) for value in self.fields: - assert value in keys, ("The field {} is not available in the data. " - "Choose from: {}.".format(value, keys)) + assert value in keys, ('The field {} is not available in the data. ' + 'Choose from: {}.'.format(value, keys)) super(GeoJsonTooltip, self).render(**kwargs) diff --git a/folium/plugins/heat_map.py b/folium/plugins/heat_map.py index 59bbd7d3dc..65d76a04a1 100644 --- a/folium/plugins/heat_map.py +++ b/folium/plugins/heat_map.py @@ -8,7 +8,7 @@ from branca.utilities import none_max, none_min from folium.map import Layer -from folium.utilities import _isnan +from folium.utilities import _isnan, _iter_tolist from jinja2 import Template @@ -65,6 +65,7 @@ def __init__(self, data, name=None, min_opacity=0.5, max_zoom=18, overlay=True, control=True, show=True): super(HeatMap, self).__init__(name=name, overlay=overlay, control=control, show=show) + data = _iter_tolist(data) if _isnan(data): raise ValueError('data cannot contain NaNs, ' 'got:\n{!r}'.format(data)) diff --git a/folium/utilities.py b/folium/utilities.py index f829182789..76153bd019 100644 --- a/folium/utilities.py +++ b/folium/utilities.py @@ -35,7 +35,7 @@ def _validate_location(location): if len(location) != 2: raise ValueError('Expected two values for location [lat, lon], ' 'got {}'.format(len(location))) - location = _locations_tolist(location) + location = _iter_tolist(location) return location @@ -44,14 +44,14 @@ def _validate_coordinates(coordinates): if _isnan(coordinates): raise ValueError('Location values cannot contain NaNs, ' 'got:\n{!r}'.format(coordinates)) - coordinates = _locations_tolist(coordinates) + coordinates = _iter_tolist(coordinates) return coordinates -def _locations_tolist(x): +def _iter_tolist(x): """Transforms recursively a list of iterables into a list of list.""" if hasattr(x, '__iter__'): - return list(map(_locations_tolist, x)) + return list(map(_iter_tolist, x)) else: return x @@ -112,7 +112,7 @@ def _is_url(url): """Check to see if `url` has a valid protocol.""" try: return urlparse(url).scheme in _VALID_URLS - except: + except Exception: return False diff --git a/folium/vector_layers.py b/folium/vector_layers.py index b0b5383cd5..7cc3626b77 100644 --- a/folium/vector_layers.py +++ b/folium/vector_layers.py @@ -10,7 +10,7 @@ import json from branca.element import (CssLink, Element, Figure, JavascriptLink, MacroElement) # noqa -from branca.utilities import (_locations_tolist, _parse_size, image_to_url, iter_points, none_max, none_min) # noqa +from branca.utilities import (_parse_size, image_to_url, iter_points, none_max, none_min) # noqa from folium.map import Marker From dbb9dbaec1d9bb5a7b4fddcd4f08a97c0c644f34 Mon Sep 17 00:00:00 2001 From: Filipe Fernandes Date: Fri, 9 Nov 2018 17:32:11 -0200 Subject: [PATCH 02/10] flake 8 fixes --- folium/__init__.py | 91 ++++++++++++++++++++++++++++------------------ 1 file changed, 55 insertions(+), 36 deletions(-) diff --git a/folium/__init__.py b/folium/__init__.py index fbc5919027..18008b6e65 100644 --- a/folium/__init__.py +++ b/folium/__init__.py @@ -5,38 +5,56 @@ import sys import warnings +import branca from branca.colormap import (ColorMap, LinearColormap, StepColormap) -from branca.element import (CssLink, Div, Element, Figure, Html, IFrame, - JavascriptLink, Link, MacroElement) +from branca.element import ( + CssLink, + Div, + Element, + Figure, + Html, + IFrame, + JavascriptLink, + Link, + MacroElement, +) from folium._version import get_versions - from folium.features import ( - ClickForMarker, ColorLine, CustomIcon, DivIcon, GeoJson, - LatLngPopup, RegularPolygonMarker, TopoJson, Vega, VegaLite, - GeoJsonTooltip, Choropleth + Choropleth, + ClickForMarker, + ColorLine, + CustomIcon, + DivIcon, + GeoJson, + LatLngPopup, + RegularPolygonMarker, + TopoJson, + Vega, + VegaLite, ) - -from folium.raster_layers import TileLayer, WmsTileLayer - from folium.folium import Map - from folium.map import ( - FeatureGroup, FitBounds, Icon, LayerControl, Marker, Popup, Tooltip + FeatureGroup, + FitBounds, + Icon, + LayerControl, + Marker, + Popup, + Tooltip, ) +from folium.raster_layers import TileLayer, WmsTileLayer +from folium.vector_layers import Circle, CircleMarker, PolyLine, Polygon, Rectangle -from folium.vector_layers import Circle, CircleMarker, PolyLine, Polygon, Rectangle # noqa - -import branca if tuple(int(x) for x in branca.__version__.split('.')[:2]) < (0, 3): raise ImportError('branca version 0.3.0 or higher is required. ' 'Update branca with e.g. `pip install branca --upgrade`.') if sys.version_info < (3, 0): warnings.warn( - ("folium will stop working with Python 2.7 starting Jan. 1, 2019." - " Please transition to Python 3 before this time." - " Check out https://python3statement.org/ for more info."), + ('folium will stop working with Python 2.7 starting Jan. 1, 2019.' + ' Please transition to Python 3 before this time.' + ' Check out https://python3statement.org/ for more info.'), PendingDeprecationWarning ) @@ -44,41 +62,42 @@ del get_versions __all__ = [ + 'Choropleth', + 'ClickForMarker', + 'ColorLine', + 'ColorMap', 'CssLink', + 'CustomIcon', 'Div', + 'DivIcon', 'Element', + 'FeatureGroup', 'Figure', + 'FitBounds', + 'GeoJson', + 'GeoJsonStyle', + 'GeoJsonTooltip', 'Html', 'IFrame', + 'Icon', 'JavascriptLink', + 'LatLngPopup', + 'LayerControl', + 'LinearColormap', 'Link', 'MacroElement', - 'ColorMap', - 'ColorLine', - 'LinearColormap', - 'StepColormap', 'Map', - 'FeatureGroup', - 'FitBounds', - 'Icon', - 'LayerControl', 'Marker', + 'MarkerCluster', 'Popup', - 'Tooltip', + 'RegularPolygonMarker', + 'StepColormap', 'TileLayer', - 'ClickForMarker', - 'CustomIcon', - 'DivIcon', - 'GeoJson', - 'GeoJsonStyle', - 'LatLngPopup', - 'MarkerCluster', + 'Tooltip', + 'TopoJson', 'Vega', 'VegaLite', - 'RegularPolygonMarker', - 'TopoJson', 'WmsTileLayer', - 'Choropleth', # vector_layers 'Circle', 'CircleMarker', From 5df68c8772ae81920ba947d56819c242c5dcac50 Mon Sep 17 00:00:00 2001 From: Filipe Fernandes Date: Fri, 9 Nov 2018 17:32:39 -0200 Subject: [PATCH 03/10] import from folium utilities --- folium/features.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/folium/features.py b/folium/features.py index 67010a69f3..a5ccccba95 100644 --- a/folium/features.py +++ b/folium/features.py @@ -12,18 +12,18 @@ from branca.colormap import LinearColormap, StepColormap from branca.element import (Element, Figure, JavascriptLink, MacroElement) -from branca.utilities import ( +from branca.utilities import color_brewer + +from folium.folium import Map +from folium.map import (FeatureGroup, Icon, Layer, Marker, Tooltip) +from folium.utilities import ( _iter_tolist, _parse_size, - color_brewer, + get_bounds, image_to_url, none_max, none_min, ) - -from folium.folium import Map -from folium.map import (FeatureGroup, Icon, Layer, Marker, Tooltip) -from folium.utilities import get_bounds from folium.vector_layers import PolyLine from jinja2 import Template From 2ba604b258710e57cf1a4679d7a05e6425385c16 Mon Sep 17 00:00:00 2001 From: Filipe Fernandes Date: Fri, 9 Nov 2018 17:54:25 -0200 Subject: [PATCH 04/10] import from folium utilities --- folium/folium.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/folium/folium.py b/folium/folium.py index fed90385d5..270e0a065a 100644 --- a/folium/folium.py +++ b/folium/folium.py @@ -12,11 +12,10 @@ import warnings from branca.element import CssLink, Element, Figure, JavascriptLink, MacroElement -from branca.utilities import _parse_size from folium.map import FitBounds from folium.raster_layers import TileLayer -from folium.utilities import _validate_location +from folium.utilities import _parse_size, _validate_location from jinja2 import Environment, PackageLoader, Template From b73e490a25717ba894069798ed60d03bf6bbd71f Mon Sep 17 00:00:00 2001 From: Filipe Fernandes Date: Fri, 9 Nov 2018 17:54:44 -0200 Subject: [PATCH 05/10] import from folium utilities and flake8 --- folium/map.py | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/folium/map.py b/folium/map.py index dd3040edbe..475c6bb3a1 100644 --- a/folium/map.py +++ b/folium/map.py @@ -8,12 +8,11 @@ from __future__ import (absolute_import, division, print_function) import json - from collections import OrderedDict from branca.element import CssLink, Element, Figure, Html, JavascriptLink, MacroElement # noqa -from folium.utilities import _validate_coordinates, get_bounds, camelize +from folium.utilities import _validate_coordinates, camelize, get_bounds from jinja2 import Template @@ -371,20 +370,20 @@ class Tooltip(MacroElement): {% endmacro %} """) valid_options = { - "pane": (str, ), - "offset": (tuple, ), - "direction": (str, ), - "permanent": (bool, ), - "sticky": (bool, ), - "interactive": (bool, ), - "opacity": (float, int), - "attribution": (str, ), - "className": (str, ), + 'pane': (str, ), + 'offset': (tuple, ), + 'direction': (str, ), + 'permanent': (bool, ), + 'sticky': (bool, ), + 'interactive': (bool, ), + 'opacity': (float, int), + 'attribution': (str, ), + 'className': (str, ), } def __init__(self, text, style=None, sticky=True, **kwargs): super(Tooltip, self).__init__() - self._name = "Tooltip" + self._name = 'Tooltip' self.text = str(text) @@ -393,7 +392,7 @@ def __init__(self, text, style=None, sticky=True, **kwargs): if style: assert isinstance(style, str), \ - "Pass a valid inline HTML style property string to style." + 'Pass a valid inline HTML style property string to style.' # noqa outside of type checking. self.style = style @@ -402,11 +401,11 @@ def parse_options(self, kwargs): kwargs = {camelize(key): value for key, value in kwargs.items()} for key in kwargs.keys(): assert key in self.valid_options, ( - "The option {} is not in the available options: {}." + 'The option {} is not in the available options: {}.' .format(key, ', '.join(self.valid_options)) ) assert isinstance(kwargs[key], self.valid_options[key]), ( - "The option {} must be one of the following types: {}." + 'The option {} must be one of the following types: {}.' .format(key, self.valid_options[key]) ) return json.dumps(kwargs) From 71e898005b07209d7bf4e2356450634489591f77 Mon Sep 17 00:00:00 2001 From: Filipe Fernandes Date: Fri, 9 Nov 2018 17:56:31 -0200 Subject: [PATCH 06/10] port functions from branca --- folium/utilities.py | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/folium/utilities.py b/folium/utilities.py index 76153bd019..a64383374f 100644 --- a/folium/utilities.py +++ b/folium/utilities.py @@ -11,12 +11,7 @@ import numpy as np from six import binary_type, text_type - - -try: - from urllib.parse import uses_relative, uses_netloc, uses_params, urlparse -except ImportError: - from urlparse import uses_relative, uses_netloc, uses_params, urlparse +from six.moves.urllib.parse import urlparse, uses_netloc, uses_params, uses_relative _VALID_URLS = set(uses_relative + uses_netloc + uses_params) @@ -356,3 +351,38 @@ def camelize(key): """ return ''.join(x.capitalize() if i > 0 else x for i, x in enumerate(key.split('_'))) + + +def _parse_size(value): + try: + if isinstance(value, int) or isinstance(value, float): + value_type = 'px' + value = float(value) + assert value > 0 + else: + value_type = '%' + value = float(value.strip('%')) + assert 0 <= value <= 100 + except Exception: + msg = 'Cannot parse value {!r} as {!r}'.format + raise ValueError(msg(value, value_type)) + return value, value_type + + +def iter_points(x): + """Iterates over a list representing a feature, and returns a list of points, + whatever the shape of the array (Point, MultiPolyline, etc). + """ + if isinstance(x, (list, tuple)): + if len(x): + if isinstance(x[0], (list, tuple)): + out = [] + for y in x: + out += iter_points(y) + return out + else: + return [x] + else: + return [] + else: + raise ValueError('List/tuple type expected. Got {!r}.'.format(x)) From 9a073dfeda46c4b46ad18784ecc05213be2c6cb8 Mon Sep 17 00:00:00 2001 From: Filipe Fernandes Date: Fri, 9 Nov 2018 17:56:50 -0200 Subject: [PATCH 07/10] import from folium utilities --- folium/vector_layers.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/folium/vector_layers.py b/folium/vector_layers.py index 7cc3626b77..d9d093b6c9 100644 --- a/folium/vector_layers.py +++ b/folium/vector_layers.py @@ -5,12 +5,11 @@ """ -from __future__ import (absolute_import, division, print_function) +from __future__ import absolute_import, division, print_function import json -from branca.element import (CssLink, Element, Figure, JavascriptLink, MacroElement) # noqa -from branca.utilities import (_parse_size, image_to_url, iter_points, none_max, none_min) # noqa +from branca.element import CssLink, Element, Figure, JavascriptLink, MacroElement # noqa from folium.map import Marker From d236a7c85c18f1f49061eea44522ccb4823af080 Mon Sep 17 00:00:00 2001 From: Filipe Fernandes Date: Fri, 9 Nov 2018 17:57:21 -0200 Subject: [PATCH 08/10] import from folium.utilities and flak8 --- folium/plugins/__init__.py | 8 ++++---- folium/plugins/beautify_icon.py | 6 +++--- folium/plugins/heat_map.py | 3 +-- folium/plugins/heat_map_withtime.py | 2 +- folium/plugins/marker_cluster.py | 3 ++- folium/plugins/minimap.py | 1 + folium/plugins/time_slider_choropleth.py | 1 - folium/plugins/timestamped_geo_json.py | 5 +++-- folium/plugins/timestamped_wmstilelayer.py | 2 +- 9 files changed, 16 insertions(+), 15 deletions(-) diff --git a/folium/plugins/__init__.py b/folium/plugins/__init__.py index ff6b47ef06..df574d0c21 100644 --- a/folium/plugins/__init__.py +++ b/folium/plugins/__init__.py @@ -21,15 +21,15 @@ from folium.plugins.heat_map_withtime import HeatMapWithTime from folium.plugins.marker_cluster import MarkerCluster from folium.plugins.measure_control import MeasureControl +from folium.plugins.minimap import MiniMap from folium.plugins.mouse_position import MousePosition from folium.plugins.polyline_text_path import PolyLineTextPath from folium.plugins.scroll_zoom_toggler import ScrollZoomToggler +from folium.plugins.search import Search from folium.plugins.terminator import Terminator from folium.plugins.time_slider_choropleth import TimeSliderChoropleth from folium.plugins.timestamped_geo_json import TimestampedGeoJson from folium.plugins.timestamped_wmstilelayer import TimestampedWmsTileLayers -from folium.plugins.search import Search -from folium.plugins.minimap import MiniMap __all__ = [ 'BeautifyIcon', @@ -43,13 +43,13 @@ 'HeatMapWithTime', 'MarkerCluster', 'MeasureControl', + 'MiniMap', 'MousePosition', 'PolyLineTextPath', 'ScrollZoomToggler', + 'Search', 'Terminator', 'TimeSliderChoropleth', 'TimestampedGeoJson', 'TimestampedWmsTileLayers', - 'Search', - 'MiniMap', ] diff --git a/folium/plugins/beautify_icon.py b/folium/plugins/beautify_icon.py index 09d7709d0a..c254937bed 100644 --- a/folium/plugins/beautify_icon.py +++ b/folium/plugins/beautify_icon.py @@ -4,12 +4,12 @@ import json -from branca.element import Figure, JavascriptLink, CssLink, MacroElement - -from six import iteritems +from branca.element import CssLink, Figure, JavascriptLink, MacroElement from jinja2 import Template +from six import iteritems + class BeautifyIcon(MacroElement): """ diff --git a/folium/plugins/heat_map.py b/folium/plugins/heat_map.py index 65d76a04a1..f7382923ab 100644 --- a/folium/plugins/heat_map.py +++ b/folium/plugins/heat_map.py @@ -5,10 +5,9 @@ import json from branca.element import Figure, JavascriptLink -from branca.utilities import none_max, none_min from folium.map import Layer -from folium.utilities import _isnan, _iter_tolist +from folium.utilities import _isnan, _iter_tolist, none_max, none_min from jinja2 import Template diff --git a/folium/plugins/heat_map_withtime.py b/folium/plugins/heat_map_withtime.py index fe6cd1454d..b962403adc 100644 --- a/folium/plugins/heat_map_withtime.py +++ b/folium/plugins/heat_map_withtime.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- from branca.element import CssLink, Element, Figure, JavascriptLink -from branca.utilities import none_max, none_min from folium.map import Layer +from folium.utilities import none_max, none_min from jinja2 import Template diff --git a/folium/plugins/marker_cluster.py b/folium/plugins/marker_cluster.py index 06ad77f79c..ece8a7682e 100644 --- a/folium/plugins/marker_cluster.py +++ b/folium/plugins/marker_cluster.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- -from __future__ import (absolute_import, division, print_function) +from __future__ import absolute_import, division, print_function + import json from branca.element import CssLink, Figure, JavascriptLink diff --git a/folium/plugins/minimap.py b/folium/plugins/minimap.py index b32679893c..f83e1f0867 100644 --- a/folium/plugins/minimap.py +++ b/folium/plugins/minimap.py @@ -5,6 +5,7 @@ import json from branca.element import CssLink, Figure, JavascriptLink, MacroElement + from folium.raster_layers import TileLayer from jinja2 import Template diff --git a/folium/plugins/time_slider_choropleth.py b/folium/plugins/time_slider_choropleth.py index 4d9515b497..776e592dbd 100644 --- a/folium/plugins/time_slider_choropleth.py +++ b/folium/plugins/time_slider_choropleth.py @@ -160,7 +160,6 @@ def __init__(self, data, styledict, name=None, overlay=True, control=True, self.timestamps = json.dumps(timestamps) self.styledict = json.dumps(styledict, sort_keys=True, indent=2) - def render(self, **kwargs): super(TimeSliderChoropleth, self).render(**kwargs) figure = self.get_root() diff --git a/folium/plugins/timestamped_geo_json.py b/folium/plugins/timestamped_geo_json.py index 20699a7029..22e9b0b39b 100644 --- a/folium/plugins/timestamped_geo_json.py +++ b/folium/plugins/timestamped_geo_json.py @@ -5,7 +5,8 @@ import json from branca.element import CssLink, Figure, JavascriptLink, MacroElement -from branca.utilities import iter_points, none_max, none_min + +from folium.utilities import iter_points, none_max, none_min from jinja2 import Template @@ -147,7 +148,7 @@ def __init__(self, data, transition_time=200, loop=True, auto_play=True, self.add_last_point = bool(add_last_point) self.period = period self.date_options = date_options - self.duration = 'undefined' if duration is None else "\""+duration+"\"" + self.duration = 'undefined' if duration is None else '"' + duration + '"' options = { 'position': 'bottomleft', diff --git a/folium/plugins/timestamped_wmstilelayer.py b/folium/plugins/timestamped_wmstilelayer.py index aaa0d15289..34cad83059 100644 --- a/folium/plugins/timestamped_wmstilelayer.py +++ b/folium/plugins/timestamped_wmstilelayer.py @@ -4,8 +4,8 @@ from branca.element import CssLink, Figure, JavascriptLink -from folium.raster_layers import WmsTileLayer from folium.map import Layer +from folium.raster_layers import WmsTileLayer from jinja2 import Template From 3091bbe8315df9f94227a32a044e558dd9f84b84 Mon Sep 17 00:00:00 2001 From: Filipe Fernandes Date: Tue, 13 Nov 2018 09:31:29 -0200 Subject: [PATCH 09/10] review actions --- folium/utilities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/folium/utilities.py b/folium/utilities.py index a64383374f..96d8d13e1f 100644 --- a/folium/utilities.py +++ b/folium/utilities.py @@ -355,7 +355,7 @@ def camelize(key): def _parse_size(value): try: - if isinstance(value, int) or isinstance(value, float): + if isinstance(value, (int, float)): value_type = 'px' value = float(value) assert value > 0 From eaaa8453f187bf967d489fa1cb3d17fa5218daa0 Mon Sep 17 00:00:00 2001 From: Filipe Fernandes Date: Tue, 13 Nov 2018 09:33:59 -0200 Subject: [PATCH 10/10] review actions (exit early) --- folium/utilities.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/folium/utilities.py b/folium/utilities.py index 96d8d13e1f..2cf2fbfef5 100644 --- a/folium/utilities.py +++ b/folium/utilities.py @@ -373,16 +373,15 @@ def iter_points(x): """Iterates over a list representing a feature, and returns a list of points, whatever the shape of the array (Point, MultiPolyline, etc). """ - if isinstance(x, (list, tuple)): - if len(x): - if isinstance(x[0], (list, tuple)): - out = [] - for y in x: - out += iter_points(y) - return out - else: - return [x] + if not isinstance(x, (list, tuple)): + raise ValueError('List/tuple type expected. Got {!r}.'.format(x)) + if len(x): + if isinstance(x[0], (list, tuple)): + out = [] + for y in x: + out += iter_points(y) + return out else: - return [] + return [x] else: - raise ValueError('List/tuple type expected. Got {!r}.'.format(x)) + return []