Name: python-trame-vuetify Version: 3.2.2 Release: 4%{?dist} Summary: Vuetify (Material-Design) component bindings for trame License: MIT URL: https://github.com/Kitware/trame-vuetify Source: %{pypi_source trame_vuetify} BuildArch: noarch BuildRequires: python3-devel BuildRequires: python3-trame-client %global _description %{expand: trame-vuetify exposes Vuetify's Material Design component set (buttons, cards, sliders, dialogs, layouts, etc.) as Python widget classes consumable from trame applications. The default UI layer for most trame-based apps including trame-slicer.} %description %_description %package -n python3-trame-vuetify Summary: %{summary} Requires: python3-trame-client # Owns the shared trame/ namespace stubs excluded from %%files below. Requires: python3-trame %description -n python3-trame-vuetify %_description %prep %autosetup -p1 -n trame_vuetify-%{version} %generate_buildrequires %pyproject_buildrequires %build %pyproject_wheel %install %pyproject_install %pyproject_save_files trame trame_vuetify # 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-vuetify -f %{pyproject_files} %license LICENSE # The trame/ namespace is shared by python3-trame, -trame-vtk and -trame-vuetify: # every wheel ships its own copy of the four namespace __init__.py stubs, and RPM # byte-compiles each copy separately, so the .pyc contents differ and dnf refuses # the transaction with "file ... conflicts between attempted installs". Installing # any two of the three was impossible -- which in turn made 3dslicer-srep # uninstallable, because python3-pyvista Recommends all three. # Let python3-trame own the namespace stubs (it is the package the other two # already depend on transitively) and exclude them here. Directories may be # co-owned; only the regular files conflict. %exclude %{python3_sitelib}/trame/__init__.py %exclude %{python3_sitelib}/trame/__pycache__/__init__.* %exclude %{python3_sitelib}/trame/modules/__init__.py %exclude %{python3_sitelib}/trame/modules/__pycache__/__init__.* %exclude %{python3_sitelib}/trame/tools/__init__.py %exclude %{python3_sitelib}/trame/tools/__pycache__/__init__.* %exclude %{python3_sitelib}/trame/widgets/__init__.py %exclude %{python3_sitelib}/trame/widgets/__pycache__/__init__.* %doc README.rst %changelog * Fri Aug 22 2026 Morgan Hough - 3.2.2-4 - 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. * Fri Jul 31 2026 Morgan Hough - 3.2.2-3 - Stop claiming the shared trame/ namespace stubs. All three trame packages (-trame, -trame-vtk, -trame-vuetify) shipped their own copy of the four namespace __init__.py files, and RPM byte-compiles each copy separately, so the .pyc contents differ and dnf aborts with "file ... conflicts between attempted installs". Installing any two of the three was impossible, which also made 3dslicer-srep uninstallable since python3-pyvista Recommends all three. Let python3-trame own the stubs, %%exclude them here, and Require it. Directories may be co-owned; only the regular files conflicted. * Sat Jun 27 2026 Morgan Hough - 3.2.2-2 - Rebuild against Python 3.15 (rawhide). Release bump so the py3.15 build supersedes the lingering same-NVR py3.14 RPM in the COPR repo. * Thu May 28 2026 Morgan Hough - 3.2.2-1 - Initial package for the trame-slicer dependency chain.