[Git][debian-gis-team/fiona][upstream] New upstream version 1.8.3
Bas Couwenberg
gitlab at salsa.debian.org
Sat Dec 1 08:34:31 GMT 2018
Bas Couwenberg pushed to branch upstream at Debian GIS Project / fiona
Commits:
ab0149db by Bas Couwenberg at 2018-12-01T07:49:55Z
New upstream version 1.8.3
- - - - -
11 changed files:
- .travis.yml
- CHANGES.txt
- appveyor.yml
- fiona/__init__.py
- fiona/_env.pyx
- fiona/env.py
- fiona/fio/env.py
- fiona/ogrext.pyx
- tests/test_collection.py
- tests/test_env.py
- tests/test_unicode.py
Changes:
=====================================
.travis.yml
=====================================
@@ -60,7 +60,7 @@ install:
- fio --gdal-version
script:
- - pytest --cov fiona --cov-report term-missing
+ - python -m pytest -m "not wheel" --cov fiona --cov-report term-missing
after_success:
- coveralls || echo "!! intermittent coveralls failure"
=====================================
CHANGES.txt
=====================================
@@ -3,6 +3,19 @@ Changes
All issue numbers are relative to https://github.com/Toblerity/Fiona/issues.
+1.8.3 (TBD)
+-----------
+
+- The RASTERIO_ENV config environment marker this project picked up from
+ Rasterio has been renamed to FIONA_ENV (#665).
+- Options --gdal-data and --proj-data have been added to the fio-env command so
+ that users of Rasterio wheels can get paths to set GDAL_DATA and PROJ_LIB
+ environment variables.
+- The unsuccessful attempt to make GDAL and PROJ support file discovery and
+ configuration automatic within collection's crs and crs_wkt properties has
+ been reverted. Users must execute such code inside a `with Env()` block or
+ set the GDAL_DATA and PROJ_LIB environment variables needed by GDAL.
+
1.8.2 (2018-11-19)
------------------
=====================================
appveyor.yml
=====================================
@@ -1,5 +1,4 @@
# Based on appveyor.yml from https://github.com/PDAL/PDAL and https://github.com/ogrisel/python-appveyor-demo
-#
platform: x64
@@ -27,7 +26,7 @@ environment:
GDAL_VERSION: "1.11.4"
GIS_INTERNALS: "release-1800-x64-gdal-1-11-4-mapserver-6-4-3.zip"
GIS_INTERNALS_LIBS: "release-1800-x64-gdal-1-11-4-mapserver-6-4-3-libs.zip"
-
+
- PYTHON: "C:\\Python36-x64"
PYTHON_VERSION: "3.6.4"
PYTHON_ARCH: "64"
@@ -71,7 +70,7 @@ install:
- "python --version"
- "python -c \"import struct; print(struct.calcsize('P') * 8)\""
-
+
# https://code.google.com/p/pymat2/wiki/WindowsTips
#- ps: (Get-Content "%VS90COMNTOOLS%\..\..\VC\vcvarsall.bat) | ForEach-Object { $_ -replace "vcvarsamd64.bat", "vcvars64.bat" } | Set-Content "%VS90COMNTOOLS%\..\..\VC\vcvarsall.bat
# - '%CMD_IN_ENV% echo "conv env"'
@@ -84,10 +83,10 @@ install:
- ps: mkdir C:\build | out-null
- ps: mkdir C:\gdal | out-null
-
+
- curl http://download.gisinternals.com/sdk/downloads/%GIS_INTERNALS% --output gdalbin.zip
- 7z x gdalbin.zip -oC:\gdal
- - curl http://download.gisinternals.com/sdk/downloads/%GIS_INTERNALS_LIBS% --output gdallibs.zip
+ - curl http://download.gisinternals.com/sdk/downloads/%GIS_INTERNALS_LIBS% --output gdallibs.zip
- 7z x gdallibs.zip -oC:\gdal
- "SET PATH=C:\\gdal;C:\\gdal\\bin;C:\\gdal\\data;C:\\gdal\\bin\\gdal\\apps;%PATH%"
- "SET GDAL_DATA=C:\\gdal\\bin\\gdal-data"
@@ -95,21 +94,21 @@ install:
- ECHO "Filesystem C:/GDAL:"
- ps: "ls \"C:/GDAL\""
-
-
+
+
- cd C:\projects\fiona
# Upgrade to the latest version of pip to avoid it displaying warnings
# about it being out of date.
# - "python -m pip install --disable-pip-version-check --user --upgrade pip"
-
+
- pip --version
-
+
# Install the build dependencies of the project. If some dependencies contain
# compiled extensions and are not provided as pre-built wheel packages,
# pip will build them from source using the MSVC compiler matching the
# target Python version and architecture
- "%CMD_IN_ENV% pip install -r requirements-dev.txt"
-
+
build_script:
# Build the compiled extension
@@ -136,10 +135,8 @@ test_script:
- ps: python -c "import fiona"
- # TODO: return to running test_write_gb18030 when GDAL build is updated.
- # GenericWriting test is skipped on Appveyor because our Windows GDAL doesn't
- # have iconv support and can't encode field names.
- - "%CMD_IN_ENV% python -m pytest -k \"not test_write_gb18030 and not GenericWritingTest\" --cov fiona --cov-report term-missing"
+ # Our Windows GDAL doesn't have iconv and can't support certain tests.
+ - "%CMD_IN_ENV% python -m pytest -m \"not iconv\" --cov fiona --cov-report term-missing"
matrix:
allow_failures:
=====================================
fiona/__init__.py
=====================================
@@ -101,7 +101,7 @@ import uuid
__all__ = ['bounds', 'listlayers', 'open', 'prop_type', 'prop_width']
-__version__ = "1.8.2"
+__version__ = "1.8.3"
__gdal_version__ = get_gdal_release_name()
gdal_version = get_gdal_version_tuple()
=====================================
fiona/_env.pyx
=====================================
@@ -108,7 +108,7 @@ cdef void log_error(CPLErr err_class, int err_no, const char* msg) with gil:
if err_no in code_map:
log.log(level_map[err_class], "%s", msg)
else:
- log.info("Unknown error number %r", err_no)
+ log.info("Unknown error number %r.", err_no)
# Definition of GDAL callback functions, one for Windows and one for
@@ -235,7 +235,11 @@ cdef class ConfigEnv(object):
class GDALDataFinder(object):
- """Finds GDAL and PROJ data files"""
+ """Finds GDAL data files
+
+ Note: this class is private in 1.8.x and not in the public API.
+
+ """
def search(self, prefix=None):
"""Returns GDAL_DATA location"""
@@ -266,6 +270,11 @@ class GDALDataFinder(object):
class PROJDataFinder(object):
+ """Finds PROJ data files
+
+ Note: this class is private in 1.8.x and not in the public API.
+
+ """
def search(self, prefix=None):
"""Returns PROJ_LIB location"""
@@ -309,24 +318,25 @@ cdef class GDALEnv(ConfigEnv):
OGRRegisterAll()
log.debug("All drivers registered.")
- if 'GDAL_DATA' not in os.environ:
+ if 'GDAL_DATA' in os.environ:
+ self.update_config_options(GDAL_DATA=os.environ['GDAL_DATA'])
+ log.debug("GDAL_DATA found in environment: %r.", os.environ['GDAL_DATA'])
+ else:
path = GDALDataFinder().search()
if path:
- log.debug("GDAL data found in %r", path)
self.update_config_options(GDAL_DATA=path)
-
- else:
- self.update_config_options(GDAL_DATA=os.environ['GDAL_DATA'])
+ os.environ['GDAL_DATA'] = path
+ log.debug("GDAL_DATA not found in environment, set to %r.", path)
if 'PROJ_LIB' not in os.environ:
path = PROJDataFinder().search()
if path:
- log.debug("PROJ data found in %r", path)
os.environ['PROJ_LIB'] = path
+ log.debug("PROJ data not found in environment, set to %r.", path)
if driver_count() == 0:
CPLPopErrorHandler()
=====================================
fiona/env.py
=====================================
@@ -101,7 +101,7 @@ class Env(object):
return {
'CHECK_WITH_INVERT_PROJ': True,
'GTIFF_IMPLICIT_JPEG_OVR': False,
- "RASTERIO_ENV": True
+ "FIONA_ENV": True
}
def __init__(
=====================================
fiona/fio/env.py
=====================================
@@ -1,12 +1,12 @@
"""$ fio env"""
import json
-import logging
+import os
import click
import fiona
-from fiona.fio import with_context_env
+from fiona._env import GDALDataFinder, PROJDataFinder
@click.command(short_help="Print information about the fio environment.")
@@ -14,6 +14,10 @@ from fiona.fio import with_context_env
help="Enumerate the available formats.")
@click.option('--credentials', 'key', flag_value='credentials', default=False,
help="Print credentials.")
+ at click.option('--gdal-data', 'key', flag_value='gdal_data', default=False,
+ help="Print GDAL data path.")
+ at click.option('--proj-data', 'key', flag_value='proj_data', default=False,
+ help="Print PROJ data path.")
@click.pass_context
def env(ctx, key):
"""Print information about the Fiona environment: available
@@ -28,3 +32,7 @@ def env(ctx, key):
stdout.write('\n')
elif key == 'credentials':
click.echo(json.dumps(env.session.credentials))
+ elif key == 'gdal_data':
+ click.echo(os.environ.get('GDAL_DATA') or GDALDataFinder().search())
+ elif key == 'proj_data':
+ click.echo(os.environ.get('PROJ_LIB') or PROJDataFinder().search())
=====================================
fiona/ogrext.pyx
=====================================
@@ -22,7 +22,6 @@ from fiona._geometry cimport (
from fiona._err cimport exc_wrap_int, exc_wrap_pointer, exc_wrap_vsilfile
import fiona
-from fiona.env import env_ctx_if_needed
from fiona._env import GDALVersion, get_gdal_version_num
from fiona._err import cpl_errs, FionaNullPointerError, CPLE_BaseError, CPLE_OpenFailedError
from fiona._geometry import GEOMETRY_TYPES
@@ -631,75 +630,71 @@ cdef class Session:
if self.cogr_layer == NULL:
raise ValueError("Null layer")
- # We can't simply wrap a method in Python 2.7 so we
- # bring the context manager inside like so.
- with env_ctx_if_needed():
+ try:
+ cogr_crs = exc_wrap_pointer(OGR_L_GetSpatialRef(self.cogr_layer))
+ # TODO: we don't intend to use try/except for flow control
+ # this is a work around for a GDAL issue.
+ except FionaNullPointerError:
+ log.debug("Layer has no coordinate system")
- try:
- cogr_crs = exc_wrap_pointer(OGR_L_GetSpatialRef(self.cogr_layer))
- # TODO: we don't intend to use try/except for flow control
- # this is a work around for a GDAL issue.
- except FionaNullPointerError:
- log.debug("Layer has no coordinate system")
+ if cogr_crs is not NULL:
+
+ log.debug("Got coordinate system")
+ crs = {}
- if cogr_crs is not NULL:
+ try:
- log.debug("Got coordinate system")
- crs = {}
+ retval = OSRAutoIdentifyEPSG(cogr_crs)
+ if retval > 0:
+ log.info("Failed to auto identify EPSG: %d", retval)
try:
+ auth_key = <const char *>exc_wrap_pointer(<void *>OSRGetAuthorityName(cogr_crs, NULL))
+ auth_val = <const char *>exc_wrap_pointer(<void *>OSRGetAuthorityCode(cogr_crs, NULL))
- retval = OSRAutoIdentifyEPSG(cogr_crs)
- if retval > 0:
- log.info("Failed to auto identify EPSG: %d", retval)
-
- try:
- auth_key = <const char *>exc_wrap_pointer(<void *>OSRGetAuthorityName(cogr_crs, NULL))
- auth_val = <const char *>exc_wrap_pointer(<void *>OSRGetAuthorityCode(cogr_crs, NULL))
+ except CPLE_BaseError as exc:
+ log.debug("{}".format(exc))
- except CPLE_BaseError as exc:
- log.debug("{}".format(exc))
+ if auth_key != NULL and auth_val != NULL:
+ key_b = auth_key
+ key = key_b.decode('utf-8')
+ if key == 'EPSG':
+ val_b = auth_val
+ val = val_b.decode('utf-8')
+ crs['init'] = "epsg:" + val
- if auth_key != NULL and auth_val != NULL:
- key_b = auth_key
- key = key_b.decode('utf-8')
- if key == 'EPSG':
- val_b = auth_val
- val = val_b.decode('utf-8')
- crs['init'] = "epsg:" + val
+ else:
+ OSRExportToProj4(cogr_crs, &proj_c)
+ if proj_c == NULL:
+ raise ValueError("Null projection")
+ proj_b = proj_c
+ log.debug("Params: %s", proj_b)
+ value = proj_b.decode()
+ value = value.strip()
+ for param in value.split():
+ kv = param.split("=")
+ if len(kv) == 2:
+ k, v = kv
+ try:
+ v = float(v)
+ if v % 1 == 0:
+ v = int(v)
+ except ValueError:
+ # Leave v as a string
+ pass
+ elif len(kv) == 1:
+ k, v = kv[0], True
+ else:
+ raise ValueError("Unexpected proj parameter %s" % param)
+ k = k.lstrip("+")
+ crs[k] = v
- else:
- OSRExportToProj4(cogr_crs, &proj_c)
- if proj_c == NULL:
- raise ValueError("Null projection")
- proj_b = proj_c
- log.debug("Params: %s", proj_b)
- value = proj_b.decode()
- value = value.strip()
- for param in value.split():
- kv = param.split("=")
- if len(kv) == 2:
- k, v = kv
- try:
- v = float(v)
- if v % 1 == 0:
- v = int(v)
- except ValueError:
- # Leave v as a string
- pass
- elif len(kv) == 1:
- k, v = kv[0], True
- else:
- raise ValueError("Unexpected proj parameter %s" % param)
- k = k.lstrip("+")
- crs[k] = v
-
- finally:
- CPLFree(proj_c)
- return crs
+ finally:
+ CPLFree(proj_c)
+ return crs
- else:
- log.debug("Projection not found (cogr_crs was NULL)")
+ else:
+ log.debug("Projection not found (cogr_crs was NULL)")
return {}
@@ -710,41 +705,37 @@ cdef class Session:
if self.cogr_layer == NULL:
raise ValueError("Null layer")
- # We can't simply wrap a method in Python 2.7 so we
- # bring the context manager inside like so.
- with env_ctx_if_needed():
+ try:
+ cogr_crs = exc_wrap_pointer(OGR_L_GetSpatialRef(self.cogr_layer))
+
+ # TODO: we don't intend to use try/except for flow control
+ # this is a work around for a GDAL issue.
+ except FionaNullPointerError:
+ log.debug("Layer has no coordinate system")
+ except fiona._err.CPLE_OpenFailedError as exc:
+ log.debug("A support file wasn't opened. See the preceding ERROR level message.")
+ cogr_crs = OGR_L_GetSpatialRef(self.cogr_layer)
+ log.debug("Called OGR_L_GetSpatialRef() again without error checking.")
+ if cogr_crs == NULL:
+ raise exc
+
+ if cogr_crs is not NULL:
+ log.debug("Got coordinate system")
try:
- cogr_crs = exc_wrap_pointer(OGR_L_GetSpatialRef(self.cogr_layer))
-
- # TODO: we don't intend to use try/except for flow control
- # this is a work around for a GDAL issue.
- except FionaNullPointerError:
- log.debug("Layer has no coordinate system")
- except fiona._err.CPLE_OpenFailedError as exc:
- log.debug("A support file wasn't opened. See the preceding ERROR level message.")
- cogr_crs = OGR_L_GetSpatialRef(self.cogr_layer)
- log.debug("Called OGR_L_GetSpatialRef() again without error checking.")
- if cogr_crs == NULL:
- raise exc
-
- if cogr_crs is not NULL:
- log.debug("Got coordinate system")
-
- try:
- OSRExportToWkt(cogr_crs, &proj_c)
- if proj_c == NULL:
- raise ValueError("Null projection")
- proj_b = proj_c
- crs_wkt = proj_b.decode('utf-8')
+ OSRExportToWkt(cogr_crs, &proj_c)
+ if proj_c == NULL:
+ raise ValueError("Null projection")
+ proj_b = proj_c
+ crs_wkt = proj_b.decode('utf-8')
- finally:
- CPLFree(proj_c)
- return crs_wkt
+ finally:
+ CPLFree(proj_c)
+ return crs_wkt
- else:
- log.debug("Projection not found (cogr_crs was NULL)")
- return ""
+ else:
+ log.debug("Projection not found (cogr_crs was NULL)")
+ return ""
def get_extent(self):
cdef OGREnvelope extent
=====================================
tests/test_collection.py
=====================================
@@ -358,6 +358,7 @@ class TestUnsupportedDriver(object):
fiona.open(str(tmpdir.join("foo")), "w", "Bogus", schema=schema)
+ at pytest.mark.iconv
class TestGenericWritingTest(object):
@pytest.fixture(autouse=True)
def no_iter_shp(self, tmpdir):
=====================================
tests/test_env.py
=====================================
@@ -32,7 +32,7 @@ def test_nested_credentials(monkeypatch):
def test_ensure_env_decorator(gdalenv):
@ensure_env
def f():
- return getenv()['RASTERIO_ENV']
+ return getenv()['FIONA_ENV']
assert f() is True
=====================================
tests/test_unicode.py
=====================================
@@ -101,6 +101,7 @@ class TestUnicodeStringField(object):
assert f['properties']['label'] == u'Ba\u2019kelalan'
assert f['properties'][u'verit\xe9'] == 0
+ @pytest.mark.iconv
def test_write_gb18030(self):
"""Can write a simplified Chinese shapefile"""
schema = {
@@ -119,7 +120,7 @@ class TestUnicodeStringField(object):
assert f['properties']['label'] == u'徐汇区'
assert f['properties']['num'] == 0
- @pytest.mark.skipif(sys.platform == 'win32', reason="GDAL binary used on AppVeyor does not have a working libiconv")
+ @pytest.mark.iconv
def test_gb2312_field_wrong_encoding(self):
"""Attempt to create field with a name not supported by the encoding
@@ -148,4 +149,3 @@ class TestUnicodeStringField(object):
# no encoding
with pytest.raises(SchemaError):
fiona.open(os.path.join(self.tempdir, "test2.shp"), "w", **meta)
-
View it on GitLab: https://salsa.debian.org/debian-gis-team/fiona/commit/ab0149db64742c1a1ca7bf328e8f98e24bba113d
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/fiona/commit/ab0149db64742c1a1ca7bf328e8f98e24bba113d
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/20181201/1bdfadde/attachment-0001.html>
More information about the Pkg-grass-devel
mailing list