ó
î%![c           @   sW   d  Z  d d l Z d d l m Z d Z d
 d  Z d	   Z e j e j e e  d S(   sy   
Astroid hook for the attrs library

Without this hook pylint reports unsupported-assignment-operation
for atrrs classes
i˙˙˙˙N(   t   MANAGERs   attr.ibs   attr.ss
   attr.attrss   attr.attributesc         C   s>   |  j  s t Sx* |  j  j D] } | j   | k r t Sq Wt S(   sB   Return True if a decorated node has
    an attr decorator applied.(   t
   decoratorst   Falset   nodest	   as_stringt   True(   t   nodet   decorator_namest   decorator_attribute(    (    s8   lib/python2.7/site-packages/astroid/brain/brain_attrs.pyt   is_decorated_with_attrs   s    	c      	   C   sÓ   t  j d |  j  g |  j d <x­ |  j D]˘ } t | t  j  sG q) n  t | j t  j  r) | j j j	   t
 k r q) q n q) xH | j D]= } t  j d | j d | j d |  } | g |  j | j <q Wq) Wd S(   sh   Given that the ClassNode has an attr decorator,
    rewrite class attributes as instance attributes
    t   parentt   __attrs_attrs__t   linenot
   col_offsetN(   t   astroidt   Unknownt   bodyt   localst
   isinstancet   Assignt   valuet   Callt   funcR   t   ATTR_IBt   targetsR   R   t   name(   R   t   cdefbodynodet   targett   rhs_node(    (    s8   lib/python2.7/site-packages/astroid/brain/brain_attrs.pyt   attr_attributes_transform   s    					(   s   attr.ss
   attr.attrss   attr.attributes(   t   __doc__R   R    R   R	   R   t   register_transformt   Class(    (    (    s8   lib/python2.7/site-packages/astroid/brain/brain_attrs.pyt   <module>   s   	