Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add checks to pre-commit #7421

Merged
merged 8 commits into from Sep 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/release-drafter.yml
Expand Up @@ -10,7 +10,7 @@ on:
permissions:
contents: read

concurrency:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/stale.yml
Expand Up @@ -8,7 +8,7 @@ on:
permissions:
issues: write

concurrency:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

Expand Down
17 changes: 14 additions & 3 deletions .pre-commit-config.yaml
@@ -1,6 +1,12 @@
repos:
- repo: https://github.com/psf/black
rev: 23.7.0
- repo: https://github.com/asottile/pyupgrade
rev: v3.13.0
hooks:
- id: pyupgrade
args: [--py38-plus]

- repo: https://github.com/psf/black-pre-commit-mirror
rev: 23.9.1
hooks:
- id: black
args: [--target-version=py38]
Expand Down Expand Up @@ -33,7 +39,7 @@ repos:
hooks:
- id: flake8
additional_dependencies:
[flake8-2020, flake8-errmsg, flake8-implicit-str-concat]
[flake8-2020, flake8-errmsg, flake8-implicit-str-concat, flake8-logging]

- repo: https://github.com/pre-commit/pygrep-hooks
rev: v1.10.0
Expand All @@ -44,10 +50,15 @@ repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: check-executables-have-shebangs
- id: check-merge-conflict
- id: check-json
- id: check-toml
- id: check-yaml
- id: end-of-file-fixer
exclude: ^Tests/images/
- id: trailing-whitespace
exclude: ^.github/.*TEMPLATE|^Tests/(fonts|images)/
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
exclude: ^.github/.*TEMPLATE|^Tests/(fonts|images)/
exclude: ^.github/.*TEMPLATE|^Tests/(fonts|icc|images)/

?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, it is fixing the text file in this directory and not touching the binaries. Shall we leave it as is, until it comes up?


- repo: https://github.com/sphinx-contrib/sphinx-lint
rev: v0.6.8
Expand Down
Empty file modified Tests/check_j2k_leaks.py 100755 → 100644
Empty file.
2 changes: 1 addition & 1 deletion Tests/fonts/DejaVuSans/LICENSE.txt
Expand Up @@ -37,4 +37,4 @@ The Font Software may be sold as part of a larger software package but no copy o

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

Except as contained in this notice, the name of Tavmjong Bah shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from Tavmjong Bah. For further information, contact: tavmjong @ free . fr.
Except as contained in this notice, the name of Tavmjong Bah shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from Tavmjong Bah. For further information, contact: tavmjong @ free . fr.
4 changes: 2 additions & 2 deletions Tests/helper.py
Expand Up @@ -91,7 +91,7 @@ def assert_image_equal(a, b, msg=None):
if HAS_UPLOADER:
try:
url = test_image_results.upload(a, b)
logger.error(f"Url for test images: {url}")
logger.error("URL for test images: %s", url)
except Exception:
pass

Expand Down Expand Up @@ -126,7 +126,7 @@ def assert_image_similar(a, b, epsilon, msg=None):
if HAS_UPLOADER:
try:
url = test_image_results.upload(a, b)
logger.error(f"Url for test images: {url}")
logger.exception("URL for test images: %s", url)
radarhere marked this conversation as resolved.
Show resolved Hide resolved
except Exception:
pass
raise e
Expand Down
1 change: 0 additions & 1 deletion Tests/icc/LICENSE.txt
Expand Up @@ -22,4 +22,3 @@ and that the name of ICC shall not be used in advertising or publicity
pertaining to distribution of the software without specific, written
prior permission. ICC makes no representations about the suitability
of this software for any purpose.

Empty file modified Tests/images/negative_size.ppm 100755 → 100644
Empty file.
Empty file modified _custom_build/backend.py 100755 → 100644
Empty file.
1 change: 0 additions & 1 deletion depends/install_raqm.sh
Expand Up @@ -11,4 +11,3 @@ pushd $archive
meson build --prefix=/usr && sudo ninja -C build install

popd

1 change: 0 additions & 1 deletion depends/install_raqm_cmake.sh
Expand Up @@ -15,4 +15,3 @@ make && sudo make install
cd ..

popd

1 change: 0 additions & 1 deletion depends/termux.sh
Expand Up @@ -2,4 +2,3 @@

pkg install -y python ndk-sysroot clang make \
libjpeg-turbo

2 changes: 1 addition & 1 deletion docs/newer-versions.csv
Expand Up @@ -5,4 +5,4 @@ Pillow 9.3 - 9.5,,Yes,Yes,Yes,Yes,Yes,,
Pillow 9.0 - 9.2,,,Yes,Yes,Yes,Yes,,
Pillow 8.3.2 - 8.4,,,Yes,Yes,Yes,Yes,Yes,
Pillow 8.0 - 8.3.1,,,,Yes,Yes,Yes,Yes,
Pillow 7.0 - 7.2,,,,,Yes,Yes,Yes,Yes
Pillow 7.0 - 7.2,,,,,Yes,Yes,Yes,Yes
2 changes: 1 addition & 1 deletion docs/older-versions.csv
Expand Up @@ -5,4 +5,4 @@ Pillow 5.2 - 5.4,,Yes,Yes,Yes,Yes,,,Yes,,,
Pillow 5.0 - 5.1,,,Yes,Yes,Yes,,,Yes,,,
Pillow 4,,,Yes,Yes,Yes,Yes,,Yes,,,
Pillow 2 - 3,,,,Yes,Yes,Yes,Yes,Yes,Yes,,
Pillow < 2,,,,,,,,Yes,Yes,Yes,Yes
Pillow < 2,,,,,,,,Yes,Yes,Yes,Yes
1 change: 0 additions & 1 deletion docs/releasenotes/3.0.0.rst
Expand Up @@ -49,4 +49,3 @@ The external dependencies on libjpeg and zlib are now required by default.
If the headers or libraries are not found, then installation will abort
with an error. This behaviour can be disabled with the ``--disable-libjpeg``
and ``--disable-zlib`` flags.

4 changes: 0 additions & 4 deletions docs/releasenotes/3.3.2.rst
Expand Up @@ -34,7 +34,3 @@ image size can lead to a smaller allocation than expected, leading to
arbitrary writes.

This issue was found by Cris Neckar at Divergent Security.




2 changes: 0 additions & 2 deletions docs/releasenotes/4.1.1.rst
Expand Up @@ -20,5 +20,3 @@ CPython 3.6.1 to not work on installations of C-Python 3.6.0. This fix
undefines PySlice_GetIndicesEx if it exists to restore compatibility
with both 3.6.0 and 3.6.1. See https://bugs.python.org/issue29943 for
more details.


1 change: 0 additions & 1 deletion docs/releasenotes/4.2.1.rst
Expand Up @@ -8,4 +8,3 @@ Fixed Windows PyPy Build

A change in the 4.2.0 cycle broke the Windows PyPy build. This has
been fixed, and PyPy is now part of the Windows CI matrix.

3 changes: 0 additions & 3 deletions docs/releasenotes/8.0.0.rst
Expand Up @@ -175,6 +175,3 @@ Dark theme for docs
^^^^^^^^^^^^^^^^^^^

The https://pillow.readthedocs.io documentation will use a dark theme if the user has requested the system use one. Uses the ``prefers-color-scheme`` CSS media query.



4 changes: 2 additions & 2 deletions src/PIL/BdfFontFile.py
Expand Up @@ -68,11 +68,11 @@ def bdf_char(f):
# followed by the width in x (BBw), height in y (BBh),
# and x and y displacement (BBxoff0, BByoff0)
# of the lower left corner from the origin of the character.
width, height, x_disp, y_disp = [int(p) for p in props["BBX"].split()]
width, height, x_disp, y_disp = (int(p) for p in props["BBX"].split())

# The word DWIDTH
# followed by the width in x and y of the character in device pixels.
dwx, dwy = [int(p) for p in props["DWIDTH"].split()]
dwx, dwy = (int(p) for p in props["DWIDTH"].split())

bbox = (
(dwx, dwy),
Expand Down
4 changes: 2 additions & 2 deletions src/PIL/EpsImagePlugin.py
Expand Up @@ -339,9 +339,9 @@ def check_required_header_comments():
# data start identifier (the image data follows after a single line
# consisting only of this quoted value)
image_data_values = byte_arr[11:bytes_read].split(None, 7)
columns, rows, bit_depth, mode_id = [
columns, rows, bit_depth, mode_id = (
int(value) for value in image_data_values[:4]
]
)

if bit_depth == 1:
self._mode = "1"
Expand Down
2 changes: 1 addition & 1 deletion src/PIL/ImageGrab.py
Expand Up @@ -166,7 +166,7 @@
msg = "wl-paste or xclip is required for ImageGrab.grabclipboard() on Linux"
raise NotImplementedError(msg)

p = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p = subprocess.run(args, capture_output=True)

Check warning on line 169 in src/PIL/ImageGrab.py

View check run for this annotation

Codecov / codecov/patch

src/PIL/ImageGrab.py#L169

Added line #L169 was not covered by tests
err = p.stderr
if err:
msg = f"{args[0]} error: {err.strip().decode()}"
Expand Down
45 changes: 24 additions & 21 deletions src/PIL/TiffImagePlugin.py
Expand Up @@ -823,7 +823,7 @@ def load(self, fp):
try:
unit_size, handler = self._load_dispatch[typ]
except KeyError:
logger.debug(msg + f" - unsupported type {typ}")
logger.debug("%s - unsupported type %s", msg, typ)
continue # ignore unsupported type
size = count * unit_size
if size > (8 if self._bigtiff else 4):
Expand Down Expand Up @@ -880,7 +880,7 @@ def tobytes(self, offset=0):
if tag == STRIPOFFSETS:
stripoffsets = len(entries)
typ = self.tagtype.get(tag)
logger.debug(f"Tag {tag}, Type: {typ}, Value: {repr(value)}")
logger.debug("Tag %s, Type: %s, Value: %s", tag, typ, repr(value))
is_ifd = typ == TiffTags.LONG and isinstance(value, dict)
if is_ifd:
if self._endian == "<":
Expand Down Expand Up @@ -929,7 +929,7 @@ def tobytes(self, offset=0):

# pass 2: write entries to file
for tag, typ, count, value, data in entries:
logger.debug(f"{tag} {typ} {count} {repr(value)} {repr(data)}")
logger.debug("%s %s %s %s %s", tag, typ, count, repr(value), repr(data))
result += self._pack("HHL4s", tag, typ, count, value)

# -- overwrite here for multi-page --
Expand Down Expand Up @@ -1098,8 +1098,8 @@ def _open(self):
self._n_frames = None

logger.debug("*** TiffImageFile._open ***")
logger.debug(f"- __first: {self.__first}")
logger.debug(f"- ifh: {repr(ifh)}") # Use repr to avoid str(bytes)
logger.debug("- __first: %s", self.__first)
logger.debug("- ifh: %s", repr(ifh)) # Use repr to avoid str(bytes)

# and load the first frame
self._seek(0)
Expand Down Expand Up @@ -1137,12 +1137,15 @@ def _seek(self, frame):
msg = "no more images in TIFF file"
raise EOFError(msg)
logger.debug(
f"Seeking to frame {frame}, on frame {self.__frame}, "
f"__next {self.__next}, location: {self.fp.tell()}"
"Seeking to frame %s, on frame %s, __next %s, location: %s",
frame,
self.__frame,
self.__next,
self.fp.tell(),
)
self.fp.seek(self.__next)
self._frame_pos.append(self.__next)
logger.debug("Loading tags, location: %s" % self.fp.tell())
logger.debug("Loading tags, location: %s", self.fp.tell())
self.tag_v2.load(self.fp)
if self.tag_v2.next in self._frame_pos:
# This IFD has already been processed
Expand Down Expand Up @@ -1330,18 +1333,18 @@ def _setup(self):
fillorder = self.tag_v2.get(FILLORDER, 1)

logger.debug("*** Summary ***")
logger.debug(f"- compression: {self._compression}")
logger.debug(f"- photometric_interpretation: {photo}")
logger.debug(f"- planar_configuration: {self._planar_configuration}")
logger.debug(f"- fill_order: {fillorder}")
logger.debug(f"- YCbCr subsampling: {self.tag.get(YCBCRSUBSAMPLING)}")
logger.debug("- compression: %s", self._compression)
logger.debug("- photometric_interpretation: %s", photo)
logger.debug("- planar_configuration: %s", self._planar_configuration)
logger.debug("- fill_order: %s", fillorder)
logger.debug("- YCbCr subsampling: %s", self.tag.get(YCBCRSUBSAMPLING))

# size
xsize = int(self.tag_v2.get(IMAGEWIDTH))
ysize = int(self.tag_v2.get(IMAGELENGTH))
self._size = xsize, ysize

logger.debug(f"- size: {self.size}")
logger.debug("- size: %s", self.size)

sample_format = self.tag_v2.get(SAMPLEFORMAT, (1,))
if len(sample_format) > 1 and max(sample_format) == min(sample_format) == 1:
Expand Down Expand Up @@ -1397,16 +1400,16 @@ def _setup(self):
bps_tuple,
extra_tuple,
)
logger.debug(f"format key: {key}")
logger.debug("format key: %s", key)
try:
self._mode, rawmode = OPEN_INFO[key]
except KeyError as e:
logger.debug("- unsupported format")
msg = "unknown pixel mode"
raise SyntaxError(msg) from e

logger.debug(f"- raw mode: {rawmode}")
logger.debug(f"- pil mode: {self.mode}")
logger.debug("- raw mode: %s", rawmode)
logger.debug("- pil mode: %s", self.mode)

self.info["compression"] = self._compression

Expand Down Expand Up @@ -1447,7 +1450,7 @@ def _setup(self):
if fillorder == 2:
# Replace fillorder with fillorder=1
key = key[:3] + (1,) + key[4:]
logger.debug(f"format key: {key}")
logger.debug("format key: %s", key)
# this should always work, since all the
# fillorder==2 modes have a corresponding
# fillorder=1 mode
Expand Down Expand Up @@ -1610,7 +1613,7 @@ def _save(im, fp, filename):
info = exif
else:
info = {}
logger.debug("Tiffinfo Keys: %s" % list(info))
logger.debug("Tiffinfo Keys: %s", list(info))
if isinstance(info, ImageFileDirectory_v1):
info = info.to_v2()
for key in info:
Expand Down Expand Up @@ -1743,7 +1746,7 @@ def _save(im, fp, filename):
ifd[JPEGQUALITY] = quality

logger.debug("Saving using libtiff encoder")
logger.debug("Items: %s" % sorted(ifd.items()))
logger.debug("Items: %s", sorted(ifd.items()))
_fp = 0
if hasattr(fp, "fileno"):
try:
Expand Down Expand Up @@ -1811,7 +1814,7 @@ def _save(im, fp, filename):
if SAMPLEFORMAT in atts and len(atts[SAMPLEFORMAT]) == 1:
atts[SAMPLEFORMAT] = atts[SAMPLEFORMAT][0]

logger.debug("Converted items: %s" % sorted(atts.items()))
logger.debug("Converted items: %s", sorted(atts.items()))

# libtiff always expects the bytes in native order.
# we're storing image byte order. So, if the rawmode
Expand Down
2 changes: 1 addition & 1 deletion src/libImaging/Sgi.h
Expand Up @@ -36,4 +36,4 @@ typedef struct {
/* image data size from file descriptor */
long bufsize;

} SGISTATE;
} SGISTATE;