a
    ij?                     @  s  d Z ddlmZ ddlZddlZddlZddlZddlmZmZm	Z	m
Z
m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 ed
ef ZejZejddG dd deZejdddddddddddddddddddddddddddddddZdS )zTest utils for epath.    )annotationsN)AnyCallableIteratorOptionalUnion)mock)backend)gpath)
stat_utils)PathLike.F)eqc                      s  e Zd ZU dZded<  fddZdddd	d
dZdddddZdddddZdddddZ	dddddZ
ddddddddZddddddddZddddd Zdddd!d"Zdddd#d$d%Zdddd#d&d'Zddddd(d)d*Zdd+dd,d-Z  ZS )._MockBackendz#Backend with functions overwritten.zdict[str, _MockFn]mock_fnsc                   s:   t t |}| j| d ur2| j| }t||}n|}|S )N)getattrsuperr   	functoolspartial)selffn_nameZoriginal_fnZ
fn_to_call	__class__ Q/home/ghrups/robot-bench/.venv/lib/python3.9/site-packages/etils/epath/testing.py_get_fn+   s    
z_MockBackend._get_fnr   strztyping.IO[Union[str, bytes]])pathmodereturnc                 C  s   |  d||S )Nopenr   )r   r   r   r   r   r   r   4   s    z_MockBackend.openbool)r   r   c                 C  s   |  d|S )Nexistsr    r   r   r   r   r   r"   ;   s    z_MockBackend.existsc                 C  s   |  d|S )Nisdirr    r#   r   r   r   r$   >   s    z_MockBackend.isdirz	list[str]c                 C  s   |  d|S )Nlistdirr    r#   r   r   r   r%   A   s    z_MockBackend.listdirc                 C  s   |  d|S )Nglobr    r#   r   r   r   r&   D   s    z_MockBackend.globFexist_okNone)r   r(   r   c                C  s   |  d||dS )Nmakedirsr'   r    r   r   r(   r   r   r   r*   G   s    z_MockBackend.makedirsc                C  s   |  d||dS )Nmkdirr'   r    r+   r   r   r   r,   J   s    z_MockBackend.mkdirc                 C  s   |  d|S )Nrmtreer    r#   r   r   r   r-   M   s    z_MockBackend.rmtreec                 C  s   |  d|S )Nremover    r#   r   r   r   r.   P   s    z_MockBackend.remove)r   dstr   c                 C  s   |  d||S )Nrenamer    r   r   r/   r   r   r   r0   S   s    z_MockBackend.renamec                 C  s   |  d||S )Nreplacer    r1   r   r   r   r2   V   s    z_MockBackend.replace)r   r/   	overwriter   c                C  s   |  d|||dS )Ncopy)r3   r    )r   r   r/   r3   r   r   r   r4   Y   s    z_MockBackend.copyzstat_utils.StatResultc                 C  s   |  d|S )Nstatr    r#   r   r   r   r5   \   s    z_MockBackend.stat)__name__
__module____qualname____doc____annotations__r   r   r"   r$   r%   r&   r*   r,   r-   r.   r0   r2   r4   r5   __classcell__r   r   r   r   r   %   s    
	r   )r4   r"   r&   r$   r%   r*   r,   r   r.   r0   r2   r-   r5   zOptional[_MockFn]zIterator[None])r4   r"   r&   r$   r%   r*   r,   r   r.   r0   r2   r-   r5   r   c                 #  sz   t || |	||||||||
||d}t|d  fddtjD }tjtd| dV  W d   n1 sl0    Y  dS )a  Mock epath.

  Mock the file system by replacing the given function by their mock.
  Only the function passed are mocked.
  The mock function should have signature: `(original_fn, path)` + eventual
    args/kwargs for specific functions.

  Args:
    copy: New function (after mocking)
    exists: New function (after mocking)
    glob: New function (after mocking)
    isdir: New function (after mocking)
    listdir: New function (after mocking)
    makedirs: New function (after mocking)
    mkdir: New function (after mocking)
    open: New function (after mocking)
    remove: New function (after mocking)
    rename: New function (after mocking)
    replace: New function (after mocking)
    rmtree: New function (after mocking)
    stat: New function (after mocking)

  Yields:
    None
  )r   r4   r0   r"   r&   r$   r%   r*   r,   r.   r2   r-   r5   )r   c                   s   i | ]
}| qS r   r   ).0kZmock_backendr   r   
<dictcomp>       zmock_epath.<locals>.<dictcomp>_PREFIX_TO_BACKENDN)dictr   r
   rA   r   patchobject)r4   r"   r&   r$   r%   r*   r,   r   r.   r0   r2   r-   r5   r   Znew_prefix_to_backendr   r>   r   
mock_epath`   s&    *
rE   )r9   
__future__r   
contextlibdataclassesr   typingr   r   r   r   r   Zunittestr   Zetils.epathr	   r
   r   Zetils.epath.typingr   Z_MockFnZ_OsPathBackendZ_backend_cls	dataclassr   contextmanagerrE   r   r   r   r   <module>   s<   
: