[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