Name: python-trame-client Version: 3.13.2 Release: 2%{?dist} Summary: Internal browser-side client of trame License: MIT URL: https://github.com/Kitware/trame-client Source: %{pypi_source trame_client} BuildArch: noarch BuildRequires: python3-devel BuildRequires: python3-trame-common %global _description %{expand: trame-client ships the JavaScript bundle and the Python registration shim that exposes Vue-component bindings to trame applications. It is the browser-side runtime trame-server pairs with; every UI widget (vuetify, vtk, deck.gl, etc.) builds on it.} %description %_description %package -n python3-trame-client Summary: %{summary} Requires: python3-trame-common %description -n python3-trame-client %_description %prep %autosetup -p1 -n trame_client-%{version} %generate_buildrequires %pyproject_buildrequires %build %pyproject_wheel %install %pyproject_install # Two top-level modules: trame (namespace pkg with submodules) and trame_client. %pyproject_save_files trame trame_client # 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-client -f %{pyproject_files} %license LICENSE %doc README.rst %changelog * Fri Aug 22 2026 Morgan Hough - 3.13.2-2 - 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. * Sun Jun 14 2026 Morgan Hough - 3.13.2-1 - Update to 3.13.2 (current upstream; freshness sweep 2026-06-14) * Thu May 28 2026 Morgan Hough - 3.12.3-1 - Initial package for the trame-slicer dependency chain.