U
    /e                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ ddlm	Z	m
Z
 dej ej e jj Zdd Zd	d
 Zdd ZG dd dZdS )    N)memoize)contextmanager   )
nested_getflattenz-_.() c                 C   s   d ttj| S )zc Escape text so that it is a valid filename

    >>> escape_filename('Foo!bar?')
    'Foobar'

     )joinfiltervalid_chars__contains__)fn r   ./tmp/pip-unpacked-wheel-ziavv1t7/partd/core.pyescape_filename   s    r   c                 C   s   t j| tt|S N)ospathr   r   token)r   keyr   r   r   filename   s    r   c                 C   s6   t | tr| S t | tr*tjjtt|  S t| S dS )zo

    >>> token('hello')
    'hello'
    >>> token(('hello', 'world'))  # doctest: +SKIP
    'hello/world'
    N)
isinstancestrtupler   r   r   mapr   )r   r   r   r   r      s
    

r   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )	Interfacec                 C   s   t  | _d S r   )set
_iset_seenselfr   r   r   __init__.   s    zInterface.__init__c                 C   s   | j | t | _d S r   )__dict__updater   r   )r   stater   r   r   __setstate__1   s    zInterface.__setstate__c                 K   s.   || j krd S | j||f| | j | d S r   )r   Z_isetadd)r   r   valuekwargsr   r   r   iset5   s    
zInterface.isetc                 C   s   | S r   r   r   r   r   r   	__enter__<   s    zInterface.__enter__c                 C   s   |    d S r   )Zdrop)r   typer%   	tracebackr   r   r   __exit__?   s    zInterface.__exit__c                 C   s   | j |gddd S )NFlockr   )_get)r   r   r   r   r   igetB   s    zInterface.igetc                 K   sp   t |ts| j|gf|d S tdd |D r^tt|}| j|f|}t|tt||S | j|f|S d S )Nr   c                 s   s   | ]}t |tV  qd S r   )r   list).0r   r   r   r   	<genexpr>H   s     z Interface.get.<locals>.<genexpr>)	r   r0   getanyr   r   dictzipr.   )r   keysr&   Zflatkeysresultr   r   r   r3   E   s    
zInterface.getc                 K   s,   t |ts| j|gf|S | j|f|S d S r   )r   r0   _delete)r   r7   r&   r   r   r   deleteO   s    
zInterface.deletec              	   K   s8   | j j& | j j|dd}| j j|dd W 5 Q R X |S )NFr,   )Zpartdr-   r3   r:   )r   r7   r&   r8   r   r   r   popU   s    
zInterface.popN)__name__
__module____qualname__r   r#   r'   r(   r+   r/   r3   r:   r;   r   r   r   r   r   -   s   
r   )r   shutilZlocketstringZtoolzr   
contextlibr   utilsr   r   ascii_lettersdigitsr   sepr
   r   r   r   r   r   r   r   r   <module>   s   
