From ec9105b690974b0246e36769506e735c4edf069a Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Wed, 1 Mar 2023 21:38:09 +0100 Subject: Exif data reader and extractor --- bsie/reader/exif.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 bsie/reader/exif.py (limited to 'bsie/reader/exif.py') diff --git a/bsie/reader/exif.py b/bsie/reader/exif.py new file mode 100644 index 0000000..e087bec --- /dev/null +++ b/bsie/reader/exif.py @@ -0,0 +1,49 @@ +""" + +Part of the bsie module. +A copy of the license is provided with the project. +Author: Matthias Baumgartner, 2022 +""" +# standard imports +import typing + +# external imports +import pyexiv2 + +# bsie imports +from bsie.utils import errors, filematcher + +# inner-module imports +from . import base + +# constants +MATCH_RULE = 'mime=image/jpeg' + +# exports +__all__: typing.Sequence[str] = ( + 'Exif', + ) + + +## code ## + +class Exif(base.Reader): + """Use pyexiv2 to read exif metadata from image files.""" + + def __init__(self): + self._match = filematcher.parse(MATCH_RULE) + + def __call__(self, path: str) -> dict: + # perform quick checks first + if not self._match(path): + raise errors.UnsupportedFileFormatError(path) + + try: + # open the file + img = pyexiv2.Image(path) + # read metadata + return img.read_exif() + except TypeError as err: + raise errors.ReaderError(path) from err + +## EOF ## -- cgit v1.2.3 From 4b5c4d486bb4f0f4da2e25ad464e8336a781cdcb Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Wed, 1 Mar 2023 22:31:03 +0100 Subject: removed module header stubs --- bsie/reader/exif.py | 5 ----- 1 file changed, 5 deletions(-) (limited to 'bsie/reader/exif.py') diff --git a/bsie/reader/exif.py b/bsie/reader/exif.py index e087bec..8c74462 100644 --- a/bsie/reader/exif.py +++ b/bsie/reader/exif.py @@ -1,9 +1,4 @@ -""" -Part of the bsie module. -A copy of the license is provided with the project. -Author: Matthias Baumgartner, 2022 -""" # standard imports import typing -- cgit v1.2.3 From 70d77819a84c73292825b81f952e162bb30753d7 Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Thu, 2 Mar 2023 08:56:57 +0100 Subject: reader error: untangle generic from unsupported format errors --- bsie/reader/exif.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bsie/reader/exif.py') 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 ## -- cgit v1.2.3