This is an automated email from the git hooks/post-receive script. johanvdw-guest pushed a commit to branch master in repository fiona.
commit f21c36320523047b0333a233be0721a9fe41d4aa Author: Johan Van de Wauw <johan.vandew...@gmail.com> Date: Mon Feb 20 19:48:01 2017 +0100 Imported Upstream version 1.7.4 --- CHANGES.txt | 10 ++++++++++ fiona/__init__.py | 2 +- fiona/collection.py | 14 ++++++++++---- tests/data/grenada.geojson | 1 + tests/test_bytescollection.py | 21 +++++++++++++++++++++ 5 files changed, 43 insertions(+), 5 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index e8304c5..1bc4476 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -3,6 +3,16 @@ Changes All issue numbers are relative to https://github.com/Toblerity/Fiona/issues. +1.7.4 (2017-02-20) +------------------ + +Bug fixes: + +- OGR's EsriJSON detection fails when certain keys aren't found in the first + 6000 bytes of data passed to `BytesCollection` (#422). A .json file extension + is now explicitly given to the in-memory file behind `BytesCollection` when + the `driver='GeoJSON'` keyword argument is given (#423). + 1.7.3 (2017-02-14) ------------------ diff --git a/fiona/__init__.py b/fiona/__init__.py index 88e7407..fca185b 100644 --- a/fiona/__init__.py +++ b/fiona/__init__.py @@ -81,7 +81,7 @@ import uuid __all__ = ['bounds', 'listlayers', 'open', 'prop_type', 'prop_width'] -__version__ = "1.7.3" +__version__ = "1.7.4" __gdal_version__ = get_gdal_release_name().decode('utf-8') log = logging.getLogger('Fiona') diff --git a/fiona/collection.py b/fiona/collection.py index f249fd4..f19c1a7 100644 --- a/fiona/collection.py +++ b/fiona/collection.py @@ -447,15 +447,21 @@ class BytesCollection(Collection): # it is garbage collected while in use. self.bytesbuf = bytesbuf - # Map the buffer to a file. If the buffer contains a zipfile we - # take extra steps in naming the buffer and in opening it. + # Map the buffer to a file. If the buffer contains a zipfile + # we take extra steps in naming the buffer and in opening + # it. If the requested driver is for GeoJSON, we append an an + # appropriate extension to ensure the driver reads it. filetype = get_filetype(self.bytesbuf) - ext = '.zip' if filetype == 'zip' else '' + ext = '' + if filetype == 'zip': + ext = '.zip' + elif kwds.get('driver') == "GeoJSON": + ext = '.json' self.virtual_file = buffer_to_virtual_file(self.bytesbuf, ext=ext) # Instantiate the parent class. super(BytesCollection, self).__init__(self.virtual_file, vsi=filetype, - **kwds) + encoding='utf-8', **kwds) def close(self): """Removes the virtual file associated with the class.""" diff --git a/tests/data/grenada.geojson b/tests/data/grenada.geojson new file mode 100644 index 0000000..42dea4b --- /dev/null +++ b/tests/data/grenada.geojson @@ -0,0 +1 @@ +{"features":[{"geometry":{"coordinates":[[[[-61.173214300000005,12.516654800000001],[-61.3827217,12.5301363],[-61.665747100000004,12.5966532],[-61.6661847,12.596],[-61.66814250000001,12.593],[-61.6700247,12.59],[-61.6718337,12.587],[-61.673571700000004,12.584],[-61.6752407,12.581],[-61.6768427,12.578],[-61.678379400000004,12.575000000000001],[-61.6803295,12.571],[-61.6830501,12.565000000000001],[-61.68553430000001,12.559000000000001],[-61.687063699999996,12.555000000000001],[-61.6884946, [...] diff --git a/tests/test_bytescollection.py b/tests/test_bytescollection.py index ebce7f5..92c4d5b 100644 --- a/tests/test_bytescollection.py +++ b/tests/test_bytescollection.py @@ -223,3 +223,24 @@ def test_zipped_bytes_collection(): with fiona.BytesCollection(zip_file_bytes) as col: assert col.name == 'coutwildrnp' + + +def test_grenada_bytes_geojson(): + """Read grenada.geojson as BytesCollection. + + grenada.geojson is an example of geojson that GDAL's GeoJSON + driver will fail to read successfully unless the file's extension + reflects its json'ness. + """ + with open('tests/data/grenada.geojson', 'rb') as src: + bytes_grenada_geojson = src.read() + + # We expect an exception if the GeoJSON driver isn't specified. + with pytest.raises(fiona.errors.FionaValueError): + with fiona.BytesCollection(bytes_grenada_geojson) as col: + pass + + # If told what driver to use, we should be good. + with fiona.BytesCollection(bytes_grenada_geojson, driver='GeoJSON') as col: + assert len(col) == 1 + -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/fiona.git _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel