
    wg^	                     N    d dl mZ  G d d      Z G d d      Z G d de      Zy)	    )dequec                   0    e Zd ZdZd Zd Zd Zd ZddZy)	Transactiona  Filesystem transaction write context

    Gathers files for deferred commit or discard, so that several write
    operations can be finalized semi-atomically. This works by having this
    instance as the ``.transaction`` attribute of the given filesystem
    c                 0    || _         t               | _        y)O
        Parameters
        ----------
        fs: FileSystem instance
        N)fsr   files)selfr   kwargss      W/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/fsspec/transaction.py__init__zTransaction.__init__   s     W
    c                 &    | j                          | S N)startr
   s    r   	__enter__zTransaction.__enter__   s    

r   c                     | j                  |du        | j                  r*d| j                  _        d| j                  _        d| _        yy)z;End transaction and commit, if exit is not due to exceptionN)commitF)completer   _intrans_transaction)r
   exc_typeexc_valexc_tbs       r   __exit__zTransaction.__exit__   sB     	X-.77$DGG#'DGG DG r   c                 D    t               | _        d| j                  _        y)z&Start a transaction on this FileSystemTN)r   r	   r   r   r   s    r   r   zTransaction.start"   s    W
r   c                    | j                   rJ| j                   j                         }|r|j                          n|j                          | j                   rJd| j                  _        d| j                  _        d| _        yz8Finish transaction: commit or discard all deferred filesFN)r	   popleftr   discardr   r   r   )r
   r   fs      r   r   zTransaction.complete'   sZ    jj

""$A
		 jj !#r   NT)	__name__
__module____qualname____doc__r   r   r   r   r    r   r   r   r      s      

r   r   c                   $    e Zd Zd Zd Zd Zd Zy)	FileActorc                     g | _         y r   )r	   r   s    r   r   zFileActor.__init__5   s	    
r   c                 z    | j                   D ]  }|j                           | j                   j                          y r   )r	   r   clearr
   r"   s     r   r   zFileActor.commit8   s.     	AHHJ	

r   c                 z    | j                   D ]  }|j                           | j                   j                          y r   )r	   r!   r-   r.   s     r   r!   zFileActor.discard=   s.     	AIIK	

r   c                 :    | j                   j                  |       y r   )r	   appendr.   s     r   r1   zFileActor.appendB   s    

!r   N)r$   r%   r&   r   r   r!   r1   r(   r   r   r*   r*   4   s    

r   r*   c                   &     e Zd Z fdZddZ xZS )DaskTransactionc                     ddl }t        | 	  |       |j                         }|j	                  t
        d      j                         | _        y)r   r   NT)actor)distributedsuperr   default_clientsubmitr*   resultr	   )r
   r   r6   client	__class__s       r   r   zDaskTransaction.__init__G   s@     	++-]]9D]9@@B
r   c                     |r)| j                   j                         j                          n(| j                   j                         j                          d| j                  _        d| _        yr   )r	   r   r:   r!   r   r   )r
   r   s     r   r   zDaskTransaction.completeS   sJ    JJ&&(JJ '') r   r#   )r$   r%   r&   r   r   __classcell__)r<   s   @r   r3   r3   F   s    
Cr   r3   N)collectionsr   r   r*   r3   r(   r   r   <module>r@      s)    - -` $k r   