diff options
author | James R. Barlow <james@purplerock.ca> | 2022-06-21 14:28:40 -0700 |
---|---|---|
committer | James R. Barlow <james@purplerock.ca> | 2022-06-21 14:28:40 -0700 |
commit | 49133de4574a3d21c6b363e345d2662854bd2027 (patch) | |
tree | 427b82b34871871e046e66c038153bf140cc82e9 | |
parent | ac4d41eeec704cb5c92ad29c8f51a2bd09e9c6c6 (diff) |
Delinting pass
-rw-r--r-- | .pre-commit-config.yaml | 1 | ||||
-rw-r--r-- | pyproject.toml | 6 | ||||
-rw-r--r-- | src/pikepdf/_methods.py | 29 | ||||
-rw-r--r-- | src/pikepdf/models/_content_stream.py | 3 | ||||
-rw-r--r-- | src/pikepdf/models/encryption.py | 17 | ||||
-rw-r--r-- | src/pikepdf/models/image.py | 27 | ||||
-rw-r--r-- | src/pikepdf/models/metadata.py | 20 | ||||
-rw-r--r-- | src/pikepdf/objects.py | 3 | ||||
-rw-r--r-- | tests/test_image_access.py | 3 |
9 files changed, 56 insertions, 53 deletions
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bd053ca..3ea8872 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -36,4 +36,3 @@ repos: - types-Pillow - types-requests - types-setuptools - - types-toml diff --git a/pyproject.toml b/pyproject.toml index 5927a20..be25e31 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -81,6 +81,10 @@ skip = "pp3*" [tool.mypy] +[[tool.mypy.overrides]] +module = ["deprecation"] +ignore_missing_imports = true + [tool.pytest.ini_options] minversion = "6.0" norecursedirs = ["lib", ".pc", ".git", "venv"] @@ -377,7 +381,7 @@ max-returns = 6 max-statements = 50 # Minimum number of public methods for a class (see R0903). -min-public-methods = 2 +min-public-methods = 1 [tool.pylint.exceptions] # Exceptions that will emit a warning when caught. diff --git a/src/pikepdf/_methods.py b/src/pikepdf/_methods.py index dcd00a8..fab9008 100644 --- a/src/pikepdf/_methods.py +++ b/src/pikepdf/_methods.py @@ -265,10 +265,10 @@ class Extend_Object: for k in del_keys: del self[k] # pylint: disable=unsupported-delete-operation - def _type_check_write(self, filter, decode_parms): - if isinstance(filter, list): - filter = Array(filter) - filter = filter.wrap_in_array() + def _type_check_write(self, filter_, decode_parms): + if isinstance(filter_, list): + filter_ = Array(filter_) + filter_ = filter_.wrap_in_array() if isinstance(decode_parms, list): decode_parms = Array(decode_parms) @@ -277,7 +277,7 @@ class Extend_Object: else: decode_parms = decode_parms.wrap_in_array() - if not all(isinstance(item, Name) for item in filter): + if not all(isinstance(item, Name) for item in filter_): raise TypeError( "filter must be: pikepdf.Name or pikepdf.Array([pikepdf.Name])" ) @@ -288,18 +288,18 @@ class Extend_Object: "decode_parms must be: pikepdf.Dictionary or " "pikepdf.Array([pikepdf.Dictionary])" ) - if len(decode_parms) != 0 and len(filter) != len(decode_parms): + if len(decode_parms) != 0 and len(filter_) != len(decode_parms): raise ValueError( - f"filter ({repr(filter)}) and decode_parms " + f"filter ({repr(filter_)}) and decode_parms " f"({repr(decode_parms)}) must be arrays of same length" ) - if len(filter) == 1: - filter = filter[0] + if len(filter_) == 1: + filter_ = filter_[0] if len(decode_parms) == 0: decode_parms = None elif len(decode_parms) == 1: decode_parms = decode_parms[0] - return filter, decode_parms + return filter_, decode_parms def write( self, @@ -1243,13 +1243,15 @@ class Extend_Page: @augment_override_cpp def __setattr__(self, name, value): if hasattr(self.__class__, name): - return object.__setattr__(self, name, value) + object.__setattr__(self, name, value) + return setattr(self.obj, name, value) @augment_override_cpp def __delattr__(self, name): if hasattr(self.__class__, name): - return object.__delattr__(self, name) + object.__delattr__(self, name) + return delattr(self.obj, name) def __getitem__(self, key): @@ -1385,8 +1387,7 @@ class Extend_AttachedFileSpec: f"<pikepdf._qpdf.AttachedFileSpec for {self.filename!r}, " f"description {self.description!r}>" ) - else: - return f"<pikepdf._qpdf.AttachedFileSpec description {self.description!r}>" + return f"<pikepdf._qpdf.AttachedFileSpec description {self.description!r}>" @augments(AttachedFile) diff --git a/src/pikepdf/models/_content_stream.py b/src/pikepdf/models/_content_stream.py index 73784c3..88d4d0a 100644 --- a/src/pikepdf/models/_content_stream.py +++ b/src/pikepdf/models/_content_stream.py @@ -103,8 +103,7 @@ def parse_content_stream( except PdfError as e: if 'supposed to be a stream or an array' in str(e): raise TypeError("parse_content_stream called on non-stream Object") from e - else: - raise e from e + raise e from e return instructions diff --git a/src/pikepdf/models/encryption.py b/src/pikepdf/models/encryption.py index 4b5d2a2..c0d7777 100644 --- a/src/pikepdf/models/encryption.py +++ b/src/pikepdf/models/encryption.py @@ -5,14 +5,15 @@ # Copyright (C) 2017, James R. Barlow (https://github.com/jbarlow83/) import sys -from typing import Any, Dict, NamedTuple, cast +from typing import TYPE_CHECKING, Any, Dict, NamedTuple, cast if sys.version_info >= (3, 8): from typing import Literal else: from typing_extensions import Literal -from pikepdf._qpdf import EncryptionMethod +if TYPE_CHECKING: + from pikepdf._qpdf import EncryptionMethod class Permissions(NamedTuple): @@ -89,19 +90,19 @@ class EncryptionInfo: return int(self._encdict['P']) @property - def stream_method(self) -> EncryptionMethod: + def stream_method(self) -> 'EncryptionMethod': """Encryption method used to encode streams.""" - return cast(EncryptionMethod, self._encdict['stream']) + return cast('EncryptionMethod', self._encdict['stream']) @property - def string_method(self) -> EncryptionMethod: + def string_method(self) -> 'EncryptionMethod': """Encryption method used to encode strings.""" - return cast(EncryptionMethod, self._encdict['string']) + return cast('EncryptionMethod', self._encdict['string']) @property - def file_method(self) -> EncryptionMethod: + def file_method(self) -> 'EncryptionMethod': """Encryption method used to encode the whole file.""" - return cast(EncryptionMethod, self._encdict['file']) + return cast('EncryptionMethod', self._encdict['file']) @property def user_password(self) -> bytes: diff --git a/src/pikepdf/models/image.py b/src/pikepdf/models/image.py index 2055898..bf5b727 100644 --- a/src/pikepdf/models/image.py +++ b/src/pikepdf/models/image.py @@ -68,14 +68,13 @@ def array_str(value: Union[Object, str, list]): def _array_str(item): if isinstance(item, (list, Array)): return [_array_str(subitem) for subitem in item] - elif isinstance(item, (Stream, Dictionary, bytes, int)): + if isinstance(item, (Stream, Dictionary, bytes, int)): return item - elif isinstance(item, (Name, str)): + if isinstance(item, (Name, str)): return str(item) - elif isinstance(item, (String)): + if isinstance(item, (String)): return bytes(item) - else: - raise NotImplementedError(value) + raise NotImplementedError(value) result = _array_str(value) if not isinstance(result, list): @@ -89,7 +88,7 @@ def dict_or_array_dict(value): if isinstance(value, Dictionary): return [value.as_dict()] if isinstance(value, Array): - return [v for v in value.as_list()] + return list(value.as_list()) raise NotImplementedError(value) @@ -523,7 +522,7 @@ class PdfImage(PdfImageBase): stream.write(self._generate_ccitt_header(data, icc=icc)) stream.write(data) return '.tif' - elif filters == ['/DCTDecode'] and ( + if filters == ['/DCTDecode'] and ( self.mode == 'L' or normal_dct_rgb() or normal_dct_cmyk() ): stream.write(data) @@ -635,7 +634,7 @@ class PdfImage(PdfImageBase): if im.mode == 'CMYK': im.save(stream, format='tiff', compression='tiff_adobe_deflate') return '.tiff' - elif im: + if im: im.save(stream, format='png') return '.png' except PdfError as e: @@ -814,7 +813,7 @@ class PdfJpxImage(PdfImage): return super_colorspaces if self._jpxpil.mode == 'L': return ['/DeviceGray'] - elif self._jpxpil.mode == 'RGB': + if self._jpxpil.mode == 'RGB': return ['/DeviceRGB'] raise NotImplementedError('Complex JP2 colorspace') @@ -908,14 +907,12 @@ class PdfInlineImage(PdfImageBase): name = obj.unparse(resolved=True) assert isinstance(name, bytes) return remap_names.get(name, name) - else: - return obj.unparse(resolved=True) - elif isinstance(obj, bool): + return obj.unparse(resolved=True) + if isinstance(obj, bool): return b'true' if obj else b'false' # Lower case for PDF spec - elif isinstance(obj, (int, Decimal, float)): + if isinstance(obj, (int, Decimal, float)): return str(obj).encode('ascii') - else: - raise NotImplementedError(repr(obj)) + raise NotImplementedError(repr(obj)) def _metadata(self, name, type_, default): return metadata_from_obj(self.obj, name, type_, default) diff --git a/src/pikepdf/models/metadata.py b/src/pikepdf/models/metadata.py index b647653..6dc169b 100644 --- a/src/pikepdf/models/metadata.py +++ b/src/pikepdf/models/metadata.py @@ -20,6 +20,7 @@ from typing import ( NamedTuple, Optional, Set, + Tuple, Type, Union, ) @@ -52,7 +53,7 @@ XMP_NS_XMP = "http://ns.adobe.com/xap/1.0/" XMP_NS_XMP_MM = "http://ns.adobe.com/xap/1.0/mm/" XMP_NS_XMP_RIGHTS = "http://ns.adobe.com/xap/1.0/rights/" -DEFAULT_NAMESPACES = [ +DEFAULT_NAMESPACES: List[Tuple[str, str]] = [ ('adobe:ns:meta/', 'x'), (XMP_NS_DC, 'dc'), (XMP_NS_PDF, 'pdf'), @@ -243,10 +244,9 @@ class AuthorConverter(Converter): def docinfo_from_xmp(xmp_val): if isinstance(xmp_val, str): return xmp_val - elif xmp_val is None or xmp_val == [None]: + if xmp_val is None or xmp_val == [None]: return None - else: - return '; '.join(xmp_val) + return '; '.join(xmp_val) class DateConverter(Converter): @@ -328,7 +328,7 @@ class PdfMetadata(MutableMapping): ] NS: Dict[str, str] = {prefix: uri for uri, prefix in DEFAULT_NAMESPACES} - REVERSE_NS: Dict[str, str] = {uri: prefix for uri, prefix in DEFAULT_NAMESPACES} + REVERSE_NS: Dict[str, str] = dict(DEFAULT_NAMESPACES) _PARSERS_OVERWRITE_INVALID_XML: Iterable[Callable[[bytes], Any]] = [ _parser_basic, @@ -372,8 +372,7 @@ class PdfMetadata(MutableMapping): def warn_or_raise(msg, e=None): if raise_failure: raise ValueError(msg) from e - else: - warn(msg) + warn(msg) for uri, shortkey, docinfo_name, converter in self.DOCINFO_MAPPING: qname = QName(uri, shortkey) @@ -444,13 +443,16 @@ class PdfMetadata(MutableMapping): for pi in pis: etree.strip_tags(self._xmp, pi.tag) self._get_rdf_root() - except (Exception if self.overwrite_invalid_xml else NeverRaise) as e: + except ( + Exception # pylint: disable=broad-except + if self.overwrite_invalid_xml + else NeverRaise + ) as e: log.warning("Error occurred parsing XMP", exc_info=e) self._xmp = _parser_replace_with_empty_xmp() else: log.warning("Error occurred parsing XMP") self._xmp = _parser_replace_with_empty_xmp() - return @ensure_loaded def __enter__(self): diff --git a/src/pikepdf/objects.py b/src/pikepdf/objects.py index a73a9d6..1267324 100644 --- a/src/pikepdf/objects.py +++ b/src/pikepdf/objects.py @@ -181,7 +181,8 @@ class Array(Object, metaclass=_ObjectMeta): if isinstance(a, (str, bytes)): raise TypeError('Strings cannot be converted to arrays of chars') - elif a is None: + + if a is None: a = [] elif isinstance(a, Rectangle): return a.as_array() diff --git a/tests/test_image_access.py b/tests/test_image_access.py index 5131faa..e800d0e 100644 --- a/tests/test_image_access.py +++ b/tests/test_image_access.py @@ -1,4 +1,3 @@ -import platform import subprocess import zlib from contextlib import contextmanager @@ -577,7 +576,7 @@ def test_bool_in_inline_image(): not PIL_features.check_codec('jpg_2000'), reason='no JPEG2000 codec' ) def test_jp2(first_image_in): - xobj, pdf = first_image_in('pike-jp2.pdf') + xobj, _pdf = first_image_in('pike-jp2.pdf') pim = PdfImage(xobj) assert isinstance(pim, PdfJpxImage) |