File python-gwdatafind.spec of Package python-gwdatafind
#
# spec file for package python-gwdatafind
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise specified
# via a license. This file is licensed under the MIT License (SPDX-License-Identifier: MIT).
#
# Please submit bugfixes or comments via https://bugs.opensuse.org/.
#
#
Name: python-gwdatafind
Version: 1.2.0
Release: 11.1
Summary: Find Gravitational Wave detector data using simple caching
License: GPL-2.0-or-later
URL: https://git.ligo.org/finesse/gwdatafind
Source: gwdatafind-%{version}.tar.gz
BuildArch: noarch
# BuildRequires for building wheels and running tests
BuildRequires: python311
BuildRequires: python311-pip
BuildRequires: python311-setuptools
BuildRequires: python311-wheel
BuildRequires: python311-pytest
BuildRequires: python311-requests-mock
BuildRequires: python311-igwn-auth-utils
BuildRequires: python311-ligo-segments
BuildRequires: python312
BuildRequires: python312-pip
BuildRequires: python312-setuptools
BuildRequires: python312-wheel
BuildRequires: python312-pytest
BuildRequires: python312-requests-mock
BuildRequires: python312-igwn-auth-utils
BuildRequires: python312-ligo-segments
BuildRequires: python313
BuildRequires: python313-pip
BuildRequires: python313-setuptools
BuildRequires: python313-wheel
BuildRequires: python313-pytest
BuildRequires: python313-requests-mock
BuildRequires: python313-igwn-auth-utils
BuildRequires: python313-ligo-segments
%description
GWDataFind provides tools to find Gravitational Wave detector data using a simple web API and caching.
%prep
%setup -q -n gwdatafind-%{version}
# Ensure tests run cleanly without color output
sed -i s/--color=yes// pyproject.toml || true
%build
# Build universal wheel once and reuse across Python versions
%{!?python_flavor:%define python_flavor python311}
python3.11 -m pip wheel --verbose --progress-bar off --disable-pip-version-check --use-pep517 --no-build-isolation --no-deps --wheel-dir ./build .
if [ ! -f ./dist/*-none-any.whl ]; then
mkdir -p ./dist
cp ./build/*.whl ./dist/
fi
for py in 312 313; do
echo python3.${py#3}
mkdir -p ./build
cp ./dist/*.whl ./build/
mv build _build.python${py} || true
done
%install
# Install wheel for each Python version and adjust shebangs
for py in 311 312 313; do
mv _build.python${py} build || true
python3.${py#3} -m pip install --verbose --progress-bar off --disable-pip-version-check --root %{buildroot} --no-compile --ignore-installed --no-deps --no-index --find-links ./build gwdatafind==%{version}
# Byte-compile and dedupe
if [ -d "%{buildroot}/usr/lib/python3.${py#3}/site-packages" ]; then
find %{buildroot}/usr/lib/python3.${py#3}/site-packages -iname '*.pyc' -delete
find %{buildroot}/usr/lib/python3.${py#3}/site-packages -iname '*.py' -print0 | xargs -0 python3.${py#3} -c ' \
import sys, py_compile \
for f in sys.argv[1:]: \
fp=f[len("%{buildroot}"):] \
print("Generating cached byte-code for " + str(fp)) \
for o in [0, 1]: \
py_compile.compile(f, dfile=fp, optimize=o) \
'
/usr/lib/rpm/fdupes_wrapper %{buildroot}/usr/lib/python3.${py#3}/site-packages
fi
# Adjust gw_data_find script shebang
if [ -f "%{buildroot}/usr/bin/gw_data_find" ]; then
pushd %{buildroot}/usr/bin
sed -i --follow-symlinks '1s@#\!.*python\S*@#\!/usr/bin/python3.'"${py#3}"'@' gw_data_find || true
popd
fi
# Provide versioned alternatives
if [ -f "%{buildroot}/usr/bin/gw_data_find" ]; then
cp %{buildroot}/usr/bin/gw_data_find %{buildroot}/usr/bin/gw_data_find-3.${py#3}
sed -ri '1s@#!.*python\S*@#!/usr/bin/python3.'"${py#3}"'@' %{buildroot}/usr/bin/gw_data_find-3.${py#3}
fi
done
# Setup alternatives
rm -f %{buildroot}/usr/bin/gw_data_find || true
mkdir -p %{buildroot}/etc/alternatives
: > %{buildroot}/etc/alternatives/gw_data_find
ln -sf /etc/alternatives/gw_data_find %{buildroot}/usr/bin/gw_data_find
%check
# Run tests for each Python version, ignore known network-dependent tests
export PATH=$(pwd)/build/flavorbin:/usr/local/bin:/usr/bin:/bin
for py in 311 312 313; do
mv _build.python${py} build || true
export PYTHONPATH=%{buildroot}/usr/lib/python3.${py#3}/site-packages
export PYTHONDONTWRITEBYTECODE=1
pytest-3.${py#3} --ignore=_build.python311 --ignore=_build.python312 --ignore=_build.python313 -v -k 'not (test_find_urls or test_find_frame_urls or test_postprocess_cache_gaps)'
mv build _build.python${py} || true
done
%files
%doc README.md
%license LICENSE
%{_bindir}/gw_data_find
%{_bindir}/gw_data_find-3.11
%{_bindir}/gw_data_find-3.12
%{_bindir}/gw_data_find-3.13
%{python311_sitelib}/gwdatafind
%{python312_sitelib}/gwdatafind
%{python313_sitelib}/gwdatafind
%dir /etc/alternatives
/etc/alternatives/gw_data_find