[Git][debian-gis-team/fiona][master] 5 commits: New upstream version 1.8.21
Bas Couwenberg (@sebastic)
gitlab at salsa.debian.org
Mon Feb 7 16:49:04 GMT 2022
Bas Couwenberg pushed to branch master at Debian GIS Project / fiona
Commits:
23bec117 by Bas Couwenberg at 2022-02-07T17:23:15+01:00
New upstream version 1.8.21
- - - - -
2a125fa8 by Bas Couwenberg at 2022-02-07T17:23:18+01:00
Update upstream source from tag 'upstream/1.8.21'
Update to upstream version '1.8.21'
with Debian dir a1700ae2a023b8b9da9515b730d80c60637e18be
- - - - -
e75dbb65 by Bas Couwenberg at 2022-02-07T17:23:34+01:00
New upstream release.
- - - - -
071d792f by Bas Couwenberg at 2022-02-07T17:27:22+01:00
Refresh patches.
- - - - -
7ed99520 by Bas Couwenberg at 2022-02-07T17:27:31+01:00
Set distribution to unstable.
- - - - -
20 changed files:
- .github/workflows/ci_linux.yml
- CHANGES.txt
- debian/changelog
- debian/patches/0001-Rename-fio-command-to-fiona-to-avoid-name-clash.patch
- debian/patches/0006-Remove-unknown-distribution-options.patch
- debian/patches/test_drvsupport.patch
- fiona/__init__.py
- fiona/collection.py
- fiona/drvsupport.py
- fiona/logutils.py
- fiona/ogrext.pyx
- pyproject.toml
- requirements-dev.txt
- requirements.txt
- setup.py
- tests/test_bytescollection.py
- tests/test_drvsupport.py
- tests/test_logutils.py
- tests/test_memoryfile.py
- tests/test_open.py
Changes:
=====================================
.github/workflows/ci_linux.yml
=====================================
@@ -80,6 +80,12 @@ jobs:
PROJVERSION: "7.2.1",
allow_failure: "false",
}
+ - {
+ python: "3.10",
+ GDALVERSION: "3.3.3",
+ PROJVERSION: "8.2.0",
+ allow_failure: "false",
+ }
# Test GDAL master
- {
=====================================
CHANGES.txt
=====================================
@@ -3,6 +3,25 @@ Changes
All issue numbers are relative to https://github.com/Toblerity/Fiona/issues.
+1.8.21 (2022-02-07)
+-------------------
+
+Changes:
+
+- Driver mode support tests have been made more general and less susceptible to
+ driver quirks involving feature fields and coordinate values (#1060).
+- OSError is raised on attempts to open a dataset in a Python file object in
+ "a" mode (see #1027).
+- Upgrade attrs, cython, etc to open up Python 3.10 support (#1049).
+
+Bug fixes:
+
+- Allow FieldSkipLogFilter to handle exception messages as well as strings
+ (reported in #1035).
+- Clean up VSI files left by MemoryFileBase, resolving #1041.
+- Hard-coded "utf-8" collection encoding added in #423 has been removed
+ (#1057).
+
1.8.20 (2021-05-31)
-------------------
=====================================
debian/changelog
=====================================
@@ -1,13 +1,15 @@
-fiona (1.8.20-3) UNRELEASED; urgency=medium
+fiona (1.8.21-1) unstable; urgency=medium
* Team upload.
+ * New upstream release.
* Bump Standards-Version to 4.6.0, no changes.
* Bump debhelper compat to 12, changes:
- Drop --list-missing from dh_install
* Update doc-base paths.
* Update watch file to use tags instead of releases.
+ * Refresh patches.
- -- Bas Couwenberg <sebastic at debian.org> Wed, 08 Sep 2021 16:21:07 +0200
+ -- Bas Couwenberg <sebastic at debian.org> Mon, 07 Feb 2022 17:27:22 +0100
fiona (1.8.20-2) unstable; urgency=medium
=====================================
debian/patches/0001-Rename-fio-command-to-fiona-to-avoid-name-clash.patch
=====================================
@@ -9,7 +9,7 @@ There is already another package providing a binary "fio" (fio).
--- a/setup.py
+++ b/setup.py
-@@ -325,7 +325,7 @@ setup_args = dict(
+@@ -328,7 +328,7 @@ setup_args = dict(
packages=['fiona', 'fiona.fio'],
entry_points='''
[console_scripts]
=====================================
debian/patches/0006-Remove-unknown-distribution-options.patch
=====================================
@@ -7,7 +7,7 @@ Forwarded: not-needed
--- a/setup.py
+++ b/setup.py
-@@ -307,11 +307,8 @@ extras_require['all'] = list(set(it.chai
+@@ -310,11 +310,8 @@ extras_require['all'] = list(set(it.chai
setup_args = dict(
cmdclass={'sdist': sdist_multi_gdal},
=====================================
debian/patches/test_drvsupport.patch
=====================================
@@ -5,19 +5,19 @@ Forwarded: not-needed
--- a/tests/test_drvsupport.py
+++ b/tests/test_drvsupport.py
-@@ -16,6 +16,7 @@ def test_geojsonseq(format):
+@@ -22,6 +22,7 @@ def test_geojsonseq(format):
assert format in fiona.drvsupport.supported_drivers.keys()
+ at pytest.mark.xfail(strict=False)
- @pytest.mark.parametrize('driver', [driver for driver, raw in supported_drivers.items() if 'w' in raw])
- def test_write_or_driver_error(tmpdir, driver, testdata_generator):
- """
-@@ -95,6 +96,7 @@ def test_write_does_not_work_when_gdal_s
+ @pytest.mark.parametrize(
+ "driver", [driver for driver, raw in supported_drivers.items() if "w" in raw]
+ )
+@@ -109,6 +110,7 @@ def test_write_does_not_work_when_gdal_s
c.writerecords(records1)
+ at pytest.mark.xfail(strict=False)
- @pytest.mark.parametrize('driver', [driver for driver, raw in supported_drivers.items() if 'a' in raw])
- def test_append_or_driver_error(tmpdir, testdata_generator, driver):
- """ Test if driver supports append mode.
+ @pytest.mark.parametrize(
+ "driver", [driver for driver, raw in supported_drivers.items() if "a" in raw]
+ )
=====================================
fiona/__init__.py
=====================================
@@ -105,7 +105,7 @@ with fiona._loading.add_gdal_dll_directories():
__all__ = ['bounds', 'listlayers', 'open', 'prop_type', 'prop_width']
-__version__ = "1.8.20"
+__version__ = "1.8.21"
__gdal_version__ = get_gdal_release_name()
gdal_version = get_gdal_version_tuple()
@@ -199,14 +199,17 @@ def open(fp, mode='r', driver=None, schema=None, crs=None, encoding=None,
Returns
-------
Collection
- """
+ """
if mode == 'r' and hasattr(fp, 'read'):
@contextmanager
def fp_reader(fp):
memfile = MemoryFile(fp.read())
- dataset = memfile.open()
+ dataset = memfile.open(
+ driver=driver, crs=crs, schema=schema, layer=layer,
+ encoding=encoding, enabled_drivers=enabled_drivers,
+ **kwargs)
try:
yield dataset
finally:
@@ -240,6 +243,11 @@ def open(fp, mode='r', driver=None, schema=None, crs=None, encoding=None,
return fp_writer(fp)
+ elif mode == "a" and hasattr(fp, "write"):
+ raise OSError(
+ "Append mode is not supported for datasets in a Python file object."
+ )
+
else:
# If a pathlib.Path instance is given, convert it to a string path.
if isinstance(fp, Path):
=====================================
fiona/collection.py
=====================================
@@ -552,8 +552,7 @@ class BytesCollection(Collection):
self.virtual_file = buffer_to_virtual_file(self.bytesbuf, ext=ext)
# Instantiate the parent class.
- super(BytesCollection, self).__init__(self.virtual_file, vsi=filetype,
- encoding='utf-8', **kwds)
+ super(BytesCollection, self).__init__(self.virtual_file, vsi=filetype, **kwds)
def close(self):
"""Removes the virtual file associated with the class."""
=====================================
fiona/drvsupport.py
=====================================
@@ -99,7 +99,7 @@ supported_drivers = dict([
# multi-layer
# ("OpenAir", "r"),
# PCI Geomatics Database File PCIDSK No No Yes, using internal PCIDSK SDK (from GDAL 1.7.0)
- ("PCIDSK", "rw"),
+ ("PCIDSK", "raw"),
# PDS PDS No Yes Yes
("PDS", "r"),
# PDS renamed to OGR_PDS for GDAL 2.x
@@ -160,6 +160,7 @@ driver_mode_mingdal = {
'FlatGeobuf': (3, 1, 3)},
'a': {'GPKG': (1, 11, 0),
+ 'PCIDSK': (2, 0, 0),
'GeoJSON': (2, 1, 0),
'MapInfo File': (2, 0, 0)}
}
=====================================
fiona/logutils.py
=====================================
@@ -9,14 +9,14 @@ class FieldSkipLogFilter(logging.Filter):
At most, one message per field skipped per loop will be passed.
"""
- def __init__(self, name=''):
+ def __init__(self, name=""):
super(FieldSkipLogFilter, self).__init__(name)
self.seen_msgs = set()
def filter(self, record):
"""Pass record if not seen."""
- if getattr(record, 'msg', "").startswith("Skipping field"):
- msg = record.getMessage()
+ msg = record.getMessage()
+ if msg.startswith("Skipping field"):
retval = msg not in self.seen_msgs
self.seen_msgs.add(msg)
return retval
@@ -25,7 +25,6 @@ class FieldSkipLogFilter(logging.Filter):
class LogFiltering(object):
-
def __init__(self, logger, filter):
self.logger = logger
self.filter = filter
=====================================
fiona/ogrext.pyx
=====================================
@@ -1845,6 +1845,9 @@ cdef class MemoryFileBase:
if self._vsif != NULL:
VSIFCloseL(self._vsif)
self._vsif = NULL
+ # As soon as support for GDAL < 3 is dropped, we can switch
+ # to VSIRmdirRecursive.
+ VSIUnlink(self.name.encode("utf-8"))
VSIRmdir(self._dirname.encode("utf-8"))
self.closed = True
=====================================
pyproject.toml
=====================================
@@ -1,2 +1,7 @@
[build-system]
-requires = ["setuptools", "wheel", "cython==0.29.21", "oldest-supported-numpy"]
+requires = [
+ "cython==0.29.24",
+ "oldest-supported-numpy",
+ "setuptools",
+ "wheel",
+]
=====================================
requirements-dev.txt
=====================================
@@ -1,10 +1,10 @@
-r requirements.txt
coverage==4.5.4
-cython==0.29.21
+cython==0.29.24
mock ; python_version < '3.3'
-pytest==4.6.6
+pytest==6.2.5
pytest-cov==2.8.1
setuptools==41.6.0
-boto3==1.9.19
+boto3==1.20.10
wheel==0.33.6
pytz==2020.1
=====================================
requirements.txt
=====================================
@@ -1,7 +1,7 @@
-attrs==18.2.0
+attrs==21.2.0
click-plugins==1.0.4
cligj==0.5.0
munch==2.3.2
-six==1.11.0
+six==1.16.0
enum34==1.1.6 ; python_version < '3.4'
certifi
=====================================
setup.py
=====================================
@@ -295,6 +295,9 @@ requirements = [
'ordereddict; python_version < "2.7"',
'enum34; python_version < "3.4"'
]
+# Python 3.10 workaround as enum34 not available
+if sys.version_info >= (3, 10):
+ requirements.remove('enum34; python_version < "3.4"')
extras_require = {
'calc': ['shapely'],
@@ -352,7 +355,11 @@ setup_args = dict(
'License :: OSI Approved :: BSD License',
'Operating System :: OS Independent',
'Programming Language :: Python :: 2',
- 'Programming Language :: Python :: 3',
+ 'Programming Language :: Python :: 3.6',
+ 'Programming Language :: Python :: 3.7',
+ 'Programming Language :: Python :: 3.8',
+ 'Programming Language :: Python :: 3.9',
+ 'Programming Language :: Python :: 3.10',
'Topic :: Scientific/Engineering :: GIS'])
if os.environ.get('PACKAGE_DATA'):
=====================================
tests/test_bytescollection.py
=====================================
@@ -12,7 +12,7 @@ class TestReading(object):
def bytes_collection_object(self, path_coutwildrnp_json):
with open(path_coutwildrnp_json) as src:
bytesbuf = src.read().encode('utf-8')
- self.c = fiona.BytesCollection(bytesbuf)
+ self.c = fiona.BytesCollection(bytesbuf, encoding="utf-8")
yield
self.c.close()
=====================================
tests/test_drvsupport.py
=====================================
@@ -1,103 +1,119 @@
"""Tests of driver support"""
+import logging
+
import pytest
+
from .conftest import requires_gdal24, get_temp_filename
+
from fiona.drvsupport import supported_drivers, driver_mode_mingdal
import fiona.drvsupport
from fiona.env import GDALVersion
from fiona._env import calc_gdal_version_num, get_gdal_version_num
from fiona.errors import DriverError
+log = logging.getLogger()
+
@requires_gdal24
- at pytest.mark.parametrize('format', ['GeoJSON', 'ESRIJSON', 'TopoJSON', 'GeoJSONSeq'])
+ at pytest.mark.parametrize("format", ["GeoJSON", "ESRIJSON", "TopoJSON", "GeoJSONSeq"])
def test_geojsonseq(format):
"""Format is available"""
assert format in fiona.drvsupport.supported_drivers.keys()
- at pytest.mark.parametrize('driver', [driver for driver, raw in supported_drivers.items() if 'w' in raw])
+ at pytest.mark.parametrize(
+ "driver", [driver for driver, raw in supported_drivers.items() if "w" in raw]
+)
def test_write_or_driver_error(tmpdir, driver, testdata_generator):
"""
- Test if write mode works.
+ Test if write mode works.
"""
if driver == "BNA" and GDALVersion.runtime() < GDALVersion(2, 0):
pytest.skip("BNA driver segfaults with gdal 1.11")
- schema, crs, records1, _, test_equal, create_kwargs = testdata_generator(driver, range(0, 10), [])
+ schema, crs, records1, _, test_equal, create_kwargs = testdata_generator(
+ driver, range(0, 10), []
+ )
path = str(tmpdir.join(get_temp_filename(driver)))
- if (driver in driver_mode_mingdal['w'] and
- get_gdal_version_num() < calc_gdal_version_num(*driver_mode_mingdal['w'][driver])):
+ if driver in driver_mode_mingdal[
+ "w"
+ ] and get_gdal_version_num() < calc_gdal_version_num(
+ *driver_mode_mingdal["w"][driver]
+ ):
# Test if DriverError is raised for gdal < driver_mode_mingdal
with pytest.raises(DriverError):
- with fiona.open(path, 'w',
- driver=driver,
- crs=crs,
- schema=schema,
- **create_kwargs) as c:
+ with fiona.open(
+ path, "w", driver=driver, crs=crs, schema=schema, **create_kwargs
+ ) as c:
c.writerecords(records1)
else:
# Test if we can write
- with fiona.open(path, 'w',
- driver=driver,
- crs=crs,
- schema=schema,
- **create_kwargs) as c:
+ with fiona.open(
+ path, "w", driver=driver, crs=crs, schema=schema, **create_kwargs
+ ) as c:
c.writerecords(records1)
- if driver in {'FileGDB', 'OpenFileGDB'}:
+ if driver in {"FileGDB", "OpenFileGDB"}:
open_driver = driver
else:
open_driver = None
- with fiona.open(path, driver=open_driver) as c:
- assert c.driver == driver
- items = list(c)
- assert len(items) == len(records1)
- for val_in, val_out in zip(records1, items):
- assert test_equal(driver, val_in, val_out), "in: {val_in}, out: {val_out}".format(val_in=val_in,
- val_out=val_out)
+ with fiona.open(path, driver=open_driver) as collection:
+ assert collection.driver == driver
+ assert len(list(collection)) == len(records1)
- at pytest.mark.parametrize('driver', [driver for driver in driver_mode_mingdal['w'].keys()])
-def test_write_does_not_work_when_gdal_smaller_mingdal(tmpdir, driver, testdata_generator, monkeypatch):
+
+ at pytest.mark.parametrize(
+ "driver", [driver for driver in driver_mode_mingdal["w"].keys()]
+)
+def test_write_does_not_work_when_gdal_smaller_mingdal(
+ tmpdir, driver, testdata_generator, monkeypatch
+):
"""
- Test if driver really can't write for gdal < driver_mode_mingdal
+ Test if driver really can't write for gdal < driver_mode_mingdal
- If this test fails, it should be considered to update driver_mode_mingdal in drvsupport.py.
+ If this test fails, it should be considered to update driver_mode_mingdal in drvsupport.py.
"""
if driver == "BNA" and GDALVersion.runtime() < GDALVersion(2, 0):
pytest.skip("BNA driver segfaults with gdal 1.11")
- if (driver == 'FlatGeobuf' and
- calc_gdal_version_num(3, 1, 0) <= get_gdal_version_num() < calc_gdal_version_num(3, 1, 3)):
+ if driver == "FlatGeobuf" and calc_gdal_version_num(
+ 3, 1, 0
+ ) <= get_gdal_version_num() < calc_gdal_version_num(3, 1, 3):
pytest.skip("See https://github.com/Toblerity/Fiona/pull/924")
- schema, crs, records1, _, test_equal, create_kwargs = testdata_generator(driver, range(0, 10), [])
+ schema, crs, records1, _, test_equal, create_kwargs = testdata_generator(
+ driver, range(0, 10), []
+ )
path = str(tmpdir.join(get_temp_filename(driver)))
- if (driver in driver_mode_mingdal['w'] and
- get_gdal_version_num() < calc_gdal_version_num(*driver_mode_mingdal['w'][driver])):
- monkeypatch.delitem(fiona.drvsupport.driver_mode_mingdal['w'], driver)
+ if driver in driver_mode_mingdal[
+ "w"
+ ] and get_gdal_version_num() < calc_gdal_version_num(
+ *driver_mode_mingdal["w"][driver]
+ ):
+ monkeypatch.delitem(fiona.drvsupport.driver_mode_mingdal["w"], driver)
with pytest.raises(Exception):
- with fiona.open(path, 'w',
- driver=driver,
- crs=crs,
- schema=schema,
- **create_kwargs) as c:
+ with fiona.open(
+ path, "w", driver=driver, crs=crs, schema=schema, **create_kwargs
+ ) as c:
c.writerecords(records1)
- at pytest.mark.parametrize('driver', [driver for driver, raw in supported_drivers.items() if 'a' in raw])
+ at pytest.mark.parametrize(
+ "driver", [driver for driver, raw in supported_drivers.items() if "a" in raw]
+)
def test_append_or_driver_error(tmpdir, testdata_generator, driver):
- """ Test if driver supports append mode.
+ """Test if driver supports append mode.
Some driver only allow a specific schema. These drivers can be excluded by adding them to blacklist_append_drivers.
@@ -109,54 +125,63 @@ def test_append_or_driver_error(tmpdir, testdata_generator, driver):
pytest.skip("BNA driver segfaults with gdal 1.11")
path = str(tmpdir.join(get_temp_filename(driver)))
- schema, crs, records1, records2, test_equal, create_kwargs = testdata_generator(driver, range(0, 5), range(5, 10))
+ schema, crs, records1, records2, test_equal, create_kwargs = testdata_generator(
+ driver, range(0, 5), range(5, 10)
+ )
# If driver is not able to write, we cannot test append
- if (driver in driver_mode_mingdal['w']
- and get_gdal_version_num() < calc_gdal_version_num(*driver_mode_mingdal['w'][driver])):
+ if driver in driver_mode_mingdal[
+ "w"
+ ] and get_gdal_version_num() < calc_gdal_version_num(
+ *driver_mode_mingdal["w"][driver]
+ ):
return
# Create test file to append to
- with fiona.open(path, 'w',
- driver=driver,
- crs=crs,
- schema=schema,
- **create_kwargs) as c:
+ with fiona.open(
+ path, "w", driver=driver, crs=crs, schema=schema, **create_kwargs
+ ) as c:
c.writerecords(records1)
- if (driver in driver_mode_mingdal['a']
- and get_gdal_version_num() < calc_gdal_version_num(*driver_mode_mingdal['a'][driver])):
+ if driver in driver_mode_mingdal[
+ "a"
+ ] and get_gdal_version_num() < calc_gdal_version_num(
+ *driver_mode_mingdal["a"][driver]
+ ):
# Test if DriverError is raised for gdal < driver_mode_mingdal
with pytest.raises(DriverError):
- with fiona.open(path, 'a',
- driver=driver) as c:
+ with fiona.open(path, "a", driver=driver) as c:
c.writerecords(records2)
else:
# Test if we can append
- with fiona.open(path, 'a',
- driver=driver) as c:
+ with fiona.open(path, "a", driver=driver) as c:
c.writerecords(records2)
- if driver in {'FileGDB', 'OpenFileGDB'}:
+ if driver in {"FileGDB", "OpenFileGDB"}:
open_driver = driver
else:
open_driver = None
- with fiona.open(path, driver=open_driver) as c:
- assert c.driver == driver
- items = list(c)
- assert len(items) == len(records1) + len(records2)
- for val_in, val_out in zip(records1 + records2, items):
- assert test_equal(driver, val_in, val_out), "in: {val_in}, out: {val_out}".format(val_in=val_in,
- val_out=val_out)
+ with fiona.open(path, driver=open_driver) as collection:
+ assert collection.driver == driver
+ assert len(list(collection)) == len(records1) + len(records2)
- at pytest.mark.parametrize('driver', [driver for driver in driver_mode_mingdal['a'].keys()
- if driver in supported_drivers])
-def test_append_does_not_work_when_gdal_smaller_mingdal(tmpdir, driver, testdata_generator, monkeypatch):
- """ Test if driver supports append mode.
+
+ at pytest.mark.parametrize(
+ "driver",
+ [
+ driver
+ for driver in driver_mode_mingdal["a"].keys()
+ if driver in supported_drivers
+ ],
+)
+def test_append_does_not_work_when_gdal_smaller_mingdal(
+ tmpdir, driver, testdata_generator, monkeypatch
+):
+ """Test if driver supports append mode.
If this test fails, it should be considered to update driver_mode_mingdal in drvsupport.py.
@@ -166,46 +191,51 @@ def test_append_does_not_work_when_gdal_smaller_mingdal(tmpdir, driver, testdata
pytest.skip("BNA driver segfaults with gdal 1.11")
path = str(tmpdir.join(get_temp_filename(driver)))
- schema, crs, records1, records2, test_equal, create_kwargs = testdata_generator(driver, range(0, 5), range(5, 10))
+ schema, crs, records1, records2, test_equal, create_kwargs = testdata_generator(
+ driver, range(0, 5), range(5, 10)
+ )
# If driver is not able to write, we cannot test append
- if (driver in driver_mode_mingdal['w']
- and get_gdal_version_num() < calc_gdal_version_num(*driver_mode_mingdal['w'][driver])):
+ if driver in driver_mode_mingdal[
+ "w"
+ ] and get_gdal_version_num() < calc_gdal_version_num(
+ *driver_mode_mingdal["w"][driver]
+ ):
return
# Create test file to append to
- with fiona.open(path, 'w',
- driver=driver,
- crs=crs,
- schema=schema,
- **create_kwargs) as c:
+ with fiona.open(
+ path, "w", driver=driver, crs=crs, schema=schema, **create_kwargs
+ ) as c:
c.writerecords(records1)
- if (driver in driver_mode_mingdal['a']
- and get_gdal_version_num() < calc_gdal_version_num(*driver_mode_mingdal['a'][driver])):
+ if driver in driver_mode_mingdal[
+ "a"
+ ] and get_gdal_version_num() < calc_gdal_version_num(
+ *driver_mode_mingdal["a"][driver]
+ ):
# Test if driver really can't append for gdal < driver_mode_mingdal
- monkeypatch.delitem(fiona.drvsupport.driver_mode_mingdal['a'], driver)
+ monkeypatch.delitem(fiona.drvsupport.driver_mode_mingdal["a"], driver)
with pytest.raises(Exception):
- with fiona.open(path, 'a',
- driver=driver) as c:
+ with fiona.open(path, "a", driver=driver) as c:
c.writerecords(records2)
- if driver in {'FileGDB', 'OpenFileGDB'}:
+ if driver in {"FileGDB", "OpenFileGDB"}:
open_driver = driver
else:
open_driver = None
- with fiona.open(path, driver=open_driver) as c:
- assert c.driver == driver
- items = list(c)
- assert len(items) == len(records1) + len(records2)
- for val_in, val_out in zip(records1 + records2, items):
- assert test_equal(driver, val_in, val_out)
+
+ with fiona.open(path, driver=open_driver) as collection:
+ assert collection.driver == driver
+ assert len(list(collection)) == len(records1) + len(records2)
- at pytest.mark.parametrize('driver', [driver for driver, raw in supported_drivers.items() if raw == 'r'])
+ at pytest.mark.parametrize(
+ "driver", [driver for driver, raw in supported_drivers.items() if raw == "r"]
+)
def test_no_write_driver_cannot_write(tmpdir, driver, testdata_generator, monkeypatch):
"""Test if read only driver cannot write
@@ -213,8 +243,10 @@ def test_no_write_driver_cannot_write(tmpdir, driver, testdata_generator, monkey
"""
- monkeypatch.setitem(fiona.drvsupport.supported_drivers, driver, 'rw')
- schema, crs, records1, _, test_equal, create_kwargs = testdata_generator(driver, range(0, 5), [])
+ monkeypatch.setitem(fiona.drvsupport.supported_drivers, driver, "rw")
+ schema, crs, records1, _, test_equal, create_kwargs = testdata_generator(
+ driver, range(0, 5), []
+ )
if driver == "BNA" and GDALVersion.runtime() < GDALVersion(2, 0):
pytest.skip("BNA driver segfaults with gdal 1.11")
@@ -225,17 +257,23 @@ def test_no_write_driver_cannot_write(tmpdir, driver, testdata_generator, monkey
path = str(tmpdir.join(get_temp_filename(driver)))
with pytest.raises(Exception):
- with fiona.open(path, 'w',
- driver=driver,
- crs=crs,
- schema=schema,
- **create_kwargs) as c:
+ with fiona.open(
+ path, "w", driver=driver, crs=crs, schema=schema, **create_kwargs
+ ) as c:
c.writerecords(records1)
- at pytest.mark.parametrize('driver', [driver for driver, raw in supported_drivers.items() if
- 'w' in raw and 'a' not in raw])
-def test_no_append_driver_cannot_append(tmpdir, driver, testdata_generator, monkeypatch):
+ at pytest.mark.parametrize(
+ "driver",
+ [
+ driver
+ for driver, raw in supported_drivers.items()
+ if "w" in raw and "a" not in raw
+ ],
+)
+def test_no_append_driver_cannot_append(
+ tmpdir, driver, testdata_generator, monkeypatch
+):
"""
Test if a driver that supports write and not append cannot also append
@@ -243,55 +281,50 @@ def test_no_append_driver_cannot_append(tmpdir, driver, testdata_generator, monk
"""
- monkeypatch.setitem(fiona.drvsupport.supported_drivers, driver, 'raw')
+ monkeypatch.setitem(fiona.drvsupport.supported_drivers, driver, "raw")
if driver == "BNA" and GDALVersion.runtime() < GDALVersion(2, 0):
pytest.skip("BNA driver segfaults with gdal 1.11")
path = str(tmpdir.join(get_temp_filename(driver)))
- schema, crs, records1, records2, test_equal, create_kwargs = testdata_generator(driver, range(0, 5), range(5, 10))
+ schema, crs, records1, records2, test_equal, create_kwargs = testdata_generator(
+ driver, range(0, 5), range(5, 10)
+ )
# If driver is not able to write, we cannot test append
- if (driver in driver_mode_mingdal['w'] and
- get_gdal_version_num() < calc_gdal_version_num(*driver_mode_mingdal['w'][driver])):
+ if driver in driver_mode_mingdal[
+ "w"
+ ] and get_gdal_version_num() < calc_gdal_version_num(
+ *driver_mode_mingdal["w"][driver]
+ ):
return
# Create test file to append to
- with fiona.open(path, 'w',
- driver=driver,
- crs=crs,
- schema=schema,
- **create_kwargs) as c:
+ with fiona.open(
+ path, "w", driver=driver, crs=crs, schema=schema, **create_kwargs
+ ) as c:
c.writerecords(records1)
- is_good = True
try:
- with fiona.open(path, 'a',
- driver=driver) as c:
+ with fiona.open(path, "a", driver=driver) as c:
c.writerecords(records2)
+ except Exception as exc:
+ log.exception("Caught exception in trying to append.")
+ return
- if driver in {'FileGDB', 'OpenFileGDB'}:
- open_driver = driver
- else:
- open_driver = None
- with fiona.open(path, driver=open_driver) as c:
- assert c.driver == driver
- items = list(c)
- is_good = is_good and len(items) == len(records1) + len(records2)
- for val_in, val_out in zip(records1 + records2, items):
- is_good = is_good and test_equal(driver, val_in, val_out)
- except:
- is_good = False
+ if driver in {"FileGDB", "OpenFileGDB"}:
+ open_driver = driver
+ else:
+ open_driver = None
- assert not is_good
+ with fiona.open(path, driver=open_driver) as collection:
+ assert collection.driver == driver
+ assert len(list(collection)) == len(records1)
def test_mingdal_drivers_are_supported():
- """
- Test if mode and driver is enabled in supported_drivers
- """
-
+ """Test if mode and driver is enabled in supported_drivers"""
for mode in driver_mode_mingdal:
for driver in driver_mode_mingdal[mode]:
# we cannot test drivers that are not present in the gdal installation
=====================================
tests/test_logutils.py
=====================================
@@ -16,6 +16,7 @@ def test_filtering(caplog):
logger.warning("Skipping field 2")
logger.warning("Danger!")
logger.warning("Skipping field 1")
+
assert len(caplog.records) == 4
assert caplog.records[0].getMessage() == "Attention!"
assert caplog.records[1].getMessage() == "Skipping field 1"
@@ -39,3 +40,13 @@ def test_skipping_list(caplog, data_dir):
assert len(results) == 3
assert not any(['skip_me' in f['properties'] for f in results])
assert len([rec for rec in caplog.records if rec.getMessage().startswith('Skipping')]) == 1
+
+
+def test_log_filter_exception(caplog):
+ """FieldSkipLogFilter handles exceptions from log.exception()."""
+ logger = logging.getLogger()
+ with LogFiltering(logger, FieldSkipLogFilter()):
+ logger.exception(ValueError("Oh no"))
+
+ assert len(caplog.records) == 1
+ assert caplog.records[0].getMessage() == "Oh no"
=====================================
tests/test_memoryfile.py
=====================================
@@ -2,13 +2,14 @@
from collections import OrderedDict
from io import BytesIO
+import os
import pytest
import fiona
from fiona.io import MemoryFile, ZipMemoryFile
-from .conftest import requires_gdal2
+from .conftest import requires_gdal2, requires_gpkg
@pytest.fixture(scope='session')
@@ -159,6 +160,12 @@ def test_write_bytesio(profile_first_coutwildrnp_shp):
assert len(col) == 1
+def test_append_bytesio_exception(data_coutwildrnp_json):
+ """Append is not supported, see #1027."""
+ with pytest.raises(OSError):
+ fiona.open(BytesIO(data_coutwildrnp_json), "a")
+
+
def test_mapinfo_raises():
"""Reported to be a crasher in #937"""
driver = 'MapInfo File'
@@ -168,3 +175,27 @@ def test_mapinfo_raises():
with pytest.raises(OSError):
with fiona.open(fout, "w", driver=driver, schema=schema) as collection:
collection.write({"type": "Feature", "geometry": {"type": "Point", "coordinates": (0, 0)}, "properties": {"position": "x"}})
+
+
+ at requires_gpkg
+def test_read_multilayer_memoryfile(path_coutwildrnp_json, tmpdir):
+ """Test read access to multilayer dataset in from file-like object"""
+ with fiona.open(path_coutwildrnp_json, "r") as src:
+ schema = src.schema
+ features = list(src)
+
+ path = os.path.join(tmpdir, "test.gpkg")
+ with fiona.open(path, "w", driver="GPKG", schema=schema, layer="layer1") as dst:
+ dst.writerecords(features[0:5])
+ with fiona.open(path, "w", driver="GPKG", schema=schema, layer="layer2") as dst:
+ dst.writerecords(features[5:])
+
+ with open(path, "rb") as f:
+ with fiona.open(f, layer="layer1") as src:
+ assert src.name == "layer1"
+ assert len(src) == 5
+ # Bug reported in #781 where this next section would fail
+ with open(path, "rb") as f:
+ with fiona.open(f, layer="layer2") as src:
+ assert src.name == "layer2"
+ assert len(src) == 62
=====================================
tests/test_open.py
=====================================
@@ -9,6 +9,8 @@ import fiona
from fiona._crs import crs_to_wkt
from fiona.errors import DriverError
+from .conftest import requires_gdal21
+
def test_open_shp(path_coutwildrnp_shp):
"""Open a shapefile"""
@@ -21,6 +23,7 @@ def test_open_filename_with_exclamation(data_dir):
assert fiona.open(path), "Failed to open !test.geojson"
+ at requires_gdal21
@pytest.mark.xfail(raises=DriverError)
def test_write_memfile_crs_wkt():
example_schema = {
View it on GitLab: https://salsa.debian.org/debian-gis-team/fiona/-/compare/eeaa23b76c12b8333d5d8ae455255a4abd50e129...7ed995200dda838d7821cd45cc4f5e7fccec4af5
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/fiona/-/compare/eeaa23b76c12b8333d5d8ae455255a4abd50e129...7ed995200dda838d7821cd45cc4f5e7fccec4af5
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20220207/8ed3fa86/attachment-0001.htm>
More information about the Pkg-grass-devel
mailing list