From a44b46d959d4fa02dbd539a71ab6783df1dda754 Mon Sep 17 00:00:00 2001 From: Matthew Perry Date: Mon, 26 Nov 2018 11:03:04 -0700 Subject: [PATCH 1/7] catch fiona driver error --- src/rasterstats/io.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rasterstats/io.py b/src/rasterstats/io.py index 4486f85..b1bfd9a 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 @@ -88,7 +89,7 @@ def fiona_generator(obj): yield feature features_iter = fiona_generator(obj) - except (AssertionError, TypeError, IOError, OSError): + except (DriverError, AssertionError, TypeError, IOError, OSError): try: mapping = json.loads(obj) if 'type' in mapping and mapping['type'] == 'FeatureCollection': From 221b47c4e4940d236df9a2a93b036c5c981133e9 Mon Sep 17 00:00:00 2001 From: Matthew Perry Date: Mon, 26 Nov 2018 11:05:26 -0700 Subject: [PATCH 2/7] bump version --- CHANGELOG.txt | 3 +++ src/rasterstats/_version.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) 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/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" From 7e3dc615f13232a170cb07d22df54af14d00d42f Mon Sep 17 00:00:00 2001 From: Ryan Hodges Date: Fri, 8 Mar 2019 17:26:41 -0800 Subject: [PATCH 3/7] fixing issue where fiona DriverError was unhandled for string_type features --- src/rasterstats/io.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/rasterstats/io.py b/src/rasterstats/io.py index 4486f85..a69b0d8 100644 --- a/src/rasterstats/io.py +++ b/src/rasterstats/io.py @@ -3,8 +3,10 @@ from __future__ import division import sys import json +from json.decoder import JSONDecodeError import math import fiona +from fiona.errors import DriverError import rasterio import warnings from rasterio.transform import guard_transform @@ -88,14 +90,14 @@ def fiona_generator(obj): yield feature features_iter = fiona_generator(obj) - except (AssertionError, TypeError, IOError, OSError): + except (AssertionError, TypeError, IOError, OSError, DriverError): 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): From 3e30d36eeebde34b1bcbba8ad08f0a95d653aa7e Mon Sep 17 00:00:00 2001 From: Matthew Perry Date: Sat, 9 Mar 2019 14:53:19 -0700 Subject: [PATCH 4/7] updates for pyt4est --- requirements_dev.txt | 3 +-- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) 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 From e0c4c833506db2adb8b84021a0f243738e98891e Mon Sep 17 00:00:00 2001 From: Matthew Perry Date: Sat, 9 Mar 2019 15:07:19 -0700 Subject: [PATCH 5/7] merge pull 181 --- src/rasterstats/io.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/rasterstats/io.py b/src/rasterstats/io.py index b1bfd9a..a69b0d8 100644 --- a/src/rasterstats/io.py +++ b/src/rasterstats/io.py @@ -3,6 +3,7 @@ from __future__ import division import sys import json +from json.decoder import JSONDecodeError import math import fiona from fiona.errors import DriverError @@ -89,14 +90,14 @@ def fiona_generator(obj): yield feature features_iter = fiona_generator(obj) - except (DriverError, AssertionError, TypeError, IOError, OSError): + except (AssertionError, TypeError, IOError, OSError, DriverError): 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): From 43dc95d8c0829a718704a2c9ef2f3e17a40a75be Mon Sep 17 00:00:00 2001 From: Matthew Perry Date: Sat, 9 Mar 2019 15:11:20 -0700 Subject: [PATCH 6/7] JSONDecodeError isnt available in older python --- src/rasterstats/io.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/rasterstats/io.py b/src/rasterstats/io.py index a69b0d8..b1d232e 100644 --- a/src/rasterstats/io.py +++ b/src/rasterstats/io.py @@ -3,7 +3,6 @@ from __future__ import division import sys import json -from json.decoder import JSONDecodeError import math import fiona from fiona.errors import DriverError @@ -16,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 From 56486fd3dcfa6a2fdc1cf912e7fa05b1468f1fe0 Mon Sep 17 00:00:00 2001 From: Matthew Perry Date: Sat, 9 Mar 2019 15:20:20 -0700 Subject: [PATCH 7/7] py27 bytes --- src/rasterstats/io.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rasterstats/io.py b/src/rasterstats/io.py index b1d232e..04e2687 100644 --- a/src/rasterstats/io.py +++ b/src/rasterstats/io.py @@ -81,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 @@ -93,7 +94,7 @@ def fiona_generator(obj): yield feature features_iter = fiona_generator(obj) - except (AssertionError, TypeError, IOError, OSError, DriverError): + except (AssertionError, TypeError, IOError, OSError, DriverError, UnicodeDecodeError): try: mapping = json.loads(obj) if 'type' in mapping and mapping['type'] == 'FeatureCollection':