summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames R. Barlow <james@purplerock.ca>2022-06-21 14:28:40 -0700
committerJames R. Barlow <james@purplerock.ca>2022-06-21 14:28:40 -0700
commit49133de4574a3d21c6b363e345d2662854bd2027 (patch)
tree427b82b34871871e046e66c038153bf140cc82e9
parentac4d41eeec704cb5c92ad29c8f51a2bd09e9c6c6 (diff)
Delinting pass
-rw-r--r--.pre-commit-config.yaml1
-rw-r--r--pyproject.toml6
-rw-r--r--src/pikepdf/_methods.py29
-rw-r--r--src/pikepdf/models/_content_stream.py3
-rw-r--r--src/pikepdf/models/encryption.py17
-rw-r--r--src/pikepdf/models/image.py27
-rw-r--r--src/pikepdf/models/metadata.py20
-rw-r--r--src/pikepdf/objects.py3
-rw-r--r--tests/test_image_access.py3
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)