
    jt                         d Z ddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZmZ  G d d	          Z G d
 de          ZdS )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)BufferedWriter)Path)TemporaryDirectory)TracebackType)OptionalTypec            	           e Zd ZddedededefdZd ZeZd	e	fd
Z
deee                  dee         dee         fdZdS )NamedFileInTemporaryDirectoryFfilenamemodebufsizeadd_to_syspathc                     t          di || _        t          | j        j                  |z  }d|v rdnd}t	          ||||          | _        dS )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)selfr   r   r   r   kwdspathr   s           \/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/IPython/utils/tempdir.py__init__z&NamedFileInTemporaryDirectory.__init__   s]     *11D11DL%&&1$;;44GtWx@@@			    c                 j    | j                                          | j                                         d S N)r   closer   cleanupr   s    r   r!   z%NamedFileInTemporaryDirectory.cleanup    s.    	r   returnc                     | j         S r   )r   r"   s    r   	__enter__z'NamedFileInTemporaryDirectory.__enter__&   s
    yr   typevalue	tracebackc                 .    |                                   d S r   )r!   )r   r&   r'   r(   s       r   __exit__z&NamedFileInTemporaryDirectory.__exit__)   s    r   N)r   F)__name__
__module____qualname__strintboolr   r!   __del__r   r%   r   r   BaseExceptionr   r*   r   r   r   r
   r
      s        A A AC A# ARV A A A A    G>    Xd=&9: 8MCZ gop}g~      r   r
   c                   t     e Zd ZdZdef fdZdeee                  dee         dee	         ddf 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:
            ...
    r#   c                     t          j                    | _        t          j        | j                   t          t          |                                           S r   )	r   cwdold_wd_oschdirr   superr4   r%   )r   	__class__s    r   r%   z#TemporaryWorkingDirectory.__enter__7   s?    hjj	$).55??AAAr   excr'   tbNc                     t          j        | j                   t          t          |                               |||          S r   )r8   r9   r7   r:   r4   r*   )r   r<   r'   r=   r;   s       r   r*   z"TemporaryWorkingDirectory.__exit__<   s8    	$+.55>>sE2NNNr   )r+   r,   r-   __doc__r.   r%   r   r   r2   r   r*   __classcell__)r;   s   @r   r4   r4   -   s         B3 B B B B B B
OHT-%89 O(=BY O_ghu_v O{ O O O O O O O O O Or   r4   )r?   osr8   ior   pathlibr   tempfiler   typesr   typingr   r   r
   r4   r   r   r   <module>rG      s                     ' ' ' ' ' '       ! ! ! ! ! ! ! !       <O O O O O 2 O O O O Or   