o
    ?@i                     @   s   d dl Z d dlZd dlZdd ZG dd dZG dd deZeejZG dd	 d	eZG d
d deZ	G dd de	Z
G dd deZdS )    Nc                  O   s8   d|d< zt j| i | W S  t jy   g  Y S w )NTuniversal_newlines)
subprocesscheck_output
splitlinesCalledProcessError)argskwargs r	   T/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/argcomplete/completers.py_call	   s   r   c                
   @   s4   e Zd ZdZdedejdejdejddf
dd	Z	dS )
BaseCompleterzQ
    This is the base class that all argcomplete completers should subclass.
    prefixactionparserparsed_argsreturnNc                C   s   t d)Nz0This method should be implemented by a subclass.)NotImplementedError)selfr   r   r   r   r	   r	   r
   __call__   s   zBaseCompleter.__call__)
__name__
__module____qualname____doc__strargparseActionArgumentParser	Namespacer   r	   r	   r	   r
   r      s    r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ChoicesCompleterc                 C   s
   || _ d S Nchoices)r   r!   r	   r	   r
   __init__   s   
zChoicesCompleter.__init__c                 C   s   t |ts	t|}|S r   )
isinstancer   )r   choicer	   r	   r
   _convert!   s   
zChoicesCompleter._convertc                    s    fdd j D S )Nc                 3   s    | ]}  |V  qd S r   )r%   ).0cr   r	   r
   	<genexpr>'   s    z,ChoicesCompleter.__call__.<locals>.<genexpr>r    )r   r   r	   r(   r
   r   &   s   zChoicesCompleter.__call__N)r   r   r   r"   r%   r   r	   r	   r	   r
   r      s    r   c                   @   s"   e Zd ZdZd	ddZdd ZdS )
FilesCompleterzM
    File completer class, optionally takes a list of allowed extensions
    r	   Tc                 C   s.   t |ttfr
|g}dd |D | _|| _d S )Nc                 S   s   g | ]
}| d  dqS )*.)lstrip)r&   xr	   r	   r
   
<listcomp>7   s    z+FilesCompleter.__init__.<locals>.<listcomp>)r#   r   bytesallowednamesdirectories)r   r1   r2   r	   r	   r
   r"   2   s   
zFilesCompleter.__init__c              	   K   s   g }| j r2| jrtdddj|dg}|dd |D 7 }| j D ]}|tdddj||dg7 }q|S |tdddj|dg7 }tdddj|dg}tt|t| }| jr`|d	d |D 7 }|S )
Nbashz-czcompgen -A directory -- '{p}')pc                 S      g | ]}|d  qS /r	   r&   fr	   r	   r
   r/   ?       z+FilesCompleter.__call__.<locals>.<listcomp>z$compgen -A file -X '!*.{0}' -- '{p}'zcompgen -A file -- '{p}'c                 S   r5   r6   r	   r8   r	   r	   r
   r/   H   r:   )r1   r2   r   formatlistset)r   r   r   
completionfilesr.   anticompr	   r	   r
   r   :   s   
zFilesCompleter.__call__N)r	   T)r   r   r   r   r"   r   r	   r	   r	   r
   r*   -   s    
r*   c                   @   s   e Zd Zdd Zdd ZdS )_FilteredFilesCompleterc                 C   s   |sJ d|| _ dS )z
        Create the completer

        A predicate accepts as its only argument a candidate path and either
        accepts it or rejects it.
        zExpected a callable predicateN	predicate)r   rC   r	   r	   r
   r"   M   s   
z _FilteredFilesCompleter.__init__c                 k   s    t j|}z	t |pd}W n
 ty   Y dS w t j|}|D ]"}||s+q#t j||}| |s8q#t j	|rB|d n|V  q#dS )z/
        Provide completions on prefix
        r,   Nr7   )
ospathdirnamelistdir	Exceptionbasename
startswithjoinrC   isdir)r   r   r   
target_dirnamesincomplete_partname	candidater	   r	   r
   r   W   s    

z _FilteredFilesCompleter.__call__N)r   r   r   r"   r   r	   r	   r	   r
   rA   L   s    
rA   c                   @   s   e Zd Zdd ZdS )DirectoriesCompleterc                 C   s   t j| tjjd d S )NrB   )rA   r"   rD   rE   rL   r(   r	   r	   r
   r"   l   s   zDirectoriesCompleter.__init__N)r   r   r   r"   r	   r	   r	   r
   rR   k   s    rR   c                   @   s    e Zd ZdZdd Zdd ZdS )SuppressCompleterzK
    A completer used to suppress the completion of specific arguments
    c                 C   s   d S r   r	   r(   r	   r	   r
   r"   u   s   zSuppressCompleter.__init__c                 C   s   dS )z?
        Decide if the completion should be suppressed
        Tr	   r(   r	   r	   r
   suppressx   s   zSuppressCompleter.suppressN)r   r   r   r   r"   rT   r	   r	   r	   r
   rS   p   s    rS   )r   rD   r   r   r   r   environEnvironCompleterr*   rA   rR   rS   r	   r	   r	   r
   <module>   s   	
