B
    0*\2H                 @   s^   d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZ G dd dZdS )    N)DistutilsOptionError)utildir_util	file_utilarchive_utildep_util)logc               @   s  e Zd Zg Zdd Zdd Zdd Zdd Zd	d
 ZdBddZ	dd Z
dCddZdd ZdDddZdEddZdd ZdFddZdd Zd d! Zd"d# Zd$d% ZdGd&d'ZdHd)d*Zd+d, Zd-d. Zd/d0 ZdId1d2ZdJd4d5ZdKd6d7ZdLd8d9ZdMd:d;ZdNd<d=ZdOd>d?Z dPd@dAZ!dS )QCommandc             C   sb   ddl m} t||std| jtkr0td|| _|   d | _	|j
| _
d | _d| _d| _d S )Nr   )Distributionz$dist must be a Distribution instancezCommand is an abstract class)Zdistutils.distr
   
isinstance	TypeError	__class__r	   RuntimeErrordistributioninitialize_optionsZ_dry_runverboseforcehelp	finalized)selfZdistr
    r   8C:\ALexclude\prg\programme\Python37\Lib\distutils\cmd.py__init__/   s    


zCommand.__init__c             C   s<   |dkr0t | d| }|d kr*t | j|S |S nt|d S )Ndry_run_)getattrr   AttributeError)r   attrZmyvalr   r   r   __getattr___   s    zCommand.__getattr__c             C   s   | j s|   d| _ d S )N   )r   finalize_options)r   r   r   r   ensure_finalizedi   s    zCommand.ensure_finalizedc             C   s   t d| j d S )Nz,abstract method -- subclass %s must override)r   r   )r   r   r   r   r   {   s    
zCommand.initialize_optionsc             C   s   t d| j d S )Nz,abstract method -- subclass %s must override)r   r   )r   r   r   r   r       s    zCommand.finalize_optionsN c             C   s   ddl m} |d kr d|   }| j|| tjd |d }x\| jD ]R\}}}||}|d dkrp|d d }t| |}| j|d||f  tjd qDW d S )	Nr   )longopt_xlatezcommand options for '%s':)levelz  =z%s = %s)	Zdistutils.fancy_getoptr#   get_command_nameannouncer   INFOZuser_options	translater   )r   headerindentr#   optionr   valuer   r   r   dump_options   s    

zCommand.dump_optionsc             C   s   t d| j d S )Nz,abstract method -- subclass %s must override)r   r   )r   r   r   r   run   s    
zCommand.runr   c             C   s   t  || d S )N)r   )r   msgr$   r   r   r   r(      s    zCommand.announcec             C   s&   ddl m} |r"t| tj  d S )Nr   )DEBUG)Zdistutils.debugr2   printsysstdoutflush)r   r1   r2   r   r   r   debug_print   s    zCommand.debug_printc             C   sB   t | |}|d kr"t| || |S t|ts>td|||f |S )Nz'%s' must be a %s (got `%s`))r   setattrr   strr   )r   r-   whatdefaultvalr   r   r   _ensure_stringlike   s    

zCommand._ensure_stringlikec             C   s   |  |d| d S )Nstring)r=   )r   r-   r;   r   r   r   ensure_string   s    zCommand.ensure_stringc             C   sp   t | |}|d krd S t|tr6t| |td| n6t|trTtdd |D }nd}|sltd||f d S )Nz,\s*|\s+c             s   s   | ]}t |tV  qd S )N)r   r9   ).0vr   r   r   	<genexpr>   s    z-Command.ensure_string_list.<locals>.<genexpr>Fz''%s' must be a list of strings (got %r))	r   r   r9   r8   resplitlistallr   )r   r-   r<   okr   r   r   ensure_string_list   s    


zCommand.ensure_string_listc             C   s6   |  |||}|d k	r2||s2td| ||f d S )Nzerror in '%s' option: )r=   r   )r   r-   Ztesterr:   Z	error_fmtr;   r<   r   r   r   _ensure_tested_string   s    zCommand._ensure_tested_stringc             C   s   |  |tjjdd d S )Nfilenamez$'%s' does not exist or is not a file)rI   ospathisfile)r   r-   r   r   r   ensure_filename   s    zCommand.ensure_filenamec             C   s   |  |tjjdd d S )Nzdirectory namez)'%s' does not exist or is not a directory)rI   rK   rL   isdir)r   r-   r   r   r   ensure_dirname  s    zCommand.ensure_dirnamec             C   s   t | dr| jS | jjS d S )Ncommand_name)hasattrrQ   r   __name__)r   r   r   r   r'   	  s    
zCommand.get_command_namec             G   sJ   | j |}|  x0|D ](\}}t| |d krt| |t|| qW d S )N)r   get_command_objr!   r   r8   )r   Zsrc_cmdZoption_pairsZsrc_cmd_objZ
src_optionZ
dst_optionr   r   r   set_undefined_options  s
    zCommand.set_undefined_optionsc             C   s   | j ||}|  |S )N)r   rT   r!   )r   commandZcreateZcmd_objr   r   r   get_finalized_command$  s    zCommand.get_finalized_commandr   c             C   s   | j ||S )N)r   reinitialize_command)r   rV   Zreinit_subcommandsr   r   r   rX   0  s    zCommand.reinitialize_commandc             C   s   | j | d S )N)r   run_command)r   rV   r   r   r   rY   4  s    zCommand.run_commandc             C   s6   g }x,| j D ]"\}}|d ks$|| r|| qW |S )N)sub_commandsappend)r   ZcommandsZcmd_namemethodr   r   r   get_sub_commands;  s
    zCommand.get_sub_commandsc             C   s   t d|  | d S )Nzwarning: %s: %s
)r   warnr'   )r   r1   r   r   r   r^   K  s    zCommand.warnc             C   s   t j|||| jd d S )N)r   )r   executer   )r   funcargsr1   r$   r   r   r   r_   N  s    zCommand.execute  c             C   s   t j||| jd d S )N)r   )r   mkpathr   )r   namemoder   r   r   rc   Q  s    zCommand.mkpathc          	   C   s   t j||||| j || jdS )N)r   )r   	copy_filer   r   )r   infileoutfilepreserve_modepreserve_timeslinkr$   r   r   r   rf   T  s    

zCommand.copy_filec          	   C   s   t j|||||| j | jdS )N)r   )r   	copy_treer   r   )r   rg   rh   ri   rj   Zpreserve_symlinksr$   r   r   r   rl   ]  s    
zCommand.copy_treec             C   s   t j||| jdS )N)r   )r   	move_filer   )r   srcdstr$   r   r   r   rm   f  s    zCommand.move_filec             C   s    ddl m} |||| jd d S )Nr   )spawn)r   )Zdistutils.spawnrp   r   )r   cmdZsearch_pathr$   rp   r   r   r   rp   j  s    zCommand.spawnc          	   C   s   t j||||| j||dS )N)r   ownergroup)r   make_archiver   )r   Z	base_nameformatZroot_dirZbase_dirrr   rs   r   r   r   rt   o  s    zCommand.make_archivec             C   s   |d krd| }t |tr"|f}nt |ttfs8td|d krRd|d|f }| jsdt||rv| 	|||| n
t
| d S )Nzskipping %s (inputs unchanged)z9'infiles' must be a string, or a list or tuple of stringszgenerating %s from %sz, )r   r9   rE   tupler   joinr   r   Znewer_groupr_   r   debug)r   Zinfilesrh   r`   ra   Zexec_msgZskip_msgr$   r   r   r   	make_fileu  s    

zCommand.make_file)Nr"   )r   )N)N)N)r   )r   )Nr   )rb   )r   r   Nr   )r   r   r   r   )r   )r   r   )NNNN)NNr   )"rS   
__module____qualname__rZ   r   r   r!   r   r    r/   r0   r(   r7   r=   r?   rH   rI   rN   rP   r'   rU   rW   rX   rY   r]   r^   r_   rc   rf   rl   rm   rp   rt   ry   r   r   r   r   r	      sD   0










 
 


 
r	   )r4   rK   rC   Zdistutils.errorsr   Z	distutilsr   r   r   r   r   r   r	   r   r   r   r   <module>   s   