Compare commits

..

13 commits

Author SHA1 Message Date
Benjamin A. Beasley
7d275864c0 Fix broken runtime pyproj dependency (fix RHBZ#2234805) 2023-08-25 11:08:56 -04:00
Benjamin A. Beasley
3a8551e706 Backport upstream PR#863 (“use only lxml for XML handling”)
- Fixes CVE-2023-27476 https://nvd.nist.gov/vuln/detail/CVE-2023-27476
- Fixes GHSA-8h9c-r582-mggc https://github.com/geopython/OWSLib/security/advisories/GHSA-8h9c-r582-mggc
- Fixes RHBZ#2176417 https://bugzilla.redhat.com/show_bug.cgi?id=2176417
2023-03-08 09:11:05 -05:00
Benjamin A. Beasley
050ce07c62 Update to 0.9.2
- Drop the Python 3 subpackage (which was never actually built as an
  update) since pyproj is not available
2023-03-08 08:52:23 -05:00
Benjamin A. Beasley
249e830c17 Convert to %autorelease and %autochangelog
[skip changelog]
2023-03-08 08:42:59 -05:00
Benjamin A. Beasley
00f04a41f2 Add dependency version bounds 2023-03-08 08:42:13 -05:00
Benjamin A. Beasley
55880a3f49 Install more text documentation files 2023-03-08 08:38:15 -05:00
Benjamin A. Beasley
5d046039a1 Switch to the GitHub source archive and run the offline tests 2023-03-08 08:36:55 -05:00
Benjamin A. Beasley
bcf8c16765 Build the Python 3 sub-package on EPEL7 2023-03-08 07:54:43 -05:00
Benjamin A. Beasley
417d4722f6 Update License to SPDX 2023-03-08 07:53:39 -05:00
Benjamin A. Beasley
962fd669cf Generally “modernize” packaging (by EPEL7 standards) 2023-03-08 07:53:39 -05:00
Dave Johansen
36ed902e1e Reverting back to 0.9.0 since 0.9.1 adds a dependency on pyproj (which isn't available and would be non-trivial to add) 2015-09-20 09:37:10 -07:00
Dave Johansen
7e9186a0eb Update to 0.9.1 (merged from master) 2015-09-06 16:35:34 -07:00
Dave Johansen
384c14733c Turn off Python 3 support in EPEL 2015-06-14 17:56:11 -07:00
7 changed files with 417 additions and 357 deletions

35
.gitignore vendored
View file

@ -6,39 +6,4 @@
/OWSLib-0.8.12.tar.gz /OWSLib-0.8.12.tar.gz
/OWSLib-0.8.13.tar.gz /OWSLib-0.8.13.tar.gz
/OWSLib-0.9.0.tar.gz /OWSLib-0.9.0.tar.gz
/OWSLib-0.9.1.tar.gz
/OWSLib-0.9.2.tar.gz /OWSLib-0.9.2.tar.gz
/OWSLib-0.10.0.tar.gz
/OWSLib-0.10.1.tar.gz
/OWSLib-0.10.3.tar.gz
/OWSLib-0.11.0.tar.gz
/OWSLib-0.11.1.tar.gz
/OWSLib-0.11.2.tar.gz
/OWSLib-0.12.0.tar.gz
/OWSLib-0.13.0.tar.gz
/OWSLib-0.14.0.tar.gz
/OWSLib-0.15.0.tar.gz
/OWSLib-0.16.0.tar.gz
/OWSLib-0.17.0.tar.gz
/OWSLib-0.18.0.tar.gz
/OWSLib-0.19.0.tar.gz
/OWSLib-0.19.1.tar.gz
/OWSLib-0.20.0.tar.gz
/OWSLib-0.21.0.tar.gz
/OWSLib-0.25.0.tar.gz
/OWSLib-0.26.0.tar.gz
/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

View file

@ -0,0 +1,232 @@
From 2f81f2b36c01b2a32e8dcf6b2c695b36b1eb0b8f Mon Sep 17 00:00:00 2001
From: Tom Kralidis <tomkralidis@gmail.com>
Date: Fri, 24 Feb 2023 10:15:35 -0500
Subject: [PATCH] use only lxml for XML handling
Backport of PR#863 (https://github.com/geopython/OWSLib/pull/863) to 0.9.2
---
owslib/etree.py | 58 ++++++++---------------------
owslib/util.py | 96 ++++++++++++++++++------------------------------
requirements.txt | 1 +
3 files changed, 52 insertions(+), 103 deletions(-)
diff --git a/owslib/etree.py b/owslib/etree.py
index b8babe8..88ae7ab 100644
--- a/owslib/etree.py
+++ b/owslib/etree.py
@@ -6,9 +6,15 @@
from __future__ import (absolute_import, division, print_function)
import six
-import inspect
-def patch_well_known_namespaces(etree_module):
+from lxml import etree
+from lxml.etree import ParseError
+ElementType = etree._Element
+
+from owslib.namespaces import Namespaces
+
+def patch_well_known_namespaces():
+ """Monkey patches lxml.etree to add some well-known namespaces."""
import warnings
from owslib.namespaces import Namespaces
@@ -17,50 +23,18 @@ def patch_well_known_namespaces(etree_module):
"""Monkey patches the etree module to add some well-known namespaces."""
try:
- register_namespace = etree_module.register_namespace
+ register_namespace = etree.register_namespace
except AttributeError:
- try:
- etree_module._namespace_map
+ etree._namespace_map
- def register_namespace(prefix, uri):
- etree_module._namespace_map[uri] = prefix
- except AttributeError:
- def register_namespace(prefix, uri):
- pass
- warnings.warn("Only 'lxml.etree' >= 2.3 and 'xml.etree.ElementTree' >= 1.3 are fully supported!")
+ def register_namespace(prefix, uri):
+ etree._namespace_map[uri] = prefix
for k, v in six.iteritems(ns.get_namespaces()):
register_namespace(k, v)
-# try to find lxml or elementtree
-try:
- from lxml import etree
- from lxml.etree import ParseError
- ElementType = etree._Element
-except ImportError:
- try:
- # Python 2.x/3.x with ElementTree included
- import xml.etree.ElementTree as etree
-
- try:
- from xml.etree.ElementTree import ParseError
- except ImportError:
- from xml.parsers.expat import ExpatError as ParseError
-
- if hasattr(etree, 'Element') and inspect.isclass(etree.Element):
- # python 3.4, 3.3, 2.7
- ElementType = etree.Element
- else:
- # python 2.6
- ElementType = etree._ElementInterface
-
- except ImportError:
- try:
- # Python < 2.5 with ElementTree installed
- import elementtree.ElementTree as etree
- ParseError = StandardError # i can't find a ParseError related item in elementtree docs!
- ElementType = etree.Element
- except ImportError:
- raise RuntimeError('You need either lxml or ElementTree to use OWSLib!')
+ etree.set_default_parser(
+ parser=etree.XMLParser(resolve_entities=False)
+ )
-patch_well_known_namespaces(etree)
+patch_well_known_namespaces()
diff --git a/owslib/util.py b/owslib/util.py
index 22bcaa7..51ce6d0 100644
--- a/owslib/util.py
+++ b/owslib/util.py
@@ -239,11 +239,8 @@ def nspath_eval(xpath, namespaces):
def cleanup_namespaces(element):
""" Remove unused namespaces from an element """
- if etree.__name__ == 'lxml.etree':
- etree.cleanup_namespaces(element)
- return element
- else:
- return etree.fromstring(etree.tostring(element))
+ etree.cleanup_namespaces(element)
+ return element
def add_namespaces(root, ns_keys):
@@ -254,35 +251,34 @@ def add_namespaces(root, ns_keys):
ns_keys = [(x, namespaces.get_namespace(x)) for x in ns_keys]
- if etree.__name__ != 'lxml.etree':
- # We can just add more namespaces when not using lxml.
- # We can't re-add an existing namespaces. Get a list of current
- # namespaces in use
- existing_namespaces = set()
- for elem in root.getiterator():
- if elem.tag[0] == "{":
- uri, tag = elem.tag[1:].split("}")
- existing_namespaces.add(namespaces.get_namespace_from_url(uri))
- for key, link in ns_keys:
- if link is not None and key not in existing_namespaces:
- root.set("xmlns:%s" % key, link)
- return root
- else:
- # lxml does not support setting xmlns attributes
- # Update the elements nsmap with new namespaces
- new_map = root.nsmap
- for key, link in ns_keys:
- if link is not None:
- new_map[key] = link
- # Recreate the root element with updated nsmap
- new_root = etree.Element(root.tag, nsmap=new_map)
- # Carry over attributes
- for a, v in list(root.items()):
- new_root.set(a, v)
- # Carry over children
- for child in root:
- new_root.append(deepcopy(child))
- return new_root
+ # lxml does not support setting xmlns attributes
+ # Update the elements nsmap with new namespaces
+ new_map = root.nsmap
+ for key, link in ns_keys:
+ if link is not None:
+ new_map[key] = link
+ # Recreate the root element with updated nsmap
+ new_root = etree.Element(root.tag, nsmap=new_map)
+ # Carry over attributes
+ for a, v in list(root.items()):
+ new_root.set(a, v)
+ # Carry over children
+ for child in root:
+ new_root.append(deepcopy(child))
+ return new_root
+
+ # We can just add more namespaces when not using lxml.
+ # We can't re-add an existing namespaces. Get a list of current
+ # namespaces in use
+ existing_namespaces = set()
+ for elem in root.iter():
+ if elem.tag[0] == "{":
+ uri, tag = elem.tag[1:].split("}")
+ existing_namespaces.add(namespaces.get_namespace_from_url(uri))
+ for key, link in ns_keys:
+ if link is not None and key not in existing_namespaces:
+ root.set("xmlns:%s" % key, link)
+ return root
def getXMLInteger(elem, tag):
@@ -401,20 +397,13 @@ def element_to_string(element, encoding=None, xml_declaration=False):
if encoding is None:
encoding = "ISO-8859-1"
- if etree.__name__ == 'lxml.etree':
- if xml_declaration:
- if encoding in ['unicode', 'utf-8']:
- output = '<?xml version="1.0" encoding="utf-8" standalone="no"?>\n%s' % \
- etree.tostring(element, encoding='unicode')
- else:
- output = etree.tostring(element, encoding=encoding, xml_declaration=True)
+ if xml_declaration:
+ if encoding in ['unicode', 'utf-8']:
+ output = '<?xml version="1.0" encoding="utf-8" standalone="no"?>\n%s' % \
+ etree.tostring(element, encoding='unicode')
else:
- output = etree.tostring(element)
+ output = etree.tostring(element, encoding=encoding, xml_declaration=True)
else:
- if xml_declaration:
- output = '<?xml version="1.0" encoding="%s" standalone="no"?>\n%s' % (encoding,
- etree.tostring(element, encoding=encoding))
- else:
output = etree.tostring(element)
return output
@@ -581,18 +570,3 @@ try: # 2.7
from collections import OrderedDict
except: # 2.6
from ordereddict import OrderedDict
-
-
-def which_etree():
- """decipher which etree library is being used by OWSLib"""
-
- which_etree = None
-
- if 'lxml' in etree.__file__:
- which_etree = 'lxml.etree'
- elif 'xml/etree' in etree.__file__:
- which_etree = 'xml.etree'
- elif 'elementree' in etree.__file__:
- which_etree = 'elementtree.ElementTree'
-
- return which_etree
diff --git a/requirements.txt b/requirements.txt
index 7689a61..10ad5db 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,3 +1,4 @@
+lxml
python-dateutil>=1.5
pytz
requests>=1.0
--
2.39.2

146
changelog
View file

@ -1,142 +1,10 @@
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.21.0-4 * Wed Mar 08 2023 Benjamin A. Beasley <code@musicinmybrain.net> - 0.9.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - Generally “modernize” packaging (by EPEL7 standards)
- Update License to SPDX
* Fri Jun 04 2021 Python Maint <python-maint@redhat.com> - 0.21.0-3 - Build the Python 3 sub-package on EPEL7
- Rebuilt for Python 3.10 - Switch to the GitHub source archive and run the offline tests
- Install more text documentation files
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.21.0-2 - Add dependency version bounds
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Wed Dec 09 2020 Volker Fröhlich <volker27@gmx.at> - 0.21.0-1
- New upstream release
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.20.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Fri Jun 05 2020 Volker Fröhlich <volker27@gmx.at> - 0.20.0-1
- New upstream release
* Tue May 26 2020 Miro Hrončok <mhroncok@redhat.com> - 0.19.1-2
- Rebuilt for Python 3.9
* Sun Feb 02 2020 Volker Fröhlich <volker27@gmx.at> - 0.19.1-1
- New upstream release
* Thu Jan 30 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.19.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Sun Jan 19 2020 Volker Fröhlich <volker27@gmx.at> - 0.19.0-1
- New upstream release
* Thu Oct 03 2019 Miro Hrončok <mhroncok@redhat.com> - 0.18.0-4
- Rebuilt for Python 3.8.0rc1 (#1748018)
* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 0.18.0-3
- Rebuilt for Python 3.8
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.18.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Wed Jun 26 2019 Volker Fröhlich <volker27@gmx.at> - 0.18.0-1
- New upstream release
* Mon Feb 11 2019 Miro Hrončok <mhroncok@redhat.com> - 0.17.0-3
- Subpackage python2-owslib has been removed
See https://fedoraproject.org/wiki/Changes/Mass_Python_2_Package_Removal
* Sat Feb 02 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.17.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Wed Sep 19 2018 Volker Fröhlich <volker27@gmx.at> - 0.17.0-1
- New upstream release
- Update names of documentation files
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.16.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Tue Jun 19 2018 Miro Hrončok <mhroncok@redhat.com> - 0.16.0-4
- Rebuilt for Python 3.7
* Wed Feb 21 2018 Iryna Shcherbina <ishcherb@redhat.com> - 0.16.0-3
- Update Python 2 dependency declarations to new packaging standards
(See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.16.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Fri Dec 22 2017 Volker Fröhlich <volker27@gmx.at> - 0.16.0-1
- New upstream release
* Thu Sep 14 2017 Volker Fröhlich <volker27@gmx.at> - 0.15.0-1
- New upstream release
* Tue Aug 29 2017 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 0.14.0-5
- Add Provides for the old name
* Sat Aug 19 2017 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 0.14.0-4
- Python 2 binary package renamed to python2-owslib
See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.14.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.14.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Thu Jan 12 2017 Volker Fröhlich <volker27@gmx.at> - 0.14.0-1
- New upstream release
* Mon Dec 19 2016 Miro Hrončok <mhroncok@redhat.com> - 0.13.0-2
- Rebuild for Python 3.6
* Sun Sep 25 2016 Volker Fröhlich <volker27@gmx.at> - 0.13.0-1
- New upstream release
* Tue Sep 13 2016 Volker Fröhlich <volker27@gmx.at> - 0.12.0-1
- New upstream release
- Update URL and Source
* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.11.2-2
- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
* Mon May 16 2016 Volker Fröhlich <volker27@gmx.at> - 0.11.2-1
- New upstream release
* Sat May 14 2016 Volker Fröhlich <volker27@gmx.at> - 0.11.1-1
- New upstream release
* Fri Apr 1 2016 Volker Fröhlich <volker27@gmx.at> - 0.11.0-1
- New upstream release
* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 0.10.3-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Mon Nov 23 2015 Volker Fröhlich <volker27@gmx.at> - 0.10.3-1
- New upstream release
* Sun Nov 22 2015 Volker Fröhlich <volker27@gmx.at> - 0.10.1-1
- New upstream release
* Thu Nov 12 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.10.0-2
- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5
* Wed Nov 11 2015 Volker Fröhlich <volker27@gmx.at> - 0.10.0-1
- New upstream release
* Tue Nov 10 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9.2-2
- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5
* Fri Sep 25 2015 Volker Fröhlich <volker27@gmx.at> - 0.9.2-1
- New upstream release
* Sun Sep 6 2015 Volker Fröhlich <volker27@gmx.at> - 0.9.1-2
- Add pyproj dependency
* Sun Sep 6 2015 Volker Fröhlich <volker27@gmx.at> - 0.9.1-1
- New upstream release
* Thu Jun 18 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Sat Jun 13 2015 Volker Fröhlich <volker27@gmx.at> - 0.9.0-1 * Sat Jun 13 2015 Volker Fröhlich <volker27@gmx.at> - 0.9.0-1
- New upstream release - New upstream release

View file

@ -1,63 +0,0 @@
#!/bin/sh
set -o nounset
set -o errexit
FORGEURL='https://github.com/geopython/OWSLib'
print_help()
{
cat <<EOF
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
working directory.
EOF
}
if [ "$#" != '1' ]
then
exec 1>&2
print_help "${0}"
exit 1
elif [ "${1-}" = '-h' ] || [ "${1-}" = '--help' ]
then
print_help "${0}"
exit 0
fi
VERSION="${1}"
SOURCE0="${FORGEURL}/archive/${VERSION}/OWSLib-${VERSION}.tar.gz"
TARNAME="$(basename "${SOURCE0}")"
TARDIR="$(basename "${SOURCE0}" '.tar.gz')"
NEWTAR="${TARDIR}-filtered.tar.zst"
SAVEDIR="${PWD}"
XDIR="$(mktemp -d)"
trap "rm -rf '${XDIR}'" INT TERM EXIT
cd "${XDIR}"
curl -L -O "${SOURCE0}"
echo "Extracting ${TARNAME}…" 1>&2
tar -xzf "${TARNAME}"
MTIME="$(stat -c '%Y' "${TARDIR}")"
rm -rvf "${TARDIR}/tests/resources"
echo "Re-compressing as ${NEWTAR}…" 1>&2
# https://www.gnu.org/software/tar/manual/html_section/Reproducibility.html
# We reset all mtimes to that of the top-level extracted directory; since git
# archives dont have meaningful per-file mtimes, nothing useful is lost.
TZ=UTC LC_ALL=C tar \
--create \
--sort=name \
--format=posix \
--numeric-owner --owner=0 --group=0 \
--mode=go+u,go-w \
--pax-option='delete=atime,delete=ctime' \
--clamp-mtime --mtime="@${MTIME}" \
"${TARDIR}/" |
zstdmt --ultra -22 > "${NEWTAR}"
touch -d @"${MTIME}" "${NEWTAR}"
cd "${SAVEDIR}"
mv -v "${XDIR}/${NEWTAR}" .

View file

@ -1,7 +0,0 @@
# 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")

View file

@ -1,142 +1,207 @@
# Works with either ElementTree or python-lxml
# No pyproj for Python 3 in EPEL7
%bcond_with python3
Name: python-OWSLib Name: python-OWSLib
Version: 0.35.0 Version: 0.9.2
Release: %autorelease Release: %autorelease
Summary: OGC Web Service utility library Summary: Client library for OGC web services
License: BSD-3-Clause License: BSD-3-Clause
URL: https://geopython.github.io/OWSLib URL: http://geopython.github.io/OWSLib
# A filtered source archive, obtained by (see Source1): %global forgeurl https://github.com/geopython/OWSLib
# Source0: %{forgeurl}/archive/%{version}/OWSLib-%{version}.tar.gz
# ./get_source %%{version}
#
# is required because tests/resources/ contains XML data files that appear to
# have been pulled from various GIS databases, and the license terms for these
# files are unclear.
#
# The unfiltered base source URL would be:
#
# https://github.com/geopython/OWSLib/archive/%%{version}/OWSLib-%%{version}.tar.gz
#
# 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
Source1: get_source
BuildSystem: pyproject # use only lxml for XML handling
BuildOption(install): -l owslib # Backport of PR#863 (https://github.com/geopython/OWSLib/pull/863) to 0.9.2
# Fixes: CVE-2023-27476 https://nvd.nist.gov/vuln/detail/CVE-2023-27476
# GHSA-8h9c-r582-mggc https://github.com/geopython/OWSLib/security/advisories/GHSA-8h9c-r582-mggc
# RHBZ#2176417 https://bugzilla.redhat.com/show_bug.cgi?id=2176417
Patch0: 0001-use-only-lxml-for-XML-handling.patch
BuildArch: noarch BuildArch: noarch
# Tests; dependencies are in requirements-dev.txt.
BuildRequires: %{py3_dist pytest}
BuildRequires: %{py3_dist pytest_httpserver}
BuildRequires: %{py3_dist Pillow}
# We dont have pytest-socket packaged, and we can get by without it.
# - pytest-socket
# We dont 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
%global common_description %{expand: %global common_description %{expand:
OWSLib is a Python package for client programming with Open Geospatial Package for client programming with Open Geospatial Consortium (OGC) web
Consortium (OGC) web service (hence OWS) interface standards, and their related service (hence OWS) interface standards, and their related content models.}
content models.
Full documentation is available at http://geopython.github.io/OWSLib
OWSLib provides a common API for accessing service metadata and wrappers for
numerous OGC Web Service interfaces.}
%description %{common_description} %description %{common_description}
%package -n python3-OWSLib %package -n python2-OWSLib
Summary: %{summary} Summary: %{summary}
%py_provides python3-owslib %{?python_provide:%python_provide python2-OWSLib}
# The -doc subpackage was removed for Fedora 42; we can remove this Obsoletes BuildRequires: python2-devel
# after Fedora 44. (EPEL10 never had a -doc subpackage.) BuildRequires: python2-setuptools
Obsoletes: python-OWSLIB-doc < 0.32.0-1 BuildRequires: python2-pytest
%description -n python3-OWSLib %{common_description} BuildRequires: python2-dateutil >= 1.5
BuildRequires: python2-requests >= 1.0
BuildRequires: python2-pytz
BuildRequires: pyproj
BuildRequires: python-lxml
Requires: python2-dateutil >= 1.5
Requires: python2-requests >= 1.0
Requires: python2-pytz
Requires: pyproj
Requires: python-lxml
%description -n python2-OWSLib %{common_description}
%prep -a %if %{with python3}
# Dont analyze/report test coverage %package -n python%{python3_pkgversion}-OWSLib
sed -r -i 's/^([[:blank:]]*)(--cov\b)/\1# \2/' tox.ini Summary: %{summary}
%{?python_provide:%python_provide python%{python3_pkgversion}-OWSLib}
BuildRequires: python%{python3_pkgversion}-devel
BuildRequires: python%{python3_pkgversion}-setuptools
BuildRequires: python%{python3_pkgversion}-pytest
BuildRequires: python%{python3_pkgversion}-dateutil >= 1.5
BuildRequires: python%{python3_pkgversion}-requests >= 1.0
BuildRequires: python%{python3_pkgversion}-pytz
BuildRequires: python%{python3_pkgversion}-pyproj
BuildRequires: python%{python3_pkgversion}-lxml
Requires: python%{python3_pkgversion}-dateutil >= 1.5
Requires: python%{python3_pkgversion}-requests >= 1.0
Requires: python%{python3_pkgversion}-pytz
Requires: python%{python3_pkgversion}-pyproj
Requires: python%{python3_pkgversion}-lxml
%description -n python%{python3_pkgversion}-OWSLib %{common_description}
%endif
%check -a %prep
%autosetup -n OWSLib-%{version} -p1
rm -rf OWSLib.egg-info
# Remove shebangs from non-script sources. The find-then-modify pattern
# preserves mtimes on sources that did not need to be modified.
find 'owslib' -type f -name '*.py' \
-exec gawk '/^#!/ { print FILENAME }; { nextfile }' '{}' '+' |
xargs -r sed -r -i '1{/^#!/d}'
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_linters
sed -r -i 's/--cov[^[:blank:]=]*([=[:blank:]][^-][^[:blank:]]+)?//g' tox.ini
%build
%py2_build
%if %{with python3}
%py3_build
%endif
%install
%py2_install
%if %{with python3}
%py3_install
%endif
%check
# Otherwise, pytest finds the package twice in the Python path and complains. # Otherwise, pytest finds the package twice in the Python path and complains.
rm -rf owslib rm -rf owslib
# These require test data files from tests/resources/, which we have removed: # In recent versions, there is a convenient “online” mark for deselecting tests
ignore="${ignore-} --ignore-glob=tests/doctests/*.txt" # that require Internet access, but we still have to manually deselect doctests
k="${k-}${k+ and }not test_gm03" # that try to make network requests.
ignore="${ignore-} --ignore=tests/test_iso_parsing.py" k="${k-}${k+ and }not (wms_geoserver_mass_gis and txt)"
ignore="${ignore-} --ignore=tests/test_ows_interfaces.py" k="${k-}${k+ and }not (wfs_MapServerWFSFeature and txt)"
ignore="${ignore-} --ignore=tests/test_owscontext_atomxml.py" k="${k-}${k+ and }not (wfs_MapServerWFSCapabilities and txt)"
k="${k-}${k+ and }not test_decode_single_json" k="${k-}${k+ and }not (wfs2_storedqueries and txt)"
k="${k-}${k+ and }not test_load_parse" k="${k-}${k+ and }not (wfs1_generic and txt)"
k="${k-}${k+ and }not test_decode_full_json" k="${k-}${k+ and }not (wcs_thredds and txt)"
k="${k-}${k+ and }not test_load_bulk" k="${k-}${k+ and }not (test_wmts_example_informatievlaanderen and txt)"
ignore="${ignore-} --ignore=tests/test_remote_metadata.py"
k="${k-}${k+ and }not TestOffline"
ignore="${ignore-} --ignore=tests/test_wfs_generic.py"
ignore="${ignore-} --ignore=tests/test_wms_datageo_130.py"
ignore="${ignore-} --ignore=tests/test_wms_jpl_capabilities.py"
k="${k-}${k+ and }not test_wps_getOperationByName"
k="${k-}${k+ and }not test_wps_checkStatus"
k="${k-}${k+ and }not test_wps_process_representation"
k="${k-}${k+ and }not test_wps_process_properties"
k="${k-}${k+ and }not test_wps_literal_data_input_parsing_references"
k="${k-}${k+ and }not test_wps_response_with_lineage"
ignore="${ignore-} --ignore=tests/test_wps_describeprocess_bbox.py"
ignore="${ignore-} --ignore=tests/test_wps_describeprocess_ceda.py"
ignore="${ignore-} --ignore=tests/test_wps_describeprocess_emu_all.py"
ignore="${ignore-} --ignore=tests/test_wps_describeprocess_usgs.py"
ignore="${ignore-} --ignore=tests/test_wps_execute.py"
ignore="${ignore-} --ignore=tests/test_wps_execute_invalid_request.py"
ignore="${ignore-} --ignore=tests/test_wps_getcapabilities_52n.py"
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"
%pytest -m 'not online' -k "${k-}" ${ignore-} -v -rs # These require network access, and would be covered by the “online” mark:
k="${k-}${k+ and }not (WebMapService and getmap)"
k="${k-}${k+ and }not (WebMapTileService and buildTileRequest)"
k="${k-}${k+ and }not (WebMapTileService and gettile)"
k="${k-}${k+ and }not (csw_gdp and txt)"
k="${k-}${k+ and }not (csw_geonetwork and txt)"
k="${k-}${k+ and }not (csw_geoserver and txt)"
k="${k-}${k+ and }not (csw_linz and txt)"
k="${k-}${k+ and }not (csw_ngdc and txt)"
k="${k-}${k+ and }not (csw_nlr and txt)"
k="${k-}${k+ and }not (csw_pycsw and txt)"
k="${k-}${k+ and }not (csw_pycsw_skip_caps and txt)"
k="${k-}${k+ and }not (csw_skgeodsy and txt)"
k="${k-}${k+ and }not (csw_uuid_constrain and txt)"
k="${k-}${k+ and }not (ows_interfaces and txt)"
k="${k-}${k+ and }not (sos_10_ndbc_getobservation and txt)"
k="${k-}${k+ and }not (tms and txt)"
k="${k-}${k+ and }not (wcs_idee and txt)"
k="${k-}${k+ and }not (wfs_USDASSURGO and txt)"
k="${k-}${k+ and }not (wms_JPLCapabilities and txt)"
k="${k-}${k+ and }not (wms_getfeatureinfo and txt)"
k="${k-}${k+ and }not (wmts and txt)"
k="${k-}${k+ and }not (wps_execute and txt)"
k="${k-}${k+ and }not (wps_execute_invalid_request and txt)"
# Unknown problem—check if it is fixed in a later version:
k="${k-}${k+ and } not (TestOffline and test_wfs_110_remotemd_parse_all)"
k="${k-}${k+ and } not (TestOffline and test_wfs_110_remotemd_parse_single)"
k="${k-}${k+ and } not (TestOffline and test_wfs_200_remotemd_parse_single)"
k="${k-}${k+ and } not (TestOffline and test_wms_130_remotemd_parse_all)"
k="${k-}${k+ and } not (TestOffline and test_wms_130_remotemd_parse_single)"
# ____________ [doctest] tests/doctests/wms_GeoServerCapabilities.txt ____________
# 062 >>> x = wms['opengeo:poi'].styles
# 063 >>> x == {'point': {'legend': 'http://localhost:8080/geoserver/wms?request=GetLegendGraphic&format=image%2Fpng&width=20&height=20&layer=poi', 'title': 'A boring default style'}}
# 064 True
# 065
# 066 Test nested layer
# 067
# 068 >>> wms['parent_layer'].title
# 069 'Parent Layer'
# 070
# 071 >>> wms['parent_layer'].queryable
# Expected:
# 1
# Got:
# 0
k="${k-}${k+ and } not (wms_GeoServerCapabilities and txt)"
PYTHONPATH='%{buildroot}%{python2_sitelib}' PYTHONDONTWRITEBYTECODE=1 \
%{python2} -m pytest -m 'not online' -k "${k-}"
%if %{with python3}
PYTHONPATH='%{buildroot}%{python3_sitelib}' PYTHONDONTWRITEBYTECODE=1 \
%{python3} -m pytest -m 'not online' -k "${k-}"
%endif
%files -n python3-OWSLib -f %{pyproject_files} %files -n python2-OWSLib
%doc README.md %license LICENSE.txt
%doc CHANGES.txt
%doc CREDITS.txt
%doc FAQ.txt
%doc HISTORY.txt
%doc README.txt
%{python2_sitelib}/owslib/
%{python2_sitelib}/OWSLib-%{version}-py%{python2_version}.egg-info
%if %{with python3}
%files -n python%{python3_pkgversion}-OWSLib
%license LICENSE.txt
%doc CHANGES.txt
%doc CREDITS.txt
%doc FAQ.txt
%doc HISTORY.txt
%doc README.txt
%{python3_sitelib}/owslib/
%{python3_sitelib}/OWSLib-%{version}-py%{python3_version}.egg-info
%endif
%changelog %changelog

View file

@ -1 +1 @@
SHA512 (OWSLib-0.35.0-filtered.tar.zst) = be1eb52fa09049b720c1ebd476363e01c6442c9905c9adf0d35ccc11f39b228b9f3e64ed882a7c04987f2f38f9c8500a61aeef61e48a41602098ff22df0ed526 SHA512 (OWSLib-0.9.2.tar.gz) = 1818299d702053b344edd435417785c8dd1c4d811a8bff7919c04624cf62a9324c856604965706f0416bea827dab3e5650b1f1cf6730b1b424535673f90e4cf0