From 17f03ae3d3dc53fe973f37fe4dea4a831b4f97d7 Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Sat, 24 Dec 2022 16:06:16 +0100 Subject: ReaderChain and image reader --- bsie/reader/image/_raw.py | 61 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 bsie/reader/image/_raw.py (limited to 'bsie/reader/image/_raw.py') diff --git a/bsie/reader/image/_raw.py b/bsie/reader/image/_raw.py new file mode 100644 index 0000000..77be357 --- /dev/null +++ b/bsie/reader/image/_raw.py @@ -0,0 +1,61 @@ +""" + +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 PIL.Image +import rawpy + +# bsie imports +from bsie.utils import errors, filematcher + +# inner-module imports +from .. import base + +# constants +MATCH_RULE = 'mime={image/x-nikon-nef} | extension={nef}' + +# exports +__all__: typing.Sequence[str] = ( + 'RawImage', + ) + + +## code ## + +class RawImage(base.Reader): + """Use rawpy to read content of raw image file types.""" + + # file matcher + match: filematcher.Matcher + + # additional kwargs to rawpy's postprocess + rawpy_kwargs: typing.Dict[str, typing.Any] + + def __init__(self, **rawpy_kwargs): + match_rule = rawpy_kwargs.pop('file_match_rule', MATCH_RULE) + self._match = filematcher.parse(match_rule) + self._rawpy_kwargs = rawpy_kwargs + + def __call__(self, path: str) -> PIL.Image: + # perform quick checks first + if not self._match(path): + raise errors.ReaderError(path) + + try: + # open file with rawpy + ary = rawpy.imread(path).postprocess(**self._rawpy_kwargs) + # convert to PIL.Image + return PIL.Image.fromarray(ary) + except (rawpy.LibRawFatalError, # pylint: disable=no-member # pylint doesn't find the errors + rawpy.NotSupportedError, # pylint: disable=no-member + rawpy.LibRawNonFatalError, # pylint: disable=no-member + ) as err: + raise errors.ReaderError(path) from err + +## EOF ## -- cgit v1.2.3 From afd165000c1661a9cca117a4844ad3f89d926fdb Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Mon, 16 Jan 2023 20:53:39 +0100 Subject: unsupported file format exception --- bsie/reader/image/_raw.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bsie/reader/image/_raw.py') diff --git a/bsie/reader/image/_raw.py b/bsie/reader/image/_raw.py index 77be357..cd60453 100644 --- a/bsie/reader/image/_raw.py +++ b/bsie/reader/image/_raw.py @@ -45,7 +45,7 @@ class RawImage(base.Reader): def __call__(self, path: str) -> PIL.Image: # perform quick checks first if not self._match(path): - raise errors.ReaderError(path) + raise errors.UnsupportedFileFormatError(path) try: # open file with rawpy -- cgit v1.2.3 From 0d0144466919cfb168e75c2af26d5cb74e10bfa0 Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Wed, 8 Feb 2023 19:24:37 +0100 Subject: minor cleanup --- bsie/reader/image/_raw.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'bsie/reader/image/_raw.py') diff --git a/bsie/reader/image/_raw.py b/bsie/reader/image/_raw.py index cd60453..257fdb3 100644 --- a/bsie/reader/image/_raw.py +++ b/bsie/reader/image/_raw.py @@ -32,17 +32,17 @@ class RawImage(base.Reader): """Use rawpy to read content of raw image file types.""" # file matcher - match: filematcher.Matcher + _match: filematcher.Matcher # additional kwargs to rawpy's postprocess - rawpy_kwargs: typing.Dict[str, typing.Any] + _rawpy_kwargs: typing.Dict[str, typing.Any] def __init__(self, **rawpy_kwargs): match_rule = rawpy_kwargs.pop('file_match_rule', MATCH_RULE) self._match = filematcher.parse(match_rule) self._rawpy_kwargs = rawpy_kwargs - def __call__(self, path: str) -> PIL.Image: + def __call__(self, path: str) -> PIL.Image.Image: # perform quick checks first if not self._match(path): raise errors.UnsupportedFileFormatError(path) -- 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/image/_raw.py | 5 ----- 1 file changed, 5 deletions(-) (limited to 'bsie/reader/image/_raw.py') diff --git a/bsie/reader/image/_raw.py b/bsie/reader/image/_raw.py index 257fdb3..e5745aa 100644 --- a/bsie/reader/image/_raw.py +++ b/bsie/reader/image/_raw.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