"""distutils.command.checkImplements the Distutils 'check' command."""from distutils.core import Commandfrom distutils.errors import DistutilsSetupErrortry:# docutils is installedfrom docutils.utils import Reporterfrom docutils.parsers.rst import Parserfrom docutils import frontendfrom docutils import nodesfrom io import StringIOclass SilentReporter(Reporter):def __init__(self, source, report_level, halt_level, stream=None,debug=0, encoding='ascii', error_handler='replace'):self.messages = []Reporter.__init__(self, source, report_level, halt_level, stream,debug, encoding, error_handler)def system_message(self, level, message, *children, **kwargs):self.messages.append((level, message, children, kwargs))return nodes.system_message(message, level=level,type=self.levels[level],*children, **kwargs)HAS_DOCUTILS = Trueexcept Exception:# Catch all exceptions because exceptions besides ImportError probably# indicate that docutils is not ported to Py3k.HAS_DOCUTILS = Falseclass check(Command):"""This command checks the meta-data of the package."""description = ("perform some checks on the package")user_options = [('metadata', 'm', 'Verify meta-data'),('restructuredtext', 'r',('Checks if long string meta-data syntax ''are reStructuredText-compliant')),('strict', 's','Will exit with an error if a check fails')]boolean_options = ['metadata', 'restructuredtext', 'strict']def initialize_options(self):"""Sets default values for options."""self.restructuredtext = 0self.metadata = 1self.strict = 0self._warnings = 0def finalize_options(self):passdef warn(self, msg):"""Counts the number of warnings that occurs."""self._warnings += 1return Command.warn(self, msg)def run(self):"""Runs the command."""# perform the various testsif self.metadata:self.check_metadata()if self.restructuredtext:if HAS_DOCUTILS:self.check_restructuredtext()elif self.strict:raise DistutilsSetupError('The docutils package is needed.')# let's raise an error in strict mode, if we have at least# one warningif self.strict and self._warnings > 0:raise DistutilsSetupError('Please correct your package.')def check_metadata(self):"""Ensures that all required elements of meta-data are supplied.name, version, URL, (author and author_email) or(maintainer and maintainer_email)).Warns if any are missing."""metadata = self.distribution.metadatamissing = []for attr in ('name', 'version', 'url'):if not (hasattr(metadata, attr) and getattr(metadata, attr)):missing.append(attr)if missing:self.warn("missing required meta-data: %s" % ', '.join(missing))if metadata.author:if not metadata.author_email:self.warn("missing meta-data: if 'author' supplied, " +"'author_email' must be supplied too")elif metadata.maintainer:if not metadata.maintainer_email:self.warn("missing meta-data: if 'maintainer' supplied, " +"'maintainer_email' must be supplied too")else:self.warn("missing meta-data: either (author and author_email) " +"or (maintainer and maintainer_email) " +"must be supplied")def check_restructuredtext(self):"""Checks if the long string fields are reST-compliant."""data = self.distribution.get_long_description()for warning in self._check_rst_data(data):line = warning[-1].get('line')if line is None:warning = warning[1]else:warning = '%s (line %s)' % (warning[1], line)self.warn(warning)def _check_rst_data(self, data):"""Returns warnings when the provided data doesn't compile."""# the include and csv_table directives need this to be a pathsource_path = self.distribution.script_name or 'setup.py'parser = Parser()settings = frontend.OptionParser(components=(Parser,)).get_default_values()settings.tab_width = 4settings.pep_references = Nonesettings.rfc_references = Nonereporter = SilentReporter(source_path,settings.report_level,settings.halt_level,stream=settings.warning_stream,debug=settings.debug,encoding=settings.error_encoding,error_handler=settings.error_encoding_error_handler)document = nodes.document(settings, reporter, source=source_path)document.note_source(source_path, -1)try:parser.parse(data, document)except AttributeError as e:reporter.messages.append((-1, 'Could not finish the parsing: %s.' % e, '', {}))return reporter.messages
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。