def test_copy_metadata(metadata_ro): m = metadata_ro.metadata m.read() other = ImageMetadata.from_buffer(EMPTY_JPG_DATA) other.read() families = ('exif', 'iptc', 'xmp') for family in families: assert getattr(other, '%s_keys' % family) == [] m.copy(other) for family in ('exif', 'iptc', 'xmp'): assert other._keys[family] is None assert other._tags[family] == {} keys = getattr(m, '%s_keys' % family) assert getattr(other._image, '_%sKeys' % family)() == keys assert getattr(other, '%s_keys' % family) == keys for key in m.exif_keys: assert m[key].value == other[key].value for key in m.iptc_keys: assert m[key].value == other[key].value for key in m.xmp_keys: assert m[key].value == other[key].value assert m.comment == other.comment
def test_not_read_raises(metadata_ro, scratch_directory, suite): # http://bugs.launchpad.net/pyexiv2/+bug/687373 locals = { 'metadata': metadata_ro.metadata, } if 'other' in suite: other = ImageMetadata.from_buffer(EMPTY_JPG_DATA) other.read() locals['other'] = other if 'nonexistent_jpg' in suite: # tempfile.mktemp would actually be safe here because we are # the only process that can write to the scratch_directory, # but then we'd have to suppress warnings. This can be # cleaned up if and when thumb.write_to_file grows the ability # to write to a filelike. fd, pathname = tempfile.mkstemp(dir=scratch_directory, suffix='.jpg') os.close(fd) os.remove(pathname) locals['nonexistent_jpg'] = pathname if 'empty_jpg' in suite: with tempfile.NamedTemporaryFile(dir=scratch_directory, suffix='.jpg', delete=False) as fp: fp.write(EMPTY_JPG_DATA) locals['empty_jpg'] = fp.name with pytest.raises(OSError): exec(suite, {}, locals)
def test_from_modified_buffer(smiley): m1 = metadata_from_buffer(smiley) m1.read() key = 'Exif.Image.ImageDescription' value = 'my kingdom for a semiquaver' m1[key] = value m1.write() m2 = ImageMetadata.from_buffer(m1.buffer) m2.read() assert m2[key].value == value
def test_from_modified_buffer(self): m1 = self._metadata_from_buffer() m1.read() key = 'Exif.Image.ImageDescription' value = 'my kingdom for a semiquaver' m1[key] = value m1.write() m2 = ImageMetadata.from_buffer(m1.buffer) m2.read() self.assertEqual(m2[key].value, value)
def test_from_modified_buffer(self): m1 = self._metadata_from_buffer() m1.read() key = "Exif.Image.ImageDescription" value = "my kingdom for a semiquaver" m1[key] = value m1.write() m2 = ImageMetadata.from_buffer(m1.buffer) m2.read() self.assertEqual(m2[key].value, value)
def test_mutablemapping(): clean = ImageMetadata.from_buffer(EMPTY_JPG_DATA) clean.read() assert len(clean) == 0 assert 'Exif.Image.DateTimeOriginal' not in clean key = 'Exif.Image.DateTimeOriginal' correctDate = datetime.datetime(2007, 3, 11) incorrectDate = datetime.datetime(2009, 3, 25) tag_date = ExifTag(key, correctDate) false_tag_date = ExifTag(key, incorrectDate) clean[key] = tag_date assert len(clean) == 1 assert 'Exif.Image.DateTimeOriginal' in clean assert clean.get('Exif.Image.DateTimeOriginal', false_tag_date) == tag_date assert clean.get('Exif.Image.DateTime', tag_date) == tag_date key = 'Exif.Photo.UserComment' tag = ExifTag(key, 'UserComment') clean[key] = tag key = 'Iptc.Application2.Caption' tag = IptcTag(key, ['Caption']) clean[key] = tag key = 'Xmp.dc.subject' tag = XmpTag(key, ['subject', 'values']) clean[key] = tag assert 'Exif.Photo.UserComment' in clean assert 'Iptc.Application2.Caption' in clean assert 'Xmp.dc.subject' in clean clean.clear() assert len(clean) == 0 assert 'Exif.Photo.UserComment' not in clean assert 'Iptc.Application2.Caption' not in clean assert 'Xmp.dc.subject' not in clean
def _metadata_from_buffer(self): fd = open(self.filepath, 'rb') data = fd.read() fd.close() return ImageMetadata.from_buffer(data)
def _set_up_other(self): self.other = ImageMetadata.from_buffer(EMPTY_JPG_DATA)
def _set_up_clean(self): self.clean = ImageMetadata.from_buffer(EMPTY_JPG_DATA)
def metadata_from_buffer(fi): return ImageMetadata.from_buffer(fi.filedata)
def setUp(self): self.metadata = ImageMetadata.from_buffer(EMPTY_JPG_DATA) self.metadata.read()
def load_image(name, md5sum): fi = load_data_file(name, md5sum) m = ImageMetadata.from_buffer(fi.filedata) m.read() return m
def test_from_original_buffer(smiley): m1 = metadata_from_buffer(smiley) m2 = ImageMetadata.from_buffer(m1.buffer) assert hashlib.md5(m2.buffer).hexdigest() == smiley.md5sum
def test_from_original_buffer(self): m1 = self._metadata_from_buffer() m2 = ImageMetadata.from_buffer(m1.buffer) self.assertEqual(hashlib.md5(m2.buffer).hexdigest(), self.md5sum)
def _metadata_from_buffer(self): fd = open(self.filepath, "rb") data = fd.read() fd.close() return ImageMetadata.from_buffer(data)
def metadata(): m = ImageMetadata.from_buffer(EMPTY_JPG_DATA) m.read() return m