ó
¿b›]c           @   sn   d  d l  Z d d l m Z d d l m Z e ƒ  Z d e	 f d „  ƒ  YZ
 e ƒ  Z d e
 f d „  ƒ  YZ d S(	   iÿÿÿÿNi   (   t   exc(   t   compatt   BasicEntityc           B   s   e  Z d  „  Z d „  Z RS(   c         K   s1   x* | j  ƒ  D] \ } } t |  | | ƒ q Wd  S(   N(   t   itemst   setattr(   t   selft   kwt   keyt   value(    (    s:   lib/python2.7/site-packages/sqlalchemy/testing/entities.pyt   __init__   s    c      
   C   s²   t  |  ƒ t k r t j |  ƒ St j t  |  ƒ ƒ ze d |  j j d j g  t |  j	 j
 ƒ  ƒ D]. } | j d ƒ s] d | t |  | ƒ f ^ q] ƒ f SWd  t j t  |  ƒ ƒ Xd  S(   Ns   %s(%s)s   , t   _s   %s=%r(   t   idt   _repr_stackt   objectt   __repr__t   addt	   __class__t   __name__t   joint   sortedt   __dict__t   keyst
   startswitht   getattrt   remove(   R   R   (    (    s:   lib/python2.7/site-packages/sqlalchemy/testing/entities.pyR      s    	7(   R   t
   __module__R	   R   (    (    (    s:   lib/python2.7/site-packages/sqlalchemy/testing/entities.pyR      s   	t   ComparableEntityc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   t  |  j ƒ S(   N(   t   hashR   (   R   (    (    s:   lib/python2.7/site-packages/sqlalchemy/testing/entities.pyt   __hash__+   s    c         C   s   |  j  | ƒ S(   N(   t   __eq__(   R   t   other(    (    s:   lib/python2.7/site-packages/sqlalchemy/testing/entities.pyt   __ne__.   s    c         C   sý  | |  k r t  S|  j | j k s& t St |  ƒ t k r< t  St j t |  ƒ ƒ z“y t j j j	 |  ƒ j
 } Wn  t j j j k
 r d } n X| d k r¬ |  } | } n' | d k	 rÇ | } |  } n |  } | } xt | j ƒ D]ö } | j d ƒ rþ qã n  t | | ƒ } y t | | ƒ } Wn t t j f k
 r=t SXt | d ƒ r½t | t j ƒ r½t | d ƒ ržt | d ƒ ržt | ƒ t | ƒ k rºt SqÙt | ƒ t | ƒ k rÙt Sqã | d k	 rã | | k rã t Sqã Wt  SWd t j t |  ƒ ƒ Xd S(   sš   'Deep, sparse compare.

        Deeply compare two entities, following the non-None attributes of the
        non-persisted object, if possible.

        R
   t   __iter__t   __getitem__R   N(   t   TrueR   t   FalseR   t   _recursion_stackR   t   sat   ormt
   attributest   instance_stateR   R    t   NO_STATEt   Nonet   listR   R   R   t   AttributeErrort   sa_exct   UnboundExecutionErrort   hasattrt
   isinstanceR   t   string_typest   setR   (   R   R   t   self_keyt   at   bt   attrR   t   battr(    (    s:   lib/python2.7/site-packages/sqlalchemy/testing/entities.pyR   1   sP    
		(   R   R   R   R   R   (    (    (    s:   lib/python2.7/site-packages/sqlalchemy/testing/entities.pyR   *   s   		(   t
   sqlalchemyR%   t    R    R-   t   utilR   R2   R   R   R   R$   R   (    (    (    s:   lib/python2.7/site-packages/sqlalchemy/testing/entities.pyt   <module>   s   		