Path: blob/main/test/lib/python3.9/site-packages/setuptools/command/py36compat.py
4799 views
import os1from glob import glob2from distutils.util import convert_path3from distutils.command import sdist456class sdist_add_defaults:7"""8Mix-in providing forward-compatibility for functionality as found in9distutils on Python 3.7.1011Do not edit the code in this class except to update functionality12as implemented in distutils. Instead, override in the subclass.13"""1415def add_defaults(self):16"""Add all the default files to self.filelist:17- README or README.txt18- setup.py19- test/test*.py20- all pure Python modules mentioned in setup script21- all files pointed by package_data (build_py)22- all files defined in data_files.23- all files defined as scripts.24- all C sources listed as part of extensions or C libraries25in the setup script (doesn't catch C headers!)26Warns if (README or README.txt) or setup.py are missing; everything27else is optional.28"""29self._add_defaults_standards()30self._add_defaults_optional()31self._add_defaults_python()32self._add_defaults_data_files()33self._add_defaults_ext()34self._add_defaults_c_libs()35self._add_defaults_scripts()3637@staticmethod38def _cs_path_exists(fspath):39"""40Case-sensitive path existence check4142>>> sdist_add_defaults._cs_path_exists(__file__)43True44>>> sdist_add_defaults._cs_path_exists(__file__.upper())45False46"""47if not os.path.exists(fspath):48return False49# make absolute so we always have a directory50abspath = os.path.abspath(fspath)51directory, filename = os.path.split(abspath)52return filename in os.listdir(directory)5354def _add_defaults_standards(self):55standards = [self.READMES, self.distribution.script_name]56for fn in standards:57if isinstance(fn, tuple):58alts = fn59got_it = False60for fn in alts:61if self._cs_path_exists(fn):62got_it = True63self.filelist.append(fn)64break6566if not got_it:67self.warn("standard file not found: should have one of " +68', '.join(alts))69else:70if self._cs_path_exists(fn):71self.filelist.append(fn)72else:73self.warn("standard file '%s' not found" % fn)7475def _add_defaults_optional(self):76optional = ['test/test*.py', 'setup.cfg']77for pattern in optional:78files = filter(os.path.isfile, glob(pattern))79self.filelist.extend(files)8081def _add_defaults_python(self):82# build_py is used to get:83# - python modules84# - files defined in package_data85build_py = self.get_finalized_command('build_py')8687# getting python files88if self.distribution.has_pure_modules():89self.filelist.extend(build_py.get_source_files())9091# getting package_data files92# (computed in build_py.data_files by build_py.finalize_options)93for pkg, src_dir, build_dir, filenames in build_py.data_files:94for filename in filenames:95self.filelist.append(os.path.join(src_dir, filename))9697def _add_defaults_data_files(self):98# getting distribution.data_files99if self.distribution.has_data_files():100for item in self.distribution.data_files:101if isinstance(item, str):102# plain file103item = convert_path(item)104if os.path.isfile(item):105self.filelist.append(item)106else:107# a (dirname, filenames) tuple108dirname, filenames = item109for f in filenames:110f = convert_path(f)111if os.path.isfile(f):112self.filelist.append(f)113114def _add_defaults_ext(self):115if self.distribution.has_ext_modules():116build_ext = self.get_finalized_command('build_ext')117self.filelist.extend(build_ext.get_source_files())118119def _add_defaults_c_libs(self):120if self.distribution.has_c_libraries():121build_clib = self.get_finalized_command('build_clib')122self.filelist.extend(build_clib.get_source_files())123124def _add_defaults_scripts(self):125if self.distribution.has_scripts():126build_scripts = self.get_finalized_command('build_scripts')127self.filelist.extend(build_scripts.get_source_files())128129130if hasattr(sdist.sdist, '_add_defaults_standards'):131# disable the functionality already available upstream132class sdist_add_defaults: # noqa133pass134135136