diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 45a3999..147849b 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,3 +1,6 @@ +0.13.1 +- Bug fix for io.read_features with Fiona 1.8+ + 0.13.0 - Require Rasterio>=1.0 - Fix buffer logic for boxify_points (#171) diff --git a/requirements_dev.txt b/requirements_dev.txt index 267e341..c60b34b 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,9 +1,8 @@ # https://github.com/pytest-dev/pytest/issues/1043 and 1032 -pytest>=3.0 +pytest>=4.0 coverage simplejson -git+git://github.com/mverteuil/pytest-ipdb.git twine numpydoc pytest-cov diff --git a/setup.cfg b/setup.cfg index ef0c067..4259f6b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ # content of setup.cfg -[pytest] +[tool:pytest] norecursedirs = examples* src* scripts* docs* # addopts = --verbose -rf --ipdb --maxfail=1 diff --git a/src/rasterstats/_version.py b/src/rasterstats/_version.py index f23a6b3..7e0dc0e 100644 --- a/src/rasterstats/_version.py +++ b/src/rasterstats/_version.py @@ -1 +1 @@ -__version__ = "0.13.0" +__version__ = "0.13.1" diff --git a/src/rasterstats/io.py b/src/rasterstats/io.py index 4486f85..04e2687 100644 --- a/src/rasterstats/io.py +++ b/src/rasterstats/io.py @@ -5,6 +5,7 @@ import json import math import fiona +from fiona.errors import DriverError import rasterio import warnings from rasterio.transform import guard_transform @@ -14,6 +15,10 @@ from shapely.errors import ReadingError except: from shapely.geos import ReadingError +try: + from json.decoder import JSONDecodeError +except ImportError: + JSONDecodeError = ValueError from shapely import wkt, wkb from collections import Iterable, Mapping @@ -76,6 +81,7 @@ def parse_feature(obj): def read_features(obj, layer=0): features_iter = None + if isinstance(obj, string_types): try: # test it as fiona data source @@ -88,14 +94,14 @@ def fiona_generator(obj): yield feature features_iter = fiona_generator(obj) - except (AssertionError, TypeError, IOError, OSError): + except (AssertionError, TypeError, IOError, OSError, DriverError, UnicodeDecodeError): try: mapping = json.loads(obj) if 'type' in mapping and mapping['type'] == 'FeatureCollection': features_iter = mapping['features'] elif mapping['type'] in geom_types + ['Feature']: features_iter = [parse_feature(mapping)] - except ValueError: + except (ValueError, JSONDecodeError): # Single feature-like string features_iter = [parse_feature(obj)] elif isinstance(obj, Mapping):