CVS commit: pkgsrc/graphics/py-svglib

"Adam Ciarcinski" <[email protected]>
Newsgroups gmane.os.netbsd.devel.pkgsrc.cvs
Message-ID <[email protected]>
Module Name:	pkgsrc
Committed By:	adam
Date:		Sun Aug  9 11:04:40 UTC 2026

Modified Files:
	pkgsrc/graphics/py-svglib: Makefile distinfo

Log Message:
py-svglib: updated to 2.1.0

2.1.0 (2026-08-01)

Added

- Declared support for **Python 3.14** (added the classifier and CI matrix
  entry across Ubuntu, macOS, and Windows, alongside the existing 3.9–3.13).
- **Clipping paths** now support `<circle>`, `<ellipse>`, and `<polygon>` clip
  shapes, in addition to paths and rectangles, and clipping masks referenced
  from within a `<use>` element.
- Transforms are now applied to clipping-path shapes, fixing clip paths that
  relied on previously unsupported transforms.
- The gradient shape classes now implement `getBounds()`, so drawings that
  contain gradient fills can be measured — for example when used as a flowable
  by rst2pdf.

Changed

- Renamed the gradient shape classes `_LinearGradientShape` and
  `_RadialGradientShape` to `LinearGradientShape` and `RadialGradientShape`.
  They appear in the rendered `Drawing` tree and were never meant to be
  private, so the leading underscore was misleading.

Removed

- Removed the deprecated `_LinearGradientShape` and `_RadialGradientShape`
  aliases. Use `LinearGradientShape` and `RadialGradientShape` instead.

Fixed

- The `visibility` property is now respected on shapes. Elements with
  `visibility="hidden"` (or `collapse`), set directly or inherited from an
  ancestor, were still rendered.

- `display: none` set through a `style` attribute is now respected. Only the
  `display` presentation attribute was read, so `<g style="display:none">` and
  `<rect style="display:none"/>` were still rendered.

- Embedded `<image>` geometry is no longer truncated to whole points. The
  `x`, `y`, `width`, and `height` of an SVG `<image>` were each passed through
  `int()`, so a raster placed at fractional coordinates landed up to ~1pt away
  from a vector element with identical coordinates. Because width/height were
  truncated too, the error grew across the image rather than being a constant
  shift.
- `font-family` values are now split per CSS instead of on whitespace. An
  unquoted multi-word name such as `font-family: Cascadia Code` was split into
  `Cascadia` and `Code`, so a font registered under its full name was never
  found. Commas inside a quoted name (`font-family: "Foo, Bar",
  Arial`) no longer split the list either; that previously handed `shlex` an
  unbalanced quote and raised `ValueError: No closing quotation`, aborting the
  conversion of a valid value.
- Replaced `locale.getdefaultlocale()` (used for `<switch>` `systemLanguage`
  matching) with a small environment-variable lookup. `getdefaultlocale()` is
  deprecated and is **removed in Python 3.15**; the replacement keeps the same
  behaviour, emits no deprecation warning on 3.12–3.14, and adds unit tests for
  the language-matching path.
- Clipping paths now support the `clip-rule` attribute instead of incorrectly
  using `fill-rule`.
- `fill="url(...)"` and gradient `xlink:href` values are now matched correctly
  when the referenced id is quoted (`url('#name')`, `url("#name")`) or
  contains a right parenthesis; the previous regex rejected or truncated
  these forms.
- Rendering to `reportlab.graphics.renderSVG.SVGCanvas` (as used by
  `easy-thumbnails[svg]`) no longer raises
  `AttributeError: 'SVGCanvas' object has no attribute 'beginPath'` when
  drawing a clipped gradient; that canvas doesn't implement `beginPath()`,
  so the gradient's clip path is now skipped on it instead of erroring.

Type safety and internal quality (no behavior change)

- Completed static type annotations for `svglib.py`; the package now passes
  `mypy --strict` on its own source, with a single documented per-module
  override for the untyped reportlab/cssselect2 base classes it subclasses.
- Pinned a `[tool.mypy]` configuration in `pyproject.toml` and now enforce mypy
  in CI (new `type-check.yml` workflow) and via a local pre-commit hook, so type
  regressions fail before merge.
- Tightened internal gradient handling types: parsed gradient definitions now
  use a `TypedDict` instead of an opaque `Dict[str, Any]`, and the internal
  group/parent parameters are typed as `Optional[Group]`.
- Added docstrings to the remaining undocumented functions in `svglib.py`,
  bringing documentation coverage to 100%.

Tooling and housekeeping

- Removed the DeepSource configuration. Its checks were redundant with ruff,
  `mypy --strict`, CodeQL, and the pytest matrix, and only produced recurring
  noise on pull requests.
- Removed the long-defunct `uniconv` sample tests. They contained no assertions
  and shelled out to UniConvertor, an abandoned Python 2 tool, so they had been
  permanently skipped.
- Fixed and revived the Windows CI workflow. It was a disabled placeholder that
  compiled GTK/Cairo from source (a ~20–40 minute step); it now runs a real
  CPython 3.9/3.13 matrix in well under a minute by dropping the source build
  and skipping the network-heavy sample tests on Windows (they already run on
  Ubuntu and macOS). The redundant manual Windows workflow was removed.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 pkgsrc/graphics/py-svglib/Makefile
cvs rdiff -u -r1.2 -r1.3 pkgsrc/graphics/py-svglib/distinfo

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
(unnamed) (text/x-diff, 1.5 KB)
Modified files:

Index: pkgsrc/graphics/py-svglib/Makefile
diff -u pkgsrc/graphics/py-svglib/Makefile:1.3 pkgsrc/graphics/py-svglib/Makefile:1.4
--- pkgsrc/graphics/py-svglib/Makefile:1.3	Tue Jul 14 13:22:34 2026
+++ pkgsrc/graphics/py-svglib/Makefile	Sun Aug  9 11:04:40 2026
@@ -1,6 +1,6 @@
-# $NetBSD: Makefile,v 1.3 2026/07/14 13:22:34 adam Exp $
+# $NetBSD: Makefile,v 1.4 2026/08/09 11:04:40 adam Exp $
 
-DISTNAME=	svglib-2.0.2
+DISTNAME=	svglib-2.1.0
 PKGNAME=	${PYPKGPREFIX}-${DISTNAME}
 CATEGORIES=	graphics python
 MASTER_SITES=	${MASTER_SITE_PYPI:=s/svglib/}

Index: pkgsrc/graphics/py-svglib/distinfo
diff -u pkgsrc/graphics/py-svglib/distinfo:1.2 pkgsrc/graphics/py-svglib/distinfo:1.3
--- pkgsrc/graphics/py-svglib/distinfo:1.2	Tue Jul 14 13:22:34 2026
+++ pkgsrc/graphics/py-svglib/distinfo	Sun Aug  9 11:04:40 2026
@@ -1,5 +1,5 @@
-$NetBSD: distinfo,v 1.2 2026/07/14 13:22:34 adam Exp $
+$NetBSD: distinfo,v 1.3 2026/08/09 11:04:40 adam Exp $
 
-BLAKE2s (svglib-2.0.2.tar.gz) = 6a89746f689dfe68d88a09aa78243e7c99d0fb8562530a3010e16402f85acb43
-SHA512 (svglib-2.0.2.tar.gz) = 695bd1aa17cd590c2d3bb5a4745d253d52b34f330c717c32ebaa8dceb13b5e442346f4fc848f962f16aa22cf6a2bde0eed2ef1466b76d7eb519487fab0fa3609
-Size (svglib-2.0.2.tar.gz) = 1341040 bytes
+BLAKE2s (svglib-2.1.0.tar.gz) = 8bf9f864acd79b4968beb3faeae1f33223e44de7adf6c1f4c8627791bf0bb3b6
+SHA512 (svglib-2.1.0.tar.gz) = c2b06501e8d70ce840d9390f71ed5676eb12e5ba6619b5eeb76db00f047cb16493c2e7cc36d98db9463dcd8289c797be181cca9c46ae6c52aff49b27c2b12d03
+Size (svglib-2.1.0.tar.gz) = 1371234 bytes
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.