a
    ¨ô|cy  ã                   @   s¦   d dl Zd dlZd dlZd dlmZmZ d dlmZ G dd„ deƒZ	G dd„ deƒZ
G dd	„ d	eƒZd
d„ Zedkr¢d dlmZ edddd d dlmZ eeƒ dS )é    N)ÚModuleBrowserÚModuleBrowserTreeItem)ÚTreeItemc                   @   s,   e Zd Zdddœdd„Zdd„ Zdd„ Zd	S )
ÚPathBrowserF)Ú_htestÚ_utestc                C   s   || _ || _|| _|  ¡  dS )zG
        _htest - bool, change box location when running htest
        N)Úmasterr   r   Úinit)Úselfr   r   r   © r   ú$lib/python3.9/idlelib/pathbrowser.pyÚ__init__   s    zPathBrowser.__init__c                 C   s   | j  d¡ | j  d¡ dS )zSet window titles.zPath BrowserN)ÚtopZwm_titleZwm_iconname©r
   r   r   r   Úsettitle   s    zPathBrowser.settitlec                 C   s   t ƒ S ©N)ÚPathBrowserTreeItemr   r   r   r   Úrootnode   s    zPathBrowser.rootnodeN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   	   s   	r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )r   c                 C   s   dS )Nzsys.pathr   r   r   r   r   ÚGetText   s    zPathBrowserTreeItem.GetTextc                 C   s&   g }t jD ]}t|ƒ}| |¡ q
|S r   )ÚsysÚpathÚDirBrowserTreeItemÚappend)r
   ÚsublistÚdirÚitemr   r   r   Ú
GetSubList"   s
    
zPathBrowserTreeItem.GetSubListN)r   r   r   r   r   r   r   r   r   r      s   r   c                   @   s8   e Zd Zg fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )r   c                 C   s   || _ || _d S r   )r   Úpackages)r
   r   r    r   r   r   r   ,   s    zDirBrowserTreeItem.__init__c                 C   s   | j s| jS | j d d S d S )Néÿÿÿÿz	: package)r    r   r   r   r   r   r   0   s    zDirBrowserTreeItem.GetTextc                 C   sà   zt  | jpt j¡}W n ty,   g  Y S 0 g }|D ]:}t j | j|¡}|  |¡r6t j |¡}| 	|||f¡ q6| 
¡  g }|D ]&\}}}t|| j|g ƒ}| 	|¡ q‚|  |¡D ]&\}}tt j | j|¡ƒ}| 	|¡ q´|S r   )ÚosÚlistdirr   ÚcurdirÚOSErrorr   ÚjoinÚispackagedirÚnormcaser   Úsortr   r    Úlistmodulesr   )r
   Únamesr    ÚnameÚfileZnnr   r   r   r   r   r   6   s&    

zDirBrowserTreeItem.GetSubListc                 C   s*   t j |¡sdS t j |d¡}t j |¡S )z/ Return true for directories that are packages.Fz__init__.py)r"   r   Úisdirr&   Úexists)r
   r-   r	   r   r   r   r'   K   s    zDirBrowserTreeItem.ispackagedirc           
      C   s²   i }t jjd d … }|t jj7 }|t jj7 }g }|D ]p}t|ƒ }|d d … D ]T}tj |¡}||d … |krN|d |… }	|	|vrNd ||	< | 	||f¡ | 
|¡ qNq4| ¡  |S r   )Ú	importlibÚ	machineryÚEXTENSION_SUFFIXESÚSOURCE_SUFFIXESÚBYTECODE_SUFFIXESÚlenr"   r   r(   r   Úremover)   )
r
   ZallnamesÚmodulesÚsuffixesÚsortedZsuffÚir,   Znormed_nameÚmod_namer   r   r   r*   R   s"    
zDirBrowserTreeItem.listmodulesN)r   r   r   r   r   r   r'   r*   r   r   r   r   r   *   s
   r   c                 C   s   t | dd |  ¡  d S )NT)r   )r   Zmainloop)Úparentr   r   r   Ú_path_browserf   s    r=   Ú__main__)Úmainz"idlelib.idle_test.test_pathbrowseré   F)Ú	verbosityÚexit)Úrun)Úimportlib.machineryr0   r"   r   Zidlelib.browserr   r   Zidlelib.treer   r   r   r   r=   r   Zunittestr?   Zidlelib.idle_test.htestrC   r   r   r   r   Ú<module>   s   <