MINI MINI MANI MO
3
  \
                 @   sf   d Z ddlmZ ddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZmZ dd Z
G dd	 d	ejZd
S )a  Fixer for except statements with named exceptions.
The following cases will be converted:
- "except E, T:" where T is a name:
    except E as T:
- "except E, T:" where T is not a name, tuple or list:
        except E as t:
            T = t
    This is done because the target of an "except" clause must be a
    name.
- "except E, T:" where T is a tuple or list literal:
        except E as t:
            T = t.args
   )pytree)token)
fixer_base)AssignAttrNameis_tupleis_listsymsc             c   sH   xBt | D ]6\}}|jtjkr
|jd jdkr
|| |d  fV  q
W d S )N    exceptr   )	enumeratetyper
   
except_clausechildrenvalue)Znodesin r   0/usr/lib64/python3.6/lib2to3/fixes/fix_except.pyfind_excepts   s    r   c               @   s   e Zd ZdZdZdd ZdS )	FixExceptTa1  
    try_stmt< 'try' ':' (simple_stmt | suite)
                  cleanup=(except_clause ':' (simple_stmt | suite))+
                  tail=(['except' ':' (simple_stmt | suite)]
                        ['else' ':' (simple_stmt | suite)]
                        ['finally' ':' (simple_stmt | suite)]) >
    c             C   s  | j }dd |d D }dd |d D }x*t|D ]\}}t|jdkr6|jdd \}}	}
|	jtdd	d
 |
jtjkrDt| j	 d	d
}|
j
 }d|_|
j| |j
 }|j}
x"t|
D ]\}}t
|tjrP qW t|
st|
rt|t|td}n
t||}x&t|
d | D ]}|jd
| q W |j|| q6|
jdkr6d	|
_q6W dd |jd d D | | }tj|j|S )Nc             S   s   g | ]}|j  qS r   )clone).0r   r   r   r   
<listcomp>2   s    z'FixExcept.transform.<locals>.<listcomp>tailc             S   s   g | ]}|j  qS r   )r   )r   Zchr   r   r   r   4   s    Zcleanup      as )prefix argsr   c             S   s   g | ]}|j  qS r   )r   )r   cr   r   r   r   \   s       )r
   r   lenr   replacer   r   r   NAMEnew_namer   r    r
   
isinstancer   ZNoder   r	   r   r   reversedZinsert_child)selfZnodeZresultsr
   r   Ztry_cleanupr   Ze_suiteEZcommaNZnew_NtargetZsuite_stmtsr   ZstmtZassignZchildr   r   r   r   	transform/   s6    
 zFixExcept.transformN)__name__
__module____qualname__Z
BM_compatibleZPATTERNr/   r   r   r   r   r   $   s   r   N)__doc__r!   r   Zpgen2r   r   Z
fixer_utilr   r   r   r   r	   r
   r   ZBaseFixr   r   r   r   r   <module>   s    
 OHA YOOOO