
(°h  ã               @   s»   d  Z  d d l m Z d d l m Z y` d d l m Z d d l m Z d d l	 m
 Z
 d d l	 m Z Gd d	 „  d	 e ƒ Z d
 Z Wn e k
 r  d Z Yn XGd d „  d e ƒ Z d S)zCdistutils.command.check

Implements the Distutils 'check' command.
é    )ÚCommand)ÚDistutilsSetupError)ÚReporter)ÚParser)Úfrontend)Únodesc               @   s4   e  Z d  Z d d d d d d „ Z d d „  Z d S)	ÚSilentReporterNr   ÚasciiÚreplacec          	   C   s/   g  |  _  t j |  | | | | | | | ƒ d  S)N)Úmessagesr   Ú__init__)ÚselfÚsourceÚreport_levelÚ
halt_levelÚstreamÚdebugÚencodingÚerror_handler© r   úI/tmp/pip-build-kmztzv_d/setuptools/setuptools/_distutils/command/check.pyr      s    	zSilentReporter.__init__c             O   sB   |  j  j | | | | f ƒ t j | | d | d |  j | | ŽS)NÚlevelÚtype)r   Úappendr   Úsystem_messageZlevels)r   r   ÚmessageÚchildrenÚkwargsr   r   r   r      s    	zSilentReporter.system_message)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s   r   TFc               @   sŽ   e  Z d  Z d Z d Z d d d g Z d d d	 g 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ÚmúVerify meta-dataÚrestructuredtextÚrúEChecks if long string meta-data syntax are reStructuredText-compliantÚstrictÚsú(Will exit with an error if a check failsc             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)Nr   )r   r   r   r   Úfinalize_options7   s    zcheck.finalize_optionsc             C   s   |  j  d 7_  t j |  | ƒ 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 ƒ  |  j rD t r/ |  j ƒ  n |  j rD t d ƒ ‚ |  j rh |  j d k rh t 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  } x9 d D]1 } t | | ƒ o: t | | ƒ s | j | ƒ q W| rn |  j d d j | ƒ ƒ | j r” | j sÏ |  j d d ƒ n; | j	 rº | j
 sÏ |  j d d	 ƒ n |  j d
 d 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ÚversionÚurlzmissing required meta-data: %sz, z)missing meta-data: if 'author' supplied, z%'author_email' should be supplied tooz-missing meta-data: if 'maintainer' supplied, z)'maintainer_email' should be supplied tooz4missing meta-data: either (author and author_email) z%or (maintainer and maintainer_email) zshould be suppliedN)znamezversionzurl)Údistributionr"   ÚhasattrÚgetattrr   r/   ÚjoinÚauthorÚauthor_emailÚ
maintainerÚmaintainer_email)r   r"   ÚmissingÚattrr   r   r   r1   O   s$    						zcheck.check_metadatac             C   sz   |  j  j ƒ  } xd |  j | ƒ D]S } | d j d ƒ } | d k rQ | d } n d | d | f } |  j | ƒ q Wd S)z4Checks if the long string fields are reST-compliant.r+   ÚlineNz%s (line %s)éÿÿÿÿ)r8   Úget_long_descriptionÚ_check_rst_dataÚgetr/   )r   ÚdataÚwarningrB   r   r   r   r3   p   s    zcheck.check_restructuredtextc             C   s  |  j  j p d } t ƒ  } t j d t f ƒ j ƒ  } d | _ d | _ d | _ t	 | | j
 | j d | j d | j d | j d | j ƒ} t j | | d	 | ƒ} | j | d ƒ y | j | | ƒ WnE t k
 r} z% | j j d d | d i  f ƒ WYd d } ~ Xn X| j S)z8Returns warnings when the provided data doesn't compile.zsetup.pyÚ
componentsé   Nr   r   r   r   r   r+   z!Could not finish the parsing: %s.Ú rC   rC   )r8   Úscript_namer   r   ÚOptionParserÚ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   rG   Úsource_pathÚparserÚsettingsZreporterrO   Úer   r   r   rE   {   s*    									*zcheck._check_rst_dataN)zmetadatar#   r$   )zrestructuredtextr&   r'   )zstrictr)   r*   )r   r   r    Ú__doc__ÚdescriptionÚuser_optionsÚboolean_optionsr-   r.   r/   r4   r1   r3   rE   r   r   r   r   r!   #   s     	!r!   N)rV   Údistutils.corer   Zdistutils.errorsr   Zdocutils.utilsr   Zdocutils.parsers.rstr   Zdocutilsr   r   r   r2   Ú	Exceptionr!   r   r   r   r   Ú<module>   s   
