o z¾nhƒ ã@sPddlZddlmZddlmZeƒZGdd„de ƒZ eƒZ Gdd„de ƒZ dS) éNé)Úexc)Úcompatc@seZdZdd„Zdd„ZdS)Ú BasicEntitycKs"| ¡D] \}}t|||ƒqdS©N)ÚitemsÚsetattr)ÚselfÚkwÚkeyÚvalue©r úF/usr/local/lib/python3.10/dist-packages/sqlalchemy/testing/entities.pyÚ__init__sÿzBasicEntity.__init__c sttˆƒtvr t ˆ¡St tˆƒ¡zdˆjjd ‡fdd„tˆj   ¡ƒDƒ¡fWt  tˆƒ¡St  tˆƒ¡w)Nz%s(%s)z, cs(g|]}| d¡sd|tˆ|ƒf‘qS)Ú_z%s=%r)Ú startswithÚgetattr)Ú.0r ©r r rÚ s ýÿz(BasicEntity.__repr__..) ÚidÚ _repr_stackÚobjectÚ__repr__ÚaddÚ __class__Ú__name__ÚjoinÚsortedÚ__dict__ÚkeysÚremoverr rrrs    þÿþ zBasicEntity.__repr__N)rÚ __module__Ú __qualname__rrr r r rrs rc@s$eZdZdd„Zdd„Zdd„ZdS)ÚComparableEntitycCs t|jƒSr)Úhashrrr r rÚ__hash__+s zComparableEntity.__hash__cCs | |¡ Sr)Ú__eq__)r Úotherr r rÚ__ne__.s zComparableEntity.__ne__c CsÀ||urdS|j|jksdSt|ƒtvrdSt t|ƒ¡zºz tjj |¡j}Wntjj j y6d}Ynw|dur@|}|}n |durI|}|}n|}|}t |j ƒD]{}|  d¡rZqRt||ƒ}zt||ƒ}Wnttjfy|YWt t|ƒ¡dSwt|dƒrºt|tjƒsºt|dƒr¦t|dƒs¦t |ƒt |ƒkr¥Wt t|ƒ¡dSqRt|ƒt|ƒkr¹Wt t|ƒ¡dSqR|durÍ||krÍWt t|ƒ¡dSqRWt t|ƒ¡dSt t|ƒ¡w)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_stackrÚsaÚormÚ attributesÚinstance_stater rÚNO_STATEÚlistrrrÚAttributeErrorÚsa_excÚUnboundExecutionErrorr!ÚhasattrÚ isinstancerÚ string_typesÚset)r r(Úself_keyÚaÚbÚattrr Úbattrr r rr'1sf  ÿ  í ÿ ÿ öù€þ"zComparableEntity.__eq__N)rr"r#r&r)r'r r r rr$*s r$) Ú sqlalchemyr-Úrr4Úutilrr9rrrr,r$r r r rÚs