
    fK                     T    d Z ddlZddlmZ ddlmZ  G d de      Z G d de      Z	y)	a   This module contains classes - NamedFileInTemporaryDirectory, TemporaryWorkingDirectory.

These classes add extra features such as creating a named file in temporary directory and
creating a context manager for the working directory which is also temporary.
    N)Path)TemporaryDirectoryc                   *    e Zd ZddZd ZeZd Zd Zy)NamedFileInTemporaryDirectoryc                     t        di || _        t        | j                  j                        |z  }d|v rdnd}t	        ||||      | _        y)aN  
        Open a file named `filename` in a temporary directory.

        This context manager is preferred over `NamedTemporaryFile` in
        stdlib `tempfile` when one needs to reopen the file.

        Arguments `mode` and `bufsize` are passed to `open`.
        Rest of the arguments are passed to `TemporaryDirectory`.

        bNzutf-8)encoding )r   _tmpdirr   nameopenfile)selffilenamemodebufsizeadd_to_syspathkwdspathr	   s           P/var/www/cvtools/html/venv/lib/python3.12/site-packages/IPython/utils/tempdir.py__init__z&NamedFileInTemporaryDirectory.__init__   sK     *1D1DLL%%&1$;4GtWx@	    c                 l    | j                   j                          | j                  j                          y N)r   closer   cleanupr   s    r   r   z%NamedFileInTemporaryDirectory.cleanup   s     		r   c                     | j                   S r   )r   r   s    r   	__enter__z'NamedFileInTemporaryDirectory.__enter__#   s    yyr   c                 $    | j                          y r   )r   )r   typevalue	tracebacks       r   __exit__z&NamedFileInTemporaryDirectory.__exit__&   s    r   N)zw+bF)__name__
__module____qualname__r   r   __del__r   r$   r
   r   r   r   r      s    A  Gr   r   c                   ,     e Zd ZdZ fdZ fdZ xZS )TemporaryWorkingDirectoryz
    Creates a temporary directory and sets the cwd to that directory.
    Automatically reverts to previous cwd upon cleanup.
    Usage example:

        with TemporaryWorkingDirectory() as tmpdir:
            ...
    c                     t        j                         | _        t        j                  | j
                         t        t        | #         S r   )	r   cwdold_wd_oschdirr   superr+   r   )r   	__class__s    r   r   z#TemporaryWorkingDirectory.__enter__4   s1    hhj		$)).?AAr   c                 l    t        j                  | j                         t        t        |   |||      S r   )r/   r0   r.   r1   r+   r$   )r   excr"   tbr2   s       r   r$   z"TemporaryWorkingDirectory.__exit__9   s*    		$++.>sE2NNr   )r&   r'   r(   __doc__r   r$   __classcell__)r2   s   @r   r+   r+   *   s    B
O Or   r+   )
r6   osr/   pathlibr   tempfiler   objectr   r+   r
   r   r   <module>r<      s0      'F <O 2 Or   