File: //opt/alt/python35/lib64/python3.5/lib2to3/__pycache__/main.cpython-35.pyc
��Yf�-  �               @   s�   d  Z  d d l m Z m Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l	 Z	 d d l
 m Z d d �  Z Gd d	 �  d	 e j
 � Z d
 d �  Z d d d
 � Z d S)z
Main program for 2to3.
�    )�with_statement�print_functionN�   )�refactorc          	   C   s:   |  j  �  }  | j  �  } t j |  | | | d d d d �S)z%Return a unified diff of two strings.z
(original)z(refactored)Zlineterm� )�
splitlines�difflibZunified_diff)�a�b�filename� r   �1/opt/alt/python35/lib64/python3.5/lib2to3/main.py�
diff_texts   s
    	r   c                   s[   e  Z d  Z d Z d d d �  f d d � Z d d �  Z �  f d d �  Z d	 d
 �  Z �  S)�StdoutRefactoringToola2  
    A refactoring tool that can avoid overwriting its input files.
    Prints output to stdout.
    Output files can optionally be written to a different directory and or
    have an extra file suffix appended to their name for use in situations
    where you do not want to replace the input files.
    r   c	       	         ss   | |  _  | |  _ | r8 | j t j � r8 | t j 7} | |  _ | |  _ | |  _ t t	 |  � j
 | | | � d S)aF  
        Args:
            fixers: A list of fixers to import.
            options: A dict with RefactoringTool configuration.
            explicit: A list of fixers to run even if they are explicit.
            nobackups: If true no backup '.bak' files will be created for those
                files that are being refactored.
            show_diffs: Should diffs of the refactoring be printed to stdout?
            input_base_dir: The base directory for all input files.  This class
                will strip this path prefix off of filenames before substituting
                it with output_dir.  Only meaningful if output_dir is supplied.
                All files processed by refactor() must start with this path.
            output_dir: If supplied, all converted files will be written into
                this directory tree instead of input_base_dir.
            append_suffix: If supplied, all files output by this tool will have
                this appended to their filename.  Useful for changing .py to
                .py3 for example by passing append_suffix='3'.
        N)�	nobackups�
show_diffs�endswith�os�sep�_input_base_dir�_output_dir�_append_suffix�superr   �__init__)	�selfZfixers�options�explicitr   r   �input_base_dir�
output_dir�
append_suffix)�	__class__r   r
   r   $   s    		
			zStdoutRefactoringTool.__init__c             O   s3   |  j  j | | | f � |  j j | | | � d  S)N)�errors�append�logger�error)r   �msg�args�kwargsr   r   r
   �	log_errorA   s    zStdoutRefactoringTool.log_errorc       
   !      s�  | } |  j  rh | j |  j � rO t j j |  j  | t |  j � d  � � } n t d | |  j f � � |  j r~ | |  j 7} | | k r� t j j	 | � } t j j
 | � s� t j | � |  j d | | � |  j
 s�| d } t j j | � r<y t j | � Wn5 t k
 r;} z |  j d | � WYd  d  } ~ Xn Xy t j | | � Wn8 t k
 r�} z |  j d | | � WYd  d  } ~ Xn Xt t |  � j }	 |	 | | | | � |  j
 s�t j | | � | | k r�t j | | � d  S)Nz5filename %s does not start with the input_base_dir %szWriting converted %s to %s.z.bakzCan't remove backup %szCan't rename %s to %s)r   �
startswithr   r   �path�join�len�
ValueErrorr   �dirname�isdir�makedirs�log_messager   �lexists�remove�OSError�renamer   r   �
write_file�shutilZcopymode)
r   Znew_textr   Zold_text�encodingZ
orig_filenamer   Zbackup�err�write)r    r   r
   r6   E   s@    		
	
#&	z StdoutRefactoringTool.write_filec             C   s�   | r |  j  d | � n� |  j  d | � |  j r� t | | | � } yj |  j d  k	 r� |  j �- x | D] } t | � qg Wt j j �  Wd  QRXn x | D] } t | � q� WWn'