mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2026-09-03 05:10:16 +03:00
Bumps [fpdf2](https://github.com/py-pdf/fpdf2) from 2.8.7 to 2.8.8. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/py-pdf/fpdf2/releases">fpdf2's releases</a>.</em></p> <blockquote> <h2>Add resource access controls, SVG complexity limits, Optional Content Groups, and other features and bug fixes</h2> <h2>[2.8.8] - 2026-08-09</h2> <blockquote> <p>[!WARNING] Upgrading to <strong>fpdf2 2.8.8</strong> is strongly recommended for applications that render user-provided images, SVGs, or HTML content.</p> </blockquote> <h3>Added</h3> <ul> <li>Punjabi (pa) tutorial translation - thanks to <a href="https://github.com/Pawansingh3889"><code>@Pawansingh3889</code></a></li> <li><code>FPDF.svg_limits</code> and <code>SVGLimits</code> to configure SVG complexity limits while rendering SVG images</li> <li><code>resource_access_policy</code> and <a href="https://py-pdf.github.io/fpdf2/Security.html">Security considerations</a> documentation</li> <li><a href="https://py-pdf.github.io/fpdf2/OptionalContent.html"><code>FPDF.optional_content()</code></a> context manager to mark content as visible on screen only or in print only, using PDF Optional Content Groups - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/441">#441</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/441">py-pdf/fpdf2#441</a>), based on a recipe by <a href="https://github.com/digidigital"><code>@digidigital</code></a> - thanks to <a href="https://github.com/eugen-goebel"><code>@eugen-goebel</code></a></li> <li>basic support for SVG <code><symbol></code> elements in the SVG parser - thanks to <a href="https://github.com/Theo1335"><code>@Theo1335</code></a></li> <li>basic support for SVG <code><switch></code> elements in the SVG parser - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/537">#537</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/537">py-pdf/fpdf2#537</a>) - thanks to <a href="https://github.com/dannymaaz"><code>@dannymaaz</code></a></li> <li>support for keeping aspect ratio for images in templates - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1118">#1118</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1118">py-pdf/fpdf2#1118</a>) - thanks to <a href="https://github.com/prateek-dagar"><code>@prateek-dagar</code></a></li> </ul> <h3>Fixed</h3> <ul> <li>custom height passed to <code>Paragraph.ln()</code> in a text region is now applied to the line it terminates instead of the first line of the following paragraph - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1786">#1786</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1786">py-pdf/fpdf2#1786</a>) - thanks to <a href="https://github.com/Sanjays2402"><code>@Sanjays2402</code></a></li> <li>the optional <code>numpy</code> import in <code>image_parsing.py</code> no longer crashes on CPUs unsupported by numpy's <code>manylinux</code> wheel baseline; <code>RuntimeError</code> is now treated the same as <code>ImportError</code>, so <code>numpy</code> degrades to unavailable instead of taking down <code>import fpdf</code> - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1908">#1908</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1908">py-pdf/fpdf2#1908</a>) - thanks to <a href="https://github.com/stumpylog"><code>@stumpylog</code></a></li> <li>font state (family, style, size, current font, and the page-level "font is set" flag) no longer leaks back onto the <code>FPDF</code> instance after a <code>text_columns()</code> / <code>text_region()</code> context exits, so a subsequent <code>pdf.cell()</code> / <code>pdf.write()</code> renders at the caller's font instead of the last paragraph's - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1804">#1804</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1804">py-pdf/fpdf2#1804</a>) - thanks to <a href="https://github.com/Pawansingh3889"><code>@Pawansingh3889</code></a></li> <li>text rendering when the first text on a page starts with a fallback glyph - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1772">#1772</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1772">py-pdf/fpdf2#1772</a>)</li> <li>preserve boundary-neutral formatting during bidirectional text preprocessing - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1779">#1779</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1779">py-pdf/fpdf2#1779</a>)</li> <li>transform application on user space gradients - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1784">#1784</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1784">py-pdf/fpdf2#1784</a>)</li> <li>dependency extras for camelot-py and endesive on pyproject.toml - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1792">#1792</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1792">py-pdf/fpdf2#1792</a>)</li> <li>preserve link annotations during dry-run of <code>FPDF.multi_cell</code> - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1807">#1807</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1807">py-pdf/fpdf2#1807</a>) - thanks to <a href="https://github.com/CoLa5"><code>@CoLa5</code></a></li> <li>preserve two consecutive markdown links (without space inbetween) - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1814">#1814</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1814">py-pdf/fpdf2#1814</a>) - thanks to <a href="https://github.com/CoLa5"><code>@CoLa5</code></a></li> <li>support markdown style around markdown links - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1826">#1826</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1826">py-pdf/fpdf2#1826</a>) - thanks to <a href="https://github.com/CoLa5"><code>@CoLa5</code></a></li> <li>Reset gstate for ToC-rendering - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1837">#1837</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1837">py-pdf/fpdf2#1837</a>) - thanks to <a href="https://github.com/CoLa5"><code>@CoLa5</code></a></li> <li>preserve markdown format in <code>FPDF.multi_cell</code> in dry-run - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1840">#1840</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1840">py-pdf/fpdf2#1840</a>) - thanks to <a href="https://github.com/CoLa5"><code>@CoLa5</code></a></li> <li>fix page order after dry-run of <code>FPDF.multi_cell</code> in ToC - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1836">#1836</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1836">py-pdf/fpdf2#1836</a>) - thanks to <a href="https://github.com/CoLa5"><code>@CoLa5</code></a></li> <li>rendering SVG arcs with very small sweeps that previously rounded to zero - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1831">#1831</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1831">py-pdf/fpdf2#1831</a>)</li> <li>spurious "Not enough horizontal space to render a single character" error when text without break opportunities is split into many small fragments, e.g. by a fallback font alternating with the main font - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1250">#1250</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1250">py-pdf/fpdf2#1250</a>) - thanks to <a href="https://github.com/uttam12331"><code>@uttam12331</code></a></li> <li>number of surviving escape characters - <strong>cf.</strong> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1215">#1215</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1215">py-pdf/fpdf2#1215</a>) - thanks to <a href="https://github.com/amidou-naba"><code>@amidou-naba</code></a></li> <li>leading spaces on new lines inside <code><pre></code> and <code><pre><code></code> blocks are no longer dropped - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1063">#1063</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1063">py-pdf/fpdf2#1063</a>) - thanks to <a href="https://github.com/eugen-goebel"><code>@eugen-goebel</code></a></li> <li><code>FPDF.set_font()</code> can restore <code>current_font</code> when the selected font state diverged - <em>cf.</em> [PR <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1872">#1872</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/pull/1872">py-pdf/fpdf2#1872</a>) - thanks to <a href="https://github.com/gaoflow"><code>@gaoflow</code></a></li> <li>embed CID-keyed CFF fonts as raw CFF programs so browser PDF viewers render them correctly - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1874">#1874</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1874">py-pdf/fpdf2#1874</a>)</li> <li>fixed broken links on documentation not directly leading to the API reference - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1876">#1876</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1876">py-pdf/fpdf2#1876</a>) - thanks to <a href="https://github.com/iamfazakb"><code>@iamfazakb</code></a></li> <li>reject SVG <code><use></code> cycles and excessive nested expansion to prevent resource exhaustion in <code>FPDF.image()</code></li> <li>count SVG <code><switch></code> elements in SVG complexity limits</li> <li>declare the default base state and display order for Optional Content Groups so PDF viewers can list layers correctly - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1895">#1895</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1895">py-pdf/fpdf2#1895</a>)</li> </ul> <h3>Changed</h3> <ul> <li>skip byte-for-byte compressed data comparison when zlib-ng is detected, regardless of OS</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/py-pdf/fpdf2/blob/master/CHANGELOG.md">fpdf2's changelog</a>.</em></p> <blockquote> <h2>[2.8.8] - 2026-08-09</h2> <h3>Added</h3> <ul> <li>Punjabi (pa) tutorial translation - thanks to <a href="https://github.com/Pawansingh3889"><code>@Pawansingh3889</code></a></li> <li><code>FPDF.svg_limits</code> and <code>SVGLimits</code> to configure SVG complexity limits while rendering SVG images</li> <li><code>resource_access_policy</code> and <a href="https://py-pdf.github.io/fpdf2/Security.html">Security considerations</a> documentation</li> <li><a href="https://py-pdf.github.io/fpdf2/OptionalContent.html"><code>FPDF.optional_content()</code></a> context manager to mark content as visible on screen only or in print only, using PDF Optional Content Groups - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/441">#441</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/441">py-pdf/fpdf2#441</a>), based on a recipe by <a href="https://github.com/digidigital"><code>@digidigital</code></a> - thanks to <a href="https://github.com/eugen-goebel"><code>@eugen-goebel</code></a></li> <li>basic support for SVG <code><symbol></code> elements in the SVG parser - thanks to <a href="https://github.com/Theo1335"><code>@Theo1335</code></a></li> <li>basic support for SVG <code><switch></code> elements in the SVG parser - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/537">#537</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/537">py-pdf/fpdf2#537</a>) - thanks to <a href="https://github.com/dannymaaz"><code>@dannymaaz</code></a></li> <li>support for keeping aspect ratio for images in templates - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1118">#1118</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1118">py-pdf/fpdf2#1118</a>) - thanks to <a href="https://github.com/prateek-dagar"><code>@prateek-dagar</code></a></li> </ul> <h3>Fixed</h3> <ul> <li>custom height passed to <code>Paragraph.ln()</code> in a text region is now applied to the line it terminates instead of the first line of the following paragraph - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1786">#1786</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1786">py-pdf/fpdf2#1786</a>) - thanks to <a href="https://github.com/Sanjays2402"><code>@Sanjays2402</code></a></li> <li>the optional <code>numpy</code> import in <code>image_parsing.py</code> no longer crashes on CPUs unsupported by numpy's <code>manylinux</code> wheel baseline; <code>RuntimeError</code> is now treated the same as <code>ImportError</code>, so <code>numpy</code> degrades to unavailable instead of taking down <code>import fpdf</code> - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1908">#1908</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1908">py-pdf/fpdf2#1908</a>) - thanks to <a href="https://github.com/stumpylog"><code>@stumpylog</code></a></li> <li>font state (family, style, size, current font, and the page-level "font is set" flag) no longer leaks back onto the <code>FPDF</code> instance after a <code>text_columns()</code> / <code>text_region()</code> context exits, so a subsequent <code>pdf.cell()</code> / <code>pdf.write()</code> renders at the caller's font instead of the last paragraph's - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1804">#1804</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1804">py-pdf/fpdf2#1804</a>) - thanks to <a href="https://github.com/Pawansingh3889"><code>@Pawansingh3889</code></a></li> <li>text rendering when the first text on a page starts with a fallback glyph - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1772">#1772</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1772">py-pdf/fpdf2#1772</a>)</li> <li>preserve boundary-neutral formatting during bidirectional text preprocessing - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1779">#1779</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1779">py-pdf/fpdf2#1779</a>)</li> <li>transform application on user space gradients - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1784">#1784</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1784">py-pdf/fpdf2#1784</a>)</li> <li>dependency extras for camelot-py and endesive on pyproject.toml - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1792">#1792</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1792">py-pdf/fpdf2#1792</a>)</li> <li>preserve link annotations during dry-run of <code>FPDF.multi_cell</code> - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1807">#1807</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1807">py-pdf/fpdf2#1807</a>) - thanks to <a href="https://github.com/CoLa5"><code>@CoLa5</code></a></li> <li>preserve two consecutive markdown links (without space inbetween) - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1814">#1814</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1814">py-pdf/fpdf2#1814</a>) - thanks to <a href="https://github.com/CoLa5"><code>@CoLa5</code></a></li> <li>support markdown style around markdown links - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1826">#1826</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1826">py-pdf/fpdf2#1826</a>) - thanks to <a href="https://github.com/CoLa5"><code>@CoLa5</code></a></li> <li>Reset gstate for ToC-rendering - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1837">#1837</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1837">py-pdf/fpdf2#1837</a>) - thanks to <a href="https://github.com/CoLa5"><code>@CoLa5</code></a></li> <li>preserve markdown format in <code>FPDF.multi_cell</code> in dry-run - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1840">#1840</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1840">py-pdf/fpdf2#1840</a>) - thanks to <a href="https://github.com/CoLa5"><code>@CoLa5</code></a></li> <li>fix page order after dry-run of <code>FPDF.multi_cell</code> in ToC - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1836">#1836</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1836">py-pdf/fpdf2#1836</a>) - thanks to <a href="https://github.com/CoLa5"><code>@CoLa5</code></a></li> <li>rendering SVG arcs with very small sweeps that previously rounded to zero - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1831">#1831</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1831">py-pdf/fpdf2#1831</a>)</li> <li>spurious "Not enough horizontal space to render a single character" error when text without break opportunities is split into many small fragments, e.g. by a fallback font alternating with the main font - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1250">#1250</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1250">py-pdf/fpdf2#1250</a>) - thanks to <a href="https://github.com/uttam12331"><code>@uttam12331</code></a></li> <li>number of surviving escape characters - <strong>cf.</strong> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1215">#1215</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1215">py-pdf/fpdf2#1215</a>) - thanks to <a href="https://github.com/amidou-naba"><code>@amidou-naba</code></a></li> <li>leading spaces on new lines inside <code><pre></code> and <code><pre><code></code> blocks are no longer dropped - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1063">#1063</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1063">py-pdf/fpdf2#1063</a>) - thanks to <a href="https://github.com/eugen-goebel"><code>@eugen-goebel</code></a></li> <li><code>FPDF.set_font()</code> can restore <code>current_font</code> when the selected font state diverged - <em>cf.</em> [PR <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1872">#1872</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/pull/1872">py-pdf/fpdf2#1872</a>) - thanks to <a href="https://github.com/gaoflow"><code>@gaoflow</code></a></li> <li>embed CID-keyed CFF fonts as raw CFF programs so browser PDF viewers render them correctly - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1874">#1874</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1874">py-pdf/fpdf2#1874</a>)</li> <li>fixed broken links on documentation not directly leading to the API reference - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1876">#1876</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1876">py-pdf/fpdf2#1876</a>) - thanks to <a href="https://github.com/iamfazakb"><code>@iamfazakb</code></a></li> <li>reject SVG <code><use></code> cycles and excessive nested expansion to prevent resource exhaustion in <code>FPDF.image()</code></li> <li>count SVG <code><switch></code> elements in SVG complexity limits</li> <li>declare the default base state and display order for Optional Content Groups so PDF viewers can list layers correctly - <em>cf.</em> [issue <a href="https://redirect.github.com/py-pdf/fpdf2/issues/1895">#1895</a>](<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1895">py-pdf/fpdf2#1895</a>)</li> </ul> <h3>Changed</h3> <ul> <li>skip byte-for-byte compressed data comparison when zlib-ng is detected, regardless of OS</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/py-pdf/fpdf2/commit/e1fc653d8fce65d2fb118755bda8581a9bf1e4d9"><code>e1fc653</code></a> release v2.8.8 (<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1916">#1916</a>)</li> <li><a href="https://github.com/py-pdf/fpdf2/commit/42ec66442bf278b9768ca787fe601d3d334c62e4"><code>42ec664</code></a> add Sanjays2402 as a contributor for code (<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1915">#1915</a>)</li> <li><a href="https://github.com/py-pdf/fpdf2/commit/af9d7dc11c36db49364c0096ad1edca5d569c676"><code>af9d7dc</code></a> fix(text_region): apply Paragraph.ln(h) height to the line it terminates (<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1904">#1904</a>)</li> <li><a href="https://github.com/py-pdf/fpdf2/commit/81951f837b46782df38f7c4d6f4c8f2644ac9b7e"><code>81951f8</code></a> add stumpylog as a contributor for bug, and code (<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1913">#1913</a>)</li> <li><a href="https://github.com/py-pdf/fpdf2/commit/b30c38c8cfc804342f429fffb26cc44f34f20af3"><code>b30c38c</code></a> Fix: catch RuntimeError alongside ImportError for the optional numpy import (...</li> <li><a href="https://github.com/py-pdf/fpdf2/commit/63df0d0f4f085d3a014166d2d752d9c1e77305e4"><code>63df0d0</code></a> Update github/codeql-action action to v4.37.6 (<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1910">#1910</a>)</li> <li><a href="https://github.com/py-pdf/fpdf2/commit/11a30e672cad2157b657642ed290cb27eb57e482"><code>11a30e6</code></a> Update crate-ci/typos action to v1.49.0 (<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1911">#1911</a>)</li> <li><a href="https://github.com/py-pdf/fpdf2/commit/f65707b369a7ca7aaa6226a77eabf69b9903eac4"><code>f65707b</code></a> Update step-security/harden-runner action to v2.20.1 (<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1912">#1912</a>)</li> <li><a href="https://github.com/py-pdf/fpdf2/commit/a7f7c8945139fb5a20d1993fcff6484b5c2267c7"><code>a7f7c89</code></a> Update github/codeql-action action to v4.37.4 (<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1907">#1907</a>)</li> <li><a href="https://github.com/py-pdf/fpdf2/commit/fe9d8f52643c5dcb88370813f51c29410463e299"><code>fe9d8f5</code></a> Update pypa/gh-action-pypi-publish action to v1.14.2 (<a href="https://redirect.github.com/py-pdf/fpdf2/issues/1906">#1906</a>)</li> <li>Additional commits viewable in <a href="https://github.com/py-pdf/fpdf2/compare/2.8.7...2.8.8">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
121 lines
3.1 KiB
TOML
121 lines
3.1 KiB
TOML
[project]
|
|
name = "engine"
|
|
version = "0.1.0"
|
|
description = "Stirling PDF Python projects"
|
|
requires-python = ">=3.13,<3.14"
|
|
dependencies = []
|
|
|
|
[dependency-groups]
|
|
# Runtime dependencies for the AI document engine service.
|
|
engine = [
|
|
"cryptography>=50.0.0",
|
|
"fastapi>=0.141.1",
|
|
"opentelemetry-sdk>=1.39.1",
|
|
"pgvector>=0.5.0",
|
|
"posthog>=7.38.3",
|
|
"psycopg[binary,pool]>=3.3.4",
|
|
"pydantic>=2.13.4",
|
|
# <2 cap: 1.99.0 patches CVE-2026-46678; 2.0 is an untested major migration.
|
|
"pydantic-ai>=1.107.2,<2.0.0",
|
|
"pydantic-ai-slim[voyageai]>=1.107.2,<2.0.0",
|
|
"pydantic-settings>=2.15.0",
|
|
"python-dotenv>=1.2.2",
|
|
"sqlite-vec>=0.1.9",
|
|
"uvicorn>=0.52.3",
|
|
]
|
|
# Type checking, testing, model generation, and formatting tools for the engine.
|
|
engine-dev = [
|
|
"anyio>=4.14.2",
|
|
"datamodel-code-generator[ruff]==0.64.0",
|
|
"pyright>=1.1.411",
|
|
"pytest>=9.1.1",
|
|
"referencing>=0.37.0",
|
|
"ruff==0.15.5",
|
|
]
|
|
# Dependencies for the Cucumber/Python integration test suite.
|
|
cucumber = [
|
|
"behave>=1.3.3",
|
|
"behave-html-formatter>=0.9.10",
|
|
"opencv-python-headless>=5.0.0.93",
|
|
"pdf2image>=1.17.0",
|
|
"pillow>=12.3.0",
|
|
"pypdf[crypto]>=6.15.0",
|
|
"qrcode[pil]>=8.2",
|
|
"reportlab>=5.0.0",
|
|
"requests>=2.34.2",
|
|
]
|
|
# Shared Python utilities used by repository scripts and CI workflows.
|
|
tools = [
|
|
"deep-translator>=1.11.4",
|
|
"defusedxml>=0.7.1",
|
|
"fonttools>=4.63.0",
|
|
"fpdf2>=2.8.8",
|
|
"openai>=2.53.0",
|
|
"requests>=2.34.2",
|
|
"tomli-w>=1.2.0",
|
|
"tomlkit>=0.15.1",
|
|
"urllib3>=2.7.0",
|
|
"unoserver>=3.7",
|
|
"weasyprint>=69.0",
|
|
]
|
|
# Release-signature verification dependencies.
|
|
updater-signatures = [
|
|
"cryptography>=50.0.0",
|
|
]
|
|
# Pinned repository-wide pre-commit tooling.
|
|
pre-commit = [
|
|
"codespell==2.4.3",
|
|
"ruff==0.15.5",
|
|
"tomli-w==1.2.0",
|
|
]
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src"]
|
|
exclude = ["tests"]
|
|
|
|
[tool.uv]
|
|
default-groups = []
|
|
|
|
[tool.ruff]
|
|
line-length = 120
|
|
target-version = "py313"
|
|
|
|
[tool.ruff.lint]
|
|
select = [
|
|
"E",
|
|
"F",
|
|
"I",
|
|
"N",
|
|
"W",
|
|
"RUF100",
|
|
"UP",
|
|
"PYI", # flake8-pyi: flags deprecated typing constructs
|
|
"FA", # flake8-future-annotations: flags missing future annotations imports
|
|
"BLE", # flake8-blind-except: flags bare `except Exception`
|
|
]
|
|
|
|
[tool.ruff.lint.isort]
|
|
known-first-party = ["stirling", "tests"]
|
|
|
|
[tool.pyright]
|
|
pythonVersion = "3.13"
|
|
reportImportCycles = "warning"
|
|
reportUnnecessaryCast = "warning"
|
|
reportUnnecessaryTypeIgnoreComment = "warning"
|
|
reportUnusedImport = "warning"
|
|
reportUnknownParameterType = "warning"
|
|
reportDeprecated = "warning"
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
# ``tests`` is on the path so test modules can import shared helpers (e.g.
|
|
# ``from conftest import build_app_settings``) without packaging the tests dir.
|
|
pythonpath = ["src", "tests"]
|
|
# Use importlib import mode so test directories don't need __init__.py files
|
|
# and duplicate basenames (e.g. multiple test_routes.py) collect cleanly.
|
|
addopts = "--import-mode=importlib"
|