diff --git a/.gitignore b/.gitignore index 45464ab..16bd058 100644 --- a/.gitignore +++ b/.gitignore @@ -30,15 +30,5 @@ /OWSLib-0.27.2.tar.gz /OWSLib-0.28.0.tar.gz /OWSLib-0.28.1.tar.gz -/OWSLib-0.29.0.tar.gz -/OWSLib-0.29.1.tar.gz -/OWSLib-0.29.2.tar.gz -/OWSLib-0.29.3.tar.gz -/OWSLib-0.30.0.tar.gz -/OWSLib-0.30.0-filtered.tar.zst -/OWSLib-0.31.0-filtered.tar.zst -/OWSLib-0.32.0-filtered.tar.zst -/OWSLib-0.33.0-filtered.tar.zst -/OWSLib-0.34.0-filtered.tar.zst -/OWSLib-0.34.1-filtered.tar.zst -/OWSLib-0.35.0-filtered.tar.zst +/OWSLib-0.28.1-filtered.tar.zst +/OWSLib-0.28.1-filtered.tar.xz diff --git a/get_source b/get_source index 085fbb8..e819a64 100755 --- a/get_source +++ b/get_source @@ -11,7 +11,7 @@ Usage: $1 VERSION Generate a source archive for OWSLib with questionably-licensed XML files in tests/resources/ removed. The result will be named -OWSLib-\${VERSION}-filtered.tar.zst and will be written into the current +OWSLib-\${VERSION}-filtered.tar.xz and will be written into the current working directory. EOF } @@ -31,7 +31,7 @@ VERSION="${1}" SOURCE0="${FORGEURL}/archive/${VERSION}/OWSLib-${VERSION}.tar.gz" TARNAME="$(basename "${SOURCE0}")" TARDIR="$(basename "${SOURCE0}" '.tar.gz')" -NEWTAR="${TARDIR}-filtered.tar.zst" +NEWTAR="${TARDIR}-filtered.tar.xz" SAVEDIR="${PWD}" XDIR="$(mktemp -d)" @@ -56,7 +56,7 @@ TZ=UTC LC_ALL=C tar \ --pax-option='delete=atime,delete=ctime' \ --clamp-mtime --mtime="@${MTIME}" \ "${TARDIR}/" | - zstdmt --ultra -22 > "${NEWTAR}" + xz -9 -e > "${NEWTAR}" touch -d @"${MTIME}" "${NEWTAR}" cd "${SAVEDIR}" diff --git a/python-OWSLib.rpmlintrc b/python-OWSLib.rpmlintrc index 694038d..981f880 100644 --- a/python-OWSLib.rpmlintrc +++ b/python-OWSLib.rpmlintrc @@ -1,7 +1,2 @@ -# The source cannot be a URL because we have to filter out files before -# uploading to the lookaside cache. -addFilter(r" invalid-url .* OWSLib-.*-filtered\.tar\.zst") -# There is nothing wrong with .tar.zst, but rpmlint does not know that. -addFilter(r" inconsistent-file-extension .*\.tar\.zst") -# Removed without replacement in Fedora 42 -addFilter(r" obsolete-not-provided python-OWSLIB-doc") +# All documentation is in the -doc subpackage. +addFilter(r" no-documentation$") diff --git a/python-OWSLib.spec b/python-OWSLib.spec index a44a326..dd5e139 100644 --- a/python-OWSLib.spec +++ b/python-OWSLib.spec @@ -1,5 +1,15 @@ +# Sphinx-generated HTML documentation is not suitable for packaging; see +# https://bugzilla.redhat.com/show_bug.cgi?id=2006555 for discussion. +# +# We can generate PDF documentation as a substitute. However, most of the +# necessary dependencies are not packaged for EPEL8 and probably never will be. +%bcond_with doc_pdf + +# Tests require pytest >= 3.8 but EPEL8 has 3.4.2. +%bcond_with tests + Name: python-OWSLib -Version: 0.35.0 +Version: 0.28.1 Release: %autorelease Summary: OGC Web Service utility library @@ -20,32 +30,48 @@ URL: https://geopython.github.io/OWSLib # We *could* use the PyPI sdist, which does not contain tests/resources/, but # it also does not contain any tests at all. We can still run some tests # without the XML files, and we would like to do so. -Source0: OWSLib-%{version}-filtered.tar.zst +Source0: OWSLib-%{version}-filtered.tar.xz Source1: get_source -BuildSystem: pyproject -BuildOption(install): -l owslib - BuildArch: noarch -# Tests; dependencies are in requirements-dev.txt. -BuildRequires: %{py3_dist pytest} -BuildRequires: %{py3_dist pytest_httpserver} -BuildRequires: %{py3_dist Pillow} -# We don’t have pytest-socket packaged, and we can get by without it. -# - pytest-socket -# We don’t use tox to run the tests. It would run "python3 setup.py develop", -# which is unwanted. -# - tox -# Unwanted linting/coverage dependencies: -# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_linters -# - coverage -# - coveralls -# - flake8 -# - pytest-cov -# These are just for the maintainer to upload to PyPI. -# - build -# - twine +BuildRequires: python%{python3_pkgversion}-devel + +# requirements.txt: +BuildRequires: python%{python3_pkgversion}-dateutil >= 1.5 +BuildRequires: python%{python3_pkgversion}-pytz +BuildRequires: python%{python3_pkgversion}-requests >= 1.0 +BuildRequires: python%{python3_pkgversion}-pyproj >= 2 +BuildRequires: python%{python3_pkgversion}-pyyaml +BuildRequires: python%{python3_pkgversion}-lxml +# python_version < '3.7': +BuildRequires: python%{python3_pkgversion}-dataclasses + +# requirements-dev.txt +# flake8 +# pytest-cov +# twine +# wheel +# coverage +# coveralls +# tox +%if %{with tests} +BuildRequires: python%{python3_pkgversion}-pytest >= 3.8 +%endif + +%if %{with doc_pdf} +BuildRequires: make +BuildRequires: python%{python3_pkgversion}-sphinx-latex +BuildRequires: latexmk +BuildRequires: pandoc +# requirements-dev.txt +BuildRequires: python%{python3_pkgversion}-sphinx +BuildRequires: python%{python3_pkgversion}-Pillow +BuildRequires: python%{python3_pkgversion}-nbsphinx +BuildRequires: python%{python3_pkgversion}-ipykernel +BuildRequires: python%{python3_pkgversion}-nbconvert +BuildRequires: python%{python3_pkgversion}-pandoc +%endif %global common_description %{expand: OWSLib is a Python package for client programming with Open Geospatial @@ -60,24 +86,61 @@ numerous OGC Web Service interfaces.} %description %{common_description} -%package -n python3-OWSLib +%package -n python%{python3_pkgversion}-OWSLib Summary: %{summary} -%py_provides python3-owslib +%py_provides python%{python3_pkgversion}-OWSLib +%py_provides python%{python3_pkgversion}-owslib -# The -doc subpackage was removed for Fedora 42; we can remove this Obsoletes -# after Fedora 44. (EPEL10 never had a -doc subpackage.) -Obsoletes: python-OWSLIB-doc < 0.32.0-1 - -%description -n python3-OWSLib %{common_description} +%description -n python%{python3_pkgversion}-OWSLib %{common_description} -%prep -a +%package doc +Summary: Documentation and examples for OWSLib + +%description doc %{common_description} + +This package contains documentation and examples for OWSLib. + + +%prep +%autosetup -n OWSLib-%{version} + +%if %{with tests} # Don’t analyze/report test coverage -sed -r -i 's/^([[:blank:]]*)(--cov\b)/\1# \2/' tox.ini +sed -r -i 's/[-]-cov[^[:blank:]]*[[:blank:]][^[[:blank:]]+//g' tox.ini +%endif + +# We don’t need shebangs in the examples. The pattern of selecting files +# before modifying them with sed keeps us from unnecessarily discarding the +# original mtimes on unmodified files. +find 'examples' -type f -name '*.py' \ + -exec gawk '/^#!/ { print FILENAME }; { nextfile }' '{}' '+' | + xargs -r sed -r -i '1{/^#!/d}' +# Some of them, but not all of them, were executable. +chmod -v a-x examples/*.py + +# Because at least one notebook requires Internet access, we must continue past +# notebook errors when building documentation. +echo 'nbsphinx_allow_errors = True' >> docs/conf.py -%check -a +%build +%py3_build + +%if %{with doc_pdf} +PYTHONPATH="${PWD}" %make_build -C docs latex \ + SPHINXOPTS='-j%{?_smp_build_ncpus}' +%make_build -C docs/build/latex/en LATEXMKOPTS='-quiet' +%endif + + +%install +%py3_install + + +%check +%if %{with tests} # Otherwise, pytest finds the package twice in the Python path and complains. rm -rf owslib @@ -113,30 +176,95 @@ ignore="${ignore-} --ignore=tests/test_wps_getcapabilities_ceda.py" ignore="${ignore-} --ignore=tests/test_wps_getcapabilities_usgs.py" ignore="${ignore-} --ignore-glob=tests/test_wps_request*.py" ignore="${ignore-} --ignore-glob=tests/test_wps_response*.py" -k="${k-}${k+ and }not test_metadata" -k="${k-}${k+ and }not test_responsibility" -k="${k-}${k+ and }not test_distributor" -k="${k-}${k+ and }not test_online_distribution" -k="${k-}${k+ and }not test_identification" -k="${k-}${k+ and }not test_identification_contact" -k="${k-}${k+ and }not test_identification_date" -k="${k-}${k+ and }not test_identification_extent" -k="${k-}${k+ and }not test_identification_keywords" -k="${k-}${k+ and }not test_get_all_contacts" -k="${k-}${k+ and }not test_aus" -k="${k-}${k+ and }not test_service" -k="${k-}${k+ and }not test_md_featurecataloguedesc" -k="${k-}${k+ and }not test_md_imagedescription" -k="${k-}${k+ and }not test_dq_dataquality" -k="${k-}${k+ and }not test_md_reference_system" -k="${k-}${k+ and }not test_service2" -k="${k-}${k+ and }not test_md_distribution" +# Not in 0.30.0: +k="${k-}${k+ and }not test_wmts_example_informatievlaanderen" -%pytest -m 'not online' -k "${k-}" ${ignore-} -v -rs +PYTHONPATH='%{buildroot}%{python3_sitelib}' '%{python3}' -m pytest \ + -m 'not online' -k "${k-}" ${ignore-} -v -rs +%else +%{py3_check_import owslib + owslib + owslib.coverage + owslib.coverage.wcs100 + owslib.coverage.wcs110 + owslib.coverage.wcs111 + owslib.coverage.wcs200 + owslib.coverage.wcs201 + owslib.coverage.wcsBase + owslib.coverage.wcsdecoder + owslib.crs + owslib.csw + owslib.dif + owslib.etree + owslib.feature + owslib.feature.common + owslib.feature.postrequest + owslib.feature.schema + owslib.feature.wfs100 + owslib.feature.wfs110 + owslib.feature.wfs200 + owslib.fes + owslib.fgdc + owslib.gm03 + owslib.interfaces + owslib.iso + owslib.iso_che + owslib.map + owslib.map.common + owslib.map.wms111 + owslib.map.wms130 + owslib.namespaces + owslib.ogcapi + owslib.ogcapi.coverages + owslib.ogcapi.features + owslib.ogcapi.records + owslib.ows + owslib.owscontext + owslib.owscontext.atom + owslib.owscontext.common + owslib.owscontext.core + owslib.owscontext.geojson + owslib.sos + owslib.swe + owslib.swe.common + owslib.swe.observation + owslib.swe.observation.om + owslib.swe.observation.sos100 + owslib.swe.observation.sos200 + owslib.swe.observation.waterml2 + owslib.swe.sensor + owslib.swe.sensor.sml + owslib.tms + owslib.util + owslib.waterml + owslib.waterml.wml + owslib.waterml.wml10 + owslib.waterml.wml11 + owslib.wcs + owslib.wfs + owslib.wmc + owslib.wms + owslib.wmts + owslib.wps} +%endif -%files -n python3-OWSLib -f %{pyproject_files} -%doc README.md +%files -n python%{python3_pkgversion}-OWSLib +%license LICENSE + +%{python3_sitelib}/owslib +%{python3_sitelib}/OWSLib-%{version}-py%{python3_version}.egg-info + + +%files doc +%license LICENSE +%doc AUTHORS.rst +%doc CHANGES.rst +%doc README.rst +%doc examples +%if %{with doc_pdf} +%doc docs/build/latex/en/OWSLib.pdf +%endif %changelog diff --git a/sources b/sources index da0ff49..9e7c211 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (OWSLib-0.35.0-filtered.tar.zst) = be1eb52fa09049b720c1ebd476363e01c6442c9905c9adf0d35ccc11f39b228b9f3e64ed882a7c04987f2f38f9c8500a61aeef61e48a41602098ff22df0ed526 +SHA512 (OWSLib-0.28.1-filtered.tar.xz) = cc83e5973adb6d6bd5aa624017a6f7927957979f69a3dbdda1645c2ecb8b9b84bbb03b794440c7d66062d365400502a6176514f0fb8d51b8f06b1aea32c0284d