Skip to content

Commit 2795789

Browse files
authored
Merge pull request #1084 from dskkato/master
Relaxing location data type restriction.
2 parents eb001d9 + 0bdb7bc commit 2795789

File tree

3 files changed

+29
-8
lines changed

3 files changed

+29
-8
lines changed

folium/folium.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ def __init__(self, location=None, width='100%', height='100%',
231231
self._png_image = None
232232
self.png_enabled = png_enabled
233233

234-
if not location:
234+
if location is None:
235235
# If location is not passed we center and zoom out.
236236
self.location = [0, 0]
237237
self.zoom_start = 1

folium/utilities.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
import copy
1313
import uuid
1414
import collections
15+
try:
16+
from collections import abc
17+
except ImportError:
18+
import collections as abc
1519

1620
import numpy as np
1721

@@ -23,18 +27,23 @@
2327
_VALID_URLS.discard('')
2428

2529

30+
def _is_sized_iterable(arg):
31+
"""Validates the arg is Sized & Iterable"""
32+
return isinstance(arg, abc.Sized) & isinstance(arg, abc.Iterable)
33+
34+
2635
def _validate_location(location):
2736
"""Validates and formats location values before setting."""
28-
if _isnan(location):
29-
raise ValueError('Location values cannot contain NaNs, '
30-
'got {!r}'.format(location))
31-
if type(location) not in [list, tuple]:
32-
raise TypeError('Expected tuple/list for location, got '
37+
if not _is_sized_iterable(location):
38+
raise TypeError('Expected a collection object for location, got '
3339
'{!r}'.format(location))
34-
3540
if len(location) != 2:
3641
raise ValueError('Expected two values for location [lat, lon], '
3742
'got {}'.format(len(location)))
43+
if _isnan(location):
44+
raise ValueError('Location values cannot contain NaNs, '
45+
'got {!r}'.format(location))
46+
3847
location = _iter_tolist(location)
3948
return location
4049

@@ -58,7 +67,7 @@ def _iter_tolist(x):
5867

5968
def _flatten(container):
6069
for i in container:
61-
if isinstance(i, (list, tuple, np.ndarray)):
70+
if _is_sized_iterable(i):
6271
for j in _flatten(i):
6372
yield j
6473
else:

tests/test_folium.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import jinja2
2020
from jinja2 import Environment, PackageLoader
2121

22+
import numpy as np
2223
import pandas as pd
2324

2425
import pytest
@@ -62,6 +63,17 @@ def test_get_templates():
6263
assert isinstance(env, jinja2.environment.Environment)
6364

6465

66+
def test_location_args():
67+
"""Test some data types for a location arg."""
68+
location = np.array([45.5236, -122.6750])
69+
m = folium.Map(location)
70+
assert m.location == [45.5236, -122.6750]
71+
72+
df = pd.DataFrame({"location": [45.5236, -122.6750]})
73+
m = folium.Map(df["location"])
74+
assert m.location == [45.5236, -122.6750]
75+
76+
6577
class TestFolium(object):
6678
"""Test class for the Folium library."""
6779

0 commit comments

Comments
 (0)