diff options
-rw-r--r-- | src/pyexiv2/metadata.py | 10 | ||||
-rw-r--r-- | test/metadata.py | 46 |
2 files changed, 55 insertions, 1 deletions
diff --git a/src/pyexiv2/metadata.py b/src/pyexiv2/metadata.py index fea6a6f..5ec296d 100644 --- a/src/pyexiv2/metadata.py +++ b/src/pyexiv2/metadata.py @@ -31,6 +31,8 @@ Provide the ImageMetadata class. import os import sys from errno import ENOENT +from collections import MutableMapping +from itertools import chain import libexiv2python @@ -40,7 +42,7 @@ from pyexiv2.xmp import XmpTag from pyexiv2.preview import Preview -class ImageMetadata(object): +class ImageMetadata(MutableMapping): """ A container for all the metadata embedded in an image. @@ -321,6 +323,12 @@ class ImageMetadata(object): except AttributeError: raise KeyError(key) + def __iter__(self): + return chain(self.exif_keys, self.iptc_keys, self.xmp_keys) + + def __len__(self): + return len( [ x for x in self ] ) + def _get_comment(self): return self._image._getComment() diff --git a/test/metadata.py b/test/metadata.py index aea1c72..cb63c71 100644 --- a/test/metadata.py +++ b/test/metadata.py @@ -601,3 +601,49 @@ class TestImageMetadata(unittest.TestCase): self.failUnlessEqual(self.metadata.comment, self.other.comment) + ############################# + # Test MutableMapping methods + ############################# + + def _set_up_clean(self): + self.clean = ImageMetadata.from_buffer(EMPTY_JPG_DATA) + + def test_mutablemapping(self): + self._set_up_clean() + self.clean.read() + + self.assertEqual(len(self.clean), 0) + self.assertTrue('Exif.Image.DateTimeOriginal' not in self.clean) + + key = 'Exif.Image.DateTimeOriginal' + correctDate = datetime.datetime(2007,03,11) + incorrectDate = datetime.datetime(2009,03,25) + tag_date = ExifTag(key,correctDate) + false_tag_date = ExifTag(key,incorrectDate) + self.clean[key] = tag_date + + self.assertEqual(len(self.clean), 1) + self.assertTrue('Exif.Image.DateTimeOriginal' in self.clean) + self.assertEqual(self.clean.get('Exif.Image.DateTimeOriginal', false_tag_date), tag_date) + self.assertEqual(self.clean.get('Exif.Image.DateTime', tag_date), tag_date) + + key = 'Exif.Photo.UserComment' + tag = ExifTag(key,'UserComment') + self.clean[key] = tag + key = 'Iptc.Application2.Caption' + tag = IptcTag(key,['Caption']) + self.clean[key] = tag + key = 'Xmp.dc.subject' + tag = XmpTag(key, ['subject', 'values']) + self.clean[key] = tag + + self.assertTrue('Exif.Photo.UserComment' in self.clean) + self.assertTrue('Iptc.Application2.Caption' in self.clean) + self.assertTrue('Xmp.dc.subject' in self.clean) + + self.clean.clear() + self.assertEqual(len(self.clean), 0) + + self.assertTrue('Exif.Photo.UserComment' not in self.clean) + self.assertTrue('Iptc.Application2.Caption' not in self.clean) + self.assertTrue('Xmp.dc.subject' not in self.clean) |