| |
@@ -1,158 +1,214 @@
|
| |
- # https://fedoraproject.org/wiki/Packaging:DistTag?rd=Packaging/DistTag#Conditionals
|
| |
- %if 0%{?fedora} < 30
|
| |
- %global with_py2 1
|
| |
- %else
|
| |
- %global with_py2 0
|
| |
+ # 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 lesser substitute.
|
| |
+ %bcond_without doc_pdf
|
| |
+
|
| |
+ Name: python-hdfs
|
| |
+ Version: 2.5.8
|
| |
+ Release: 10%{?dist}
|
| |
+ Summary: API and command line interface for HDFS
|
| |
+
|
| |
+ License: MIT
|
| |
+ URL: https://github.com/mtth/hdfs
|
| |
+ Source0: %{url}/archive/%{version}/hdfs-%{version}.tar.gz
|
| |
+ # Downstream man pages in groff_man(7) format. These were written for Fedora
|
| |
+ # based on the tools’ --help output and should be updated if the command-line
|
| |
+ # interface changes.
|
| |
+ Source1: hdfscli.1
|
| |
+ Source2: hdfscli-avro.1
|
| |
+
|
| |
+ # Use unittest.mock where available
|
| |
+ # https://github.com/mtth/hdfs/pull/177
|
| |
+ Patch0: https://github.com/mtth/hdfs/pull/177.patch
|
| |
+
|
| |
+ # The base package is arched because extras metapackages requiring fastavro are
|
| |
+ # not available on 32-bit architectures
|
| |
+ # (https://bugzilla.redhat.com/show_bug.cgi?id=1943932).
|
| |
+ %ifnarch %{arm32} %{ix86}
|
| |
+ %global fastavro_arch 1
|
| |
%endif
|
| |
- %global srcname hdfs
|
| |
- %global sum HdfsCLI: API and command line interface for HDFS
|
| |
+ # Of the binary RPMs, only the conditionally-enabled extras metapackages
|
| |
+ # python3-fastavro+avro and python3-fastavro+dataframe are arched.
|
| |
+ #
|
| |
+ # Since there is no compiled code, there are no debugging symbols.
|
| |
+ %global debug_package %{nil}
|
| |
|
| |
- Name: python-%{srcname}
|
| |
- Version: 2.5.8
|
| |
- Release: 9%{?dist}
|
| |
- Summary: %{sum}
|
| |
+ BuildRequires: python3-devel
|
| |
+
|
| |
+ # Extra dependencies for documentation
|
| |
+ %if %{with doc_pdf}
|
| |
+ BuildRequires: make
|
| |
+ BuildRequires: %{py3_dist sphinx}
|
| |
+ BuildRequires: python3-sphinx-latex
|
| |
+ BuildRequires: latexmk
|
| |
+ %endif
|
| |
+
|
| |
+ %global _description %{expand:
|
| |
+ %{summary}.
|
| |
+
|
| |
+ Features:
|
| |
+
|
| |
+ • Python bindings for the WebHDFS (and HttpFS) API, supporting both secure and
|
| |
+ insecure clusters.
|
| |
+ • Command line interface to transfer files and start an interactive client
|
| |
+ shell, with aliases for convenient namenode URL caching.
|
| |
+ • Additional functionality through optional extensions:
|
| |
+ ○ avro, to read and write Avro files directly from HDFS.
|
| |
+ ○ dataframe, to load and save Pandas dataframes.
|
| |
+ ○ kerberos, to support Kerberos authenticated clusters.}
|
| |
|
| |
- License: MIT
|
| |
- URL: https://github.com/mtth/%{srcname}
|
| |
- Source0: https://github.com/mtth/%{srcname}/archive/%{version}/%{srcname}-%{version}.tar.gz
|
| |
+ %description %{_description}
|
| |
+
|
| |
+
|
| |
+ %package -n python3-hdfs
|
| |
+ Summary: %{summary}
|
| |
|
| |
BuildArch: noarch
|
| |
|
| |
- %global _description Python (2 and 3) bindings for the WebHDFS (and HttpFS) \
|
| |
- API, supporting both secure and insecure clusters. Command line interface to \
|
| |
- transfer files and start an interactive client shell, with aliases for \
|
| |
- convenient name-node URL caching. Additional functionality through optional \
|
| |
- extensions: Avro, to read and write Avro files directly from HDFS. data-frame, \
|
| |
- to load and save Pandas data-frames. Kerberos, to support Kerberos \
|
| |
- authenticated clusters.
|
| |
-
|
| |
- %description
|
| |
- %{_description}
|
| |
-
|
| |
- %if %{with_py2}
|
| |
- %package -n python2-%{srcname}
|
| |
- Summary: %{sum}
|
| |
- BuildRequires: python2-devel
|
| |
- BuildRequires: %{py2_dist setuptools}
|
| |
- BuildRequires: %{py2_dist six}
|
| |
- BuildRequires: %{py2_dist fastavro}
|
| |
- BuildRequires: %{py2_dist pandas}
|
| |
- BuildRequires: %{py2_dist requests-kerberos}
|
| |
- BuildRequires: %{py2_dist nose}
|
| |
- BuildRequires: %{py2_dist mock}
|
| |
- Requires: %{py2_dist six}
|
| |
- Requires: %{py2_dist requests}
|
| |
- Requires: %{py2_dist docopt}
|
| |
- Requires: %{py2_dist fastavro}
|
| |
- Requires: %{py2_dist pandas}
|
| |
- Requires: %{py2_dist requests-kerberos}
|
| |
- Requires: %{py2_dist mock}
|
| |
-
|
| |
- %{?python_provide:%python_provide python2-%{srcname}}
|
| |
-
|
| |
- %description -n python2-%{srcname}
|
| |
- %{_description}
|
| |
- %endif
|
| |
+ %description -n python3-hdfs %{_description}
|
| |
|
| |
- %package -n python3-%{srcname}
|
| |
- Summary: %{sum}
|
| |
- BuildRequires: python3-devel
|
| |
- BuildRequires: %{py3_dist setuptools}
|
| |
- BuildRequires: %{py3_dist six}
|
| |
- BuildRequires: %{py3_dist fastavro}
|
| |
- BuildRequires: %{py3_dist pandas}
|
| |
- BuildRequires: %{py3_dist requests-kerberos}
|
| |
- BuildRequires: %{py3_dist nose}
|
| |
- BuildRequires: %{py3_dist mock}
|
| |
- Requires: %{py3_dist six}
|
| |
- Requires: %{py3_dist requests}
|
| |
- Requires: %{py3_dist docopt}
|
| |
- Requires: %{py3_dist fastavro}
|
| |
- Requires: %{py3_dist pandas}
|
| |
- Requires: %{py3_dist requests-kerberos}
|
| |
- Requires: %{py3_dist mock}
|
| |
- %{?python_provide:%python_provide python3-%{srcname}}
|
| |
-
|
| |
- %description -n python3-%{srcname}
|
| |
- %{_description}
|
| |
|
| |
%package doc
|
| |
- Summary: Documentation for %{name}
|
| |
- BuildRequires: %{py3_dist sphinx}
|
| |
- # Should docs require the main package?
|
| |
+ Summary: Documentation and examples for %{name}
|
| |
+
|
| |
+ BuildArch: noarch
|
| |
+
|
| |
+ %description doc %{_description}
|
| |
|
| |
- %description doc
|
| |
- %{_description}
|
| |
|
| |
%prep
|
| |
- %autosetup -n %{srcname}-%{version}
|
| |
- rm -rf *.egg-info
|
| |
+ %autosetup -n hdfs-%{version} -p1
|
| |
|
| |
- %build
|
| |
- %if %{with_py2}
|
| |
- %py2_build
|
| |
- %endif
|
| |
- %py3_build
|
| |
+ # Remove shebangs from non-script sources. The find-then-modify pattern keeps
|
| |
+ # us from discarding mtimes on sources that do not need modification.
|
| |
+ find . -type f ! -perm /0111 \
|
| |
+ -exec gawk '/^#!/ { print FILENAME }; { nextfile }' '{}' '+' |
|
| |
+ xargs -r -t sed -r -i '1{/^#!/d}'
|
| |
|
| |
- pushd doc
|
| |
- PYTHONPATH=../ sphinx-build-3 . html
|
| |
- rm -fvr html/{.buildinfo,.doctrees}
|
| |
- popd
|
| |
+ cp -p '%{SOURCE1}' %{?fastavro_arch:'%{SOURCE2}'} .
|
| |
|
| |
- # Remove shebang from examples in doc
|
| |
- for example in examples/*.py; do
|
| |
- sed '1{\@^#!/usr/bin/env python@d}' $example > $example.new &&
|
| |
- touch -r $example $example.new &&
|
| |
- mv $example.new $example
|
| |
- done
|
| |
|
| |
- %install
|
| |
- %if %{with_py2}
|
| |
- %py2_install
|
| |
+ %generate_buildrequires
|
| |
+ %pyproject_buildrequires -x kerberos%{?fastavro_arch:,avro,dataframe}
|
| |
+
|
| |
+
|
| |
+ # We manually write out the python3-hdfs+kerberos metapackage so that it (like
|
| |
+ # python3-hdfs) can be noarch even though the base package is arched. The
|
| |
+ # definition is based on:
|
| |
+ #
|
| |
+ # rpm -E '%%pyproject_extras_subpkg -n python3-hdfs kerberos
|
| |
+ %package -n python3-hdfs+kerberos
|
| |
+ Summary: Metapackage for python3-hdfs: kerberos extras
|
| |
+
|
| |
+ BuildArch: noarch
|
| |
+
|
| |
+ Requires: python3-hdfs = %{version}-%{release}
|
| |
+
|
| |
+ %description -n python3-hdfs+kerberos
|
| |
+ This is a metapackage bringing in kerberos extras requires for python3-hdfs.
|
| |
+ It makes sure the dependencies are installed.
|
| |
+
|
| |
+ %files -n python3-hdfs+kerberos -f %{_pyproject_ghost_distinfo}
|
| |
+
|
| |
+
|
| |
+ %if 0%{?fastavro_arch}
|
| |
+
|
| |
+ # Note that this subpackage is arched because it is not available on 32-bit
|
| |
+ # architectures.
|
| |
+ #
|
| |
+ # We manually write out the python3-hdfs+avro subpackage so that it can contain
|
| |
+ # the hdfscli-avro CLI entry point, and so that its summary and description can
|
| |
+ # be tweaked to reflect this. The definition is based on:
|
| |
+ #
|
| |
+ # rpm -E '%%pyproject_extras_subpkg -n python3-hdfs avro
|
| |
+ %package -n python3-hdfs+avro
|
| |
+ Summary: Package for python3-hdfs: avro extras
|
| |
+
|
| |
+ Requires: python3-hdfs = %{version}-%{release}
|
| |
+
|
| |
+ %description -n python3-hdfs+avro
|
| |
+ This is a package bringing in avro extras requires for python3-hdfs.
|
| |
+ It makes sure the dependencies are installed.
|
| |
+
|
| |
+ It also includes the avro-specific command-line tool, hdfscli-avro.
|
| |
+
|
| |
+ %files -n python3-hdfs+avro -f %{_pyproject_ghost_distinfo}
|
| |
+ %{_bindir}/hdfscli-avro
|
| |
+ %{_mandir}/man1/hdfscli-avro.1*
|
| |
+
|
| |
+
|
| |
+ # Note that this metapackage is arched because it is not available on 32-bit
|
| |
+ # architectures.
|
| |
+ %pyproject_extras_subpkg -n python3-hdfs dataframe
|
| |
+
|
| |
%endif
|
| |
- %py3_install
|
| |
-
|
| |
- # Remove shebang from libraries
|
| |
- # probably easier to use find, but the wiki suggests a for loop
|
| |
- %if %{with_py2}
|
| |
- for lib in %{buildroot}%{python2_sitelib}/%{srcname}/*.py %{buildroot}%{python2_sitelib}/%{srcname}/ext/*.py %{buildroot}%{python2_sitelib}/%{srcname}/ext/avro/*.py;
|
| |
- do
|
| |
- echo "Working on $lib"
|
| |
- sed '1{\@^#!/usr/bin/env python@d}' $lib > $lib.new &&
|
| |
- touch -r $lib $lib.new &&
|
| |
- mv $lib.new $lib
|
| |
- done
|
| |
+
|
| |
+
|
| |
+ %build
|
| |
+ %pyproject_wheel
|
| |
+
|
| |
+ %if %{with doc_pdf}
|
| |
+ PYTHONPATH="${PWD}" sphinx-build -b latex doc _latex %{?_smp_mflags}
|
| |
+ %make_build -C _latex
|
| |
%endif
|
| |
|
| |
- for lib in %{buildroot}%{python3_sitelib}/%{srcname}/*.py %{buildroot}%{python3_sitelib}/%{srcname}/ext/*.py %{buildroot}%{python3_sitelib}/%{srcname}/ext/avro/*.py;
|
| |
- do
|
| |
- echo "Working on $lib"
|
| |
- sed '1{\@^#!/usr/bin/env python@d}' $lib > $lib.new &&
|
| |
- touch -r $lib $lib.new &&
|
| |
- mv $lib.new $lib
|
| |
- done
|
| |
|
| |
- # Ignore tests - require a hadoop cluster setup
|
| |
+ %install
|
| |
+ %pyproject_install
|
| |
+ %pyproject_save_files hdfs
|
| |
+ install -t '%{buildroot}%{_mandir}/man1' -D -p -m 0644 \
|
| |
+ hdfscli.1 %{?fastavro_arch:hdfscli-avro.1}
|
| |
+
|
| |
+
|
| |
+ %check
|
| |
+ # Ignore upstream tests - require a hadoop cluster setup
|
| |
# https://github.com/mtth/hdfs/blob/master/.travis.yml#L10
|
| |
|
| |
- %if %{with_py2}
|
| |
- %files -n python2-%{srcname}
|
| |
- %license LICENSE
|
| |
- %{python2_sitelib}/%{srcname}-%{version}-py?.?.egg-info
|
| |
- %{python2_sitelib}/%{srcname}/
|
| |
+ %{py3_check_import hdfs
|
| |
+ hdfs.client
|
| |
+ hdfs.config
|
| |
+ hdfs.util
|
| |
+ hdfs.ext
|
| |
+ hdfs.ext.kerberos}
|
| |
+ %if 0%{?fastavro_arch}
|
| |
+ %{py3_check_import hdfs.ext.avro hdfs.ext.dataframe}
|
| |
%endif
|
| |
|
| |
- %files -n python3-%{srcname}
|
| |
- %license LICENSE
|
| |
- %{python3_sitelib}/%{srcname}-%{version}-py%{python3_version}.egg-info
|
| |
- %{python3_sitelib}/%{srcname}/
|
| |
- %{_bindir}/%{srcname}*
|
| |
+
|
| |
+ %files -n python3-hdfs -f %{pyproject_files}
|
| |
+ # pyproject-rpm-macros handles the license file; verify with rpm -qL -p …
|
| |
+ %{_bindir}/hdfscli
|
| |
+ %{_mandir}/man1/hdfscli.1*
|
| |
+ # This is packaged in python3-hdfs+avro on 64-bit architectures; it is not
|
| |
+ # packaged at all on 32-bit architectures.
|
| |
+ %exclude %{_bindir}/hdfscli-avro
|
| |
+
|
| |
|
| |
%files doc
|
| |
- %doc examples AUTHORS CHANGES README.md doc/html
|
| |
%license LICENSE
|
| |
+ %doc AUTHORS
|
| |
+ %doc CHANGES
|
| |
+ %doc README.md
|
| |
+ %if %{with doc_pdf}
|
| |
+ %doc _latex/hdfs.pdf
|
| |
+ %endif
|
| |
+ %doc examples
|
| |
+
|
| |
|
| |
%changelog
|
| |
+ * Sun Oct 10 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 2.5.8-10
|
| |
+ - Fully modernize the packaging
|
| |
+ - Switch to “new guidelines” / pyproject-rpm-macros
|
| |
+ - Drop conditionals for Python 2 on obsolete Fedora releases
|
| |
+ - Rely on Python dependency generator (no manual Requires)
|
| |
+ - Build PDF instead of HTML documentation due to guideline issues
|
| |
+ - Drop dependencies on deprecated nose and mock
|
| |
+ - Properly handle extras metapackages and dependency on unported
|
| |
+ python-fastavro for 32-bit architectures; move the hdfscli-avro entry point
|
| |
+ into the new python3-hdfs+avro package
|
| |
+ - Add man pages for command-line tools
|
| |
+
|
| |
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2.5.8-9
|
| |
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
| |
|
| |
python-fastavro for 32-bit architectures; move the hdfscli-avro entry point
into the new python3-hdfs+avro package