# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7
PYTHON_COMPAT=( python2_7 python3_{6,7} pypy3 )

inherit distutils-r1

DESCRIPTION="Cheroot is the high-performance, pure-Python HTTP server used by CherryPy."
HOMEPAGE="https://cherrypy.org/ https://pypi.org/project/Cheroot/ https://github.com/cherrypy/cheroot"
SRC_URI="mirror://pypi/C/${PN/c/C}/${P}.tar.gz"

LICENSE="BSD"
SLOT="0"
KEYWORDS="*"
# Unit tests are temporarily disabled for this version, see below for
# what needs to be done.
#IUSE="test"
RESTRICT="test"

RDEPEND="
	dev-python/jaraco-functools[${PYTHON_USEDEP}]
	>=dev-python/more-itertools-2.6[${PYTHON_USEDEP}]
	>=dev-python/six-1.11.0[${PYTHON_USEDEP}]
"
DEPEND="${RDEPEND}
	dev-python/setuptools[${PYTHON_USEDEP}]"

#	doc? (
#		>=dev-python/sphinx-1.8.2[${PYTHON_USEDEP}]
#		>=dev-python/jaraco-packaging-3.2[${PYTHON_USEDEP}]
#		>=dev-python/sphinx-tabs-1.1.0[${PYTHON_USEDEP}]
#		dev-python/docutils[${PYTHON_USEDEP}]
#		dev-python/alabaster[${PYTHON_USEDEP}]
#		dev-python/python-dateutil[${PYTHON_USEDEP}]
#		>=dev-python/sphinxcontrib-spelling-4.3.0[${PYTHON_USEDEP}]
#	)

	# Add the following for unit tests, some packages listed will need
	# to be added and keyworded appropriately.
#	test? (
#		>=dev-python/pytest-2.8[${PYTHON_USEDEP}]
#		>=dev-python/pytest-mock-1.11.0[${PYTHON_USEDEP}]
#		>=dev-python/pytest-sugar-0.9.1[${PYTHON_USEDEP}]
#		>=dev-python/pytest-testmon-0.9.7[${PYTHON_USEDEP}]
#		~dev-python/pytest-watch-4.2.0[${PYTHON_USEDEP}]
#		>=dev-python/pytest-xdist-1.2.28[${PYTHON_USEDEP}]
#		~dev-python/coverage-4.5.3[${PYTHON_USEDEP}]	#undesired
#		~dev-python/codecov-2.0.15[${PYTHON_USEDEP}]	#undesired
#		~dev-python/pytest-cov-2.7.1[${PYTHON_USEDEP}]	#undesired
#		>=dev-python/trustme-0.4.0[${PYTHON_USEDEP}]
#		dev-python/pyopenssl[${PYTHON_USEDEP}]
#		dev-python/requests-unixsocket[${PYTHON_USEDEP}]
#		>=dev-python/jaraco-text-3.1[${PYTHON_USEDEP}]
#	)"

#python_test() {
#	py.test -v || die "tests failed under ${EPYTHON}"
#}

python_prepare_all() {
	distutils-r1_python_prepare_all

	sed -e "s/use_scm_version=True/version='${PV}'/" -i setup.py || die
	sed -e '/setuptools_scm/d' -i setup.cfg || die
}
