freeipa/ipasetup.py.in
Florence Blanc-Renaud d1f1612088 pylint: replace deprecated distutils module
PEP 632 deprecates the distutils module. Replace
- distutils.spawn.find_executable with shutil.which
- distutils.log with logging

Related: https://pagure.io/freeipa/issue/9278

Signed-off-by: Florence Blanc-Renaud <flo@redhat.com>
Reviewed-By: Stanislav Levin <slev@altlinux.org>
2023-01-10 08:30:58 +01:00

169 lines
6.1 KiB
Python

# Copyright (C) 2016 Red Hat
# see file 'COPYING' for use and warranty information
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import logging
import os
import sys
from setuptools.command.build_py import build_py as setuptools_build_py
class build_py(setuptools_build_py):
"""Exclude NAME.install subpackage from wheels
"""
def initialize_options(self):
setuptools_build_py.initialize_options(self)
self.skip_modules = ()
def finalize_options(self):
setuptools_build_py.finalize_options(self)
omit = os.environ.get('IPA_OMIT_INSTALL', '0')
if omit == '1':
distname = self.distribution.metadata.name
self.skip_modules = (
# *.install.* subpackages
'{}.install'.format(distname),
# platform override module
'ipaplatform.override',
)
logging.warning("bdist_wheel: Ignore package: %s",
', '.join(self.skip_modules))
def build_module(self, module, module_file, package):
if isinstance(package, str):
package = package.split('.')
name = '.'.join(list(package) + [module])
if self.skip_modules and name.startswith(self.skip_modules):
# remove file in case it has been copied to build/lib before
outfile = self.get_module_outfile(self.build_lib, package, module)
try:
os.unlink(outfile)
except OSError:
pass
return None
else:
return setuptools_build_py.build_module(self, module,
module_file, package)
import setuptools
VERSION = '@VERSION@'
SETUPTOOLS_VERSION = tuple(int(v) for v in setuptools.__version__.split("."))
PACKAGE_VERSION = {
'cryptography': 'cryptography >= 1.6',
'custodia': 'custodia >= 0.3.1',
'dnspython': 'dnspython >= 1.15',
'gssapi': 'gssapi >= 1.2.0',
'ipaclient': 'ipaclient == {}'.format(VERSION),
'ipalib': 'ipalib == {}'.format(VERSION),
'ipaplatform': 'ipaplatform == {}'.format(VERSION),
'ipapython': 'ipapython == {}'.format(VERSION),
'ipaserver': 'ipaserver == {}'.format(VERSION),
'jwcrypto': 'jwcrypto >= 0.4.2',
'kdcproxy': 'kdcproxy >= 0.3',
'netifaces': 'netifaces >= 0.10.4',
'python-ldap': 'python-ldap >= 3.0.0',
'python-yubico': 'python-yubico >= 1.2.3',
'qrcode': 'qrcode >= 5.0',
}
common_args = dict(
version=VERSION,
license="GPLv3",
author="FreeIPA Developers",
author_email="freeipa-devel@lists.fedorahosted.org",
maintainer="FreeIPA Developers",
maintainer_email="freeipa-devel@redhat.com",
url="https://www.freeipa.org/",
download_url="https://www.freeipa.org/page/Downloads",
platforms=["Linux"],
python_requires=">=3.6.0",
classifiers=[
"Development Status :: 5 - Production/Stable",
"Intended Audience :: System Administrators",
("License :: OSI Approved :: "
"GNU General Public License v3 (GPLv3)"),
"Programming Language :: C",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: Implementation :: CPython",
"Operating System :: POSIX",
"Operating System :: POSIX :: Linux",
"Operating System :: Unix",
"Topic :: Internet :: Name Service (DNS)",
"Topic :: Security",
("Topic :: System :: Systems Administration :: "
"Authentication/Directory :: LDAP"),
],
)
local_path = os.path.dirname(os.path.abspath(sys.argv[0]))
old_path = os.path.abspath(os.getcwd())
def ipasetup(name, doc, **kwargs):
doclines = doc.split("\n")
install_requires = list(kwargs.pop('install_requires', []))
for i, entry in enumerate(install_requires):
install_requires[i] = PACKAGE_VERSION.get(entry, entry)
setup_kwargs = common_args.copy()
setup_kwargs.update(
name=name,
description=doclines[0],
long_description="\n".join(doclines[:2]),
install_requires=install_requires,
**kwargs
)
# exclude setup helpers from getting installed
epd = setup_kwargs.setdefault('exclude_package_data', {})
epd.setdefault('', []).extend(['*/setup.py', '*/ipasetup.py'])
# exclude NAME.install from wheels
cmdclass = setup_kwargs.setdefault('cmdclass', {})
cmdclass['build_py'] = build_py
# Env markers like ":python_version<'3'" are not supported by
# setuptools < 18.0.
if 'extras_require' in setup_kwargs and SETUPTOOLS_VERSION < (18, 0, 0):
for k in list(setup_kwargs['extras_require']):
if not k.startswith(':'):
continue
values = setup_kwargs['extras_require'].pop(k)
req = setup_kwargs.setdefault('install_requires', [])
if k == ":python_version<'3'":
if sys.version_info.major == 2:
req.extend(values)
elif k == ":python_version>='3'":
if sys.version_info.major >= 3:
req.extend(values)
else:
raise ValueError(k, values)
os.chdir(local_path)
try:
# BEFORE importing distutils, remove MANIFEST. distutils doesn't
# properly update it when the contents of directories change.
if os.path.isfile('MANIFEST'):
os.unlink('MANIFEST')
from setuptools import setup
return setup(**setup_kwargs)
finally:
os.chdir(old_path)