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
openSUSE Build Service is sponsored by