Skip to content

Conversation

@pyup-bot
Copy link
Collaborator

@pyup-bot pyup-bot commented Sep 1, 2024

Update Scrapy from 2.5.1 to 2.11.2.

The bot wasn't able to find a changelog for this release. Got an idea?

Links

Update bleach from 4.1.0 to 6.1.0.

Changelog

6.1.0

---------------------------------

**Backwards incompatible changes**

* Dropped support for Python 3.7. (709)

**Security fixes**

None

**Bug fixes**

* Add support for Python 3.12. (710)
* Fix linkify with arrays in querystring (436)
* Handle more cases with < followed by character data (705)
* Fix entities inside a tags in linkification (704)
* Update cap for tinycss2 to <1.3 (702)
* Updated Sphinx requirement
* Add dependabot for github actions and update github actions

6.0.0

----------------------------------

**Backwards incompatible changes**

* ``bleach.clean``, ``bleach.sanitizer.Cleaner``,
``bleach.html5lib_shim.BleachHTMLParser``: the ``tags`` and ``protocols``
arguments were changed from lists to sets.

Old pre-6.0.0:

.. code-block:: python

  bleach.clean(
      "some text",
      tags=["a", "p", "img"],
          ^               ^ list
      protocols=["http", "https"],
               ^               ^ list
  )


New 6.0.0 and later:

.. code-block:: python

  bleach.clean(
      "some text",
      tags={"a", "p", "img"},
          ^               ^ set
      protocols={"http", "https"},
               ^               ^ set
  )

* ``bleach.linkify``, ``bleach.linkifier.Linker``: the ``skip_tags`` and
``recognized_tags`` arguments were changed from lists to sets.

Old pre-6.0.0:

.. code-block:: python

  bleach.linkify(
      "some text",
      skip_tags=["pre"],
               ^     ^ list
  )

  linker = Linker(
      skip_tags=["pre"],
               ^     ^ list
      recognized_tags=html5lib_shim.HTML_TAGS + ["custom-element"],
                                             ^ ^                ^ list
                                             |
                                             | list concatenation
  )

New 6.0.0 and later:

.. code-block:: python

  bleach.linkify(
      "some text",
      skip_tags={"pre"},
               ^     ^ set
  )

  linker = Linker(
      skip_tags={"pre"},
               ^     ^ set
      recognized_tags=html5lib_shim.HTML_TAGS | {"custom-element"},
                                             ^ ^                ^ set
                                             |
                                             | union operator
  )

* ``bleach.sanitizer.BleachSanitizerFilter``: ``strip_allowed_elements`` is now
``strip_allowed_tags``. We now use "tags" everywhere rather than a mishmash
of "tags" in some places and "elements" in others.


**Security fixes**

None


**Bug fixes**

* Add support for Python 3.11. (675)

* Fix API weirness in ``BleachSanitizerFilter``. (649)

We're using "tags" instead of "elements" everywhere--no more weird
overloading of "elements" anymore.

Also, it no longer calls the superclass constructor.

* Add warning when ``css_sanitizer`` isn't set, but the ``style``
attribute is allowed. (676)

* Fix linkify handling of character entities. (501)

* Rework dev dependencies to use ``requirements-dev.txt`` and
``requirements-flake8.txt`` instead of extras.

* Fix project infrastructure to be tox-based so it's easier to have CI
run the same things we're running in development and with flake8
in an isolated environment.

* Update action versions in CI.

* Switch to f-strings where possible. Make tests parametrized to be
easier to read/maintain.

5.0.1

-------------------------------

**Security fixes**

None


**Bug fixes**

* Add missing comma to tinycss2 require. Thank you, shadchin!

* Add url parse tests based on wpt url tests. (688)

* Support scheme-less urls if "https" is in allow list. (662)

* Handle escaping ``<`` in edge cases where it doesn't start a tag. (544)

* Fix reference warnings in docs. (660)

* Correctly urlencode email address parts. Thank you, larseggert! (659)

5.0.0

-------------------------------

**Backwards incompatible changes**

* ``clean`` and ``linkify`` now preserve the order of HTML attributes. Thank
you, askoretskly! (566)

* Drop support for Python 3.6. Thank you, hugovk! (629)

* CSS sanitization in style tags is completely different now. If you're using
Bleach ``clean`` to sanitize css in style tags, you'll need to update your
code and you'll need to install the ``css`` extras::

   pip install 'bleach[css]'

See `the documentation on sanitizing CSS for how to do it
<https://bleach.readthedocs.io/en/latest/clean.html#sanitizing-css>`_. (633)

**Security fixes**

None

**Bug fixes**

* Rework dev dependencies. We no longer have
``requirements-dev.in``/``requirements-dev.txt``. Instead, we're using
``dev`` extras.

See `development docs <https://bleach.readthedocs.io/en/latest/dev.html>`_
for more details. (620)

* Add newline when dropping block-level tags. Thank you, jvanasco! (369)
Links

Update python-dateutil from 2.8.2 to 2.9.0.post0.

Changelog

2.9.0.post0

================================

Bugfixes
--------

- Pinned ``setuptools_scm`` to ``<8``, which should make the generated ``_version.py`` file compatible with all supported versions of Python.

2.9.0

==========================

Data updates
------------

- Updated tzdata version to 2024a. (gh pr 1342)


Features
--------

- Made all ``dateutil`` submodules lazily imported using `PEP 562
<https://www.python.org/dev/peps/pep-0562/>`_. On Python 3.7+, things like
``import dateutil; dateutil.tz.gettz("America/New_York")`` will now work
without explicitly importing ``dateutil.tz``, with the import occurring behind
the scenes on first use. The old behavior remains on Python 3.6 and earlier.
Fixed by Orson Adams. (gh issue 771, gh pr 1007)


Bugfixes
--------

- Removed a call to ``datetime.utcfromtimestamp``, which is deprecated as of Python 3.12. Reported by Hugo van Kemenade (gh pr 1284), fixed by Thomas Grainger (gh pr 1285).


Documentation changes
---------------------

- Added note into docs and tests where relativedelta would return last day of the month
only if the same day on a different month resolves to a date that doesn't exist.
Reported by hawkEye-01 (gh issue 1167). Fixed by Mifrill (gh pr 1168)
Links

Update Pillow from 8.4.0 to 10.4.0.

Changelog

10.4.0

-------------------

- Raise FileNotFoundError if show_file() path does not exist 8178
[radarhere]

- Improved reading 16-bit TGA images with colour 7965
[Yay295, radarhere]

- Deprecate non-image ImageCms modes 8031
[radarhere]

- Fixed processing multiple JPEG EXIF markers 8127
[radarhere]

- Do not preserve EXIFIFD tag by default when saving TIFF images 8110
[radarhere]

- Added ImageFont.load_default_imagefont() 8086
[radarhere]

- Added Image.WARN_POSSIBLE_FORMATS 8063
[radarhere]

- Remove zero-byte end padding when parsing any XMP data 8171
[radarhere]

- Do not detect Ultra HDR images as MPO 8056
[radarhere]

- Raise SyntaxError specific to JP2 8146
[Yay295, radarhere]

- Do not use first frame duration for other frames when saving APNG images 8104
[radarhere]

- Consider I;16 pixel size when using a 1 mode mask 8112
[radarhere]

- When saving multiple PNG frames, convert to mode rather than raw mode 8087
[radarhere]

- Added byte support to FreeTypeFont 8141
[radarhere]

- Allow float center for rotate operations 8114
[radarhere]

- Do not read layers immediately when opening PSD images 8039
[radarhere]

- Restore original thread state 8065
[radarhere]

- Read IM and TIFF images as RGB, rather than RGBX 7997
[radarhere]

- Only preserve TIFF IPTC_NAA_CHUNK tag if type is BYTE or UNDEFINED 7948
[radarhere]

- Clarify ImageDraw2 error message when size is missing 8165
[radarhere]

- Support unpacking more rawmodes to RGBA palettes 7966
[radarhere]

- Removed support for Qt 5 8159
[radarhere]

- Improve ``ImageFont.freetype`` support for XDG directories on Linux 8135
[mamg22, radarhere]

- Improved consistency of XMP handling 8069
[radarhere]

- Use pkg-config to help find libwebp and raqm 8142
[radarhere]

- Accept 't' suffix for libtiff version 8126, 8129
[radarhere]

- Deprecate ImageDraw.getdraw hints parameter 8124
[radarhere, hugovk]

- Added ImageDraw circle() 8085
[void4, hugovk, radarhere]

- Add mypy target to Makefile 8077
[Yay295]

- Added more modes to Image.MODES 7984
[radarhere]

- Deprecate BGR;15, BGR;16 and BGR;24 modes 7978
[radarhere, hugovk]

- Fix ImagingAccess for I;16N on big-endian 7921
[Yay295, radarhere]

- Support reading P mode TIFF images with padding 7996
[radarhere]

- Deprecate support for libtiff < 4 7998
[radarhere, hugovk]

- Corrected ImageShow UnixViewer command 7987
[radarhere]

- Use functools.cached_property in ImageStat 7952
[nulano, hugovk, radarhere]

- Add support for reading BITMAPV2INFOHEADER and BITMAPV3INFOHEADER 7956
[Cirras, radarhere]

- Support reading CMYK JPEG2000 images 7947
[radarhere]

10.3.0

-------------------

- CVE-2024-28219: Use ``strncpy`` to avoid buffer overflow 7928
[radarhere, hugovk]

- Deprecate ``eval()``, replacing it with ``lambda_eval()`` and ``unsafe_eval()`` 7927
[radarhere, hugovk]

- Raise ``ValueError`` if seeking to greater than offset-sized integer in TIFF 7883
[radarhere]

- Add ``--report`` argument to ``__main__.py`` to omit supported formats 7818
[nulano, radarhere, hugovk]

- Added RGB to I;16, I;16L, I;16B and I;16N conversion 7918, 7920
[radarhere]

- Fix editable installation with custom build backend and configuration options 7658
[nulano, radarhere]

- Fix putdata() for I;16N on big-endian 7209
[Yay295, hugovk, radarhere]

- Determine MPO size from markers, not EXIF data 7884
[radarhere]

- Improved conversion from RGB to RGBa, LA and La 7888
[radarhere]

- Support FITS images with GZIP_1 compression 7894
[radarhere]

- Use I;16 mode for 9-bit JPEG 2000 images 7900
[scaramallion, radarhere]

- Raise ValueError if kmeans is negative 7891
[radarhere]

- Remove TIFF tag OSUBFILETYPE when saving using libtiff 7893
[radarhere]

- Raise ValueError for negative values when loading P1-P3 PPM images 7882
[radarhere]

- Added reading of JPEG2000 palettes 7870
[radarhere]

- Added alpha_quality argument when saving WebP images 7872
[radarhere]

- Fixed joined corners for ImageDraw rounded_rectangle() non-integer dimensions 7881
[radarhere]

- Stop reading EPS image at EOF marker 7753
[radarhere]

- PSD layer co-ordinates may be negative 7706
[radarhere]

- Use subprocess with CREATE_NO_WINDOW flag in ImageShow WindowsViewer 7791
[radarhere]

- When saving GIF frame that restores to background color, do not fill identical pixels 7788
[radarhere]

- Fixed reading PNG iCCP compression method 7823
[radarhere]

- Allow writing IFDRational to UNDEFINED tag 7840
[radarhere]

- Fix logged tag name when loading Exif data 7842
[radarhere]

- Use maximum frame size in IHDR chunk when saving APNG images 7821
[radarhere]

- Prevent opening P TGA images without a palette 7797
[radarhere]

- Use palette when loading ICO images 7798
[radarhere]

- Use consistent arguments for load_read and load_seek 7713
[radarhere]

- Turn off nullability warnings for macOS SDK 7827
[radarhere]

- Fix shift-sign issue in Convert.c 7838
[r-barnes, radarhere]

- Open 16-bit grayscale PNGs as I;16 7849
[radarhere]

- Handle truncated chunks at the end of PNG images 7709
[lajiyuan, radarhere]

- Match mask size to pasted image size in GifImagePlugin 7779
[radarhere]

- Release GIL while calling ``WebPAnimDecoderGetNext`` 7782
[evanmiller, radarhere]

- Fixed reading FLI/FLC images with a prefix chunk 7804
[twolife]

- Update wl-paste handling and return None for some errors in grabclipboard() on Linux 7745
[nik012003, radarhere]

- Remove execute bit from ``setup.py`` 7760
[hugovk]

- Do not support using test-image-results to upload images after test failures 7739
[radarhere]

- Changed ImageMath.ops to be static 7721
[radarhere]

- Fix APNG info after seeking backwards more than twice 7701
[esoma, radarhere]

- Deprecate ImageCms constants and versions() function 7702
[nulano, radarhere]

- Added PerspectiveTransform 7699
[radarhere]

- Add support for reading and writing grayscale PFM images 7696
[nulano, hugovk]

- Add LCMS2 flags to ImageCms 7676
[nulano, radarhere, hugovk]

- Rename x64 to AMD64 in winbuild 7693
[nulano]

10.2.0

-------------------

- Add ``keep_rgb`` option when saving JPEG to prevent conversion of RGB colorspace 7553
[bgilbert, radarhere]

- Trim glyph size in ImageFont.getmask() 7669, 7672
[radarhere, nulano]

- Deprecate IptcImagePlugin helpers 7664
[nulano, hugovk, radarhere]

- Allow uncompressed TIFF images to be saved in chunks 7650
[radarhere]

- Concatenate multiple JPEG EXIF markers 7496
[radarhere]

- Changed IPTC tile tuple to match other plugins 7661
[radarhere]

- Do not assign new fp attribute when exiting context manager 7566
[radarhere]

- Support arbitrary masks for uncompressed RGB DDS images 7589
[radarhere, akx]

- Support setting ROWSPERSTRIP tag 7654
[radarhere]

- Apply ImageFont.MAX_STRING_LENGTH to ImageFont.getmask() 7662
[radarhere]

- Optimise ``ImageColor`` using ``functools.lru_cache`` 7657
[hugovk]

- Restricted environment keys for ImageMath.eval() 7655
[wiredfool, radarhere]

- Optimise ``ImageMode.getmode`` using ``functools.lru_cache`` 7641
[hugovk, radarhere]

- Fix incorrect color blending for overlapping glyphs 7497
[ZachNagengast, nulano, radarhere]

- Attempt memory mapping when tile args is a string 7565
[radarhere]

- Fill identical pixels with transparency in subsequent frames when saving GIF 7568
[radarhere]

- Corrected duration when combining multiple GIF frames into single frame 7521
[radarhere]

- Handle disposing GIF background from outside palette 7515
[radarhere]

- Seek past the data when skipping a PSD layer 7483
[radarhere]

- Import plugins relative to the module 7576
[deliangyang, jaxx0n]

- Translate encoder error codes to strings; deprecate ``ImageFile.raise_oserror()`` 7609
[bgilbert, radarhere]

- Support reading BC4U and DX10 BC1 images 6486
[REDxEYE, radarhere, hugovk]

- Optimize ImageStat.Stat.extrema 7593
[florath, radarhere]

- Handle pathlib.Path in FreeTypeFont 7578
[radarhere, hugovk, nulano]

- Added support for reading DX10 BC4 DDS images 7603
[sambvfx, radarhere]

- Optimized ImageStat.Stat.count 7599
[florath]

- Correct PDF palette size when saving 7555
[radarhere]

- Fixed closing file pointer with olefile 0.47 7594
[radarhere]

- Raise ValueError when TrueType font size is not greater than zero 7584, 7587
[akx, radarhere]

- If absent, do not try to close fp when closing image 7557
[RaphaelVRossi, radarhere]

- Allow configuring JPEG restart marker interval on save 7488
[bgilbert, radarhere]

- Decrement reference count for PyObject 7549
[radarhere]

- Implement ``streamtype=1`` option for tables-only JPEG encoding 7491
[bgilbert, radarhere]

- If save_all PNG only has one frame, do not create animated image 7522
[radarhere]

- Fixed frombytes() for images with a zero dimension 7493
[radarhere]

10.1.0

-------------------

- Added TrueType default font to allow for different sizes 7354
[radarhere]

- Fixed invalid argument warning 7442
[radarhere]

- Added ImageOps cover method 7412
[radarhere, hugovk]

- Catch struct.error from truncated EXIF when reading JPEG DPI 7458
[radarhere]

- Consider default image when selecting mode for PNG save_all 7437
[radarhere]

- Support BGR;15, BGR;16 and BGR;24 access, unpacking and putdata 7303
[radarhere]

- Added CMYK to RGB unpacker 7310
[radarhere]

- Improved flexibility of XMP parsing 7274
[radarhere]

- Support reading 8-bit YCbCr TIFF images 7415
[radarhere]

- Allow saving I;16B images as PNG 7302
[radarhere]

- Corrected drawing I;16 points and writing I;16 text 7257
[radarhere]

- Set blue channel to 128 for BC5S 7413
[radarhere]

- Increase flexibility when reading IPTC fields 7319
[radarhere]

- Set C palette to be empty by default 7289
[radarhere]

- Added gs_binary to control Ghostscript use on all platforms 7392
[radarhere]

- Read bounding box information from the trailer of EPS files if specified 7382
[nopperl, radarhere]

- Added reading 8-bit color DDS images 7426
[radarhere]

- Added has_transparency_data 7420
[radarhere, hugovk]

- Fixed bug when reading BC5S DDS images 7401
[radarhere]

- Prevent TIFF orientation from being applied more than once 7383
[radarhere]

- Use previous pixel alpha for QOI_OP_RGB 7357
[radarhere]

- Added BC5U reading 7358
[radarhere]

- Allow getpixel() to accept a list 7355
[radarhere, homm]

- Allow GaussianBlur and BoxBlur to accept a sequence of x and y radii 7336
[radarhere]

- Expand JPEG buffer size when saving optimized or progressive 7345
[radarhere]

- Added session type check for Linux in ImageGrab.grabclipboard() 7332
[TheNooB2706, radarhere, hugovk]

- Allow "loop=None" when saving GIF images 7329
[radarhere]

- Fixed transparency when saving P mode images to PDF 7323
[radarhere]

- Added saving LA images as PDFs 7299
[radarhere]

- Set SMaskInData to 1 for PDFs with alpha 7316, 7317
[radarhere]

- Changed Image mode property to be read-only by default 7307
[radarhere]

- Silence exceptions in _repr_jpeg_ and _repr_png_ 7266
[mtreinish, radarhere]

- Do not use transparency when saving GIF if it has been removed when normalizing mode 7284
[radarhere]

- Fix missing symbols when libtiff depends on libjpeg 7270
[heitbaum]

10.0.1

-------------------

- Updated libwebp to 1.3.2 7395
[radarhere]

- Updated zlib to 1.3 7344
[radarhere]

10.0.0

-------------------

- Fixed deallocating mask images 7246
[radarhere]

- Added ImageFont.MAX_STRING_LENGTH 7244
[radarhere, hugovk]

- Fix Windows build with pyproject.toml 7230
[hugovk, nulano, radarhere]

- Do not close provided file handles with libtiff 7199
[radarhere]

- Convert to HSV if mode is HSV in getcolor() 7226
[radarhere]

- Added alpha_only argument to getbbox() 7123
[radarhere. hugovk]

- Prioritise speed in _repr_png_ 7242
[radarhere]

- Do not use CFFI access by default on PyPy 7236
[radarhere]

- Limit size even if one dimension is zero in decompression bomb check 7235
[radarhere]

- Use --config-settings instead of deprecated --global-option 7171
[radarhere]

- Better C integer definitions 6645
[Yay295, hugovk]

- Fixed finding dependencies on Cygwin 7175
[radarhere]

- Changed grabclipboard() to use PNG instead of JPG compression on macOS 7219
[abey79, radarhere]

- Added in_place argument to ImageOps.exif_transpose() 7092
[radarhere]

- Fixed calling putpalette() on L and LA images before load() 7187
[radarhere]

- Fixed saving TIFF multiframe images with LONG8 tag types 7078
[radarhere]

- Fixed combining single duration across duplicate APNG frames 7146
[radarhere]

- Remove temporary file when error is raised 7148
[radarhere]

- Do not use temporary file when grabbing clipboard on Linux 7200
[radarhere]

- If the clipboard fails to open on Windows, wait and try again 7141
[radarhere]

- Fixed saving multiple 1 mode frames to GIF 7181
[radarhere]

- Replaced absolute PIL import with relative import 7173
[radarhere]

- Replaced deprecated Py_FileSystemDefaultEncoding for Python >= 3.12 7192
[radarhere]

- Improved wl-paste mimetype handling in ImageGrab 7094
[rrcgat, radarhere]

- Added _repr_jpeg_() for IPython display_jpeg 7135
[n3011, radarhere, nulano]

- Use "/sbin/ldconfig" if ldconfig is not found 7068
[radarhere]

- Prefer screenshots using XCB over gnome-screenshot 7143
[nulano, radarhere]

- Fixed joined corners for ImageDraw rounded_rectangle() odd dimensions 7151
[radarhere]

- Support reading signed 8-bit TIFF images 7111
[radarhere]

- Added width argument to ImageDraw regular_polygon 7132
[radarhere]

- Support I mode for ImageFilter.BuiltinFilter 7108
[radarhere]

- Raise error from stderr of Linux ImageGrab.grabclipboard() command 7112
[radarhere]

- Added unpacker from I;16B to I;16 7125
[radarhere]

- Support float font sizes 7107
[radarhere]

- Use later value for duplicate xref entries in PdfParser 7102
[radarhere]

- Load before getting size in __getstate__ 7105
[bigcat88, radarhere]

- Fixed type handling for include and lib directories 7069
[adisbladis, radarhere]

- Remove deprecations for Pillow 10.0.0 7059, 7080
[hugovk, radarhere]

- Drop support for soon-EOL Python 3.7 7058
[hugovk, radarhere]

9.5.0

------------------

- Added ImageSourceData to TAGS_V2 7053
[radarhere]

- Clear PPM half token after use 7052
[radarhere]

- Removed absolute path to ldconfig 7044
[radarhere]

- Support custom comments and PLT markers when saving JPEG2000 images 6903
[joshware, radarhere, hugovk]

- Load before getting size in __array_interface__ 7034
[radarhere]

- Support creating BGR;15, BGR;16 and BGR;24 images, but drop support for BGR;32 7010
[radarhere]

- Consider transparency when applying APNG blend mask 7018
[radarhere]

- Round duration when saving animated WebP images 6996
[radarhere]

- Added reading of JPEG2000 comments 6909
[radarhere]

- Decrement reference count 7003
[radarhere, nulano]

- Allow libtiff_support_custom_tags to be missing 7020
[radarhere]

- Improved I;16N support 6834
[radarhere]

- Added QOI reading 6852
[radarhere, hugovk]

- Added saving RGBA images as PDFs 6925
[radarhere]

- Do not raise an error if os.environ does not contain PATH 6935
[radarhere, hugovk]

- Close OleFileIO instance when closing or exiting FPX or MIC 7005
[radarhere]

- Added __int__ to IFDRational for Python >= 3.11 6998
[radarhere]

- Added memoryview support to Dib.frombytes() 6988
[radarhere, nulano]

- Close file pointer copy in the libtiff encoder if still open 6986
[fcarron, radarhere]

- Raise an error if ImageDraw co-ordinates are incorrectly ordered 6978
[radarhere]

- Added "corners" argument to ImageDraw rounded_rectangle() 6954
[radarhere]

- Added memoryview support to frombytes() 6974
[radarhere]

- Allow comments in FITS images 6973
[radarhere]

- Support saving PDF with different X and Y resolutions 6961
[jvanderneutstulen, radarhere, hugovk]

- Fixed writing int as UNDEFINED tag 6950
[radarhere]

- Raise an error if EXIF data is too long when saving JPEG 6939
[radarhere]

- Handle more than one directory returned by pkg-config 6896
[sebastic, radarhere]

- Do not retry past formats when loading all formats for the first time 6902
[radarhere]

- Do not retry specified formats if they failed when opening 6893
[radarhere]

- Do not unintentionally load TIFF format at first 6892
[radarhere]

- Stop reading when EPS line becomes too long 6897
[radarhere]

- Allow writing IFDRational to BYTE tag 6890
[radarhere]

- Raise ValueError for BoxBlur filter with negative radius 6874
[hugovk, radarhere]

- Support arbitrary number of loaded modules on Windows 6761
[javidcf, radarhere, nulano]

9.4.0

------------------

- Fixed null pointer dereference crash with malformed font 6846
[wiredfool, radarhere]

- Return from ImagingFill early if image has a zero dimension 6842
[radarhere]

- Reversed deprecations for Image constants, except for duplicate Resampling attributes 6830
[radarhere]

- Improve exception traceback readability 6836
[hugovk, radarhere]

- Do not attempt to read IFD1 if absent 6840
[radarhere]

- Fixed writing int as ASCII tag 6800
[radarhere]

- If available, use wl-paste or xclip for grabclipboard() on Linux 6783
[radarhere]

- Added signed option when saving JPEG2000 images 6709
[radarhere]

- Patch OpenJPEG to include ARM64 fix 6718
[radarhere]

- Added support for I;16 modes in putdata() 6825
[radarhere]

- Added conversion from RGBa to RGB 6708
[radarhere]

- Added DDS support for uncompressed L and LA images 6820
[radarhere, REDxEYE]

- Added LightSource tag values to ExifTags 6749
[radarhere]

- Fixed PyAccess after changing ICO size 6821
[radarhere]

- Do not use EXIF from info when saving PNG images 6819
[radarhere]

- Fixed saving EXIF data to MPO 6817
[radarhere]

- Added Exif hide_offsets() 6762
[radarhere]

- Only compare to previous frame when checking for duplicate GIF frames while saving 6787
[radarhere]

- Always initialize all plugins in registered_extensions() 6811
[radarhere]

- Ignore non-opaque WebP background when saving as GIF 6792
[radarhere]

- Only set tile in ImageFile __setstate__ 6793
[radarhere]

- When reading BLP, do not trust JPEG decoder to determine image is CMYK 6767
[radarhere]

- Added IFD enum to ExifTags 6748
[radarhere]

- Fixed bug combining GIF frame durations 6779
[radarhere]

- Support saving JPEG comments 6774
[smason, radarhere]

- Added getxmp() to WebPImagePlugin 6758
[radarhere]

- Added "exact" option when saving WebP 6747
[ashafaei, radarhere]

- Use fractional coordinates when drawing text 6722
[radarhere]

- Fixed writing int as BYTE tag 6740
[radarhere]

- Added MP Format Version when saving MPO 6735
[radarhere]

- Added Interop to ExifTags 6724
[radarhere]

- CVE-2007-4559 patch when building on Windows 6704
[TrellixVulnTeam, nulano, radarhere]

- Fix compiler warning: accessing 64 bytes in a region of size 48 6714
[wiredfool]

- Use verbose flag for pip install 6713
[wiredfool, radarhere]

9.3.0

------------------

- Limit SAMPLESPERPIXEL to avoid runtime DOS 6700
[wiredfool]

- Initialize libtiff buffer when saving 6699
[radarhere]

- Inline fname2char to fix memory leak 6329
[nulano]

- Fix memory leaks related to text features 6330
[nulano]

- Use double quotes for version check on old CPython on Windows 6695
[hugovk]

- Remove backup implementation of Round for Windows platforms 6693
[cgohlke]

- Fixed set_variation_by_name offset 6445
[radarhere]

- Fix malloc in _imagingft.c:font_setvaraxes 6690
[cgohlke]

- Release Python GIL when converting images using matrix operations 6418
[hmaarrfk]

- Added ExifTags enums 6630
[radarhere]

- Do not modify previous frame when calculating delta in PNG 6683
[radarhere]

- Added support for reading BMP images with RLE4 compression 6674
[npjg, radarhere]

- Decode JPEG compressed BLP1 data in original mode 6678
[radarhere]

- Added GPS TIFF tag info 6661
[radarhere]

- Added conversion between RGB/RGBA/RGBX and LAB 6647
[radarhere]

- Do not attempt normalization if mode is already normal 6644
[radarhere]

- Fixed seeking to an L frame in a GIF 6576
[radarhere]

- Consider all frames when selecting mode for PNG save_all 6610
[radarhere]

- Don't reassign crc on ChunkStream close 6627
[wiredfool, radarhere]

- Raise a warning if NumPy failed to raise an error during conversion 6594
[radarhere]

- Show all frames in ImageShow 6611
[radarhere]

- Allow FLI palette chunk to not be first 6626
[radarhere]

- If first GIF frame has transparency for RGB_ALWAYS loading strategy, use RGBA mode 6592
[radarhere]

- Round box position to integer when pasting embedded color 6517
[radarhere, nulano]

- Removed EXIF prefix when saving WebP 6582
[radarhere]

- Pad IM palette to 768 bytes when saving 6579
[radarhere]

- Added DDS BC6H reading 6449
[ShadelessFox, REDxEYE, radarhere]

- Added support for opening WhiteIsZero 16-bit integer TIFF images 6642
[JayWiz, radarhere]

- Raise an error when allocating translucent color to RGB palette 6654
[jsbueno, radarhere]

- Added reading of TIFF child images 6569
[radarhere]

- Improved ImageOps palette handling 6596
[PososikTeam, radarhere]

- Defer parsing of palette into colors 6567
[radarhere]

- Apply transparency to P images in ImageTk.PhotoImage 6559
[radarhere]

- Use rounding in ImageOps contain() and pad() 6522
[bibinhashley, radarhere]

- Fixed GIF remapping to palette with duplicate entries 6548
[radarhere]

- Allow remap_palette() to return an image with less than 256 palette entries 6543
[radarhere]

- Corrected BMP and TGA palette size when saving 6500
[radarhere]

- Do not call load() before draft() in Image.thumbnail 6539
[radarhere]

- Copy palette when converting from P to PA 6497
[radarhere]

- Allow RGB and RGBA values for PA image putpixel 6504
[radarhere]

- Removed support for tkinter in PyPy before Python 3.6 6551
[nulano]

- Do not use CCITTFaxDecode filter if libtiff is not available 6518
[radarhere]

- Fallback to not using mmap if buffer is not large enough 6510
[radarhere]

- Fixed writing bytes as ASCII tag 6493
[radarhere]

- Open 1 bit EPS in mode 1 6499
[radarhere]

- Removed support for tkinter before Python 1.5.2 6549
[radarhere]

- Allow default ImageDraw font to be set 6484
[radarhere, hugovk]

- Save 1 mode PDF using CCITTFaxDecode filter 6470
[radarhere]

- Added support for RGBA PSD images 6481
[radarhere]

- Parse orientation from XMP tag contents 6463
[bigcat88, radarhere]

- Added support for reading ATI1/ATI2 (BC4/BC5) DDS images 6457
[REDxEYE, radarhere]

- Do not clear GIF tile when checking number of frames 6455
[radarhere]

- Support saving multiple MPO frames 6444
[radarhere]

- Do not double quote Pillow version for setuptools >= 60 6450
[radarhere]

- Added ABGR BMP mask mode 6436
[radarhere]

- Fixed PSDraw rectangle 6429
[radarhere]

- Raise ValueError if PNG sRGB chunk is truncated 6431
[radarhere]

- Handle missing Python executable in ImageShow on macOS 6416
[bryant1410, radarhere]

9.2.0

------------------

- Deprecate ImageFont.getsize and related functions 6381
[nulano, radarhere]

- Fixed null check for fribidi_version_info in FriBiDi shim 6376
[nulano]

- Added GIF decompression bomb check 6402
[radarhere]

- Handle PCF fonts files with less than 256 characters 6386
[dawidcrivelli, radarhere]

- Improved GIF optimize condition 6378
[raygard, radarhere]

- Reverted to __array_interface__ with the release of NumPy 1.23 6394
[radarhere]

- Pad PCX palette to 768 bytes when saving 6391
[radarhere]

- Fixed bug with rounding pixels to palette colors 6377
[btrekkie, radarhere]

- Use gnome-screenshot on Linux if available 6361
[radarhere, nulano]

- Fixed loading L mode BMP RLE8 images 6384
[radarhere]

- Fixed incorrect operator in ImageCms error 6370
[LostBenjamin, hugovk, radarhere]

- Limit FPX tile size to avoid extending outside image 6368
[radarhere]

- Added support for decoding plain PPM formats 5242
[Piolie, radarhere]

- Added apply_transparency() 6352
[radarhere]

- Fixed behaviour change from endian fix 6197
[radarhere]

- Allow remapping P images with RGBA palettes 6350
[radarhere]

- Fixed drawing translucent 1px high polygons 6278
[radarhere]

- Pad COLORMAP to 768 items when saving TIFF 6232
[radarhere]

- Fix P -> PA conversion 6337
[RedShy, radarhere]

- Once exif data is parsed, do not reload unless it changes 6335
[radarhere]

- Only try to connect discontiguous corners at the end of edges 6303
[radarhere]

- Improve transparency handling when saving GIF images 6176
[radarhere]

- Do not update GIF frame position until local image is found 6219
[radarhere]

- Netscape GIF extension belongs after the global color table 6211
[radarhere]

- Only write GIF comments at the beginning of the file 6300
[raygard, radarhere]

- Separate multiple GIF comment blocks with newlines 6294
[raygard, radarhere]

- Always use GIF89a for comments 6292
[raygard, radarhere]

- Ignore compression value from BMP info dictionary when saving as TIFF 6231
[radarhere]

- If font is file-like object, do not re-read from object to get variant 6234
[radarhere]

- Raise ValueError when trying to access internal fp after close 6213
[radarhere]

- Support more affine expression forms in im.point() 6254
[benrg, radarhere]

- Populate Python palette in fromarray() 6283
[radarhere]

- Raise ValueError if PNG chunks are truncated 6253
[radarhere]

- Use durations from each frame by default when saving GIFs 6265
[radarhere]

- Adjust BITSPERSAMPLE to match SAMPLESPERPIXEL when opening TIFFs 6270
[radarhere]

- Search pkgconf system libs/cflags 6138
[jameshilliard, radarhere]

- Raise ValueError for invalid PPM maxval 6242
[radarhere]

- Corrected screencapture argument in ImageGrab.grab() 6244
[axt-one]

- Deprecate support for Qt 5 (PyQt5 and PySide2) 6237
[hugovk, radarhere]

- Increase wait time of temporary file deletion on Windows 6224
[AlexTedeschi]

- Deprecate FreeTypeFont.getmask2 fill parameter 6220
[nulano, radarhere, hugovk]

- Round lut values where necessary 6188
[radarhere]

- Load before getting size in resize() 6190
[radarhere]

- Load image before performing size calculations in thumbnail() 6186
[radarhere]

- Deprecated PhotoImage.paste() box parameter 6178
[radarhere]

9.1.1

------------------

- When reading past the end of a TGA scan line, reduce bytes left. CVE-2022-30595
[radarhere]

- Do not open images with zero or negative height 6269
[radarhere]

9.1.0

------------------

- Add support for multiple component transformation to JPEG2000 5500
[scaramallion, radarhere, hugovk]

- Fix loading FriBiDi on Alpine 6165
[nulano]

- Added setting for converting GIF P frames to RGB 6150
[radarhere]

- Allow 1 mode images to be inverted 6034
[radarhere]

- Raise ValueError when trying to save empty JPEG 6159
[radarhere]

- Always save TIFF with contiguous planar configuration 5973
[radarhere]

- Connected discontiguous polygon corners 5980
[radarhere]

- Ensure Tkinter hook is activated for getimage() 6032
[radarhere]

- Use screencapture arguments to crop on macOS 6152
[radarhere]

- Do not mark L mode JPEG as 1 bit in PDF 6151
[radarhere]

- Added support for reading I;16R TIFF images 6132
[radarhere]

- If an error occurs after creating a file, remove the file 6134
[radarhere]

- Fixed calling DisplayViewer or XVViewer without a title 6136
[radarhere]

- Retain RGBA transparency when saving multiple GIF frames 6128
[radarhere]

- Save additional ICO frames with other bit depths if supplied 6122
[radarhere]

- Handle EXIF data truncated to just the header 6124
[radarhere]

- Added support for reading BMP images with RLE8 compression 6102
[radarhere]

- Support Python distributions where _tkinter is compiled in 6006
[lukegb]

- Added support for PPM arbitrary maxval 6119
[radarhere]

- Added BigTIFF reading 6097
[radarhere]

- When converting, clip I;16 to be unsigned, not signed 6112
[radarhere]

- Fixed loading L mode GIF with transparency 6086
[radarhere]

- Improved handling of PPM header 5121
[Piolie, radarhere]

- Reset size when seeking away from "Large Thumbnail" MPO frame 6101
[radarhere]

- Replace requirements.txt with extras 6072
[hugovk, radarhere]

- Added PyEncoder and support BLP saving 6069
[radarhere]

- Handle TGA images with packets that cross scan lines 6087
[radarhere]

- Added FITS reading 6056
[radarhere, hugovk]

- Added rawmode argument to Image.getpalette() 6061
[radarhere]

- Fixed BUFR, GRIB and HDF5 stub saving 6071
[radarhere]

- Do not automatically remove temporary ImageShow files on Unix 6045
[radarhere]

- Correctly read JPEG compressed BLP images 4685
[Meithal, radarhere]

- Merged _MODE_CONV typ into ImageMode as typestr 6057
[radarhere]

- Consider palette size when converting and in getpalette() 6060
[radarhere]

- Added enums 5954
[radarhere]

- Ensure image is opaque after converting P to PA with RGB palette 6052
[radarhere]

- Attach RGBA palettes from putpalette() when suitable 6054
[radarhere]

- Added get_photoshop_blocks() to parse Photoshop TIFF tag 6030
[radarhere]

- Drop excess values in BITSPERSAMPLE 6041
[mikhail-iurkov]

- Added unpacker from RGBA;15 to RGB 6031
[radarhere]

- Enable arm64 for MSVC on Windows 5811
[gaborkertesz-linaro, gaborkertesz]

- Keep IPython/Jupyter text/plain output stable 5891
[shamrin, radarhere]

- Raise an error when performing a negative crop 5972
[radarhere, hugovk]

- Deprecated show_file "file" argument in favour of "path" 5959
[radarhere]

- Fixed SPIDER images for use with Bio-formats library 5956
[radarhere]

- Ensure duplicated file pointer is closed 5946
[radarhere]

- Added specific error if path coordinate type is incorrect 5942
[radarhere]

- Return an empty bytestring from tobytes() for an empty image 5938
[radarhere]

- Remove readonly from Image.__eq__ 5930
[hugovk]

9.0.1

------------------

- In show_file, use os.remove to remove temporary images. CVE-2022-24303 6010
[radarhere, hugovk]

- Restrict builtins within lambdas for ImageMath.eval. CVE-2022-22817 6009
[radarhere]

9.0.0

------------------

- Restrict builtins for ImageMath.eval(). CVE-2022-22817 5923
[radarhere]

- Ensure JpegImagePlugin stops at the end of a truncated file 5921
[radarhere]

- Fixed ImagePath.Path array handling. CVE-2022-22815, CVE-2022-22816 5920
[radarhere]

- Remove consecutive duplicate tiles that only differ by their offset 5919
[radarhere]

- Improved I;16 operations on big endian 5901
[radarhere]

- Limit quantized palette to number of colors 5879
[radarhere]

- Fixed palette index for zeroed color in FASTOCTREE quantize 5869
[radarhere]

- When saving RGBA to GIF, make use of first transparent palette entry 5859
[radarhere]

- Pass SAMPLEFORMAT to libtiff 5848
[radarhere]

- Added rounding when converting P and PA 5824
[radarhere]

- Improved putdata() documentation and data handling 5910
[radarhere]

- Exclude carriage return in PDF regex to help prevent ReDoS 5912
[hugovk]

- Fixed freeing pointer in ImageDraw.Outline.transform 5909
[radarhere]

- Added ImageShow support for xdg-open 5897
[m-shinder, radarhere]

- Support 16-bit grayscale ImageQt conversion 5856
[cmbruns, radarhere]

- Convert subsequent GIF frames to RGB or RGBA 5857
[radarhere]

- Do not prematurely return in ImageFile when saving to stdout 5665
[infmagic2047, radarhere]

- Added support for top right and bottom right TGA orientations 5829
[radarhere]

- Corrected ICNS file length in header 5845
[radarhere]

- Block tile TIFF tags when saving 5839
[radarhere]

- Added line width argument to polygon 5694
[radarhere]

- Do not redeclare class each time when converting to NumPy 5844
[radarhere]

- Only prevent repeated polygon pixels when drawing with transparency 5835
[radarhere]

- Add support for pickling TrueType fonts 5826
[hugovk, radarhere]

- Only prefer command line tools SDK on macOS over default MacOSX SDK 5828
[radarhere]

- Drop support for soon-EOL Python 3.6 5768
[hugovk, nulano, radarhere]

- Fix compilation on 64-bit Termux 5793
[landfillbaby]

- Use title for display in ImageShow 5788
[radarhere]

- Remove support for FreeType 2.7 and older 5777
[hugovk, radarhere]

- Fix for PyQt6 5775
[hugovk, radarhere]

- Removed deprecated PILLOW_VERSION, Image.show command parameter, Image._showxv and ImageFile.raise_ioerror 5776
[radarhere]
Links

Update pytest from 6.2.5 to 8.3.2.

Changelog

8.3.1

=========================

The 8.3.0 release failed to include the change notes and docs for the release. This patch release remedies this. There are no other changes.

8.3.0

=========================

New features
------------

- `12231 <https://github.com/pytest-dev/pytest/issues/12231>`_: Added `--xfail-tb` flag, which turns on traceback output for XFAIL results.

* If the `--xfail-tb` flag is not given, tracebacks for XFAIL results are NOT shown.
* The style of traceback for XFAIL is set with `--tb`, and can be `auto|long|short|line|native|no`.
* Note: Even if you have `--xfail-tb` set, you won't see them if `--tb=no`.

Some history:

With pytest 8.0, `-rx` or `-ra` would not only turn on summary reports for xfail, but also report the tracebacks for xfail results. This caused issues with some projects that utilize xfail, but don't want to see all of the xfail tracebacks.

This change detaches xfail tracebacks from `-rx`, and now we turn on xfail tracebacks with `--xfail-tb`. With this, the default `-rx`/ `-ra` behavior is identical to pre-8.0 with respect to xfail tracebacks. While this is a behavior change, it brings default behavior back to pre-8.0.0 behavior, which ultimately was considered the better course of action.

-- by :user:`okken`


- `12281 <https://github.com/pytest-dev/pytest/issues/12281>`_: Added support for keyword matching in marker expressions.

Now tests can be selected by marker keyword arguments.
Supported values are :class:`int`, (unescaped) :class:`str`, :class:`bool` & :data:`None`.

See :ref:`marker examples <marker_keyword_expression_example>` for more information.

-- by :user:`lovetheguitar`


- `12567 <https://github.com/pytest-dev/pytest/issues/12567>`_: Added ``--no-fold-skipped`` command line option.

If this option is set, then skipped tests in short summary are no longer grouped
by reason but all tests are printed individually with their nodeid in the same
way as other statuses.

-- by :user:`pbrezina`



Improvements in existing functionality
--------------------------------------

- `12469 <https://github.com/pytest-dev/pytest/issues/12469>`_: The console output now uses the "third-party plugins" terminology,
replacing the previously established but confusing and outdated
reference to :std:doc:`setuptools <setuptools:index>`
-- by :user:`webknjaz`.


- `12544 <https://github.com/pytest-dev/pytest/issues/12544>`_, `#12545 <https://github.com/pytest-dev/pytest/issues/12545>`_: Python virtual environment detection was improved by
checking for a :file:`pyvenv.cfg` file, ensuring reliable detection on
various platforms -- by :user:`zachsnickers`.


- `2871 <https://github.com/pytest-dev/pytest/issues/2871>`_: Do not truncate arguments to functions in output when running with `-vvv`.


- `389 <https://github.com/pytest-dev/pytest/issues/389>`_: The readability of assertion introspection of bound methods has been enhanced
-- by :user:`farbodahm`, :user:`webknjaz`, :user:`obestwalter`, :user:`flub`
and :user:`glyphack`.

Earlier, it was like:

.. code-block:: console

   =================================== FAILURES ===================================
   _____________________________________ test _____________________________________

       def test():
   >       assert Help().fun() == 2
   E       assert 1 == 2
   E        +  where 1 = <bound method Help.fun of <example.Help instance at 0x256a830>>()
   E        +    where <bound method Help.fun of <example.Help instance at 0x256a830>> = <example.Help instance at 0x256a830>.fun
   E        +      where <example.Help instance at 0x256a830> = Help()

   example.py:7: AssertionError
   =========================== 1 failed in 0.03 seconds ===========================


And now it's like:

.. code-block:: console

   =================================== FAILURES ===================================
   _____________________________________ test _____________________________________

       def test():
   >       assert Help().fun() == 2
   E       assert 1 == 2
   E        +  where 1 = fun()
   E        +    where fun = <test_local.Help object at 0x1074be230>.fun
   E        +      where <test_local.Help object at 0x1074be230> = Help()

   test_local.py:13: AssertionError
   =========================== 1 failed in 0.03 seconds ===========================


- `7662 <https://github.com/pytest-dev/pytest/issues/7662>`_: Added timezone information to the testsuite timestamp in the JUnit XML report.



Bug fixes
---------

- `11706 <https://github.com/pytest-dev/pytest/issues/11706>`_: Fixed reporting of teardown errors in higher-scoped fixtures when using `--maxfail` or `--stepwise`.

Originally added in pytest 8.0.0, but reverted in 8.0.2 due to a regression in pytest-xdist.
This regression was fixed in pytest-xdist 3.6.1.


- `11797 <https://github.com/pytest-dev/pytest/issues/11797>`_: :func:`pytest.approx` now correctly handles :class:`Sequence <collections.abc.Sequence>`-like objects.


- `12204 <https://github.com/pytest-dev/pytest/issues/12204>`_, `#12264 <https://github.com/pytest-dev/pytest/issues/12264>`_: Fixed a regression in pytest 8.0 where tracebacks get longer and longer when multiple
tests fail due to a shared higher-scope fixture which raised -- by :user:`bluetech`.

Also fixed a similar regression in pytest 5.4 for collectors which raise during setup.

The fix necessitated internal changes which may affect some plugins:

* ``FixtureDef.cached_result[2]`` is now a tuple ``(exc, tb)``
 instead of ``exc``.
* ``SetupState.stack`` failures are now a tuple ``(exc, tb)``
 instead of ``exc``.


- `12275 <https://github.com/pytest-dev/pytest/issues/12275>`_: Fixed collection error upon encountering an :mod:`abstract <abc>` class, including abstract `unittest.TestCase` subclasses.


- `12328 <https://github.com/pytest-dev/pytest/issues/12328>`_: Fixed a regression in pytest 8.0.0 where package-scoped parameterized items were not correctly reordered to minimize setups/teardowns in some cases.


- `12424 <https://github.com/pytest-dev/pytest/issues/12424>`_: Fixed crash with `assert testcase is not None` assertion failure when re-running unittest tests using plugins like pytest-rerunfailures. Regressed in 8.2.2.


- `12472 <https://github.com/pytest-dev/pytest/issues/12472>`_: Fixed a crash when returning category ``"error"`` or ``"failed"`` with a custom test status from :hook:`pytest_report_teststatus` hook -- :user:`pbrezina`.


- `12505 <https://github.com/pytest-dev/pytest/issues/12505>`_: Improved handling of invalid regex patterns in :func:`pytest.raises(match=r'...') <pytest.raises>` by providing a clear error message.


- `12580 <https://github.com/pytest-dev/pytest/issues/12580>`_: Fixed a crash when using the cache class on Windows and the cache directory was created concurrently.


- `6962 <https://github.com/pytest-dev/pytest/issues/6962>`_: Parametrization parameters are now compared using `==` instead of `is` (`is` is still used as a fallback if the parameter does not support `==`).
This fixes use of parameters such as lists, which have a different `id` but compare equal, causing fixtures to be re-computed instead of being cached.


- `7166 <https://github.com/pytest-dev/pytest/issues/7166>`_: Fixed progress percentages (the ``[ 87%]`` at the edge of the screen) sometimes not aligning correctly when running with pytest-xdist ``-n``.



Improved documentation
----------------------

- `12153 <https://github.com/pytest-dev/pytest/issues/12153>`_: Documented using :envvar:`PYTEST_VERSION` to detect if code is running from within a pytest run.


- `12469 <https://github.com/pytest-dev/pytest/issues/12469>`_: The external plugin mentions in the documentation now avoid mentioning
:std:doc:`setuptools entry-points <setuptools:index>` as the concept is
much more generic nowadays. Instead, the terminology of "external",
"installed", or "third-party" plugins (or packages) replaces that.

-- by :user:`webknjaz`


- `12577 <https://github.com/pytest-dev/pytest/issues/12577>`_: `CI` and `BUILD_NUMBER` environment variables role is discribed in
the reference doc. They now also appear when doing `pytest -h`
-- by :user:`MarcBresson`.



Contributor-facing changes
--------------------------

- `12467 <https://github.com/pytest-dev/pytest/issues/12467>`_: Migrated all internal type-annotations to the python3.10+ style by using the `annotations` future import.

-- by :user:`RonnyPfannschmidt`


- `11771 <https://github.com/pytest-dev/pytest/issues/11771>`_, `#12557 <https://github.com/pytest-dev/pytest/issues/12557>`_: The PyPy runtime version has been updated to 3.9 from 3.8 that introduced
a flaky bug at the garbage collector which was not expected to fix there
as the 3.8 is EoL.

-- by :user:`x612skm`


- `12493 <https://github.com/pytest-dev/pytest/issues/12493>`_: The change log draft preview integration has been refactored to use a
third party extension ``sphinxcontib-towncrier``. The previous in-repo
script was putting the change log preview file at
:file:`doc/en/_changelog_towncrier_draft.rst`. Said file is no longer
ignored in Git and might show up among untracked files in the
development environments of the contributors. To address that, the
contributors can run the following command that will clean it up:

.. code-block:: console

  $ git clean -x -i -- doc/en/_changelog_towncrier_draft.rst

-- by :user:`webknjaz`


- `12498 <https://github.com/pytest-dev/pytest/issues/12498>`_: All the undocumented ``tox`` environments now have descriptions.
They can be listed in one's development environment by invoking
``tox -av`` in a terminal.

-- by :user:`webknjaz`


- `12501 <https://github.com/pytest-dev/pytest/issues/12501>`_: The changelog configuration has been updated to introduce more accurate
audience-tailored categories. Previously, there was a ``trivial``
change log fragment type with an unclear and broad meaning. It was
removed and we now have ``contrib``, ``misc`` and ``packaging`` in
place of it.

The new change note types target the readers who are downstream
packagers and project contributors. Additionally, the miscellaneous
section is kept for unspecified updates that do not fit anywhere else.

-- by :user:`webknjaz`


- `12502 <https://github.com/pytest-dev/pytest/issues/12502>`_: The UX of the GitHub automation making pull requests to update the
plugin list has been updated. Previously, the maintainers had to close
the automatically created pull requests and re-open them to trigger the
CI runs. From now on, they only need to click the `Ready for review`
button instead.

-- by :user:`webknjaz`


- `12522 <https://github.com/pytest-dev/pytest/issues/12522>`_: The ``:pull:`` RST role has been replaced with a shorter
``:pr:`` due to starting to use the implementation from
the third-party :pypi:`sphinx-issues` Sphinx extension
-- by :user:`webknjaz`.


- `12531 <https://github.com/pytest-dev/pytest/issues/12531>`_: The coverage reporting configuration has been updated to exclude
pytest's own tests marked as expected to fail from the coverage
report. This has an effect of reducing the influence of flaky
tests on the resulting number.

-- by :user:`webknjaz`


- `12533 <https://github.com/pytest-dev/pytest/issues/12533>`_: The ``extlinks`` Sphinx extension is no longer enabled. The ``:bpo:``
role it used to declare has been removed with that. BPO itself has
migrated to GitHub some years ago and it is possible to link the
respective issues by using their GitHub issue numbers and the
``:issue:`` role that the ``sphinx-issues`` extension implements.

-- by :user:`webknjaz`


- `12562 <https://github.com/pytest-dev/pytest/issues/12562>`_: Possible typos in using the ``:user:`` RST role is now being linted
through the pre-commit tool integration -- by :user:`webknjaz`.

8.2.2

=========================

Bug Fixes
---------

- `12355 <https://github.com/pytest-dev/pytest/issues/12355>`_: Fix possible catastrophic performance slowdown on a certain parametrization pattern involving many higher-scoped parameters.


- `12367 <https://github.com/pytest-dev/pytest/issues/12367>`_: Fix a regression in pytest 8.2.0 where unittest class instances (a fresh one is created for each test) were not released promptly on test teardown but only on session teardown.


- `12381 <https://github.com/pytest-dev/pytest/issues/12381>`_: Fix possible "Directory not empty" crashes arising from concurent cache dir (``.pytest_cache``) creation. Regressed in pytest 8.2.0.



Improved Documentation
----------------------

- `12290 <https://github.com/pytest-dev/pytest/issues/12290>`_: Updated Sphinx theme to use Furo instead of Flask, enabling Dark mode theme.


- `12356 <https://github.com/pytest-dev/pytest/issues/12356>`_: Added a subsection to the documentation for debugging flaky tests to mention
lack of thread safety in pytest as a possible source of flakyness.


- `12363 <https://github.com/pytest-dev/pytest/issues/12363>`_: The documentation webpages now links to a canonical version to reduce outdated documentation in search engine results.

8.2.1

=========================

Improvements
------------

- `12334 <https://github.com/pytest-dev/pytest/issues/12334>`_: Support for Python 3.13 (beta1 at the time of writing).



Bug Fixes
---------

- `12120 <https://github.com/pytest-dev/pytest/issues/12120>`_: Fix `PermissionError` crashes arising from directories which are not selected on the command-line.


- `12191 <https://github.com/pytest-dev/pytest/issues/12191>`_: Keyboard interrupts and system exits are now properly handled during the test collection.


- `12300 <https://github.com/pytest-dev/pytest/issues/12300>`_: Fixed handling of 'Function not implemented' error under squashfuse_ll, which is a different way to say that the mountpoint is read-only.


- `12308 <https://github.com/pytest-dev/pytest/issues/12308>`_: Fix a regression in pytest 8.2.0 where the permissions of automatically-created ``.pytest_cache`` directories became ``rwx------`` instead of the expected ``rwxr-xr-x``.



Trivial/Internal Changes
------------------------

- `12333 <https://github.com/pytest-dev/pytest/issues/12333>`_: pytest releases are now attested using the recent `Artifact Attestation <https://github.blog/2024-05-02-introducing-artifact-attestations-now-in-public-beta/>`_ support from GitHub, allowing users to verify the provenance of pytest's sdist and wheel artifacts.

8.2.0

=========================

Breaking Changes
----------------

- `12089 <https://github.com/pytest-dev/pytest/pull/12089>`_: pytest now requires that :class:`unittest.TestCase` subclasses can be instantiated freely using ``MyTestCase('runTest')``.

If the class doesn't allow this, you may see an error during collection such as ``AttributeError: 'MyTestCase' object has no attribute 'runTest'``.

Classes which do not override ``__init__``, or do not access the test method in ``__init__`` using ``getattr`` or similar, are unaffected.

Classes which do should take care to not crash when ``"runTest"`` is given, as is shown in `unittest.TestCases's implementation <https://github.com/python/cpython/blob/51aefc5bf907ddffaaf083ded0de773adcdf08c8/Lib/unittest/case.py#L419-L426>`_.
Alternatively, consider using :meth:`setUp <unittest.TestCase.setUp>` instead of ``__init__``.

If you run into this issue using ``tornado.AsyncTestCase``, please see `issue 12263 <https://github.com/pytest-dev/pytest/issues/12263>`_.

If you run into this issue using an abstract ``TestCase`` subclass, please see `issue 12275 <https://github.com/pytest-dev/pytest/issues/12275>`_.

Historical note: the effect of this change on custom TestCase implementations was not properly considered initially, this is why it was done in a minor release. We apologize for the inconvenience.

Deprecations
------------

- `12069 <https://github.com/pytest-dev/pytest/issues/12069>`_: A deprecation warning is now raised when implementations of one of the following hooks request a deprecated ``py.path.local`` parameter instead of the ``pathlib.Path`` parameter which replaced it:

- :hook:`pytest_ignore_collect` - the ``path`` parameter - use ``collection_path`` instead.
- :hook:`pytest_collect_file` - the ``path`` parameter - use ``file_path`` instead.
- :hook:`pytest_pycollect_makemodule` - the ``path`` parameter - use ``module_path`` instead.
- :hook:`pytest_report_header` - the ``startdir`` parameter - use ``start_path`` instead.
- :hook:`pytest_report_collectionfinish` - the ``startdir`` parameter - use ``start_path`` instead.

The replacement parameters are available since pytest 7.0.0.
The old parameters will be removed in pytest 9.0.0.

See :ref:`legacy-path-hooks-deprecated` for more details.



Features
--------

- `11871 <https://github.com/pytest-dev/pytest/issues/11871>`_: Added support for reading command line arguments from a file using the prefix character `, like e.g.: ``pytest tests.txt``. The file must have one argument per line.

See :ref:`Read arguments from file <args-from-file>` for details.



Improvements
------------

- `11523 <https://github.com/pytest-dev/pytest/issues/11523>`_: :func:`pytest.importorskip` will now issue a warning if the module could be found, but raised :class:`ImportError` instead of :class:`ModuleNotFoundError`.

The warning can be suppressed by passing ``exc_type=ImportError`` to :func:`pytest.importorskip`.

See :ref:`import-or-skip-import-error` for details.


- `11728 <https://github.com/pytest-dev/pytest/issues/11728>`_: For ``unittest``-based tests, exceptions during class cleanup (as raised by functions registered with :meth:`TestCase.addClassCleanup <unittest.TestCase.addClassCleanup>`) are now reported instead of silently failing.


- `11777 <https://github.com/pytest-dev/pytest/issues/11777>`_: Text is no longer truncated in the ``short test summary info`` section when ``-vv`` is given.


- `12112 <https://github.com/pytest-dev/pytest/issues/12112>`_: Improved namespace packages detection when :confval:`consider_namespace_packages` is enabled, covering more situations (like editable installs).


- `9502 <https://github.com/pytest-dev/pytest/issues/9502>`_: Added :envvar:`PYTEST_VERSION` environment variable which is defined at the start of the pytest session and undefined afterwards. It contains the value of ``pytest.__version__``, and among other things can be used to easily check if code is running from within a pytest run.



Bug Fixes
---------

- `12065 <https://github.com/pytest-dev/pytest/issues/12065>`_: Fixed a regression in pytest 8.0.0 where test classes containing ``setup_method`` and tests using ``staticmethod`` or ``classmethod`` would crash with ``AttributeError: 'NoneType' object has no attribute 'setup_method'``.

Now the :attr:`request.instance <pytest.FixtureRequest.instance>` attribute of tests using ``staticmethod`` and ``classmethod`` is no longer ``None``, but a fresh instance of the class, like in non-static methods.
Previously it was ``None``, and all fixtures of such tests would share a single ``self``.


- `12135 <https://github.com/pytest-dev/pytest/issues/12135>`_: Fixed issue where fixtures adding their finalizer multiple times to fixtures they request would cause unreliable and non-intuitive teardown ordering in some instances.


- `12194 <https://github.com/pytest-dev/pytest/issues/12194>`_: Fixed a bug with ``--importmode=importlib`` and ``--doctest-modules`` where child modules did not appear as attributes in parent modules.


- `1489 <https://github.com/pytest-dev/pytest/issues/1489>`_: Fixed some instances where teardown of higher-scoped fixtures was not happening in the reverse order they were initialized in.



Trivial/Internal Changes
------------------------

- `12069 <https://github.com/pytest-dev/pytest/issues/12069>`_: ``pluggy>=1.5.0`` is now required.


- `12167 <https://github.com/pytest-dev/pytest/issues/12167>`_: :ref:`cache <cache>`: create supporting files (``CACHEDIR.TAG``, ``.gitignore``, etc.) in a temporary directory to provide atomic semantics.

8.1.2

=========================

Bug Fixes
---------

- `12114 <https://github.com/pytest-dev/pytest/issues/12114>`_: Fixed error in :func:`pytest.approx` when used with `numpy` arrays and comparing with other types.

8.1.1

=========================

.. note::

    This release is not a usual bug fix release -- it contains features and improvements, being a follow up
    to ``8.1.0``, which has been yanked from PyPI.

Features
--------

- `11475 <https://github.com/pytest-dev/pytest/issues/11475>`_: Added the new :confval:`consider_namespace_packages` configuration option, defaulting to ``False``.

If set to ``True``, pytest will attempt to identify modules that are part of `namespace packages <https://packaging.python.org/en/latest/guides/packaging-namespace-packages>`__ when importing modules.


- `11653 <https://github.com/pytest-dev/pytest/issues/11653>`_: Added the new :confval:`verbosity_test_cases` configuration option for fine-grained control of test execution verbosity.
See :ref:`Fine-grained verbosity <pytest.fine_grained_verbosity>` for more details.



Improvements
------------

- `10865 <https://github.com/pytest-dev/pytest/issues/10865>`_: :func:`pytest.warns` now validates that :func:`warnings.warn` was called with a `str` or a `Warning`.
Currently in Python it is possible to use other types, however this causes an exception when :func:`warnings.filterwarnings` is used to filter those warnings (see `CPython 103577 <https://github.com/python/cpython/issues/103577>`__ for a discussion).
While this can be considered a bug in CPython, we decided to put guards in pytest as the error message produced without this check in place is confusing.


- `11311 <https://github.com/pytest-dev/pytest/issues/11311>`_: When using ``--override-ini`` for paths in invocations without a configuration file defined, the current working directory is used
as the relative directory.

Previously this would raise an :class:`AssertionError`.


- `11475 <https://github.com/pytest-dev/pytest/issues/11475>`_: :ref:`--import-mode=importlib <import-mode-importlib>` now tries to import modules using the standard import mechanism (but still without changing :py:data:`sys.path`), falling back to importing modules directly only if that fails.

This means that installed packages will be imported under their canonical name if possible first, for example ``app.core.models``, instead of having the module name always be derived from their path (for example ``.env310.lib.s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants