python-exiv2 - Python interface to libexiv2
http://github.com/jim-easterbrook/python-exiv2
Copyright (C) 2022-25  Jim Easterbrook  jim@jim-easterbrook.me.uk

This program is free software: you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see
<http://www.gnu.org/licenses/>.

Changes in v0.18.0:
  1/ Removed features deprecated in v0.13.0:
     Value (and derived types) copy constructors
     Single value (such as DateValue) index methods
     DataBuf indexing.
  2/ Deprecated many BasicIo methods (read, write, seek, etc.) that should not
     be needed in Python scripts. Please let me know if this is a problem.
  3/ Deprecated copy, write, and read(buffer) methods of Value (and
     subclasses) that should not be needed in Python scripts. Please let me
     know if this is a problem.
  4/ Deprecated copy and write methods of Metadatum (and subclasses) that
     should not be needed in Python scripts. Please let me know if this is a
     problem.
  5/ Deprecated 'buffer interface' to BasicIo, DataBuf, and PreviewImage. They
     all have 'data()' to get their contents.
  6/ Added binary wheels for Linux on arm64.
  7/ Exiv2 struct member names with a trailing underscore have more Pythonic
     aliases without the underscore.
  8/ Add data() method to exiv2.PreviewImage, deprecate pData() method.
  9/ Add data() method to exiv2.Image. This will replace using Image.io().
 10/ Add data() method to exiv2.DataValue.
 11/ BasicIo.read (& readOrThrow) now extract count from the buffer size.
 12/ Invalidate data iterators if data is deleted. (Requires swig >= 4.4)
 13/ Deprecated iteration of exiv2 "data" structure types.
 14/ API CHANGE: exiv2.LogMsg.pythonHandler is replaced by exiv2.pythonHandler

Changes in v0.17.5:
  1/ Binary wheels incorporate libexiv2 v0.28.7.

Changes in v0.17.4: (yanked)
  1/ Binary wheels incorporate libexiv2 v0.28.6.
  2/ Windows binary wheels do not have localisation.

Changes in v0.17.3:
  1/ Binary wheels incorporate libexiv2 v0.28.5.

Changes in v0.17.2:
  1/ Binary wheels incorporate libexiv2 v0.28.4.
  2/ Fix TimeValue test when run with local negative UTC offset.

Changes in v0.17.1:
  1/ Fix crash when using localised exceptions on Windows.

Changes in v0.17.0:
  1/ API change: derived classes of BasicIo are omitted from Python.
  2/ Binary wheels incorporate libexiv2 v0.28.3.
  3/ enableBMFF() function is deprecated.
  4/ Documentation is available on https://python-exiv2.readthedocs.io/
  5/ Improved handling of Windows code page character sets.

Changes in v0.16.3:
  1/ Binary wheels incorporate libexiv2 v0.28.2.

Changes in v0.16.2:
  1/ Removed AnyError alias of Exiv2Error exception.
  2/ Metadatum.print() method is no longer renamed to _print.
  3/ Improved handling of enums:
     1/ Enum results are returned as Python enum instead of int.
     2/ Passing ints as enum parameters is deprecated.
  4/ Added dict-like behaviour to "data" structs.
  5/ Log handlers can be set/cleared from Python.
  6/ Made docs available on readthedocs.org
  7/ SWIG v4.1.0 or later required to run SWIG.
  8/ Binary wheels incorporate libexiv2 v0.27.7.

Changes in v0.16.1:
  1/ Binary wheels incorporate libexiv2 v0.27.7.

Changes in v0.16.0:
  1/ Binary wheels incorporate libexiv2 v0.28.1.
  2/ Include native language support in Windows binary wheel builds.
  3/ API change: DateValue.getDate() returns Python dict.
  4/ API change: TimeValue.getTime() returns Python dict.
  5/ Deprecated: exiv2.Date and exiv2.Time objects.
  6/ Added buffer interface to PreviewImage
  7/ Set datum value from Python object directly instead of via string.
  8/ Moved Position enum to BasicIo class.
  9/ Moved CharsetId enum to CommentValue class.
  10/ Moved XmpArrayType and XmpStruct enums to XmpValue class.
  11/ Added enums for LogMsg.Level
  12/ More exiv2 structs are iterable for easy conversion to Python dict.

Changes in v0.15.0:
  1/ Added __version_tuple__ for easy runtime version testing.
  2/ exiv2.testVersion() can be called from Python.
  3/ exiv2.DataBuf can be created from Python data.
  4/ Most data() methods return a Python memoryview.
  5/ exiv2.DataBuf and exiv2.BasicIo have writeable Python buffer interface.

Changes in v0.14.1:
  1/ Update libexiv2 to 0.27.7 in binary wheels.

Changes in v0.14.0:
  1/ Added enums for XmpStruct and XmpArrayType
  2/ Added method for copy-free access to XmpTextValue raw data.

Changes in v0.13.2:
  1/ Fix occasional segfault with Image.io() of in-memory image data.

Changes in v0.13.1:
  1/ Add data() method to access Exiv2::StringValueBase raw bytes.
  2/ Update libexiv2 to 0.27.6 in binary wheels.
  3/ Enable video support in binary wheels.

Changes in v0.13.0:
  1/ Automatically cast Exiv2::Value return values to correct type.
  2/ Exiv2::byte* return values are converted to a simple buffer object.
  3/ Deprecated some superseded features. Use 'python -Wd' when testing.
  4/ Exiv2's Date & Time structs can be used from Python.
  5/ Removed Value.downCast methods deprecated in v0.7.0.
  6/ Reduced probability of segfaults by keeping references to other objects.

Changes in v0.12.1:
  1/ Fix iterator bug introduced in v0.10.0. (Issue #7.)

Changes in v0.12.0:
  1/ Enable passing Python buffer to Exiv2::DataValue constructor.
  2/ Enable passing Python buffer to Exiv2::Value copy() methods.

Changes in v0.11.3:
  1/ Fix localisation initialisation problem on MacOS.

Changes in v0.11.2:
  1/ Prevent PY_SSIZE_T_CLEAN warning / error in Python 3.8 and above.

Changes in v0.11.1:
  1/ Improved initialisation of localisation.

Changes in v0.11.0:
  1/ Changed PyPI package name from python-exiv2 to exiv2.
  2/ Simplified some data iterators and function return values.

Changes in v0.10.0:
  1/ API change: replaced Value += operator with append method.
  2/ Improved conversion of LangAltValue to/from Python dict.
  3/ Can construct some other values from a Python list.
  4/ AnyError exception renamed to Exiv2Error (with AnyError wrapper for
     compatibility).
  5/ Enabled localisation of error messages etc.
  6/ Python enum class is used for Exiv2 enums.

Changes in v0.9.0:
  1/ Add Exiv2::BasicIo and its subclasses to Python interface.

Changes in v0.8.3:
  1/ Xmp LangAlt values can be accessed like a Python dict.
  2/ Binary wheels are built with BMFF file support enabled.

Changes in v0.8.2:
  1/ No longer detect possible iterator invalidation (unreliable).
  2/ Restructured macros to give slightly less bloated code.

Changes in v0.8.1:
  1/ Fix some causes of segfaults.
  2/ Slightly change output of Metadatum.__str__().

Changes in v0.8.0:
  1/ Data iterators include checks for end of data and changed data so are less
     likely to segfault.
  2/ Added indexing to data values to access fundamental types such as int.
  3/ API change: removed access to value_ container in data values.

Changes in v0.7.0:
  1/ Add a constructor to Value subclasses that downcasts a Value.
  2/ Deprecated the Value subclass downCast() static method.
  3/ Include enableBMFF function when libexiv2 version >= 0.27.4.

Changes in v0.6.0:
  1/ Add Exiv2::PreviewManager to Python interface.

Changes in v0.5.3:
  1/ Binary wheels use libexiv2 version 0.27.5.

Changes in v0.5.2:
  1/ Fix several memory leaks.
  2/ Create binary wheels for MacOS (as well as Linux and Windows).
  3/ Fix problems installing on MSYS2 / MinGW.

Changes in v0.5.1:
  1/ Fix undefined symbol problem with Linux binary wheels.
  2/ XmpProperties.registeredNamespaces() returns a Python dict.

Changes in v0.5.0:
  1/ API change: data iterators no longer have a "curr" method, as all the
     methods of the datum it returned are directly accessible.
  2/ The BasicIo class and its subclasses are no longer available from Python.

Changes in v0.4.0:
  1/ "Easy Access" functions have been added to the interface.
  2/ Some unlikely to be used classes and functions have been removed from the
     interface.
  3/ MinGW installation is now more likely to work.

Changes in v0.3.1:
  1/ Windows: file names can include non-ascii characters.
  2/ Linux: improved linking of libexiv2.so when it's included in Python
     package.
  3/ Include SWIG generated code for more versions of libexiv2.

Changes in v0.3.0:
  1/ Most enums are now in Python objects instead of exiv2 toplevel.
  2/ Some exiv2 library calls now allow Python threads to run while they are
     running.

Changes in v0.2.3:
  1/ Python "wheels" are now available for Linux Python 3.6 to 3.10

Changes in v0.2.2:
  1/ Python "wheels" are now available for Windows Python 3.5 to 3.9

Changes in v0.2.1:
  1/ Fix symlink problem when installing on Windows.

Changes in v0.2.0:
  1/ "Source" distribution now includes pre-built libexiv2 library and headers.
  2/ Installation might work on MacOS. (Untested as I don't have a Mac.)

Changes in v0.1.0:
  1/ First release!
