U a$ @sbddlZddlmZddlmZeZGddde Z eZ Gddde Z Gd d d e e Z dS) N)exc)compatc@seZdZddZddZdS) BasicEntitycKs"|D]\}}t|||qdSN)itemssetattr)selfkwkeyvaluer \C:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-nyjtotrf\sqlalchemy\testing\entities.py__init__szBasicEntity.__init__c slttkrtSttz2djjdfddt j DfWSttXdS)Nz%s(%s)z, cs(g|] }|dsd|t|fqS)_z%s=%r) startswithgetattr).0r r r r s z(BasicEntity.__repr__..) id _repr_stackobject__repr__addremove __class____name__joinsorted__dict__keysrr rrrs     zBasicEntity.__repr__N)r __module__ __qualname__rrr r r rrsrc@seZdZddZddZdS)ComparableMixincCs || Sr)__eq__)r otherr r r__ne__+szComparableMixin.__ne__c Cs||kr dS|j|jksdSt|tkr,dStt|zHztjj|j }Wntjj j k rpd}YnX|dkr|}|}n|dk r|}|}n|}|}t |j D]}|drqt||}zt||}Wn"ttjfk rYWdSXt|drbt|tjsbt|drDt|dsDt |t |kr`WHdSnt|t|kr|W*dSq|dk r||krWdSqWdStt|XdS)z'Deep, sparse compare. Deeply compare two entities, following the non-None attributes of the non-persisted object, if possible. TFNr__iter__ __getitem__r!)rr_recursion_stackrrsaZorm attributesZinstance_stater rZNO_STATElistr rrAttributeErrorsa_excZUnboundExecutionErrorhasattr isinstancer string_typesset)r r&Zself_keyabattrr Zbattrr r rr%.sX        zComparableMixin.__eq__N)rr"r#r'r%r r r rr$*sr$c@seZdZddZdS)ComparableEntitycCs t|jSr)hashrrr r r__hash__nszComparableEntity.__hash__N)rr"r#r9r r r rr7msr7)Z sqlalchemyr+rr/utilrr3rrrr*r$r7r r r rs  C