mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-07-28 21:28:32 -04:00
Relax ignore-missing-imports
for modules that have stubs now and update mypy (#11006)
Updating mypy past version 0.9 means that third-party stubs are no-longer distributed with typeshed. See http://mypy-lang.blogspot.com/2021/06/mypy-0900-released.html for details. We therefore pull in stub packages in setup.py Additionally, some modules that we were previously ignoring import failures for now have stubs. So let's use them. The rest of this change consists of fixups to make the newer mypy + stubs pass CI. Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com>
This commit is contained in:
parent
670a8d9a1e
commit
797ee7812d
12 changed files with 132 additions and 112 deletions
|
@ -61,9 +61,19 @@ class Thumbnailer:
|
|||
self.transpose_method = None
|
||||
try:
|
||||
# We don't use ImageOps.exif_transpose since it crashes with big EXIF
|
||||
image_exif = self.image._getexif()
|
||||
#
|
||||
# Ignore safety: Pillow seems to acknowledge that this method is
|
||||
# "private, experimental, but generally widely used". Pillow 6
|
||||
# includes a public getexif() method (no underscore) that we might
|
||||
# consider using instead when we can bump that dependency.
|
||||
#
|
||||
# At the time of writing, Debian buster (currently oldstable)
|
||||
# provides version 5.4.1. It's expected to EOL in mid-2022, see
|
||||
# https://wiki.debian.org/DebianReleases#Production_Releases
|
||||
image_exif = self.image._getexif() # type: ignore
|
||||
if image_exif is not None:
|
||||
image_orientation = image_exif.get(EXIF_ORIENTATION_TAG)
|
||||
assert isinstance(image_orientation, int)
|
||||
self.transpose_method = EXIF_TRANSPOSE_MAPPINGS.get(image_orientation)
|
||||
except Exception as e:
|
||||
# A lot of parsing errors can happen when parsing EXIF
|
||||
|
@ -76,7 +86,10 @@ class Thumbnailer:
|
|||
A tuple containing the new image size in pixels as (width, height).
|
||||
"""
|
||||
if self.transpose_method is not None:
|
||||
self.image = self.image.transpose(self.transpose_method)
|
||||
# Safety: `transpose` takes an int rather than e.g. an IntEnum.
|
||||
# self.transpose_method is set above to be a value in
|
||||
# EXIF_TRANSPOSE_MAPPINGS, and that only contains correct values.
|
||||
self.image = self.image.transpose(self.transpose_method) # type: ignore[arg-type]
|
||||
self.width, self.height = self.image.size
|
||||
self.transpose_method = None
|
||||
# We don't need EXIF any more
|
||||
|
@ -101,7 +114,7 @@ class Thumbnailer:
|
|||
else:
|
||||
return (max_height * self.width) // self.height, max_height
|
||||
|
||||
def _resize(self, width: int, height: int) -> Image:
|
||||
def _resize(self, width: int, height: int) -> Image.Image:
|
||||
# 1-bit or 8-bit color palette images need converting to RGB
|
||||
# otherwise they will be scaled using nearest neighbour which
|
||||
# looks awful.
|
||||
|
@ -151,7 +164,7 @@ class Thumbnailer:
|
|||
cropped = scaled_image.crop((crop_left, 0, crop_right, height))
|
||||
return self._encode_image(cropped, output_type)
|
||||
|
||||
def _encode_image(self, output_image: Image, output_type: str) -> BytesIO:
|
||||
def _encode_image(self, output_image: Image.Image, output_type: str) -> BytesIO:
|
||||
output_bytes_io = BytesIO()
|
||||
fmt = self.FORMATS[output_type]
|
||||
if fmt == "JPEG":
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue