Skip to content

Commit

Permalink
Merge pull request #7897 from hugovk/flake8-pyi
Browse files Browse the repository at this point in the history
Type hints: Add PYI (flake8-pyi) to Ruff and fix errors
  • Loading branch information
radarhere authored Mar 27, 2024
2 parents 58c4c75 + 73bf044 commit 6ca8bfb
Show file tree
Hide file tree
Showing 11 changed files with 46 additions and 41 deletions.
46 changes: 25 additions & 21 deletions Tests/test_file_libtiff.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
import os
import re
import sys
from collections import namedtuple
from pathlib import Path
from typing import Any, NamedTuple

import pytest

Expand Down Expand Up @@ -243,36 +243,40 @@ def test_additional_metadata(self, tmp_path: Path) -> None:
TiffImagePlugin.WRITE_LIBTIFF = False

def test_custom_metadata(self, tmp_path: Path) -> None:
tc = namedtuple("tc", "value,type,supported_by_default")
class Tc(NamedTuple):
value: Any
type: int
supported_by_default: bool

custom = {
37000 + k: v
for k, v in enumerate(
[
tc(4, TiffTags.SHORT, True),
tc(123456789, TiffTags.LONG, True),
tc(-4, TiffTags.SIGNED_BYTE, False),
tc(-4, TiffTags.SIGNED_SHORT, False),
tc(-123456789, TiffTags.SIGNED_LONG, False),
tc(TiffImagePlugin.IFDRational(4, 7), TiffTags.RATIONAL, True),
tc(4.25, TiffTags.FLOAT, True),
tc(4.25, TiffTags.DOUBLE, True),
tc("custom tag value", TiffTags.ASCII, True),
tc(b"custom tag value", TiffTags.BYTE, True),
tc((4, 5, 6), TiffTags.SHORT, True),
tc((123456789, 9, 34, 234, 219387, 92432323), TiffTags.LONG, True),
tc((-4, 9, 10), TiffTags.SIGNED_BYTE, False),
tc((-4, 5, 6), TiffTags.SIGNED_SHORT, False),
tc(
Tc(4, TiffTags.SHORT, True),
Tc(123456789, TiffTags.LONG, True),
Tc(-4, TiffTags.SIGNED_BYTE, False),
Tc(-4, TiffTags.SIGNED_SHORT, False),
Tc(-123456789, TiffTags.SIGNED_LONG, False),
Tc(TiffImagePlugin.IFDRational(4, 7), TiffTags.RATIONAL, True),
Tc(4.25, TiffTags.FLOAT, True),
Tc(4.25, TiffTags.DOUBLE, True),
Tc("custom tag value", TiffTags.ASCII, True),
Tc(b"custom tag value", TiffTags.BYTE, True),
Tc((4, 5, 6), TiffTags.SHORT, True),
Tc((123456789, 9, 34, 234, 219387, 92432323), TiffTags.LONG, True),
Tc((-4, 9, 10), TiffTags.SIGNED_BYTE, False),
Tc((-4, 5, 6), TiffTags.SIGNED_SHORT, False),
Tc(
(-123456789, 9, 34, 234, 219387, -92432323),
TiffTags.SIGNED_LONG,
False,
),
tc((4.25, 5.25), TiffTags.FLOAT, True),
tc((4.25, 5.25), TiffTags.DOUBLE, True),
Tc((4.25, 5.25), TiffTags.FLOAT, True),
Tc((4.25, 5.25), TiffTags.DOUBLE, True),
# array of TIFF_BYTE requires bytes instead of tuple for backwards
# compatibility
tc(bytes([4]), TiffTags.BYTE, True),
tc(bytes((4, 9, 10)), TiffTags.BYTE, True),
Tc(bytes([4]), TiffTags.BYTE, True),
Tc(bytes((4, 9, 10)), TiffTags.BYTE, True),
]
)
}
Expand Down
4 changes: 2 additions & 2 deletions Tests/test_lib_pack.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def assert_pack(
mode: str,
rawmode: str,
data: int | bytes,
*pixels: int | float | tuple[int, ...],
*pixels: float | tuple[int, ...],
) -> None:
"""
data - either raw bytes with data or just number of bytes in rawmode.
Expand Down Expand Up @@ -239,7 +239,7 @@ def assert_unpack(
mode: str,
rawmode: str,
data: int | bytes,
*pixels: int | float | tuple[int, ...],
*pixels: float | tuple[int, ...],
) -> None:
"""
data - either raw bytes with data or just number of bytes in rawmode.
Expand Down
2 changes: 2 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ select = [
"ISC", # flake8-implicit-str-concat
"LOG", # flake8-logging
"PGH", # pygrep-hooks
"PYI", # flake8-pyi
"RUF100", # unused noqa (yesqa)
"UP", # pyupgrade
"W", # pycodestyle warnings
Expand All @@ -116,6 +117,7 @@ ignore = [
"E221", # Multiple spaces before operator
"E226", # Missing whitespace around arithmetic operator
"E241", # Multiple spaces after ','
"PYI034", # flake8-pyi: typing.Self added in Python 3.11
]

[tool.ruff.lint.per-file-ignores]
Expand Down
11 changes: 7 additions & 4 deletions src/PIL/PdfParser.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import re
import time
import zlib
from typing import TYPE_CHECKING, Any, List, Union
from typing import TYPE_CHECKING, Any, List, NamedTuple, Union


# see 7.9.2.2 Text String Type on page 86 and D.3 PDFDocEncoding Character Set
Expand Down Expand Up @@ -81,9 +81,12 @@ def check_format_condition(condition, error_message):
raise PdfFormatError(error_message)


class IndirectReference(
collections.namedtuple("IndirectReferenceTuple", ["object_id", "generation"])
):
class IndirectReferenceTuple(NamedTuple):
object_id: int
generation: int


class IndirectReference(IndirectReferenceTuple):
def __str__(self):
return f"{self.object_id} {self.generation} R"

Expand Down
12 changes: 10 additions & 2 deletions src/PIL/TiffTags.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,18 @@
##
from __future__ import annotations

from collections import namedtuple
from typing import NamedTuple


class TagInfo(namedtuple("_TagInfo", "value name type length enum")):
class _TagInfo(NamedTuple):
value: int | None
name: str
type: int | None
length: int | None
enum: dict[str, int]


class TagInfo(_TagInfo):
__slots__: list[str] = []

def __new__(cls, value=None, name="unknown", type=None, length=None, enum=None):
Expand Down
2 changes: 0 additions & 2 deletions src/PIL/_imaging.pyi
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

from typing import Any

def __getattr__(name: str) -> Any: ...
2 changes: 0 additions & 2 deletions src/PIL/_imagingcms.pyi
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

from typing import Any

def __getattr__(name: str) -> Any: ...
2 changes: 0 additions & 2 deletions src/PIL/_imagingft.pyi
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

from typing import Any

def __getattr__(name: str) -> Any: ...
2 changes: 0 additions & 2 deletions src/PIL/_imagingmath.pyi
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

from typing import Any

def __getattr__(name: str) -> Any: ...
2 changes: 0 additions & 2 deletions src/PIL/_imagingmorph.pyi
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

from typing import Any

def __getattr__(name: str) -> Any: ...
2 changes: 0 additions & 2 deletions src/PIL/_webp.pyi
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import annotations

from typing import Any

def __getattr__(name: str) -> Any: ...

0 comments on commit 6ca8bfb

Please sign in to comment.