§
    kÃ¿ay  ã                   óT   — d Z ddlmZ ddlmZmZ ddlZdddœZ G d„ de¦  «        ZdS )aã  

This wrapper intercepts calls through the store interface and implements
thread-safe logging of destructive operations (adds / removes) in reverse.
This is persisted on the store instance and the reverse operations are
executed In order to return the store to the state it was when the transaction
began Since the reverse operations are persisted on the store, the store
itself acts as a transaction.

Calls to commit or rollback, flush the list of reverse operations This
provides thread-safe atomicity and isolation (assuming concurrent operations
occur with different store instances), but no durability (transactions are
persisted in memory and wont  be available to reverse operations after the
system fails): A and I out of ACID.

é    )ÚStore)ÚGraphÚConjunctiveGraphN)ÚaddÚremovec                   ó|   — e Zd Zd„ Zdd„Zdd„Zd„ Zd„ Zdd„Zdd
„Z	dd„Z
dd„Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd	S )ÚAuditableStorec                 ó†   — || _         |j        | _        d| _        d| _        g | _        t          j        ¦   «         | _        d S )NFT)ÚstoreÚcontext_awareÚformula_awareÚtransaction_awareÚ
reverseOpsÚ	threadingÚRLockÚrollbackLock)Úselfr   s     úA/usr/lib/python3/dist-packages/rdflib/plugins/stores/auditable.pyÚ__init__zAuditableStore.__init__   sC   € ØˆŒ
Ø"Ô0ˆÔð #ˆÔØ!%ˆÔØˆŒÝ%œOÑ-Ô-ˆÔÐÐó    Tc                 ó8   — | j                              ||¦  «        S ©N)r   Úopen)r   ÚconfigurationÚcreates      r   r   zAuditableStore.open'   s   € ØŒz�Š˜}¨fÑ5Ô5Ð5r   Fc                 ó8   — | j                              ¦   «          d S r   )r   Úclose)r   Úcommit_pending_transactions     r   r   zAuditableStore.close*   s   € ØŒ
×ÒÑÔÐÐÐr   c                 ó:   — | j                              |¦  «         d S r   )r   Údestroy)r   r   s     r   r    zAuditableStore.destroy-   s   € ØŒ
×Ò˜=Ñ)Ô)Ð)Ð)Ð)r   c                 ó&   —  | j         j        |i |¤ŽS r   )r   Úquery)r   ÚargsÚkws      r   r"   zAuditableStore.query0   s   € ØˆtŒzÔ Ð,¨Ð,Ð,Ð,r   c                 ó8  — |\  }}}t           d         }|r|nt          j        ¦   «         }|5  |� |                     | j        |j        ¦  «        nd }|�|j        nd }t          | j                             ||¦  «        ¦  «        r	 d d d ¦  «         d S | j         	                    ||||df¦  «         	 | j         
                    ||||df¦  «         n# t          $ r Y nw xY w| j                             |||f||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr   r   )ÚdestructiveOpLocksr   r   Ú	__class__r   Ú
identifierÚlistÚtriplesr   Úappendr   Ú
ValueErrorr   )	r   ÚtripleÚcontextÚquotedÚsÚpÚoÚlockÚctxIds	            r   r   zAuditableStore.add3   s¯  € Ø‰	ˆˆAˆqÝ! %Ô(ˆØÐ2ˆtˆt¥¤Ñ!2Ô!2ˆØð 	7ð 	7ð Ð&ð ×!Ò! $¤*¨gÔ.@ÑAÔAÐAàð ð
 +2Ð*=�GÔ&Ð&À4ˆEÝ�D”J×&Ò& v¨wÑ7Ô7Ñ8Ô8ð Øð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð ŒO×"Ò" A q¨!¨U°HÐ#=Ñ>Ô>Ð>ðØ”×&Ò&¨¨1¨a°¸Ð'>Ñ?Ô?Ð?Ð?øÝð ð ð Ø�ðøøøàŒJ�NŠN˜A˜q !˜9 g¨vÑ6Ô6Ð6ð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7ð 	7ð 	7s<   ­ADÂDÂ3CÃDÃ
C ÃDÃC Ã "DÄDÄDNc           
      ó>  — |\  }}}t           d         }|r|nt          j        ¦   «         }|5  |� |                     | j        |j        ¦  «        nd }|�|j        nd }d ||||fv rþ|rp|                     |||f¦  «        D ]U\  }}	}
	 | j                             ||	|
|df¦  «         Œ'# t          $ r" | j         
                    ||	|
|df¦  «         Y ŒRw xY w�nt          | j        ¦  «                             |||f¦  «        D ]`\  }}	}
}	 | j                             ||	|
|j        df¦  «         Œ-# t          $ r' | j         
                    ||	|
|j        df¦  «         Y Œ]w xY wn„t          |                      |||f|¦  «        ¦  «        s	 d d d ¦  «         d S 	 | j                             ||||df¦  «         n/# t          $ r" | j         
                    ||||df¦  «         Y nw xY w| j                             |||f|¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr   r   )r&   r   r   r'   r   r(   r*   r   r   r,   r+   r   Úquadsr)   )r   Úspor.   ÚsubjectÚ	predicateÚobject_r3   r4   r0   r1   r2   Úctxs               r   r   zAuditableStore.removeG   sY  € Ø&)Ñ#ˆ�˜GÝ! (Ô+ˆØÐ2ˆtˆt¥¤Ñ!2Ô!2ˆØð !	Fð !	Fð
 Ð&ð ×!Ò! $¤*¨gÔ.@ÑAÔAÐAàð ð
 +2Ð*=�GÔ&Ð&À4ˆEØ˜ ¨G°WÐ=Ð=Ð=Øð UØ#*§?¢?°G¸YÈÐ3PÑ#QÔ#Qð Lð L™˜˜1˜aðLØ œO×2Ò2°A°q¸!¸UÀHÐ3MÑNÔNÐNÐNøÝ)ð Lð Lð LØ œO×2Ò2°A°q¸!¸UÀEÐ3JÑKÔKÐKÐKÐKðLøøøñLõ )9¸¼Ñ(DÔ(D×(JÒ(JØ  )¨WÐ5ñ)ô )ð Uð U™˜˜1˜a ðUØ œO×2Ò2°A°q¸!¸S¼^ÈXÐ3VÑWÔWÐWÐWøÝ)ð Uð Uð UØ œO×2Ò2°A°q¸!¸S¼^ÈUÐ3SÑTÔTÐTÐTÐTðUøøøðUõ ˜DŸLšL¨'°9¸gÐ)FÈÑPÔPÑQÔQð Øð5!	Fð !	Fð !	Fñ !	Fô !	Fð !	Fð !	Fð !	Fð6XØ”O×*Ò*Ø  )¨W°e¸XÐFñô ð ð øõ "ð Xð Xð XØ”O×*Ò*¨G°YÀÈÐPUÐ+VÑWÔWÐWÐWÐWðXøøøàŒJ×Ò˜w¨	°7Ð;¸WÑEÔEÐEðC!	Fð !	Fð !	Fñ !	Fô !	Fð !	Fð !	Fð !	Fð !	Fð !	Fð !	Fð !	Føøøð !	Fð !	Fð !	Fð !	Fð !	Fð !	Fs~   ­AHÂB&Â%HÂ&)CÃHÃCÃ6HÄ	$D.Ä-HÄ..EÅHÅEÅ+HÆF8Æ7HÆ8)G$Ç!HÇ#G$Ç$!HÈHÈHc              #   óÀ   K  — |\  }}}|� |                      | j        |j        ¦  «        nd }| j                             |||f|¦  «        D ]\  \  }}}}	|||f|	fV — Œd S r   )r'   r   r(   r*   )
r   r-   r.   ÚsuÚprÚobr0   r1   r2   Úcgs
             r   r*   zAuditableStore.triplesn   s”   è è € Ø‰ˆˆR�ð Ð"ð ×Ò˜dœj¨'Ô*<Ñ=Ô=Ð=àð 	ð
 "œZ×/Ò/°°R¸°¸gÑFÔFð 	 ð 	 ‰M‰IˆQ��1�rØ�a˜�)˜R�-ÐÐÐÐð	 ð 	 r   c                 ó~   — |� |                      | j        |j        ¦  «        nd }| j                             |¦  «        S r   )r'   r   r(   Ú__len__)r   r.   s     r   rB   zAuditableStore.__len__x   sG   € ð Ð"ð ×Ò˜dœj¨'Ô*<Ñ=Ô=Ð=àð 	ð
 Œz×!Ò! 'Ñ*Ô*Ð*r   c              #   óL   K  — | j                              |¦  «        D ]}|V — Œd S r   )r   Úcontexts)r   r-   r;   s      r   rD   zAuditableStore.contexts€   s:   è è € Ø”:×&Ò& vÑ.Ô.ð 	ð 	ˆCØˆIˆIˆIˆIð	ð 	r   c                 ó<   — | j                              ||¦  «         d S r   )r   Úbind)r   ÚprefixÚ	namespaces      r   rF   zAuditableStore.bind„   s   € ØŒ
�Š˜ 	Ñ*Ô*Ð*Ð*Ð*r   c                 ó6   — | j                              |¦  «        S r   )r   rG   )r   rH   s     r   rG   zAuditableStore.prefix‡   s   € ØŒz× Ò  Ñ+Ô+Ð+r   c                 ó6   — | j                              |¦  «        S r   )r   rH   )r   rG   s     r   rH   zAuditableStore.namespaceŠ   s   € ØŒz×#Ò# FÑ+Ô+Ð+r   c                 ó4   — | j                              ¦   «         S r   )r   Ú
namespaces©r   s    r   rL   zAuditableStore.namespaces�   s   € ØŒz×$Ò$Ñ&Ô&Ð&r   c                 ó   — g | _         d S r   )r   rM   s    r   ÚcommitzAuditableStore.commit�   s   € ØˆŒˆˆr   c           	      óF  — | j         5  | j        D ]q\  }}}}}|dk    r2| j                             |||ft	          | j        |¦  «        ¦  «         Œ@| j                             |||ft	          | j        |¦  «        ¦  «         Œrg | _        d d d ¦  «         d S # 1 swxY w Y   d S )Nr   )r   r   r   r   r   r   )r   r8   r9   Úobjr.   Úops         r   ÚrollbackzAuditableStore.rollback“   s  € ð Ôð 	!ð 	!Ø8<¼ð ð Ñ4�˜ C¨°"Ø˜’;�;Ø”J—N’NØ  )¨SÐ1µ5¸¼ÀWÑ3MÔ3Mñô ð ð ð ”J×%Ò%Ø  )¨SÐ1µ5¸¼ÀWÑ3MÔ3Mñô ð ð ð !ˆDŒOð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð 	!ð 	!s   ˆBBÂBÂB)T)Fr   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r    r"   r   r   r*   rB   rD   rF   rG   rH   rL   rO   rS   © r   r   r	   r	      s,  € € € € € ð.ð .ð .ð6ð 6ð 6ð 6ðð ð ð ð*ð *ð *ð-ð -ð -ð7ð 7ð 7ð 7ð(%Fð %Fð %Fð %FðN ð  ð  ð  ð+ð +ð +ð +ðð ð ð ð+ð +ð +ð,ð ,ð ,ð,ð ,ð ,ð'ð 'ð 'ðð ð ð!ð !ð !ð !ð !r   r	   )	Ú__doc__Úrdflib.storer   Úrdflibr   r   r   r&   r	   rW   r   r   ú<module>r[      sš   ððð ð" Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð ð Øðð Ð ðE!ð E!ð E!ð E!ð E!�Uñ E!ô E!ð E!ð E!ð E!r   