This is an automated email from the git hooks/post-receive script. johanvdw-guest pushed a commit to branch master in repository fiona.
commit b290253248e5f88508f9c8ba81a9543d4ca0246d Author: Johan Van de Wauw <[email protected]> Date: Tue Feb 14 20:04:20 2017 +0100 Imported Upstream version 1.7.3 --- CHANGES.txt | 15 +++++++++++++++ fiona/__init__.py | 5 ++++- fiona/_drivers.pyx | 9 +++++++-- fiona/collection.py | 6 +++--- fiona/fio/cat.py | 12 +++++++----- fiona/fio/info.py | 4 ++-- tests/test_fio_cat.py | 6 +++--- tests/test_vfs.py | 24 ++++++++++++++++++++++-- 8 files changed, 63 insertions(+), 18 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index c9bc5b6..e8304c5 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -3,6 +3,21 @@ Changes All issue numbers are relative to https://github.com/Toblerity/Fiona/issues. +1.7.3 (2017-02-14) +------------------ + +Roses are red. +Tan is a pug. +Software regression's +the most embarrassing bug. + +Bug fixes: + +- Use __stdcall for GDAL error handling callback on Windows as in Rasterio. +- Turn on latent support for zip:// URLs in rio-cat and rio-info (#421). +- The 1.7.2 release broke support for zip files with absolute paths (#418). + This regression has been fixed with tests to confirm. + 1.7.2 (2017-01-27) ------------------ diff --git a/fiona/__init__.py b/fiona/__init__.py index a010654..88e7407 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.2" +__version__ = "1.7.3" __gdal_version__ = get_gdal_release_name().decode('utf-8') log = logging.getLogger('Fiona') @@ -239,6 +239,7 @@ def listlayers(path, vfs=None): with drivers(): return _listlayers(vsi_path(path, vsi, archive)) + def parse_paths(path, vfs=None): archive = vsi = None if vfs: @@ -251,6 +252,7 @@ def parse_paths(path, vfs=None): vsi = parts.pop() if parts else None return path, vsi, archive + def prop_width(val): """Returns the width of a str type property. @@ -265,6 +267,7 @@ def prop_width(val): return int((val.split(":")[1:] or ["80"])[0]) return None + def prop_type(text): """Returns a schema property's proper Python type. diff --git a/fiona/_drivers.pyx b/fiona/_drivers.pyx index 4f6df2e..7c49231 100644 --- a/fiona/_drivers.pyx +++ b/fiona/_drivers.pyx @@ -67,8 +67,13 @@ code_map = { 10: 'CPLE_ObjectNull' } -cdef void * errorHandler(int eErrClass, int err_no, char *msg): - log.log(level_map[eErrClass], "%s in %s", code_map[err_no], msg) + +IF UNAME_SYSNAME == "Windows": + cdef void * __stdcall errorHandler(int eErrClass, int err_no, char *msg): + log.log(level_map[eErrClass], "%s in %s", code_map[err_no], msg) +ELSE: + cdef void * errorHandler(int eErrClass, int err_no, char *msg): + log.log(level_map[eErrClass], "%s in %s", code_map[err_no], msg) def driver_count(): diff --git a/fiona/collection.py b/fiona/collection.py index 15be3e4..f249fd4 100644 --- a/fiona/collection.py +++ b/fiona/collection.py @@ -478,10 +478,10 @@ def vsi_path(path, vsi=None, archive=None): # an OGR VSI path (see cpl_vsi.h). if vsi: if archive: - result = '/'.join([ - '/vsi{}'.format(vsi), archive.strip('/'), path.strip('/')]) + result = '/vsi{0}/{1}{2}'.format(vsi, archive, path) else: - result = '/'.join(['/vsi{}'.format(vsi), path.strip('/')]) + result = '/vsi{0}/{1}'.format(vsi, path) else: result = path + return result diff --git a/fiona/fio/cat.py b/fiona/fio/cat.py index 8d8b85c..808a2a9 100644 --- a/fiona/fio/cat.py +++ b/fiona/fio/cat.py @@ -18,7 +18,8 @@ warnings.simplefilter('default') # Cat command @click.command(short_help="Concatenate and print the features of datasets") [email protected]_in_arg [email protected]('files', nargs=-1, type=click.Path(resolve_path=False), + required=True, metavar="INPUTS...") @click.option('--layer', default=None, multiple=True, callback=options.cb_multilayer, help="Input layer(s), specified as 'fileindex:layer` " @@ -53,11 +54,12 @@ def cat(ctx, files, precision, indent, compact, ignore_errors, dst_crs, dump_kwds['indent'] = indent if compact: dump_kwds['separators'] = (',', ':') - item_sep = compact and ',' or ', ' + # Validate file idexes provided in --layer option # (can't pass the files to option callback) if layer: options.validate_multilayer_file_index(files, layer) + # first layer is the default for i in range(1, len(files) + 1): if str(i) not in layer.keys(): @@ -75,9 +77,9 @@ def cat(ctx, files, precision, indent, compact, ignore_errors, dst_crs, for i, feat in src.items(bbox=bbox): if dst_crs or precision >= 0: g = transform_geom( - src.crs, dst_crs, feat['geometry'], - antimeridian_cutting=True, - precision=precision) + src.crs, dst_crs, feat['geometry'], + antimeridian_cutting=True, + precision=precision) feat['geometry'] = g feat['bbox'] = fiona.bounds(g) if use_rs: diff --git a/fiona/fio/info.py b/fiona/fio/info.py index e77bc17..961774b 100644 --- a/fiona/fio/info.py +++ b/fiona/fio/info.py @@ -14,7 +14,7 @@ from fiona.fio import options @click.command() # One or more files. [email protected]('input', type=click.Path(exists=True)) [email protected]('input', type=click.Path(exists=False)) @click.option('--layer', metavar="INDEX|NAME", callback=options.cb_layer, help="Print information about a specific layer. The first " "layer is used by default. Layers use zero-based " @@ -52,7 +52,7 @@ def info(ctx, input, indent, meta_member, layer): info.update(bounds=src.bounds, name=src.name) try: info.update(count=len(src)) - except TypeError as e: + except TypeError: info.update(count=None) logger.debug("Setting 'count' to None/null - layer does " "not support counting") diff --git a/tests/test_fio_cat.py b/tests/test_fio_cat.py index 04f6cdd..2d59c19 100644 --- a/tests/test_fio_cat.py +++ b/tests/test_fio_cat.py @@ -74,7 +74,7 @@ def test_multi_layer(): def test_multi_layer_fail(): runner = CliRunner() - result = runner.invoke(cat.cat, '--layer' + result = runner.invoke(cat.cat, ['--layer', '200000:coutlildrnp', - 'tests/data') - assert result.exit_code == 1 + 'tests/data']) + assert result.exit_code != 0 diff --git a/tests/test_vfs.py b/tests/test_vfs.py index b5c2d61..754575b 100644 --- a/tests/test_vfs.py +++ b/tests/test_vfs.py @@ -26,11 +26,12 @@ class VsiReadingTest(ReadingTest): self.assertEqual(f['id'], "0") self.assertEqual(f['properties']['STATE'], 'UT') + class ZipReadingTest(VsiReadingTest): def setUp(self): self.c = fiona.open("zip://tests/data/coutwildrnp.zip", "r") - + def tearDown(self): self.c.close() @@ -50,6 +51,7 @@ class ZipReadingTest(VsiReadingTest): def test_path(self): self.assertEqual(self.c.path, '/vsizip/tests/data/coutwildrnp.zip') + class ZipArchiveReadingTest(VsiReadingTest): def setUp(self): @@ -74,11 +76,29 @@ class ZipArchiveReadingTest(VsiReadingTest): def test_path(self): self.assertEqual(self.c.path, '/vsizip/tests/data/coutwildrnp.zip/coutwildrnp.shp') + +class ZipArchiveReadingTestAbsPath(ZipArchiveReadingTest): + + def setUp(self): + self.c = fiona.open( + "/coutwildrnp.shp", "r", + vfs="zip://" + os.path.abspath("tests/data/coutwildrnp.zip")) + + def test_open_repr(self): + self.assert_(repr(self.c).startswith("<open Collection '/vsizip//")) + + def test_closed_repr(self): + self.c.close() + self.assert_(repr(self.c).startswith("<closed Collection '/vsizip//")) + + def test_path(self): + self.assert_(self.c.path.startswith('/vsizip//')) + + class TarArchiveReadingTest(VsiReadingTest): def setUp(self): self.c = fiona.open("/testing/coutwildrnp.shp", "r", vfs="tar://tests/data/coutwildrnp.tar") - def tearDown(self): self.c.close() -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/fiona.git _______________________________________________ Pkg-grass-devel mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel

