diff --git a/src/ocrmypdf/_concurrent.py b/src/ocrmypdf/_concurrent.py index b944a881..b8664c65 100644 --- a/src/ocrmypdf/_concurrent.py +++ b/src/ocrmypdf/_concurrent.py @@ -7,8 +7,8 @@ from __future__ import annotations import threading from abc import ABC, abstractmethod -from collections.abc import Iterable -from typing import Any, Callable, TypeVar +from collections.abc import Callable, Iterable +from typing import Any, TypeVar from ocrmypdf._progressbar import NullProgressBar, ProgressBar diff --git a/src/ocrmypdf/_exec/unpaper.py b/src/ocrmypdf/_exec/unpaper.py index 7efc51b6..1c433df5 100644 --- a/src/ocrmypdf/_exec/unpaper.py +++ b/src/ocrmypdf/_exec/unpaper.py @@ -8,7 +8,6 @@ from __future__ import annotations import logging import os import shlex -import sys from collections.abc import Iterator from contextlib import contextmanager from decimal import Decimal @@ -20,7 +19,7 @@ from typing import Union from packaging.version import Version from PIL import Image -from ocrmypdf.exceptions import MissingDependencyError, SubprocessOutputError +from ocrmypdf.exceptions import SubprocessOutputError from ocrmypdf.subprocess import get_version, run # unpaper documentation: diff --git a/src/ocrmypdf/_jobcontext.py b/src/ocrmypdf/_jobcontext.py index 0bc279a4..b1c775d9 100644 --- a/src/ocrmypdf/_jobcontext.py +++ b/src/ocrmypdf/_jobcontext.py @@ -93,8 +93,8 @@ class PageContext: state = self.__dict__.copy() state['options'] = copy(self.options) - if not isinstance(state['options'].input_file, (str, bytes, os.PathLike)): + if not isinstance(state['options'].input_file, str | bytes | os.PathLike): state['options'].input_file = 'stream' - if not isinstance(state['options'].output_file, (str, bytes, os.PathLike)): + if not isinstance(state['options'].output_file, str | bytes | os.PathLike): state['options'].output_file = 'stream' return state diff --git a/src/ocrmypdf/_pipeline.py b/src/ocrmypdf/_pipeline.py index 879782e2..48fc40ca 100644 --- a/src/ocrmypdf/_pipeline.py +++ b/src/ocrmypdf/_pipeline.py @@ -14,7 +14,7 @@ from collections.abc import Iterable, Iterator, Sequence from contextlib import suppress from io import BytesIO from pathlib import Path -from shutil import copyfileobj, copystat +from shutil import copyfileobj from typing import Any, BinaryIO, TypeVar, cast import img2pdf diff --git a/src/ocrmypdf/_pipelines/_common.py b/src/ocrmypdf/_pipelines/_common.py index cc7b078e..ca2b9f27 100644 --- a/src/ocrmypdf/_pipelines/_common.py +++ b/src/ocrmypdf/_pipelines/_common.py @@ -11,13 +11,13 @@ import os import shutil import sys import threading -from collections.abc import Sequence +from collections.abc import Callable, Sequence from concurrent.futures.process import BrokenProcessPool from concurrent.futures.thread import BrokenThreadPool from contextlib import contextmanager from dataclasses import dataclass from pathlib import Path -from typing import Callable, NamedTuple, cast +from typing import NamedTuple, cast import PIL diff --git a/src/ocrmypdf/builtin_plugins/concurrency.py b/src/ocrmypdf/builtin_plugins/concurrency.py index 25c6879c..48442bda 100644 --- a/src/ocrmypdf/builtin_plugins/concurrency.py +++ b/src/ocrmypdf/builtin_plugins/concurrency.py @@ -12,10 +12,10 @@ import queue import signal import sys import threading -from collections.abc import Iterable +from collections.abc import Callable, Iterable from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor, as_completed from contextlib import suppress -from typing import Callable, Union +from typing import Union from rich.console import Console as RichConsole @@ -25,8 +25,10 @@ from ocrmypdf._progressbar import RichProgressBar from ocrmypdf.exceptions import InputFileError from ocrmypdf.helpers import remove_all_log_handlers -FuturesExecutorClass = Union[type[ThreadPoolExecutor], type[ProcessPoolExecutor]] -Queue = Union[multiprocessing.Queue, queue.Queue] +FuturesExecutorClass = Union[ # noqa: UP007 + type[ThreadPoolExecutor], type[ProcessPoolExecutor] +] +Queue = Union[multiprocessing.Queue, queue.Queue] # noqa: UP007 UserInit = Callable[[], None] WorkerInit = Callable[[Queue, UserInit, int], None] @@ -128,11 +130,14 @@ class StandardExecutor(Executor): listener = threading.Thread(target=log_listener, args=(log_queue,)) listener.start() - with self.pbar_class(**progress_kwargs) as pbar, executor_class( - max_workers=max_workers, - initializer=initializer, - initargs=(log_queue, worker_initializer, logging.getLogger("").level), - ) as executor: + with ( + self.pbar_class(**progress_kwargs) as pbar, + executor_class( + max_workers=max_workers, + initializer=initializer, + initargs=(log_queue, worker_initializer, logging.getLogger("").level), + ) as executor, + ): futures = [executor.submit(task, *args) for args in task_arguments] try: for future in as_completed(futures): diff --git a/src/ocrmypdf/cli.py b/src/ocrmypdf/cli.py index ac77c6fc..29d705f4 100644 --- a/src/ocrmypdf/cli.py +++ b/src/ocrmypdf/cli.py @@ -6,8 +6,8 @@ from __future__ import annotations import argparse -from collections.abc import Mapping -from typing import Any, Callable, TypeVar +from collections.abc import Callable, Mapping +from typing import Any, TypeVar from ocrmypdf._version import PROGRAM_NAME as _PROGRAM_NAME from ocrmypdf._version import __version__ as _VERSION diff --git a/src/ocrmypdf/extra_plugins/semfree.py b/src/ocrmypdf/extra_plugins/semfree.py index 6aeec84c..92a75adc 100644 --- a/src/ocrmypdf/extra_plugins/semfree.py +++ b/src/ocrmypdf/extra_plugins/semfree.py @@ -20,13 +20,12 @@ from __future__ import annotations import logging import logging.handlers import signal -from collections.abc import Iterable, Iterator +from collections.abc import Callable, Iterable, Iterator from contextlib import suppress from enum import Enum, auto from itertools import islice, repeat, takewhile, zip_longest from multiprocessing import Pipe, Process from multiprocessing.connection import Connection, wait -from typing import Callable from ocrmypdf import Executor, hookimpl from ocrmypdf._concurrent import NullProgressBar diff --git a/src/ocrmypdf/helpers.py b/src/ocrmypdf/helpers.py index c535da7c..42c2fd48 100644 --- a/src/ocrmypdf/helpers.py +++ b/src/ocrmypdf/helpers.py @@ -10,7 +10,7 @@ import multiprocessing import os import shutil import warnings -from collections.abc import Iterable, Sequence +from collections.abc import Callable, Iterable, Sequence from contextlib import suppress from decimal import Decimal from io import StringIO @@ -19,7 +19,6 @@ from pathlib import Path from statistics import harmonic_mean from typing import ( Any, - Callable, Generic, TypeVar, ) diff --git a/src/ocrmypdf/hocrtransform/_hocr.py b/src/ocrmypdf/hocrtransform/_hocr.py index b0a5ca49..e8e1a7ca 100644 --- a/src/ocrmypdf/hocrtransform/_hocr.py +++ b/src/ocrmypdf/hocrtransform/_hocr.py @@ -84,7 +84,6 @@ class HocrTransform: debug_render_options: DebugRenderOptions | None = None, ): """Initialize the HocrTransform object.""" - if debug: log.warning("Use debug_render_options instead", DeprecationWarning) self.render_options = DebugRenderOptions( diff --git a/src/ocrmypdf/optimize.py b/src/ocrmypdf/optimize.py index ec6af78f..79c7dd32 100644 --- a/src/ocrmypdf/optimize.py +++ b/src/ocrmypdf/optimize.py @@ -11,11 +11,10 @@ import sys import tempfile import threading from collections import defaultdict -from collections.abc import Iterator, MutableSet, Sequence +from collections.abc import Callable, Iterator, MutableSet, Sequence from os import fspath from pathlib import Path -from typing import Any, Callable, NamedTuple, NewType -from warnings import warn +from typing import Any, NamedTuple, NewType from zlib import compress import img2pdf diff --git a/src/ocrmypdf/pdfinfo/info.py b/src/ocrmypdf/pdfinfo/info.py index 4357c13c..571980f3 100644 --- a/src/ocrmypdf/pdfinfo/info.py +++ b/src/ocrmypdf/pdfinfo/info.py @@ -12,7 +12,7 @@ import re import statistics import sys from collections import defaultdict -from collections.abc import Container, Iterable, Iterator, Mapping, Sequence +from collections.abc import Callable, Container, Iterable, Iterator, Mapping, Sequence from contextlib import contextmanager from decimal import Decimal from enum import Enum, auto @@ -20,7 +20,7 @@ from functools import partial from math import hypot, inf, isclose from os import PathLike from pathlib import Path -from typing import Callable, NamedTuple +from typing import NamedTuple from warnings import warn from pdfminer.layout import LTPage, LTTextBox diff --git a/src/ocrmypdf/pdfinfo/layout.py b/src/ocrmypdf/pdfinfo/layout.py index c6d06706..d7863058 100644 --- a/src/ocrmypdf/pdfinfo/layout.py +++ b/src/ocrmypdf/pdfinfo/layout.py @@ -5,12 +5,12 @@ from __future__ import annotations import re -from collections.abc import Mapping +from collections.abc import Iterator, Mapping from contextlib import contextmanager from math import copysign from os import PathLike from pathlib import Path -from typing import Any, Iterator +from typing import Any from unittest.mock import patch import pdfminer diff --git a/src/ocrmypdf/subprocess/__init__.py b/src/ocrmypdf/subprocess/__init__.py index 71edf21a..de131408 100644 --- a/src/ocrmypdf/subprocess/__init__.py +++ b/src/ocrmypdf/subprocess/__init__.py @@ -8,12 +8,11 @@ import logging import os import re import sys -from collections.abc import Mapping, Sequence +from collections.abc import Callable, Mapping, Sequence from contextlib import suppress from pathlib import Path from subprocess import PIPE, STDOUT, CalledProcessError, CompletedProcess, Popen from subprocess import run as subprocess_run -from typing import Callable, Union from packaging.version import Version @@ -23,7 +22,7 @@ from ocrmypdf.exceptions import MissingDependencyError log = logging.getLogger(__name__) -Args = Sequence[Union[Path, str]] +Args = Sequence[Path | str] OsEnviron = os._Environ # pylint: disable=protected-access diff --git a/src/ocrmypdf/subprocess/_windows.py b/src/ocrmypdf/subprocess/_windows.py index da0e3db6..6a071c0c 100644 --- a/src/ocrmypdf/subprocess/_windows.py +++ b/src/ocrmypdf/subprocess/_windows.py @@ -9,18 +9,13 @@ import os import re import shutil import sys -from collections.abc import Iterable, Iterator +from collections.abc import Callable, Iterable, Iterator from itertools import chain from pathlib import Path -from typing import Any, Callable, TypeVar +from typing import Any, TypeAlias, TypeVar from packaging.version import InvalidVersion, Version -if sys.version_info >= (3, 10): - from typing import TypeAlias -else: - from typing_extensions import TypeAlias # pragma: no cover - if sys.platform == 'win32': # mypy understands 'if sys.platform' better than try/except ModuleNotFoundError import winreg # pylint: disable=import-error diff --git a/tests/plugins/gs_render_soft_error.py b/tests/plugins/gs_render_soft_error.py index e276194a..151995fb 100644 --- a/tests/plugins/gs_render_soft_error.py +++ b/tests/plugins/gs_render_soft_error.py @@ -3,7 +3,6 @@ from __future__ import annotations -from pathlib import Path from subprocess import CalledProcessError from unittest.mock import patch diff --git a/tests/test_main.py b/tests/test_main.py index 3879ca6c..a6b40622 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -17,7 +17,7 @@ from PIL import Image import ocrmypdf from ocrmypdf._exec import tesseract -from ocrmypdf.exceptions import ExitCode, MissingDependencyError, OutputFileAccessError +from ocrmypdf.exceptions import ExitCode, MissingDependencyError from ocrmypdf.pdfa import file_claims_pdfa from ocrmypdf.pdfinfo import Colorspace, Encoding, PdfInfo from ocrmypdf.subprocess import get_version diff --git a/tests/test_userunit.py b/tests/test_userunit.py index d353ddb7..2527460f 100644 --- a/tests/test_userunit.py +++ b/tests/test_userunit.py @@ -7,10 +7,9 @@ from math import isclose import pytest -from ocrmypdf.exceptions import ExitCode from ocrmypdf.pdfinfo import PdfInfo -from .conftest import check_ocrmypdf, run_ocrmypdf_api +from .conftest import check_ocrmypdf # pylint: disable=redefined-outer-name