import re
from itertools import chain
from pathlib import Path
from setuptools import Command
from setuptools import find_packages
from setuptools import setup
try:
from setuptools.command.build import build
except ImportError:
from distutils.command.build import build
from setuptools.command.develop import develop
from setuptools.command.easy_install import easy_install
from setuptools.command.install_lib import install_lib
def read(*names, **kwargs):
with Path(__file__).parent.joinpath(*names).open(encoding=kwargs.get('encoding', 'utf8')) as fh:
return fh.read()
class BuildWithPTH(build):
def run(self, *args, **kwargs):
super().run(*args, **kwargs)
path = str(Path(__file__).parent / 'src' / 'pytest-cov.pth')
dest = str(Path(self.build_lib) / Path(path).name)
self.copy_file(path, dest)
class EasyInstallWithPTH(easy_install):
def run(self, *args, **kwargs):
super().run(*args, **kwargs)
path = str(Path(__file__).parent / 'src' / 'pytest-cov.pth')
dest = str(Path(self.install_dir) / Path(path).name)
self.copy_file(path, dest)
class InstallLibWithPTH(install_lib):
def run(self, *args, **kwargs):
super().run(*args, **kwargs)
path = str(Path(__file__).parent / 'src' / 'pytest-cov.pth')
dest = str(Path(self.install_dir) / Path(path).name)
self.copy_file(path, dest)
self.outputs = [dest]
def get_outputs(self):
return chain(super().get_outputs(), self.outputs)
class DevelopWithPTH(develop):
def run(self, *args, **kwargs):
super().run(*args, **kwargs)
path = str(Path(__file__).parent / 'src' / 'pytest-cov.pth')
dest = str(Path(self.install_dir) / Path(path).name)
self.copy_file(path, dest)
class GeneratePTH(Command):
user_options = ()
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
with Path(__file__).parent.joinpath('src', 'pytest-cov.pth').open('w') as fh:
with Path(__file__).parent.joinpath('src', 'pytest-cov.embed').open() as sh:
fh.write(f"import os, sys;exec({sh.read().replace(' ', ' ')!r})")
setup(
name='pytest-cov',
version='5.0.0',
license='MIT',
description='Pytest plugin for measuring coverage.',
long_description='{}\n{}'.format(read('README.rst'), re.sub(':[a-z]+:`~?(.*?)`', r'``\1``', read('CHANGELOG.rst'))),
author='Marc Schlaich',
author_email='marc.schlaich@gmail.com',
url='https://github.com/pytest-dev/pytest-cov',
packages=find_packages('src'),
package_dir={'': 'src'},
py_modules=[path.stem for path in Path('src').glob('*.py')],
include_package_data=True,
zip_safe=False,
classifiers=[
'Development Status :: 5 - Production/Stable',
'Framework :: Pytest',
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Operating System :: Microsoft :: Windows',
'Operating System :: POSIX',
'Operating System :: Unix',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3 :: Only',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.11',
'Programming Language :: Python :: 3.12',
'Programming Language :: Python :: Implementation :: CPython',
'Programming Language :: Python :: Implementation :: PyPy',
'Topic :: Software Development :: Testing',
'Topic :: Utilities',
],
project_urls={
'Documentation': 'https://pytest-cov.readthedocs.io/',
'Changelog': 'https://pytest-cov.readthedocs.io/en/latest/changelog.html',
'Issue Tracker': 'https://github.com/pytest-dev/pytest-cov/issues',
},
keywords=[
'cover',
'coverage',
'pytest',
'py.test',
'distributed',
'parallel',
],
python_requires='>=3.8',
install_requires=[
'pytest>=4.6',
'coverage[toml]>=5.2.1',
],
extras_require={
'testing': [
'fields',
'hunter',
'process-tests',
'pytest-xdist',
'virtualenv',
]
},
entry_points={
'pytest11': [
'pytest_cov = pytest_cov.plugin',
],
},
cmdclass={
'build': BuildWithPTH,
'easy_install': EasyInstallWithPTH,
'install_lib': InstallLibWithPTH,
'develop': DevelopWithPTH,
'genpth': GeneratePTH,
},
)