From 0205618d243c2c9ac43fc66558daae9364c394d0 Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Mon, 4 Apr 2022 17:50:15 +0200 Subject: [PATCH 1/2] Backport PR #22766: FIX: account for constant deprecations in Pillow 9.1 --- azure-pipelines.yml | 3 +++ lib/matplotlib/animation.py | 18 ++++++++++-------- lib/matplotlib/backends/backend_pdf.py | 9 +++++++-- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 2c794033a494..c9a3ec83b70d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -134,6 +134,9 @@ stages: - script: env displayName: 'print env' + - script: pip list + displayName: 'print pip' + - bash: | PYTHONFAULTHANDLER=1 python -m pytest --junitxml=junit/test-results.xml -raR --maxfail=50 --timeout=300 --durations=25 --cov-report= --cov=lib -n 2 || [[ "$PYTHON_VERSION" = 'Pre' ]] diff --git a/lib/matplotlib/animation.py b/lib/matplotlib/animation.py index 879aa945b00d..4eae790d8200 100644 --- a/lib/matplotlib/animation.py +++ b/lib/matplotlib/animation.py @@ -17,6 +17,7 @@ # * Can blit be enabled for movies? # * Need to consider event sources to allow clicking through multiple figures + import abc import base64 import contextlib @@ -481,14 +482,15 @@ def grab_frame(self, **savefig_kwargs): def finish(self): # Call run here now that all frame grabbing is done. All temp files # are available to be assembled. - self._run() - super().finish() # Will call clean-up - - def _cleanup(self): # Inline to finish() once cleanup() is removed. - super()._cleanup() - if self._tmpdir: - _log.debug('MovieWriter: clearing temporary path=%s', self._tmpdir) - self._tmpdir.cleanup() + try: + self._run() + super().finish() + finally: + if self._tmpdir: + _log.debug( + 'MovieWriter: clearing temporary path=%s', self._tmpdir + ) + self._tmpdir.cleanup() @writers.register('pillow') diff --git a/lib/matplotlib/backends/backend_pdf.py b/lib/matplotlib/backends/backend_pdf.py index 9ca791db0c5a..d035d1680da1 100644 --- a/lib/matplotlib/backends/backend_pdf.py +++ b/lib/matplotlib/backends/backend_pdf.py @@ -1718,8 +1718,13 @@ def _writeImg(self, data, id, smask=None): # Convert to indexed color if there are 256 colors or fewer # This can significantly reduce the file size num_colors = len(img_colors) - img = img.convert(mode='P', dither=Image.NONE, - palette=Image.ADAPTIVE, colors=num_colors) + # These constants were converted to IntEnums and deprecated in + # Pillow 9.2 + dither = getattr(Image, 'Dither', Image).NONE + pmode = getattr(Image, 'Palette', Image).ADAPTIVE + img = img.convert( + mode='P', dither=dither, palette=pmode, colors=num_colors + ) png_data, bit_depth, palette = self._writePng(img) if bit_depth is None or palette is None: raise RuntimeError("invalid PNG header") From 520120b1646a16f82c3f1f392c9f8b084a0fec23 Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Mon, 4 Apr 2022 18:13:01 +0200 Subject: [PATCH 2/2] Revert the clenaup changes --- lib/matplotlib/animation.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/matplotlib/animation.py b/lib/matplotlib/animation.py index 4eae790d8200..879aa945b00d 100644 --- a/lib/matplotlib/animation.py +++ b/lib/matplotlib/animation.py @@ -17,7 +17,6 @@ # * Can blit be enabled for movies? # * Need to consider event sources to allow clicking through multiple figures - import abc import base64 import contextlib @@ -482,15 +481,14 @@ def grab_frame(self, **savefig_kwargs): def finish(self): # Call run here now that all frame grabbing is done. All temp files # are available to be assembled. - try: - self._run() - super().finish() - finally: - if self._tmpdir: - _log.debug( - 'MovieWriter: clearing temporary path=%s', self._tmpdir - ) - self._tmpdir.cleanup() + self._run() + super().finish() # Will call clean-up + + def _cleanup(self): # Inline to finish() once cleanup() is removed. + super()._cleanup() + if self._tmpdir: + _log.debug('MovieWriter: clearing temporary path=%s', self._tmpdir) + self._tmpdir.cleanup() @writers.register('pillow') pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy