Changes
=======

All issue numbers are relative to https://github.com/Toblerity/Fiona/issues.

1.8.4 (2018-12-10)
------------------

- 3D geometries can now be transformed with a specified precision (#523).
- A bug producing a spurious DriverSupportError for Shapefiles with a "time"
  field (#692) has been fixed.
- Patching of the GDAL_DATA environment variable was accidentally left in place
  in 1.8.3 and now has been removed.

1.8.3 (2018-11-30)
------------------

- 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)
------------------

Bug fixes:

- Raise FionaValueError when an iterator's __next__ is called and the session
  is found to be missing or inactive instead of passing a null pointer to
  OGR_L_GetNextFeature (#687).

1.8.1 (2018-11-15)
------------------

Bug fixes:

- Add checks around OSRGetAuthorityName and OSRGetAuthorityCode calls that will
  log problems with looking up these items.
- Opened data sources are now released before we raise exceptions in
  WritingSession.start (#676). This fixes an issue with locked files on
  Windows.
- We now ensure that an Env instance exists when getting the crs or crs_wkt
  properties of a Collection (#673, #690). Otherwise, required GDAL and PROJ
  data files included in Fiona wheels can not be found.
- GDAL and PROJ data search has been refactored to improve testability (#678).
- In the project's Cython code, void* pointers have been replaced with proper
  GDAL types (#672).
- Pervasive warning level log messages about ENCODING creation options (#668)
  have been eliminated.

1.8.0 (2018-10-31)
------------------

This is the final 1.8.0 release. Thanks, everyone!

Bug fixes:

- We cpdef Session.stop so that it has a C version that can be called safely
  from __dealloc__, fixing a PyPy issue (#659, #553).

1.8rc1 (2018-10-26)
-------------------

There are no changes in 1.8rc1 other than more test standardization and the
introduction of a temporary test_collection_legacy.py module to support the
build of fully tested Python 2.7 macosx wheels on Travis-CI.

1.8b2 (2018-10-23)
------------------

Bug fixes:

- The ensure_env_with_credentials decorator will no longer clobber credentials
  of the outer environment. This fixes a bug reported to the Rasterio project
  and which also existed in Fiona.
- An unused import of the packaging module and the dependency have been 
  removed (#653).
- The Env class logged to the 'rasterio' hierarchy instead of 'fiona'. This
  mistake has been corrected (#646).
- The Mapping abstract base class is imported from collections.abc when
  possible (#647).

Refactoring:

- Standardization of the tests on pytest functions and fixtures continues and
  is nearing completion (#648, #649, #650, #651, #652).

1.8b1 (2018-10-15)
------------------

Deprecations:

- Collection slicing has been deprecated and will be prohibited in a future
  version.

Bug fixes:

- Rasterio CRS objects passed to transform module methods will be converted
  to dicts as needed (#590).
- Implicitly convert curve geometries to their linear approximations rather
  than failing (#617).
- Migrated unittest test cases in test_collection.py and test_layer.py to the
  use of the standard data_dir and path_coutwildrnp_shp fixtures (#616).
- Root logger configuration has been removed from all test scripts (#615).
- An AWS session is created for the CLI context Env only if explicitly
  requested, matching the behavior of Rasterio's CLI (#635).
- Dependency on attrs is made explicit.
- Other dependencies are pinned to known good versions in requirements files.
- Unused arguments have been removed from the Env constructor (#637).

Refactoring:

- A with_context_env decorator has been added and used to set up the GDAL
  environment for CLI commands. The command functions themselves are now
  simplified.

1.8a3 (2018-10-01)
------------------

Deprecations:

- The ``fiona.drivers()`` context manager is officially deprecated. All
  users should switch to ``fiona.Env()``, which registers format drivers and
  manages GDAL configuration in a reversible manner.

Bug fixes:

- The Collection class now filters log messages about skipped fields to
  a maximum of one warning message per field (#627).
- The boto3 module is only imported when needed (#507, #629).
- Compatibility with Click 7.0 is achieved (#633).
- Use of %r instead of %s in a debug() call prevents UnicodeDecodeErrors
  (#620).

1.8a2 (2018-07-24)
------------------

New features:

- 64-bit integers are the now the default for int type fields (#562, #564).
- 'http', 's3', 'zip+http', and 'zip+s3' URI schemes for datasets are now
  supported (#425, #426).
- We've added a ``MemoryFile`` class which supports formatted in-memory
  feature collections (#501).
- Added support for GDAL 2.x boolean field sub-type (#531).
- A new ``fio rm`` command makes it possible to cleanly remove multi-file
  datasets (#538).
- The geometry type in a feature collection is more flexible. We can now
  specify not only a single geometry type, but a sequence of permissible types,
  or "Any" to permit any geometry type (#539).
- Support for GDAL 2.2+ null fields has been added (#554).
- The new ``gdal_open_vector()`` function of our internal API provides much
  improved error handling (#557).

Bug fixes:

- The bug involving OrderedDict import on Python 2.7 has been fixed (#533).
- An ``AttributeError`` raised when the ``--bbox`` option of fio-cat is used
  with more than one input file has been fixed (#543, #544).
- Obsolete and derelict fiona.tool module has been removed.
- Revert the change in 0a2bc7c that discards Z in geometry types when a
  collection's schema is reported (#541).
- Require six version 1.7 or higher (#550).
- A regression related to "zip+s3" URIs has been fixed.
- Debian's GDAL data locations are now searched by default (#583).

1.8a1 (2017-11-06)
------------------

New features:

- Each call of ``writerecords()`` involves one or more transactions of up to
  20,000 features each. This improves performance when writing GeoPackage files
  as the previous transaction size was only 200 features (#476, #491).

Packaging:

- Fiona's Cython source files have been refactored so that there are no longer
  separate extension modules for GDAL 1.x and GDAL 2.x. Instead there is a base
  extension module based on GDAL 2.x and shim modules for installations that
  use GDAL 1.x.

1.7.11.post1 (2018-01-08)
-------------------------

- This post-release adds missing expat (and thereby GPX format) support to
  the included GDAL library (still version 2.2.2).

1.7.11 (2017-12-14)
-------------------

- The ``encoding`` keyword argument for ``fiona.open()``, which is intended
  to allow a caller to override a data source's own and possibly erroneous
  encoding, has not been working (#510, #512). The problem is that we weren't
  always setting GDAL open or config options before opening the data sources.
  This bug is resolved by a number of commits in the maint-1.7 branch and
  the fix is demonstrated in tests/test_encoding.py.
- An ``--encoding`` option has been added to fio-load to enable creation of
  encoded shapefiles with an accompanying .cpg file (#499, #517).

1.7.10.post1 (2017-10-30)
-------------------------

- A post-release has been made to fix a problem with macosx wheels uploaded
  to PyPI.

1.7.10 (2017-10-26)
-------------------

Bug fixes:

- An extraneous printed line from the ``rio cat --layers`` validator has been
  removed (#478).

Packaging:

- Official OS X and Manylinux1 wheels (on PyPI) for this release will be
  compatible with Shapely 1.6.2 and Rasterio 1.0a10 wheels.

1.7.9.post1 (2017-08-21)
------------------------

This release introduces no changes in the Fiona package. It upgrades GDAL
from 2.2.0 to 2.2.1 in wheels that we publish to the Python Package Index.

1.7.9 (2017-08-17)
------------------

Bug fixes:

- Acquire the GIL for GDAL error callback functions to prevent crashes when
  GDAL errors occur when the GIL has been released by user code.
- Sync and flush layers when closing even when the number of features is not
  precisely known (#467).

1.7.8 (2017-06-20)
------------------

Bug fixes:

- Provide all arguments needed by CPLError based exceptions (#456).

1.7.7 (2017-06-05)
------------------

Bug fixes:

- Switch logger `warn()` (deprecated) calls to `warning()`.
- Replace all relative imports and cimports in Cython modules with absolute
  imports (#450).
- Avoid setting `PROJ_LIB` to a non-existent directory (#439).

1.7.6 (2017-04-26)
------------------

Bug fixes:

- Fall back to `share/proj` for PROJ_LIB (#440).
- Replace every call to `OSRDestroySpatialReference()` with `OSRRelease()`,
  fixing the GPKG driver crasher reported in #441 (#443).
- Add a `DriverIOError` derived from `IOError` to use for driver-specific
  errors such as the GeoJSON driver's refusal to overwrite existing files.
  Also we now ensure that when this error is raised by `fiona.open()` any
  created read or write session is deleted, this eliminates spurious 
  exceptions on teardown of broken `Collection` objects (#437, #444).

1.7.5 (2017-03-20)
------------------

Bug fixes:

- Opening a data file in read (the default) mode with `fiona.open()` using the
  the `driver` or `drivers` keyword arguments (to specify certain format 
  drivers) would sometimes cause a crash on Windows due to improperly
  terminated lists of strings (#428). The fix: Fiona's buggy `string_list()`
  has been replaced by GDAL's `CSLAddString()`.

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)
------------------

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)
------------------

Future Deprecation:

- `Collection.__next__()` is buggy in that it can lead to duplication of 
  features when used in combination with `Collection.filter()` or
  `Collection.__iter__()`. It will be removed in Fiona 2.0. Please check for
  usage of this deprecated feature by running your tests or programs with
  `PYTHONWARNINGS="always:::fiona"` or `-W"always:::fiona"` and switch from
  `next(collection)` to `next(iter(collection))` (#301).

Bug fix:

- Zipped streams of bytes can be accessed by `BytesCollection` (#318).

1.7.1.post1 (2016-12-23)
------------------------
- New binary wheels using version 1.2.0 of sgillies/frs-wheel-builds. See
  https://github.com/sgillies/frs-wheel-builds/blob/master/CHANGES.txt.

1.7.1 (2016-11-16)
------------------

Bug Fixes:

- Prevent Fiona from stumbling over 'Z', 'M', and 'ZM' geometry types
  introduced in GDAL 2.1 (#384). Fiona 1.7.1 doesn't add explicit support for
  these types, they are coerced to geometry types 1-7 ('Point', 'LineString',
  etc.)
- Raise an `UnsupportedGeometryTypeError` when a bogus or unsupported 
  geometry type is encountered in a new collection's schema or elsewhere
  (#340).
- Enable `--precision 0` for fio-cat (#370).
- Prevent datetime exceptions from unnecessarily stopping collection iteration
  by yielding `None` (#385)
- Replace log.warn calls with log.warning calls (#379).
- Print an error message if neither gdal-config or `--gdalversion` indicate
  a GDAL C API version when running `setup.py` (#364).
- Let dict-like subclasses through CRS type checks (#367).

1.7.0post2 (2016-06-15)
-----------------------

Packaging: define extension modules for 'clean' and 'config' targets (#363).

1.7.0post1 (2016-06-15)
-----------------------

Packaging: No files are copied for the 'clean' setup target (#361, #362).

1.7.0 (2016-06-14)
------------------

The C extension modules in this library can now be built and used with either
a 1.x or 2.x release of the GDAL library. Big thanks to René Buffat for
leading this effort.

Refactoring:

- The `ogrext1.pyx` and `ogrext2.pyx` files now use separate
  C APIs defined in `ogrext1.pxd` and `ogrex2.pxd`. The other extension
  modules have been refactored so that they do not depend on either of these
  modules and use subsets of the GDAL/OGR API compatible with both GDAL 1.x and
  2.x (#359).

Packaging:

- Source distributions now contain two different sources for the
  `ogrext` extension module. The `ogrext1.c` file will be used with GDAL 1.x
  and the `ogrext2.c` file will be used with GDAL 2.x.

1.7b2 (2016-06-13)
------------------

- New feature: enhancement of the `--layer` option for fio-cat and fio-dump
  to allow separate layers of one or more multi-layer input files to be
  selected (#349).

1.7b1 (2016-06-10)
------------------

- New feature: support for GDAL version 2+ (#259).
- New feature: a new fio-calc CLI command (#273).
- New feature: `--layer` options for fio-info (#316) and fio-load (#299).
- New feature: a `--no-parse` option for fio-collect that lets a careful user
  avoid extra JSON serialization and deserialization (#306).
- Bug fix: `+wktext` is now preserved when serializing CRS from WKT to PROJ.4
  dicts (#352).
- Bug fix: a small memory leak when opening a collection has been fixed (#337).
- Bug fix: internal unicode errors now result in a log message and a 
  `UnicodeError` exception, not a `TypeError` (#356).

1.6.4 (2016-05-06)
------------------
- Raise ImportError if the active GDAL library version is >= 2.0 instead of
  failing unpredictably (#338, #341). Support for GDAL>=2.0 is coming in
  Fiona 1.7.

1.6.3.post1 (2016-03-27)
------------------------
- No changes to the library in this post-release version, but there is a
  significant change to the distributions on PyPI: to help make Fiona more
  compatible with Shapely on OS X, the GDAL shared library included in the
  macosx (only) binary wheels now statically links the GEOS library. See
  https://github.com/sgillies/frs-wheel-builds/issues/5.

1.6.3 (2015-12-22)
------------------
- Daytime has been decreasing in the Northern Hemisphere, but is now
  increasing again as it should.
- Non-UTF strings were being passed into OGR functions in some situations
  and on Windows this would sometimes crash a Python process (#303). Fiona
  now raises errors derived from UnicodeError when field names or field
  values can't be encoded.

1.6.2 (2015-09-22)
------------------
- Providing only PROJ4 representations in the dataset meta property resulted in
  loss of CRS information when using the `fiona.open(..., **src.meta) as dst`
  pattern (#265). This bug has been addressed by adding a crs_wkt item to the`
  meta property and extending the `fiona.open()` and the collection constructor
  to look for and prioritize this keyword argument.

1.6.1 (2015-08-12)
------------------
- Bug fix: Fiona now deserializes JSON-encoded string properties provided by
  the OGR GeoJSON driver (#244, #245, #246).
- Bug fix: proj4 data was not copied properly into binary distributions due to
  a typo (#254).

Special thanks to WFMU DJ Liz Berg for the awesome playlist that's fueling my
release sprint. Check it out at http://wfmu.org/playlists/shows/62083. You
can't unhear Love Coffin.

1.6.0 (2015-07-21)
------------------
- Upgrade Cython requirement to 0.22 (#214).
- New BytesCollection class (#215).
- Add GDAL's OpenFileGDB driver to registered drivers (#221).
- Implement CLI commands as plugins (#228).
- Raise click.abort instead of calling sys.exit, preventing suprising exits
  (#236).

1.5.1 (2015-03-19)
------------------
- Restore test data to sdists by fixing MANIFEST.in (#216).

1.5.0 (2015-02-02)
------------------
- Finalize GeoJSON feature sequence options (#174).
- Fix for reading of datasets that don't support feature counting (#190).
- New test dataset (#188).
- Fix for encoding error (#191).
- Remove confusing warning (#195).
- Add data files for binary wheels (#196).
- Add control over drivers enabled when reading datasets (#203).
- Use cligj for CLI options involving GeoJSON (#204).
- Fix fio-info --bounds help (#206).

1.4.8 (2014-11-02)
------------------
- Add missing crs_wkt property as in Rasterio (#182).

1.4.7 (2014-10-28)
------------------
- Fix setting of CRS from EPSG codes (#149).

1.4.6 (2014-10-21)
------------------
- Handle 3D coordinates in bounds() #178.

1.4.5 (2014-10-18)
------------------
- Add --bbox option to fio-cat (#163).
- Skip geopackage tests if run from an sdist (#167).
- Add fio-bounds and fio-distrib.
- Restore fio-dump to working order.

1.4.4 (2014-10-13)
------------------
- Fix accidental requirement on GDAL 1.11 introduced in 1.4.3 (#164).

1.4.3 (2014-10-10)
------------------
- Add support for geopackage format (#160).
- Add -f and --format aliases for --driver in CLI (#162).
- Add --version option and env command to CLI.

1.4.2 (2014-10-03)
------------------
- --dst-crs and --src-crs options for fio cat and collect (#159).

1.4.1 (2014-09-30)
------------------
- Fix encoding bug in collection's __getitem__ (#153).

1.4.0 (2014-09-22)
------------------
- Add fio cat and fio collect commands (#150).
- Return of Python 2.6 compatibility (#148).
- Improved CRS support (#149).

1.3.0 (2014-09-17)
------------------
- Add single metadata item accessors to fio inf (#142).
- Move fio to setuptools entry point (#142).
- Add fio dump and load commands (#143).
- Remove fio translate command.

1.2.0 (2014-09-02)
------------------
- Always show property width and precision in schema (#123).
- Write datetime properties of features (#125).
- Reset spatial filtering in filter() (#129).
- Accept datetime.date objects as feature properties (#130).
- Add slicing to collection iterators (#132).
- Add geometry object masks to collection iterators (#136).
- Change source layout to match Shapely and Rasterio (#138).

1.1.6 (2014-07-23)
------------------
- Implement Collection __getitem__() (#112).
- Leave GDAL finalization to the DLL's destructor (#113).
- Add Collection keys(), values(), items(), __contains__() (#114).
- CRS bug fix (#116).
- Add fio CLI program.
  
1.1.5 (2014-05-21)
------------------
- Addition of cpl_errs context manager (#108).
- Check for NULLs with '==' test instead of 'is' (#109).
- Open auxiliary files with encoding='utf-8' in setup for Python 3 (#110).

1.1.4 (2014-04-03)
------------------
- Convert 'long' in schemas to 'int' (#101).
- Carefully map Python schema to the possibly munged internal schema (#105).
- Allow writing of features with geometry: None (#71).

1.1.3 (2014-03-23)
------------------
- Always register all GDAL and OGR drivers when entering the DriverManager
  context (#80, #92).
- Skip unsupported field types with a warning (#91).
- Allow OGR config options to be passed to fiona.drivers() (#90, #93).
- Add a bounds() function (#100).
- Turn on GPX driver.

1.1.2 (2014-02-14)
------------------
- Remove collection slice left in dumpgj (#88).

1.1.1 (2014-02-02)
------------------
- Add an interactive file inspector like the one in rasterio.
- CRS to_string bug fix (#83).

1.1 (2014-01-22)
----------------
- Use a context manager to manage drivers (#78), a backwards compatible but
  big change. Fiona is now compatible with rasterio and plays better with the
  osgeo package.

1.0.3 (2014-01-21)
------------------
- Fix serialization of +init projections (#69).

1.0.2 (2013-09-09)
------------------
- Smarter, better test setup (#65, #66, #67).
- Add type='Feature' to records read from a Collection (#68).
- Skip geometry validation when using GeoJSON driver (#61).
- Dumpgj file description reports record properties as a list (as in
  dict.items()) instead of a dict.

1.0.1 (2013-08-16)
------------------
- Allow ordering of written fields and preservation of field order when
  reading (#57).

1.0 (2013-07-30)
-----------------
- Add prop_type() function.
- Allow UTF-8 encoded paths for Python 2 (#51). For Python 3, paths must
  always be str, never bytes.
- Remove encoding from collection.meta, it's a file creation option only.
- Support for linking GDAL frameworks (#54).

0.16.1 (2013-07-02)
-------------------
- Add listlayers, open, prop_width to __init__py:__all__.
- Reset reading of OGR layer whenever we ask for a collection iterator (#49).

0.16 (2013-06-24)
-----------------
- Add support for writing layers to multi-layer files.
- Add tests to reach 100% Python code coverage.

0.15 (2013-06-06)
-----------------
- Get and set numeric field widths (#42).
- Add support for multi-layer data sources (#17).
- Add support for zip and tar virtual filesystems (#45).
- Add listlayers() function.
- Add GeoJSON to list of supported formats (#47).
- Allow selection of layers by index or name.

0.14 (2013-05-04)
-----------------
- Add option to add JSON-LD in the dumpgj program.
- Compare values to six.string_types in Collection constructor.
- Add encoding to Collection.meta.
- Document dumpgj in README.

0.13 (2013-04-30)
-----------------
- Python 2/3 compatibility in a single package. Pythons 2.6, 2.7, 3.3 now supported.

0.12.1 (2013-04-16)
-------------------
- Fix messed up linking of README in sdist (#39).

0.12 (2013-04-15)
-----------------
- Fix broken installation of extension modules (#35).
- Log CPL errors at their matching Python log levels.
- Use upper case for encoding names within OGR, lower case in Python.

0.11 (2013-04-14)
-----------------
- Cythonize .pyx files (#34).
- Work with or around OGR's internal recoding of record data (#35).
- Fix bug in serialization of int/float PROJ.4 params.

0.10 (2013-03-23)
-----------------
- Add function to get the width of str type properties.
- Handle validation and schema representation of 3D geometry types (#29).
- Return {'geometry': None} in the case of a NULL geometry (#31).

0.9.1 (2013-03-07)
------------------
- Silence the logger in ogrext.so (can be overridden).
- Allow user specification of record field encoding (like 'Windows-1252' for
  Natural Earth shapefiles) to help when OGR can't detect it.

0.9 (2013-03-06)
----------------
- Accessing file metadata (crs, schema, bounds) on never inspected closed files
  returns None without exceptions.
- Add a dict of supported_drivers and their supported modes.
- Raise ValueError for unsupported drivers and modes.
- Remove asserts from ogrext.pyx.
- Add validate_record method to collections.
- Add helpful coordinate system functions to fiona.crs.
- Promote use of fiona.open over fiona.collection.
- Handle Shapefile's mix of LineString/Polygon and multis (#18).
- Allow users to specify width of shapefile text fields (#20).

0.8 (2012-02-21)
----------------
- Replaced .opened attribute with .closed (product of collection() is always
  opened). Also a __del__() which will close a Collection, but still not to be
  depended upon.
- Added writerecords method.
- Added a record buffer and better counting of records in a collection.
- Manage one iterator per collection/session.
- Added a read-only bounds property.

0.7 (2012-01-29)
----------------
- Initial timezone-naive support for date, time, and datetime fields. Don't use
  these field types if you can avoid them. RFC 3339 datetimes in a string field
  are much better.

0.6.2 (2012-01-10)
------------------
- Diagnose and set the driver property of collection in read mode.
- Fail if collection paths are not to files. Multi-collection workspaces are
  a (maybe) TODO.

0.6.1 (2012-01-06)
------------------
- Handle the case of undefined crs for disk collections.

0.6 (2012-01-05)
----------------
- Support for collection coordinate reference systems based on Proj4.
- Redirect OGR warnings and errors to the Fiona log.
- Assert that pointers returned from the ograpi functions are not NULL before
  using.

0.5 (2011-12-19)
----------------
- Support for reading and writing collections of any geometry type.
- Feature and Geometry classes replaced by mappings (dicts).
- Removal of Workspace class.

0.2 (2011-09-16)
----------------
- Rename WorldMill to Fiona.

0.1.1 (2008-12-04)
------------------
- Support for features with no geometry.

