735
// TODO: update the errors code to reflect changes from src/error.cpp in libexiv2
736
733
void translateExiv2Error(Exiv2::Error const& error)
738
735
// Use the Python 'C' API to set up an exception object
740
// Building a C++ string first allows this code to compile with all
741
// versions of libexiv2 (< 0.13 and >= 0.13), because the way exceptions
742
// are handled in libexiv2 was changed in 0.13.
743
const std::string sMessage(error.what());
744
const char* message = sMessage.c_str();
736
const char* message = error.what();
746
738
// The type of the Python exception depends on the error code
747
739
// Warning: this piece of code should be updated in case the error codes
748
740
// defined by Exiv2 (file 'src/error.cpp') are changed
749
741
switch (error.code())
745
// {path}: Call to `{function}' failed: {strerror}
746
// May be raised when reading a file
755
747
PyErr_SetString(PyExc_RuntimeError, message);
750
// This does not look like a {image type} image
751
// May be raised by readMetadata()
752
PyErr_SetString(PyExc_IOError, message);
755
// Invalid dataset name `{dataset name}'
756
// May be raised when instantiating an IptcKey from a string
757
PyErr_SetString(PyExc_KeyError, message);
760
// Invalid record name `{record name}'
761
// May be raised when instantiating an IptcKey from a string
762
PyErr_SetString(PyExc_KeyError, message);
765
// Invalid key `{key}'
766
// May be raised when instantiating an ExifKey, an IptcKey or an
767
// XmpKey from a string
768
PyErr_SetString(PyExc_KeyError, message);
771
// Invalid tag name or ifdId `{tag name}', ifdId {ifdId}
772
// May be raised when instantiating an ExifKey from a string
773
PyErr_SetString(PyExc_KeyError, message);
777
// May be raised when calling value() on a datum
778
PyErr_SetString(PyExc_ValueError, message);
781
// {path}: Failed to open the data source: {strerror}
782
// May be raised by readMetadata()
783
PyErr_SetString(PyExc_IOError, message);
786
// {path}: Failed to open file ({mode}): {strerror}
787
// May be raised by writeMetadata()
788
PyErr_SetString(PyExc_IOError, message);
791
// {path}: The file contains data of an unknown image type
792
// May be raised when opening an image
793
PyErr_SetString(PyExc_IOError, message);
796
// The memory contains data of an unknown image type
797
// May be raised when instantiating an image from a data buffer
798
PyErr_SetString(PyExc_IOError, message);
801
// Image type {image type} is not supported
802
// May be raised when creating a new image
803
PyErr_SetString(PyExc_IOError, message);
806
// Failed to read image data
807
// May be raised by readMetadata()
808
PyErr_SetString(PyExc_IOError, message);
811
// This does not look like a JPEG image
812
// May be raised by readMetadata()
813
PyErr_SetString(PyExc_IOError, message);
816
// {old path}: Failed to rename file to {new path}: {strerror}
817
// May be raised by writeMetadata()
818
PyErr_SetString(PyExc_IOError, message);
821
// {path}: Transfer failed: {strerror}
822
// May be raised by writeMetadata()
823
PyErr_SetString(PyExc_IOError, message);
826
// Memory transfer failed: {strerror}
827
// May be raised by writeMetadata()
828
PyErr_SetString(PyExc_IOError, message);
831
// Failed to read input data
832
// May be raised by writeMetadata()
833
PyErr_SetString(PyExc_IOError, message);
836
// Failed to write image
837
// May be raised by writeMetadata()
838
PyErr_SetString(PyExc_IOError, message);
841
// Input data does not contain a valid image
842
// May be raised by writeMetadata()
843
PyErr_SetString(PyExc_IOError, message);
775
PyErr_SetString(PyExc_IOError, message);
781
PyErr_SetString(PyExc_IndexError, message);
846
// Invalid ifdId {ifdId}
847
// May be raised when instantiating an ExifKey from a tag and
849
PyErr_SetString(PyExc_KeyError, message);
852
// Offset out of range
853
// May be raised by writeMetadata() (TIFF)
854
PyErr_SetString(PyExc_IOError, message);
857
// Unsupported data area offset type
858
// May be raised by writeMetadata() (TIFF)
859
PyErr_SetString(PyExc_IOError, message);
862
// Invalid charset: `{charset name}'
863
// May be raised when instantiating a CommentValue from a string
864
PyErr_SetString(PyExc_ValueError, message);
867
// Unsupported date format
868
// May be raised when instantiating a DateValue from a string
869
PyErr_SetString(PyExc_ValueError, message);
793
PyErr_SetString(PyExc_ValueError, message);
872
// Unsupported time format
873
// May be raised when instantiating a TimeValue from a string
874
PyErr_SetString(PyExc_ValueError, message);
877
// Writing to {image format} images is not supported
878
// May be raised by writeMetadata() for certain image types
879
PyErr_SetString(PyExc_IOError, message);
882
// Setting {metadata type} in {image format} images is not supported
883
// May be raised when setting certain types of metadata for certain
884
// image types that don't support them
885
PyErr_SetString(PyExc_ValueError, message);
888
// This does not look like a CRW image
889
// May be raised by readMetadata() (CRW)
890
PyErr_SetString(PyExc_IOError, message);
798
PyErr_SetString(PyExc_MemoryError, message);
893
// No namespace info available for XMP prefix `{prefix}'
894
// May be raised when retrieving property info for an XmpKey
895
PyErr_SetString(PyExc_KeyError, message);
898
// No prefix registered for namespace `{namespace}', needed for
899
// property path `{property path}'
900
// May be raised by readMetadata() when reading the XMP data
901
PyErr_SetString(PyExc_KeyError, message);
904
// Size of {type of metadata} JPEG segment is larger than
906
// May be raised by writeMetadata() (JPEG)
907
PyErr_SetString(PyExc_ValueError, message);
910
// Unhandled Xmpdatum {key} of type {value type}
911
// May be raised by readMetadata() when reading the XMP data
912
PyErr_SetString(PyExc_TypeError, message);
915
// Unhandled XMP node {key} with opt={XMP Toolkit option flags}
916
// May be raised by readMetadata() when reading the XMP data
917
PyErr_SetString(PyExc_TypeError, message);
920
// XMP Toolkit error {error id}: {error message}
921
// May be raised by readMetadata() when reading the XMP data
922
PyErr_SetString(PyExc_RuntimeError, message);
925
// Failed to decode Lang Alt property {property path}
926
// with opt={XMP Toolkit option flags}
927
// May be raised by readMetadata() when reading the XMP data
928
PyErr_SetString(PyExc_ValueError, message);
931
// Failed to decode Lang Alt qualifier {qualifier path}
932
// with opt={XMP Toolkit option flags}
933
// May be raised by readMetadata() when reading the XMP data
934
PyErr_SetString(PyExc_ValueError, message);
937
// Failed to encode Lang Alt property {key}
938
// May be raised by writeMetadata()
939
PyErr_SetString(PyExc_ValueError, message);
942
// Failed to determine property name from path {property path},
943
// namespace {namespace}
944
// May be raised by readMetadata() when reading the XMP data
945
PyErr_SetString(PyExc_KeyError, message);
948
// Schema namespace {namespace} is not registered with
950
// May be raised by readMetadata() when reading the XMP data
951
PyErr_SetString(PyExc_ValueError, message);
954
// No namespace registered for prefix `{prefix}'
955
// May be raised when instantiating an XmpKey from a string
956
PyErr_SetString(PyExc_KeyError, message);
959
// Aliases are not supported. Please send this XMP packet
960
// to ahuggel@gmx.net `{namespace}', `{property path}', `{value}'
961
// May be raised by readMetadata() when reading the XMP data
962
PyErr_SetString(PyExc_ValueError, message);
965
// Invalid XmpText type `{type}'
966
// May be raised when instantiating an XmpTextValue from a string
967
PyErr_SetString(PyExc_TypeError, message);
970
// TIFF directory {TIFF directory name} has too many entries
971
// May be raised by writeMetadata() (TIFF)
972
PyErr_SetString(PyExc_IOError, message);
801
// custom error codes
975
// Custom error codes
802
976
case METADATA_NOT_READ:
803
977
PyErr_SetString(PyExc_IOError, "Image metadata has not been read yet");