a
    If                     @   s   d Z ddlmZ ddlmZ zHddlmZ ddlmZ ddl	m
Z
 ddl	mZ G dd	 d	eZd
ZW n eyz   dZY n0 G dd deZdS )zCdistutils.command.check

Implements the Distutils 'check' command.
    )Command)DistutilsSetupError)Reporter)Parser)frontend)nodesc                   @   s   e Zd Zd	ddZdd ZdS )
SilentReporterNr   asciireplacec              
   C   s"   g | _ t| ||||||| d S N)messagesr   __init__)selfsourcereport_level
halt_levelstreamdebugencodingerror_handler r   (lib/python3.9/distutils/command/check.pyr      s    zSilentReporter.__init__c                 O   s8   | j ||||f tj|g|R || j| d|S )N)leveltype)r   appendr   system_messageZlevels)r   r   messageZchildrenkwargsr   r   r   r      s    zSilentReporter.system_message)Nr   r	   r
   )__name__
__module____qualname__r   r   r   r   r   r   r      s     
r   TFc                   @   s\   e Zd ZdZdZg dZg dZdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd ZdS )checkz6This command checks the meta-data of the package.
    z"perform some checks on the package))metadatamzVerify meta-data)restructuredtextrzEChecks if long string meta-data syntax are reStructuredText-compliant)strictsz(Will exit with an error if a check fails)r"   r$   r&   c                 C   s   d| _ d| _d| _d| _dS )z Sets default values for options.r      N)r$   r"   r&   	_warningsr   r   r   r   initialize_options0   s    zcheck.initialize_optionsc                 C   s   d S r   r   r*   r   r   r   finalize_options7   s    zcheck.finalize_optionsc                 C   s   |  j d7  _ t| |S )z*Counts the number of warnings that occurs.r(   )r)   r   warn)r   msgr   r   r   r-   :   s    z
check.warnc                 C   sL   | j r|   | jr0tr"|   n| jr0td| jrH| jdkrHtddS )zRuns the command.zThe docutils package is needed.r   zPlease correct your package.N)r"   check_metadatar$   HAS_DOCUTILScheck_restructuredtextr&   r   r)   r*   r   r   r   run?   s    
z	check.runc                 C   s   | j j}g }dD ]"}t||r(t||s|| q|rL| dd|  |jrd|js| d n"|j	r||j
s| d n
| d dS )a
  Ensures that all required elements of meta-data are supplied.

        Required fields:
            name, version, URL

        Recommended fields:
            (author and author_email) or (maintainer and maintainer_email)

        Warns if any are missing.
        )nameversionZurlzmissing required meta-data: %sz, zNmissing meta-data: if 'author' supplied, 'author_email' should be supplied toozVmissing meta-data: if 'maintainer' supplied, 'maintainer_email' should be supplied toozkmissing meta-data: either (author and author_email) or (maintainer and maintainer_email) should be suppliedN)distributionr"   hasattrgetattrr   r-   joinZauthorZauthor_emailZ
maintainerZmaintainer_email)r   r"   Zmissingattrr   r   r   r/   O   s    zcheck.check_metadatac                 C   sX   | j  }| |D ]>}|d d}|du r8|d }nd|d |f }| | qdS )z4Checks if the long string fields are reST-compliant.lineNr(   z%s (line %s))r5   Zget_long_description_check_rst_datagetr-   )r   dataZwarningr;   r   r   r   r1   p   s    

zcheck.check_restructuredtextc              
   C   s   | j jp
d}t }tjtfd }d|_d|_d|_t	||j
|j|j|j|j|jd}tj|||d}||d z||| W n< ty } z$|jdd| d	i f W Y d}~n
d}~0 0 |jS )
z8Returns warnings when the provided data doesn't compile.zsetup.py)Z
components   N)r   r   r   r   )r   r:   z!Could not finish the parsing: %s. )r5   script_namer   r   ZOptionParserZget_default_valuesZ	tab_widthZpep_referencesZrfc_referencesr   r   r   Zwarning_streamr   Zerror_encodingZerror_encoding_error_handlerr   documentZnote_sourceparseAttributeErrorr   r   )r   r>   source_pathparserZsettingsZreporterrB   er   r   r   r<   {   s.    zcheck._check_rst_dataN)r   r   r    __doc__ZdescriptionZuser_optionsZboolean_optionsr+   r,   r-   r2   r/   r1   r<   r   r   r   r   r!   #   s   !r!   N)rH   Zdistutils.corer   Zdistutils.errorsr   Zdocutils.utilsr   Zdocutils.parsers.rstr   Zdocutilsr   r   r   r0   	Exceptionr!   r   r   r   r   <module>   s   
