U
    x^                     @   sP   d dl ZddlmZ ddlmZ e ZG dd de	Z
e ZG dd de
ZdS )	    N   )exc)compatc                   @   s   e Zd Zdd Zdd ZdS )BasicEntityc                 K   s"   |  D ]\}}t| || qd S N)itemssetattr)selfkwkeyvalue r   C/tmp/pip-install-dq5v43_d/SQLAlchemy/sqlalchemy/testing/entities.py__init__   s    zBasicEntity.__init__c              
      sl   t  tkrt S tt   z2d jjd fddt	 j
 D f W S tt   X d S )Nz%s(%s)z, c                    s(   g | ] }| d sd|t |f qS )_z%s=%r)
startswithgetattr).0r   r	   r   r   
<listcomp>   s   
z(BasicEntity.__repr__.<locals>.<listcomp>)id_repr_stackobject__repr__addremove	__class____name__joinsorted__dict__keysr   r   r   r   r      s    


zBasicEntity.__repr__N)r   
__module____qualname__r   r   r   r   r   r   r      s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ComparableEntityc                 C   s
   t | jS r   )hashr   r   r   r   r   __hash__+   s    zComparableEntity.__hash__c                 C   s   |  | S r   )__eq__)r	   otherr   r   r   __ne__.   s    zComparableEntity.__ne__c              
   C   s  || krdS | j |j ksdS t| tkr,dS tt|  zHztjj| j	}W n tjj
jk
rp   d}Y nX |dkr| }|}n|dk	r|}| }n| }|}t|jD ]}|drqt||}zt||}W n" ttjfk
r   Y  W dS X t|drbt|tjsbt|drDt|dsDt|t|kr` W HdS nt|t|kr| W *dS q|dk	r||kr W dS qW dS tt|  X dS )z'Deep, sparse compare.

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

        TFNr   __iter____getitem__r!   )r   r   _recursion_stackr   r   saZorm
attributesZinstance_stater   r   ZNO_STATElistr    r   r   AttributeErrorsa_excZUnboundExecutionErrorhasattr
isinstancer   string_typesset)r	   r(   Zself_keyabattrr   Zbattrr   r   r   r'   1   sX    


  zComparableEntity.__eq__N)r   r"   r#   r&   r)   r'   r   r   r   r   r$   *   s   r$   )Z
sqlalchemyr-    r   r1   utilr   r5   r   r   r   r,   r$   r   r   r   r   <module>   s   