python-gphoto2 - Python interface to libgphoto2
http://github.com/jim-easterbrook/python-gphoto2
Copyright (C) 2014-24  Jim Easterbrook  jim@jim-easterbrook.me.uk

This file is part of python-gphoto2.

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

python-gphoto2 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
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with python-gphoto2.  If not, see
<https://www.gnu.org/licenses/>.


Changes in 2.5.1:
  1/ Add macOS arm64 "binary wheels".
  2/ Add Python 3.12 & 3.13 binary wheels.
  3/ Add '__version_tuple__' for easy runtime version checking.

Changes in 2.5.0:
  1/ API change: gp_log_add_func callback is passed str instead of bytes
  2/ Add some GPPort methods. This allows a port to be reset when an error
     occurs.
  3/ Pass CameraFile to gp_camera_capture_preview & gp_camera_file_get.
     Optional - one will be created if needed.
  4/ Remove Context::camera_autodetect method deprecated 3 years ago.
  5/ Rename Context, PortInfo & PortInfoList. Add aliases of old names.
  6/ Update libgphoto2 to v2.5.31.

Changes in 2.4.0:
  1/ API change! gp_file_open no longer creates CameraFile object. It is now
     consistent with the C API.
  2/ Deprecated functions: gp_abilities_list_append, gp_list_populate,
     gp_port_info_list_append, gp_widget_add_choice, gp_widget_set_info,
     gp_widget_set_name, gp_widget_set_range, gp_widget_set_readonly.
     These will be removed in a future release.
  3/ Change licence from GPLv3+ to LGPLv3+.
  4/ CameraList behaves like a cross between Python list and dict types.
  5/ Added unit tests to check most libgphoto2 functions.
  6/ Include virtual camera in "binary wheels".

Changes in 2.3.6:
  1/ Use libusb1 instead of libusb0 in Linux binary wheels.

Changes in 2.3.5:
  1/ Add Python 3.11 binary wheels.
  2/ Drop support for libgphoto2 before version v2.5.10
  3/ Clearer installation documentation.
  4/ Modernised Python package build system.

Changes in 2.3.4:
  1/ Update libgphoto2 to v2.5.30.
  2/ Include localisation files in Python package.

Changes in 2.3.3:
  1/ Update libgphoto2 to v2.5.29.

Changes in 2.3.2:
  1/ Fix "undefined symbol: static_assert" error with Linux binary wheels.

Changes in 2.3.1:
  1/ Add MacOS "binary wheels". These have not been thoroughly tested.
  2/ Update libgphoto2 to v2.5.28.

Changes in 2.3.0:
  1/ Python 2 is no longer supported.
  2/ "Binary wheels" are available to simplify installation on some computers.

Changes in 2.2.4:
  1/ Built with SWIG version 4.0.2 to provide Python 3.8 compatibility.

Changes in 2.2.3:
  1/ Minor improvement in setup.py script.
  2/ Minor improvements in example scripts.

Changes in 2.2.2:
  1/ Added Camera.autodetect alternative to gp_camera_autodetect.
  2/ Added some deprecation warnings. Use 'python -Wd' to see them when running
     software under development.
  3/ Added gphoto2_version.py example program.

Changes in 2.2.1:
  1/ Reinstated Context.camera_autodetect method removed in 2.2.0.

Changes in 2.2.0:
  1/ COMPATIBILITY CHANGE: Removed Context.camera_autodetect method.
  2/ COMPATIBILITY CHANGE: Removed deprecated widget get/set functions.
  3/ Python3 log messages are now str instead of bytes.
  4/ Documentation improvements.

Changes in 2.1.0:
  1/ COMPATIBILITY CHANGE: gp_file_set_data_and_size and gp_file_append now
     take a single buffer parameter (such as a bytes string) instead of a
     string and length.
  2/ Fixed memory double free bug in gp_file_set_data_and_size.
  3/ Removed support for libgphoto2 v2.4.

Changes in 2.0.0:
  1/ COMPATIBILITY CHANGE: gp_log_add_func and use_python_logging now return a
     Python object which must be stored until logging is no longer needed.
  2/ Added cam-conf-view-gui & wait-for-event examples. Thanks to the users who
     contributed these.
  3/ Various minor bug fixes and improvements.

Changes in 1.9.0:
  1/ Enabled use of context callback functions such as
     gp_context_set_progress_funcs.
  2/ Added a time lapse movie example script.

Changes in 1.8.5:
  1/ Fix memory leak in gp_camera_get_config.

Changes in 1.8.4:
  1/ Fix segfault if camera disconnected before calling get_storageinfo.

Changes in 1.8.3:
  1/ Fix Qt5 usage in examples (thanks fatzh).
  2/ Handle GP_EVENT_FILE_CHANGED (new in libgphoto2 2.5.17).
  3/ Allow Python threads during gp_camera_init.

Changes in 1.8.2:
  1/ Fix bug in v1.8.1 that caused installation problems on some systems.

Changes in 1.8.1:
  1/ Logging callbacks now pass 'bytes' objects in Python3.
  2/ Increased number of functions allow other Python threads to run.

Changes in 1.8.0:
  1/ The 'context' parameter is now optional for most functions.
  2/ Some deprecated functions have been removed.
  3/ Improved documentation of many functions.
  4/ Substantial rework of logging callback processing.

Changes in 1.7.1:
  1/ Return string values from gp_camera_wait_for_event.

Changes in 1.7.0:
  1/ Include function documentation in Python interface.
  2/ Add gp_widget_get_children and gp_widget_get_choices functions that return
     Python iterators.

Changes in 1.6.0:
  1/ Include interfaces for more versions of libgphoto2.

Changes in 1.5.1:
  1/ Added gp_camera_get_single_config(), gp_camera_set_single_config() and
     gp_camera_list_config() functions, if used with libgphoto2 v2.5.10+.
  2/ Changed version related compilation flags.

Changes in 1.5.0:
  1/ API change! The gp_file_open function now allocates and returns a new
     CameraFile object.
  2/ Compile without -Werror by default. Use PYTHON_GPHOTO2_STRICT to
     over-ride.
  3/ Improved compatibility with old SWIG versions.

Changes in 1.4.1:
  1/ Fix issue #16 (MacOS install problem).

Changes in 1.4.0:
  1/ Allow user data to be passed to gp_log_add_func (and then to user callback
     function).
  2/ Add some member methods to GPPortInfo.

Changes in 1.3.4:
  1/ Fix a few minor bugs.

Changes in 1.3.3:
  1/ Fix bug in gp_camera_get_storageinfo when camera has more than one storage
     card.

Changes in 1.3.2:
  1/ Further changes to Python interface to logging callback functions.

Changes in 1.3.1:
  1/ Reworked Python interface to logging callback functions.
  2/ Renamed submodules and revised build process.
  3/ Hid xxx_ref, xxx_unref & xxx_free functions from Python.
  4/ Fixed some bugs in error handling.

Changes in 1.2.2:
  1/ Temporarily fix build problems with Python 3.5
  2/ Added a "choose camera" example showing how to handle multiple cameras.

Changes in 1.2.1:
  1/ Camera.get_storageinfo and Camera.capture_preview now allocate their
     return value (API change).
  2/ Examples include a "focus assist" program for EOS 350d. Will need changes
     to work with other cameras.

Changes in 1.2.0:
  1/ API change! The get_data_and_size functions now return a new "FileData"
     object which has the Python buffer interface.
  2/ Added get/set capture target examples.

Changes in 1.1.0:
  1/ Can now use gp_camera_file_read to fetch data from camera in chunks.

Changes in 1.0.0:
  1/ Bump major version number
  2/ Upgrade status from "beta" to "production/stable"

Changes in 0.11.2:
  1/ Ignore gp_log_with_source_location as it's not present in all versions of
     libgphoto2.
  2/ Minor improvements in build process.

Changes in 0.11.1:
  1/ Ignore gp_log_data for compatibility with gphoto2 v2.5.6.
  2/ Improved robustness of interface compilation.
  3/ Made use_python_logging() configurable to control verbosity.

Changes in 0.11.0:
  1/ Installation no longer requires SWIG.
  2/ Reorganised source file locations and build process.

Changes in 0.10.2:
  1/ Fixed failure to build with Python 3.
  2/ Made gp_camera_trigger_capture thread aware.

Changes in 0.10.1:
  1/ Bug fix: would not build with some versions of SWIG.

Changes in 0.10.0:
  1/ gp_file_get_data_and_size() now returns a Python bytes object.
  2/ gp_camera_wait_for_event() now returns data for some events.
  3/ gp_camera_file_get() now allocates the returned CameraFile.

Changes in 0.9.1:
  1/ Improved "docstring" documentation of each function.
  2/ Slow operations no longer block other Python threads.
  3/ Improved build process.

Changes in 0.9.0:
  1/ Added "member functions" to many gphoto2 types to replace the higher level
     classes defined in Python.
  2/ Removed the "higher level classes" defined in Python.
  3/ Added __len__ and __getitem__ members to list-like gphoto2 types.
  4/ Improved error handling.
  5/ Improved memory safety.

Changes in 0.8.0:
  1/ Many more functions now allocate and return their outputs, instead of
     requiring a new object as a parameter.
  2/ Several of the list-like GPhoto2 types can now be iterated over in Python.
  3/ Improved memory safety.

Changes in 0.7.1:
  1/ Fixed segfault bug with invalid CameraWidget** return values.
  2/ Removed need for type-specific gp_widget_get_value_xxx and
     gp_widget_set_value_xxx functions.

Changes in 0.7.0:
  1/ Changed API of gp_abilities_list_get_abilities and
     gp_camera_get_abilities.
  2/ Made check_result() much more user-configurable.
  3/ Improved memory safety of several functions.

Changes in 0.6.0:
  1/ Helper classes now sub-class the corresponding low-level type.
  2/ Improved example scripts.

Changes in 0.5.2:
  1/ Fixed some bugs in default destructor code introduced in v0.5.0.

Changes in 0.5.1:
  1/ Restored '__exit__' methods removed from helper classes in v0.5.0.
  2/ Defined some macros to simplify SWIG interface files.

Changes in 0.5.0:
  1/ Added default destructors for most objects created by gp_xxx_new()
     functions.
  2/ Fixed some memory leaks.
  3/ Hid details of some private structures and functions.

Changes in 0.4.0:
  1/ Made gp_camera_wait_for_event usable.
  2/ Made check_result raise exception for fewer error types.

Changes in 0.3.3:
  1/ Fixed segfault bug in logging callback with libgphoto2 v2.4.

Changes in 0.3.2:
  1/ Reorganised source directory structure
  2/ Include example scripts in pip installs.
  3/ Start putting releases on PyPI.

Changes in 0.3.1:
  1/ Fixed bug in 0.3.0 logging initialisation.

Changes in 0.3.0:
  1/ Changed logging callback signature to include gphoto2 level.

Changes in 0.2.1:
  1/ Fix download URL broken in 0.2.0.

Changes in 0.2.0:
  1/ Added Python helper classes.
  2/ Added interface to gphoto2-version.h.
  3/ Made compatible with Python 3.
  4/ Now works with gphoto2 versions 2.4 and 2.5.

Changes in 0.1:
  1/ Early development work, not fit for use.
