diff options
-rw-r--r-- | bsie/reader/exif.py | 2 | ||||
-rw-r--r-- | bsie/reader/preview/_pillow.py | 2 | ||||
-rw-r--r-- | bsie/utils/errors.py | 2 | ||||
-rw-r--r-- | test/reader/image/test_raw_image.py | 4 | ||||
-rw-r--r-- | test/reader/preview/test_pillow.py | 6 | ||||
-rw-r--r-- | test/reader/test_exif.py | 13 | ||||
-rw-r--r-- | test/reader/testimage_exif_corrupted.jpg | bin | 0 -> 551 bytes |
7 files changed, 21 insertions, 8 deletions
diff --git a/bsie/reader/exif.py b/bsie/reader/exif.py index 8c74462..2d0428b 100644 --- a/bsie/reader/exif.py +++ b/bsie/reader/exif.py @@ -38,7 +38,7 @@ class Exif(base.Reader): img = pyexiv2.Image(path) # read metadata return img.read_exif() - except TypeError as err: + except (TypeError, OSError, RuntimeError) as err: raise errors.ReaderError(path) from err ## EOF ## diff --git a/bsie/reader/preview/_pillow.py b/bsie/reader/preview/_pillow.py index 15c1c6d..2b797c6 100644 --- a/bsie/reader/preview/_pillow.py +++ b/bsie/reader/preview/_pillow.py @@ -33,7 +33,7 @@ class PillowPreviewReader(base.Reader): except PIL.UnidentifiedImageError as err: # failed to open, skip file raise errors.UnsupportedFileFormatError(path) from err - except IOError as err: + except OSError as err: raise errors.ReaderError(path) from err # EOF ## diff --git a/bsie/utils/errors.py b/bsie/utils/errors.py index e71fc60..7c7e6ed 100644 --- a/bsie/utils/errors.py +++ b/bsie/utils/errors.py @@ -38,7 +38,7 @@ class UnreachableError(ProgrammingError): class ParserError(_BSIEError): """Failed to parse due to invalid syntax or structures.""" -class UnsupportedFileFormatError(ReaderError): +class UnsupportedFileFormatError(_BSIEError): """Failed to read a file format.""" ## EOF ## diff --git a/test/reader/image/test_raw_image.py b/test/reader/image/test_raw_image.py index 0a5ed63..3b240d0 100644 --- a/test/reader/image/test_raw_image.py +++ b/test/reader/image/test_raw_image.py @@ -32,10 +32,10 @@ class TestRawImage(unittest.TestCase): #self.assertEqual(img.getdata().getpixel((0, 0)), (0, 0, 0)) img.close() # raises exception when image cannot be read + self.assertRaises(errors.UnsupportedFileFormatError, rdr, + os.path.join(os.path.dirname(__file__), 'testimage.jpg')) self.assertRaises(errors.ReaderError, rdr, os.path.join(os.path.dirname(__file__), 'invalid.nef')) - self.assertRaises(errors.ReaderError, rdr, - os.path.join(os.path.dirname(__file__), 'testimage.jpg')) diff --git a/test/reader/preview/test_pillow.py b/test/reader/preview/test_pillow.py index d213bbb..20f08ec 100644 --- a/test/reader/preview/test_pillow.py +++ b/test/reader/preview/test_pillow.py @@ -20,11 +20,15 @@ class TestPillowPreviewReader(unittest.TestCase): def test_call(self): rdr = PillowPreviewReader() # raises exception when image cannot be read - self.assertRaises(errors.ReaderError, rdr, + self.assertRaises(errors.UnsupportedFileFormatError, rdr, os.path.join(os.path.dirname(__file__), 'invalid.jpg')) + # raises exception when image cannot be read + self.assertRaises(errors.ReaderError, rdr, + os.path.join(os.path.dirname(__file__), 'inexistent.jpg')) # raises exception when image has invalid type self.assertRaises(errors.UnsupportedFileFormatError, rdr, os.path.join(os.path.dirname(__file__), 'invalid.foo')) + # proper file produces a generator gen = rdr(os.path.join(os.path.dirname(__file__), 'testimage.jpg')) self.assertIsInstance(gen, partial) diff --git a/test/reader/test_exif.py b/test/reader/test_exif.py index b2bf843..de6e801 100644 --- a/test/reader/test_exif.py +++ b/test/reader/test_exif.py @@ -3,6 +3,9 @@ import os import unittest +# external imports +import pyexiv2 + # bsie imports from bsie.utils import errors @@ -16,9 +19,15 @@ class TestExif(unittest.TestCase): def test_call(self): rdr = Exif() # discards non-image files - self.assertRaises(errors.UnsupportedFileFormatError, rdr, 'invalid.doc') + self.assertRaises(errors.UnsupportedFileFormatError, rdr, + os.path.join(os.path.dirname(__file__), 'invalid.doc')) + # raises on invalid image files + self.assertRaises(errors.UnsupportedFileFormatError, rdr, + os.path.join(os.path.dirname(__file__), 'invalid.jpg')) # raises on invalid image files - self.assertRaises(errors.ReaderError, rdr, 'invalid.jpg') + pyexiv2.set_log_level(3) # suppress log message + self.assertRaises(errors.ReaderError, rdr, + os.path.join(os.path.dirname(__file__), 'testimage_exif_corrupted.jpg')) # returns dict with exif info self.assertDictEqual(rdr(os.path.join(os.path.dirname(__file__), 'testimage_exif.jpg')), { 'Exif.Image.Artist': 'nobody', diff --git a/test/reader/testimage_exif_corrupted.jpg b/test/reader/testimage_exif_corrupted.jpg Binary files differnew file mode 100644 index 0000000..e51a9dc --- /dev/null +++ b/test/reader/testimage_exif_corrupted.jpg |