Name: python-trame Version: 3.13.2 Release: 3%{?dist} Summary: Python framework for building reactive web applications License: Apache-2.0 URL: https://github.com/Kitware/trame Source: %{pypi_source trame} BuildArch: noarch BuildRequires: python3-devel BuildRequires: python3-trame-server BuildRequires: python3-trame-client BuildRequires: python3-trame-common BuildRequires: python3-wslink BuildRequires: python3-pyyaml %global _description %{expand: trame is a Python framework for building reactive web applications. This meta package wires together the trame-server, trame-client, and trame-common runtimes so applications only need to depend on trame itself. Used by every trame-* downstream application including trame-slicer.} %description %_description %package -n python3-trame Summary: %{summary} Requires: python3-trame-server >= 3.12.2 Requires: python3-trame-client >= 3.12.2 Requires: python3-trame-common >= 1.2.3 Requires: python3-wslink >= 2.5.6 Requires: python3-pyyaml %description -n python3-trame %_description %prep %autosetup -p1 -n trame-%{version} %generate_buildrequires %pyproject_buildrequires %build %pyproject_wheel %install %pyproject_install %pyproject_save_files trame # The trame namespace dirs (trame/, trame/ui/, trame/modules/, trame/widgets/) are # shared by several trame distributions, and every wheel ships its own copy of the # pkgutil marker __init__.py. The .py files are byte-identical so rpm tolerates the # duplicates -- but their .pyc embeds the SOURCE MTIME, which differs per build, so # the bytecode collides at install time: # file .../trame/ui/__pycache__/__init__.cpython-314.pyc conflicts between # attempted installs of python3-trame-... and python3-trame-client-... # Since Python 3.3 these work as PEP 420 implicit namespace packages with no marker # at all, so drop it everywhere. Verified: with all four removed, trame.ui becomes a # _NamespacePath and trame.ui.vuetify3 / trame.widgets.vuetify3 / trame.modules.www # still resolve across packages. The grep guard makes sure a real __init__.py with # actual code is never deleted. for _d in "" /ui /modules /widgets; do _f=%{buildroot}%{python3_sitelib}/trame$_d/__init__.py [ -f "$_f" ] || continue grep -qx '__path__ = __import__("pkgutil").extend_path(__path__, __name__)' "$_f" \ || { echo "ERROR: trame$_d/__init__.py is not a namespace marker" >&2; exit 1; } rm -f "$_f" %{buildroot}%{python3_sitelib}/trame$_d/__pycache__/__init__.*.pyc done # Drop the removed paths from the generated file list (it comes from the wheel RECORD). sed -i -E '\#/trame(/(ui|modules|widgets))?/__init__\.py$#d; \#/trame(/(ui|modules|widgets))?/__pycache__/__init__\..*\.pyc$#d' %{pyproject_files} %check %_pyproject_check_import_allow_no_modules -t %files -n python3-trame -f %{pyproject_files} %license LICENSE %doc README.rst %changelog * Fri Aug 22 2026 Morgan Hough - 3.13.2-3 - Drop the pkgutil namespace markers for trame/{,ui,modules,widgets} and rely on PEP 420 implicit namespace packages. Every trame wheel ships its own identical copy; rpm tolerates the duplicate .py (byte-identical) but the .pyc embeds the source mtime, which differs per build, so installing two trame packages together failed with __pycache__/__init__.cpython-314.pyc file conflicts. * Thu Jun 26 2026 Morgan Hough - 3.13.2-2 - Rebuild against Python 3.15 (rawhide). Release bump so the py3.15 build strictly supersedes the lingering same-NVR py3.14 RPM that was still winning in the COPR buildroot repo. * Thu May 28 2026 Morgan Hough - 3.13.2-1 - Initial package for the trame-slicer dependency chain.