コード例 #1
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_string_ascii(self):
        # Valid values: datetimes
        tag = ExifTag("Exif.Image.DateTime")
        self.assertEqual(tag.type, "Ascii")
        self.assertEqual(tag._convert_to_string(datetime.datetime(2009, 03, 01, 12, 54, 28)), "2009:03:01 12:54:28")
        self.assertEqual(tag._convert_to_string(datetime.date(2009, 03, 01)), "2009:03:01 00:00:00")

        # Valid values: dates
        tag = ExifTag("Exif.GPSInfo.GPSDateStamp")
        self.assertEqual(tag.type, "Ascii")
        self.assertEqual(tag._convert_to_string(datetime.date(2009, 03, 01)), "2009:03:01")

        # Valid values: strings
        tag = ExifTag("Exif.Image.Copyright")
        self.assertEqual(tag.type, "Ascii")
        self.assertEqual(tag._convert_to_string(u"Some text"), "Some text")
        self.assertEqual(
            tag._convert_to_string(u"Some text with exotic chàräctérʐ."), "Some text with exotic chàräctérʐ."
        )
        self.assertEqual(
            tag._convert_to_string("Some text with exotic chàräctérʐ."), "Some text with exotic chàräctérʐ."
        )

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, None)
コード例 #2
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_string_undefined(self):
        # Valid values
        tag = ExifTag("Exif.Photo.ExifVersion")
        self.assertEqual(tag.type, "Undefined")
        self.assertEqual(tag._convert_to_string("0100"), "48 49 48 48")
        self.assertEqual(tag._convert_to_string(u"0100"), "48 49 48 48")

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 3)
コード例 #3
0
ファイル: exif.py プロジェクト: AbdealiJK/pyexiv2
    def test_convert_to_string_srational(self):
        # Valid values
        tag = ExifTag('Exif.Image.BaselineExposure')
        self.assertEqual(tag.type, 'SRational')
        self.assertEqual(tag._convert_to_string(make_fraction(5, 3)), '5/3')
        self.assertEqual(tag._convert_to_string(make_fraction(-5, 3)), '-5/3')

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 'invalid')
コード例 #4
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_string_rational(self):
        # Valid values
        tag = ExifTag("Exif.Image.XResolution")
        self.assertEqual(tag.type, "Rational")
        self.assertEqual(tag._convert_to_string(make_fraction(5, 3)), "5/3")

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, "invalid")
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, make_fraction(-5, 3))
コード例 #5
0
ファイル: exif.py プロジェクト: Namejs/workr
 def test_convert_to_python_comment(self):
     # Valid values
     tag = ExifTag("Exif.Photo.UserComment")
     self.assertEqual(tag.type, "Comment")
     self.assertEqual(tag._convert_to_python("A comment"), "A comment")
     for charset in ("Ascii", "Jis", "Unicode", "Undefined", "InvalidCharsetId"):
         self.assertEqual(tag._convert_to_python('charset="%s" A comment' % charset), "A comment")
     for charset in ("Ascii", "Jis", "Undefined", "InvalidCharsetId"):
         self.failIfEqual(tag._convert_to_python('charset="%s" déjà vu' % charset), u"déjà vu")
コード例 #6
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_string_srational(self):
        # Valid values
        tag = ExifTag("Exif.Image.BaselineExposure")
        self.assertEqual(tag.type, "SRational")
        self.assertEqual(tag._convert_to_string(make_fraction(5, 3)), "5/3")
        self.assertEqual(tag._convert_to_string(make_fraction(-5, 3)), "-5/3")

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, "invalid")
コード例 #7
0
ファイル: exif.py プロジェクト: AbdealiJK/pyexiv2
    def test_convert_to_string_sbyte(self):
        # Valid values
        tag = ExifTag('Exif.Pentax.Temperature')
        self.assertEqual(tag.type, 'SByte')
        self.assertEqual(tag._convert_to_string('13'), '13')
        self.assertEqual(tag._convert_to_string(u'13'), '13')

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, None)
コード例 #8
0
ファイル: exif.py プロジェクト: AbdealiJK/pyexiv2
 def test_convert_to_python_comment(self):
     # Valid values
     tag = ExifTag('Exif.Photo.UserComment')
     self.assertEqual(tag.type, 'Comment')
     self.assertEqual(tag._convert_to_python('A comment'), 'A comment')
     for charset in ('Ascii', 'Jis', 'Unicode', 'Undefined', 'InvalidCharsetId'):
         self.assertEqual(tag._convert_to_python('charset="%s" A comment' % charset), 'A comment')
     for charset in ('Ascii', 'Jis', 'Undefined', 'InvalidCharsetId'):
         self.failIfEqual(tag._convert_to_python('charset="%s" déjà vu' % charset), u'déjà vu')
コード例 #9
0
ファイル: exif.py プロジェクト: AbdealiJK/pyexiv2
    def test_convert_to_string_byte(self):
        # Valid values
        tag = ExifTag('Exif.GPSInfo.GPSVersionID')
        self.assertEqual(tag.type, 'Byte')
        self.assertEqual(tag._convert_to_string('Some text'), 'Some text')
        self.assertEqual(tag._convert_to_string(u'Some text'), 'Some text')

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, None)
コード例 #10
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_string_sbyte(self):
        # Valid values
        tag = ExifTag("Exif.Pentax.Temperature")
        self.assertEqual(tag.type, "SByte")
        self.assertEqual(tag._convert_to_string("13"), "13")
        self.assertEqual(tag._convert_to_string(u"13"), "13")

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, None)
コード例 #11
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_string_byte(self):
        # Valid values
        tag = ExifTag("Exif.GPSInfo.GPSVersionID")
        self.assertEqual(tag.type, "Byte")
        self.assertEqual(tag._convert_to_string("Some text"), "Some text")
        self.assertEqual(tag._convert_to_string(u"Some text"), "Some text")

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, None)
コード例 #12
0
ファイル: exif.py プロジェクト: AbdealiJK/pyexiv2
    def test_convert_to_string_undefined(self):
        # Valid values
        tag = ExifTag('Exif.Photo.ExifVersion')
        self.assertEqual(tag.type, 'Undefined')
        self.assertEqual(tag._convert_to_string('0100'), '48 49 48 48')
        self.assertEqual(tag._convert_to_string(u'0100'), '48 49 48 48')

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 3)
コード例 #13
0
ファイル: exif.py プロジェクト: AbdealiJK/pyexiv2
    def test_convert_to_string_sshort(self):
        # Valid values
        tag = ExifTag('Exif.Image.TimeZoneOffset')
        self.assertEqual(tag.type, 'SShort')
        self.assertEqual(tag._convert_to_string(12), '12')
        self.assertEqual(tag._convert_to_string(-3), '-3')

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 'invalid')
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 3.14)
コード例 #14
0
ファイル: exif.py プロジェクト: AbdealiJK/pyexiv2
    def test_convert_to_string_short(self):
        # Valid values
        tag = ExifTag('Exif.Image.BitsPerSample')
        self.assertEqual(tag.type, 'Short')
        self.assertEqual(tag._convert_to_string(123), '123')

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, -57)
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 'invalid')
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 3.14)
コード例 #15
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_string_short(self):
        # Valid values
        tag = ExifTag("Exif.Image.BitsPerSample")
        self.assertEqual(tag.type, "Short")
        self.assertEqual(tag._convert_to_string(123), "123")

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, -57)
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, "invalid")
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 3.14)
コード例 #16
0
ファイル: exif.py プロジェクト: AbdealiJK/pyexiv2
    def test_convert_to_string_rational(self):
        # Valid values
        tag = ExifTag('Exif.Image.XResolution')
        self.assertEqual(tag.type, 'Rational')
        self.assertEqual(tag._convert_to_string(make_fraction(5, 3)), '5/3')

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 'invalid')
        self.failUnlessRaises(ExifValueError,
                              tag._convert_to_string, make_fraction(-5, 3))
コード例 #17
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_string_sshort(self):
        # Valid values
        tag = ExifTag("Exif.Image.TimeZoneOffset")
        self.assertEqual(tag.type, "SShort")
        self.assertEqual(tag._convert_to_string(12), "12")
        self.assertEqual(tag._convert_to_string(-3), "-3")

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, "invalid")
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 3.14)
コード例 #18
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_string_slong(self):
        # Valid values
        tag = ExifTag("Exif.OlympusCs.ManometerReading")
        self.assertEqual(tag.type, "SLong")
        self.assertEqual(tag._convert_to_string(123), "123")
        self.assertEqual(tag._convert_to_string(678024), "678024")
        self.assertEqual(tag._convert_to_string(-437), "-437")

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, "invalid")
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 3.14)
コード例 #19
0
ファイル: metadata.py プロジェクト: Namejs/workr
 def _set_exif_tag(self, key, tag_or_value):
     # Set an EXIF tag. If the tag already exists, its value is overwritten.
     if isinstance(tag_or_value, ExifTag):
         tag = tag_or_value
     else:
         # As a handy shortcut, accept direct value assignment.
         tag = ExifTag(key, tag_or_value)
     tag._set_owner(self)
     self._tags['exif'][tag.key] = tag
     if tag.key not in self.exif_keys:
         self._keys['exif'].append(tag.key)
コード例 #20
0
ファイル: exif.py プロジェクト: AbdealiJK/pyexiv2
    def test_convert_to_string_long(self):
        # Valid values
        tag = ExifTag('Exif.Image.ImageWidth')
        self.assertEqual(tag.type, 'Long')
        self.assertEqual(tag._convert_to_string(123), '123')
        self.assertEqual(tag._convert_to_string(678024), '678024')

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, -57)
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 'invalid')
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 3.14)
コード例 #21
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_string_long(self):
        # Valid values
        tag = ExifTag("Exif.Image.ImageWidth")
        self.assertEqual(tag.type, "Long")
        self.assertEqual(tag._convert_to_string(123), "123")
        self.assertEqual(tag._convert_to_string(678024), "678024")

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, -57)
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, "invalid")
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 3.14)
コード例 #22
0
ファイル: exif.py プロジェクト: AbdealiJK/pyexiv2
    def test_convert_to_python_rational(self):
        # Valid values
        tag = ExifTag('Exif.Image.XResolution')
        self.assertEqual(tag.type, 'Rational')
        self.assertEqual(tag._convert_to_python('5/3'), make_fraction(5, 3))

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, 'invalid')
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, '-5/3')
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, '5 / 3')
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, '5/-3')
コード例 #23
0
ファイル: exif.py プロジェクト: AbdealiJK/pyexiv2
    def test_convert_to_string_slong(self):
        # Valid values
        tag = ExifTag('Exif.OlympusCs.ManometerReading')
        self.assertEqual(tag.type, 'SLong')
        self.assertEqual(tag._convert_to_string(123), '123')
        self.assertEqual(tag._convert_to_string(678024), '678024')
        self.assertEqual(tag._convert_to_string(-437), '-437')

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 'invalid')
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, 3.14)
コード例 #24
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_python_rational(self):
        # Valid values
        tag = ExifTag("Exif.Image.XResolution")
        self.assertEqual(tag.type, "Rational")
        self.assertEqual(tag._convert_to_python("5/3"), make_fraction(5, 3))

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "invalid")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "-5/3")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "5 / 3")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "5/-3")
コード例 #25
0
ファイル: exif.py プロジェクト: AbdealiJK/pyexiv2
    def test_convert_to_python_long(self):
        # Valid values
        tag = ExifTag('Exif.Image.ImageWidth')
        self.assertEqual(tag.type, 'Long')
        self.assertEqual(tag._convert_to_python('8'), 8)
        self.assertEqual(tag._convert_to_python('+5628'), 5628)

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, 'abc')
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, '5,64')
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, '47.0001')
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, '1E3')
コード例 #26
0
ファイル: exif.py プロジェクト: AbdealiJK/pyexiv2
    def test_convert_to_python_short(self):
        # Valid values
        tag = ExifTag('Exif.Image.BitsPerSample')
        self.assertEqual(tag.type, 'Short')
        self.assertEqual(tag._convert_to_python('8'), 8)
        self.assertEqual(tag._convert_to_python('+5628'), 5628)

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, 'abc')
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, '5,64')
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, '47.0001')
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, '1E3')
コード例 #27
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_python_long(self):
        # Valid values
        tag = ExifTag("Exif.Image.ImageWidth")
        self.assertEqual(tag.type, "Long")
        self.assertEqual(tag._convert_to_python("8"), 8)
        self.assertEqual(tag._convert_to_python("+5628"), 5628)

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "abc")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "5,64")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "47.0001")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "1E3")
コード例 #28
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_python_short(self):
        # Valid values
        tag = ExifTag("Exif.Image.BitsPerSample")
        self.assertEqual(tag.type, "Short")
        self.assertEqual(tag._convert_to_python("8"), 8)
        self.assertEqual(tag._convert_to_python("+5628"), 5628)

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "abc")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "5,64")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "47.0001")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "1E3")
コード例 #29
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_python_sshort(self):
        # Valid values
        tag = ExifTag("Exif.Image.TimeZoneOffset")
        self.assertEqual(tag.type, "SShort")
        self.assertEqual(tag._convert_to_python("8"), 8)
        self.assertEqual(tag._convert_to_python("+5"), 5)
        self.assertEqual(tag._convert_to_python("-6"), -6)

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "abc")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "5,64")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "47.0001")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "1E3")
コード例 #30
0
ファイル: exif.py プロジェクト: Namejs/workr
    def test_convert_to_python_slong(self):
        # Valid values
        tag = ExifTag("Exif.OlympusCs.ManometerReading")
        self.assertEqual(tag.type, "SLong")
        self.assertEqual(tag._convert_to_python("23"), 23)
        self.assertEqual(tag._convert_to_python("+5628"), 5628)
        self.assertEqual(tag._convert_to_python("-437"), -437)

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "abc")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "5,64")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "47.0001")
        self.failUnlessRaises(ExifValueError, tag._convert_to_python, "1E3")
コード例 #31
0
ファイル: metadata.py プロジェクト: fdenivac/py3exiv2
    def _set_exif_tag(self, key, tag_or_value):
        """Set an EXIF tag. If the tag already exists, its value is overwritten.

        Args:
        key -- the EXIF key
        tag_or_value -- an ExifTag instance or the value of the data
        """
        if isinstance(tag_or_value, ExifTag):
            tag = tag_or_value

        else:
            # As a handy shortcut, accept direct value assignment.
            tag = ExifTag(key, tag_or_value)

        tag._set_owner(self)
        self._tags['exif'][tag.key] = tag
        if tag.key not in self.exif_keys:
            self._keys['exif'].append(tag.key)
コード例 #32
0
 def _get_exif_tag(self, key):
     # Return the EXIF tag for the given key.
     # Throw a KeyError if the tag doesn't exist.
     try:
         return self._tags['exif'][key]
     except KeyError:
         _tag = self._image._getExifTag(key)
         tag = ExifTag._from_existing_tag(_tag)
         self._tags['exif'][key] = tag
         return tag
コード例 #33
0
    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, 3, 11)
        incorrectDate = datetime.datetime(2009, 3, 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)
コード例 #34
0
ファイル: test_metadata.py プロジェクト: Czaki/cyexiv2
def test_set_exif_tag_overwrite(metadata_ro):
    m = metadata_ro.metadata
    m.read()
    assert m._tags['exif'] == {}
    # Overwrite an existing tag
    tag = ExifTag('Exif.Image.DateTime',
                  datetime.datetime(2009, 3, 20, 20, 32, 0))
    m._set_exif_tag(tag.key, tag)
    assert m._tags['exif'] == {tag.key: tag}
    assert tag.key in m._image._exifKeys()
    assert (m._image._getExifTag(
        tag.key)._getRawValue().decode('ascii') == tag.raw_value)
コード例 #35
0
 def test_set_exif_tag_overwrite(self):
     self.metadata.read()
     self.assertEqual(self.metadata._tags['exif'], {})
     # Overwrite an existing tag
     tag = ExifTag('Exif.Image.DateTime',
                   datetime.datetime(2009, 3, 20, 20, 32, 0))
     self.metadata._set_exif_tag(tag.key, tag)
     self.assertEqual(self.metadata._tags['exif'], {tag.key: tag})
     self.assert_(tag.key in self.metadata._image._exifKeys())
     self.assertEqual(
         self.metadata._image._getExifTag(tag.key)._getRawValue(),
         tag.raw_value)
コード例 #36
0
    def test_makernote_types(self):
        # Makernote tags not attached to an image have an Undefined type by
        # default. When read from an existing image though, their type should be
        # correctly set (see https://bugs.launchpad.net/pyexiv2/+bug/781464).
        tag1 = ExifTag('Exif.Pentax.PreviewResolution')
        tag1.raw_value = '640 480'
        self.assertEqual(tag1.type, 'Undefined')
        self.failUnlessRaises(ValueError, getattr, tag1, 'value')
        tag2 = ExifTag('Exif.Pentax.CameraInfo')
        tag2.raw_value = '76830 20070527 2 1 4228109'
        self.assertEqual(tag2.type, 'Undefined')
        self.failUnlessRaises(ValueError, getattr, tag2, 'value')

        filepath = testutils.get_absolute_file_path(
            os.path.join('data', 'pentax-makernote.jpg'))
        checksum = '646804b309a4a2d31feafe9bffc5d7f0'
        self.assert_(testutils.CheckFileSum(filepath, checksum))
        metadata = ImageMetadata(filepath)
        metadata.read()
        tag1 = metadata[tag1.key]
        self.assertEqual(tag1.type, 'Short')
        self.assertEqual(tag1.value, [640, 480])
        tag2 = metadata[tag2.key]
        self.assertEqual(tag2.type, 'Long')
        self.assertEqual(tag2.value, [76830L, 20070527L, 2L, 1L, 4228109L])
コード例 #37
0
ファイル: test_metadata.py プロジェクト: Czaki/cyexiv2
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
コード例 #38
0
ファイル: test_metadata.py プロジェクト: Czaki/cyexiv2
def test_set_exif_tag_create(metadata_ro):
    m = metadata_ro.metadata
    m.read()
    assert m._tags['exif'] == {}
    # Create a new tag
    tag = ExifTag('Exif.Thumbnail.Orientation', 1)
    assert tag.key not in m.exif_keys
    m._set_exif_tag(tag.key, tag)
    assert tag.key in m.exif_keys
    assert m._tags['exif'] == {tag.key: tag}
    assert tag.key in m._image._exifKeys()
    assert (m._image._getExifTag(
        tag.key)._getRawValue().decode('ascii') == tag.raw_value)
コード例 #39
0
 def test_set_exif_tag_create(self):
     self.metadata.read()
     self.assertEqual(self.metadata._tags['exif'], {})
     # Create a new tag
     tag = ExifTag('Exif.Thumbnail.Orientation', 1)
     self.assert_(tag.key not in self.metadata.exif_keys)
     self.metadata._set_exif_tag(tag.key, tag)
     self.assert_(tag.key in self.metadata.exif_keys)
     self.assertEqual(self.metadata._tags['exif'], {tag.key: tag})
     self.assert_(tag.key in self.metadata._image._exifKeys())
     self.assertEqual(
         self.metadata._image._getExifTag(tag.key)._getRawValue(),
         tag.raw_value)
コード例 #40
0
 def test_set_exif_tag_overwrite_already_cached(self):
     self.metadata.read()
     self.assertEqual(self.metadata._tags['exif'], {})
     # Overwrite an existing tag already cached
     key = 'Exif.Image.Make'
     tag = self.metadata._get_exif_tag(key)
     self.assertEqual(self.metadata._tags['exif'][key], tag)
     new_tag = ExifTag(key, 'World Company')
     self.metadata._set_exif_tag(key, new_tag)
     self.assertEqual(self.metadata._tags['exif'], {key: new_tag})
     self.assert_(key in self.metadata._image._exifKeys())
     self.assertEqual(
         self.metadata._image._getExifTag(key)._getRawValue(),
         new_tag.raw_value)
コード例 #41
0
ファイル: test_metadata.py プロジェクト: Czaki/cyexiv2
def test_set_exif_tag_overwrite_already_cached(metadata_ro):
    m = metadata_ro.metadata
    m.read()
    assert m._tags['exif'] == {}
    # Overwrite an existing tag already cached
    key = 'Exif.Image.Make'
    tag = m._get_exif_tag(key)
    assert m._tags['exif'][key] == tag
    new_tag = ExifTag(key, 'World Company')
    m._set_exif_tag(key, new_tag)
    assert m._tags['exif'] == {key: new_tag}
    assert key in m._image._exifKeys()
    assert (m._image._getExifTag(key)._getRawValue().decode('ascii') ==
            new_tag.raw_value)
コード例 #42
0
ファイル: exif.py プロジェクト: mcmclx/py3exiv2
 def test_convert_to_string_comment(self):
     # Valid values
     tag = ExifTag('Exif.Photo.UserComment')
     self.assertEqual(tag.type, 'Comment')
     self.assertEqual(tag._convert_to_string('A comment'), b'A comment')
     charsets = ('Ascii', 'Jis', 'Unicode', 'Undefined')
     for charset in charsets:
         tag.raw_value = 'charset="%s" foo' % charset
         self.assertEqual(tag._convert_to_string('A comment'), b'A comment')
         self.assertEqual(tag._convert_to_string('déjà vu'),
                          b'd\xc3\xa9j\xc3\xa0 vu')
コード例 #43
0
    def test_convert_to_string_comment(self):
        # Valid values
        tag = ExifTag('Exif.Photo.UserComment')
        self.assertEqual(tag.type, 'Comment')
        self.assertEqual(tag._convert_to_string('A comment'), 'A comment')
        self.assertEqual(tag._convert_to_string(u'A comment'), 'A comment')
        charsets = ('Ascii', 'Jis', 'Unicode', 'Undefined')
        for charset in charsets:
            tag.raw_value = 'charset="%s" foo' % charset
            self.assertEqual(tag._convert_to_string('A comment'),
                             'charset="%s" A comment' % charset)
            self.assertEqual(tag._convert_to_string('déjà vu'), 'déjà vu')

        # Invalid values
        self.failUnlessRaises(ExifValueError, tag._convert_to_string, None)
コード例 #44
0
def test_makernote_types():
    # Makernote tags not attached to an image have an Undefined type by
    # default. When read from an existing image though, their type should
    # be correctly set.
    # See <https://bugs.launchpad.net/pyexiv2/+bug/781464>.
    tag1 = ExifTag('Exif.Pentax.PreviewResolution')
    tag1.raw_value = '640 480'
    assert tag1.type == 'Undefined'

    tag2 = ExifTag('Exif.Pentax.CameraInfo')
    tag2.raw_value = '76830 20070527 2 1 4228109'
    assert tag2.type == 'Undefined'
    with pytest.raises(ValueError):
        tag2.value

    metadata = load_image('pentax-makernote.jpg',
                          '646804b309a4a2d31feafe9bffc5d7f0')
    tag1 = metadata[tag1.key]
    assert tag1.type == 'Short'
    assert tag1.value == [640, 480]

    tag2 = metadata[tag2.key]
    assert tag2.type == 'Long'
    assert tag2.value == [76830, 20070527, 2, 1, 4228109]
コード例 #45
0
def test_set_value():
    tag = ExifTag('Exif.Thumbnail.Orientation', 1)  # top, left
    old_value = tag.value
    tag.value = 2
    assert tag.value != old_value
コード例 #46
0
def test_set_raw_value_invalid():
    tag = ExifTag('Exif.GPSInfo.GPSVersionID')
    with pytest.raises(ValueError):
        tag.raw_value = '2 0 0 foo'
コード例 #47
0
ファイル: exif.py プロジェクト: mcmclx/py3exiv2
    def test_convert_to_python_ascii(self):
        # Valid values: datetimes
        tag = ExifTag('Exif.Image.DateTime')
        self.assertEqual(tag.type, 'Ascii')
        self.assertEqual(tag._convert_to_python('2009-03-01 12:46:51'),
                         datetime.datetime(2009, 3, 1, 12, 46, 51))
        self.assertEqual(tag._convert_to_python('2009:03:01 12:46:51'),
                         datetime.datetime(2009, 3, 1, 12, 46, 51))
        self.assertEqual(tag._convert_to_python('2009-03-01T12:46:51Z'),
                         datetime.datetime(2009, 3, 1, 12, 46, 51))

        # Valid values: dates
        tag = ExifTag('Exif.GPSInfo.GPSDateStamp')
        self.assertEqual(tag.type, 'Ascii')
        self.assertEqual(tag._convert_to_python('2009:08:04'),
                         datetime.date(2009, 8, 4))

        # Valid values: strings
        tag = ExifTag('Exif.Image.Copyright')
        self.assertEqual(tag.type, 'Ascii')
        self.assertEqual(tag._convert_to_python('Some text.'), 'Some text.')
        self.assertEqual(
            tag._convert_to_python('Some text with exotic chàräctérʐ.'),
            'Some text with exotic chàräctérʐ.')

        # Invalid values: datetimes
        tag = ExifTag('Exif.Image.DateTime')
        self.assertEqual(tag.type, 'Ascii')
        self.assertEqual(tag._convert_to_python('2009-13-01 12:46:51'),
                         '2009-13-01 12:46:51')
        self.assertEqual(tag._convert_to_python('2009-12-01'), '2009-12-01')

        # Invalid values: dates
        tag = ExifTag('Exif.GPSInfo.GPSDateStamp')
        self.assertEqual(tag.type, 'Ascii')
        self.assertEqual(tag._convert_to_python('2009:13:01'), '2009:13:01')
        self.assertEqual(tag._convert_to_python('2009-12-01'), '2009-12-01')
コード例 #48
0
ファイル: exif.py プロジェクト: mcmclx/py3exiv2
 def test_convert_to_python_sbyte(self):
     # Valid values
     tag = ExifTag('Exif.Pentax.Temperature')
     self.assertEqual(tag.type, 'SByte')
     self.assertEqual(tag._convert_to_python('15'), '15')
コード例 #49
0
ファイル: exif.py プロジェクト: mcmclx/py3exiv2
 def test_convert_to_python_undefined(self):
     # Valid values
     tag = ExifTag('Exif.Photo.ExifVersion')
     self.assertEqual(tag.type, 'Undefined')
     self.assertEqual(tag._convert_to_python('48 49 48 48'), '0100')
コード例 #50
0
ファイル: exif.py プロジェクト: mcmclx/py3exiv2
 def test_set_value(self):
     tag = ExifTag('Exif.Thumbnail.Orientation', 1)  # top, left
     old_value = tag.value
     tag.value = 2
     self.failIfEqual(tag.value, old_value)
コード例 #51
0
ファイル: exif.py プロジェクト: mcmclx/py3exiv2
 def test_set_raw_value_invalid(self):
     tag = ExifTag('Exif.GPSInfo.GPSVersionID')
     value = '2 0 0 foo'
     self.failUnlessRaises(ValueError, setattr, tag, 'raw_value', value)
コード例 #52
0
ファイル: exif.py プロジェクト: mcmclx/py3exiv2
 def test_convert_to_python_byte(self):
     # Valid values
     tag = ExifTag('Exif.GPSInfo.GPSVersionID')
     self.assertEqual(tag.type, 'Byte')
     self.assertEqual(tag._convert_to_python('D'), 'D')
コード例 #53
0
ファイル: exif.py プロジェクト: mcmclx/py3exiv2
    def test_convert_to_string_ascii(self):
        # Valid values: datetimes
        tag = ExifTag('Exif.Image.DateTime')
        self.assertEqual(tag.type, 'Ascii')
        self.assertEqual(
            tag._convert_to_string(datetime.datetime(2009, 3, 1, 12, 54, 28)),
            '2009:03:01 12:54:28')
        self.assertEqual(tag._convert_to_string(datetime.date(2009, 3, 1)),
                         '2009:03:01 00:00:00')
        self.assertEqual(
            tag._convert_to_string(datetime.datetime(1899, 12, 31, 23, 59,
                                                     59)),
            '1899:12:31 23:59:59')
        self.assertEqual(tag._convert_to_string(datetime.date(1899, 12, 31)),
                         '1899:12:31 00:00:00')

        # Valid values: dates
        tag = ExifTag('Exif.GPSInfo.GPSDateStamp')
        self.assertEqual(tag.type, 'Ascii')
        self.assertEqual(tag._convert_to_string(datetime.date(2009, 3, 1)),
                         '2009:03:01')
        self.assertEqual(tag._convert_to_string(datetime.date(1899, 12, 31)),
                         '1899:12:31')

        # Valid values: strings
        tag = ExifTag('Exif.Image.Copyright')
        self.assertEqual(tag.type, 'Ascii')
        self.assertEqual(tag._convert_to_string('Some text'), 'Some text')
        self.assertEqual(
            tag._convert_to_string('Some text with exotic chàräctérʐ.'),
            'Some text with exotic chàräctérʐ.')
コード例 #54
0
 def test_pickle_exif_tag(self):
     tags = []
     tags.append(ExifTag('Exif.Image.DateTime',
                         datetime.datetime(2010, 12, 22, 19, 21, 0)))
     tags.append(ExifTag('Exif.GPSInfo.GPSDateStamp', datetime.date.today()))
     tags.append(ExifTag('Exif.Image.Copyright', '(C) 2010 Santa Claus'))
     tags.append(ExifTag('Exif.GPSInfo.GPSVersionID', '0'))
     tags.append(ExifTag('Exif.Pentax.Temperature', '14'))
     tags.append(ExifTag('Exif.Photo.UserComment', 'foo bar baz'))
     tags.append(ExifTag('Exif.Image.BitsPerSample', 8))
     tags.append(ExifTag('Exif.Image.TimeZoneOffset', 7))
     tags.append(ExifTag('Exif.Image.ImageWidth', 7492))
     tags.append(ExifTag('Exif.OlympusCs.ManometerReading', 29))
     tags.append(ExifTag('Exif.Image.XResolution', make_fraction(7, 3)))
     tags.append(ExifTag('Exif.Image.BaselineExposure', make_fraction(-7, 3)))
     tags.append(ExifTag('Exif.Photo.ExifVersion', '0100'))
     for tag in tags:
         s = pickle.dumps(tag)
         t = pickle.loads(s)
         self.assert_(isinstance(t, ExifTag))
         self.assertEqual(t.key, tag.key)
         self.assertEqual(t.type, tag.type)
         self.assertEqual(t.name, tag.name)
         self.assertEqual(t.label, tag.label)
         self.assertEqual(t.description, tag.description)
         self.assertEqual(t.section_name, tag.section_name)
         self.assertEqual(t.section_description, tag.section_description)
         self.assertEqual(t.raw_value, tag.raw_value)
         self.assertEqual(t.value, tag.value)
         self.assertEqual(t.human_value, tag.human_value)