diff options
-rw-r--r-- | src/pyexiv2.py | 18 | ||||
-rw-r--r-- | unittest/exif.py | 13 |
2 files changed, 27 insertions, 4 deletions
diff --git a/src/pyexiv2.py b/src/pyexiv2.py index fbb638c..ccef9b4 100644 --- a/src/pyexiv2.py +++ b/src/pyexiv2.py @@ -474,6 +474,9 @@ class ExifTag(MetadataTag): except TypeError: raise ExifValueError(value, xtype) + elif xtype == 'Byte': + return value + elif xtype == 'Short': try: return int(value) @@ -502,8 +505,6 @@ class ExifTag(MetadataTag): except TypeError: raise ExifValueError(fvalue, xtype) - # TODO: other types - raise ExifValueError(value, xtype) @staticmethod @@ -536,6 +537,17 @@ class ExifTag(MetadataTag): else: raise ExifValueError(value, xtype) + elif xtype == 'Byte': + if type(value) is unicode: + try: + return value.encode('utf-8') + except UnicodeEncodeError: + raise ExifValueError(value, xtype) + elif type(value) is str: + return value + else: + raise ExifValueError(value, xtype) + elif xtype == 'Short': if type(value) is int and value >= 0: return str(value) @@ -577,8 +589,6 @@ class ExifTag(MetadataTag): else: raise ExifValueError(value, xtype) - # TODO: other types - raise ExifValueError(value, xtype) def __str__(self): diff --git a/unittest/exif.py b/unittest/exif.py index 419b2dd..a398b27 100644 --- a/unittest/exif.py +++ b/unittest/exif.py @@ -66,6 +66,19 @@ class TestExifTag(unittest.TestCase): # Invalid values self.failUnlessRaises(ExifValueError, ExifTag._convert_to_string, None, xtype) + def test_convert_to_python_byte(self): + xtype = 'Byte' + # Valid values + self.assertEqual(ExifTag._convert_to_python('Some text', xtype, None), 'Some text') + + def test_convert_to_string_byte(self): + xtype = 'Byte' + # Valid values + self.assertEqual(ExifTag._convert_to_string('Some text', xtype), 'Some text') + self.assertEqual(ExifTag._convert_to_string(u'Some text', xtype), 'Some text') + # Invalid values + self.failUnlessRaises(ExifValueError, ExifTag._convert_to_string, None, xtype) + def test_convert_to_python_short(self): xtype = 'Short' # Valid values |