Unable to add/modify multiple value short tags

Bug #256875 reported by Rob Wallace
36
This bug affects 4 people
Affects Status Importance Assigned to Milestone
IntiPunku
Triaged
High
Mark Baas
Phatch
Triaged
Medium
Stani
pyexiv2
Fix Released
Medium
Olivier Tilloy

Bug Description

Steps to re-create bug
-----------------------------
>>> image = pyexiv2.Image("brokenbig.jpg")
>>> image.readMetadata()
>>> image['Exif.CanonCs.Lens'] = (55,18,1)

Expected outcome
------------------------
Exif data field added/modified:

Actual outcome
--------------------
The following exception is raised:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.5/site-packages/pyexiv2.py", line 595, in __setitem__
    self.__exifTagsDict[key] = ConvertToPythonType(tagFamily, typeName, str(value))
  File "/usr/lib64/python2.5/site-packages/pyexiv2.py", line 355, in ConvertToPythonType
    value = int(tagValue)
ValueError: invalid literal for int() with base 10: '(55, 18, 1)'
>>>

Olivier Tilloy (osomon)
Changed in pyexiv2:
assignee: nobody → osomon
Revision history for this message
Matt Brown (mattbrown) wrote :

The bug is simply with pyexiv2 updating its internal cache after passing the new value down to the underlying exiv2 library (which occurs on line 594).

So as a short-term workaround if you call writeMetadata after the exception you'll see that the new value still ends up in your destination file.

I've attached a patch the fixes the problem with updating the cache using the same logic that is present in the __getExifTagValue to process the values coming from exiv2 originally.

Revision history for this message
Matt Brown (mattbrown) wrote :

Previous patch has whitespace inconsistencies with the original code, whoops! :)

Olivier Tilloy (osomon)
Changed in pyexiv2:
importance: Undecided → Medium
milestone: none → 0.2
Revision history for this message
Olivier Tilloy (osomon) wrote :

Also affect Phatch (see bug #372646).

Changed in pyexiv2:
status: New → Confirmed
Stani (stani)
Changed in phatch:
assignee: nobody → stani (stani)
importance: Undecided → Medium
status: New → Confirmed
Stani (stani)
Changed in phatch:
status: Confirmed → Triaged
Mark Baas (mark-baas123)
Changed in intipunku:
importance: Undecided → High
Revision history for this message
Mark Baas (mark-baas123) wrote :

To skip the Canon tags is quite an unsatisfactory workaround. I have temporarilly used a wrapper aroumd the exiv2 command line tool and I never had the problem of copying the exif keys.
What I do not really understand if we skip conversion, it then afterwards cannot write the metadata. It only has to convert the ugly tuples into strings if I understand correcty. The weird things actually is that pyexiv2 after reading the metadata itself converts the stuff into tuples.
I hope Olivier can fix this soon, because it is quite a blocker.

Changed in intipunku:
status: New → Triaged
assignee: nobody → Mark Baas (mark-baas123)
Revision history for this message
Olivier Tilloy (osomon) wrote :

Fixed in the 0.2 branch. The expected syntax for the original example would now look like this:

    import pyexiv2
    metadata = pyexiv2.ImageMetadata("brokenbig.jpg")
    metadata.read()
    metadata['Exif.CanonCs.Lens'].value = (55, 18, 1)

Changed in pyexiv2:
status: Confirmed → Fix Committed
Olivier Tilloy (osomon)
Changed in pyexiv2:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.