a
    \„\’3  ã                   @   s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd)dd„Zeƒ  d*dd„Z	dd	„ Z
ze W n  ey†   d dlZejZY n0 d
d„ ZddddddœZdd„ Zdd„ Zdd„ Zdd„ Zddddddifdd„Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zed(k�reƒ  dS )+é    )Úprint_functionNÚDebianc                 C   sÂ   zt }W n ty   t}Y n0 ztd|  ¡  ƒ}W n |yN   tdƒ}Y n0 t |¡}dd„ |D ƒatt 	¡ ƒa
t
jdd„ d� tttt
Ž ƒd ƒa
|  ¡ d	kr¶d
at
 g d¢¡ | ¡  d S )Nz/usr/share/distro-info/%s.csvz!/usr/share/distro-info/debian.csvc                 S   s"   i | ]}|d  r|d  |d “qS )ÚversionZseries© )Ú.0Úrr   r   ú-/usr/lib/python3/dist-packages/lsb_release.pyÚ
<dictcomp>.   ó    z#get_distro_info.<locals>.<dictcomp>c                 S   s   t | d ƒS ©Nr   )Úfloat)Únr   r   r   Ú<lambda>0   r
   z!get_distro_info.<locals>.<lambda>©Úkeyé   Zdebianzunknown.new.testing)Zstablezproposed-updatesÚtestingztesting-proposed-updatesÚunstableÚsid)ÚFileNotFoundErrorÚ	NameErrorÚIOErrorÚopenÚlowerÚcsvZ
DictReaderÚRELEASE_CODENAME_LOOKUPÚlistÚitemsÚRELEASES_ORDERÚsortÚzipÚTESTING_CODENAMEÚextendÚclose)ÚoriginZFileNotFoundExceptionZcsvfileÚreaderr   r   r   Úget_distro_info   s"    

r&   c                 C   sR   t  d| ¡}|s|S t| d¡ƒdk r8d| dd¡ }nd| d¡ }t ||¡S )Nz(\d+)\.(\d+)(r(\d+))?r   é   z%s.%sé   z%s)ÚreÚmatchÚintÚgroupr   Úget)ÚreleaseÚunknownÚmZshortreleaser   r   r   Úlookup_codename<   s    r1   c                 C   sb  | dkrddgS | dkrB|dv r&dgS |dkr6ddgS g d¢S �n| dkr�|dkrZddgS |d	krhdgS |d
v rvdgS |dkr†g d¢S g d¢S nÌ| dk� rò|dkrªg d¢S |d	kr¸dgS |d
v rÈddgS |dkrÖdgS |dk� règ d¢S g d¢S nj| dk�r\|dk�rg d¢S |d	k�rdgS |d
v �r0g d¢S |dk�rBddgS |dk�rTg d¢S g d¢S | gS )Nú3.0ú2.0ú3.1)ÚdesktopÚqt4Zcxx)r3   r2   r4   ú3.2r5   r6   )ZprintingÚ	languagesZ
multimedia)r2   r4   r7   )r3   r2   r4   r7   ú4.0)r4   r7   r9   Zsecurity)r2   r4   r7   r9   )r3   r2   r4   r7   r9   ú4.1)r4   r7   r9   r:   )r7   r9   r:   )r2   r4   r7   r9   r:   )r3   r2   r4   r7   r9   r:   r   )r   Úmoduler   r   r   Úvalid_lsb_versionsG   sV    









r<   c                   C   s   g S ©Nr   r   r   r   r   Úcheck_modules_installedƒ   s    r>   r   r$   ÚsuiteÚ	componentÚlabel)ÚvÚoÚaÚcÚlc                 C   sX   i }|   d¡}|D ]@}|  dd¡}t|ƒdkr|d d… \}}|tv r||t| < q|S )Nú,ú=r   r(   )ÚsplitÚlenÚ	longnames)ÚdataZretvalÚbitsÚbitZkvÚkrB   r   r   r   Úparse_policy_line‰   s    
rP   c                 C   sT   | d   d¡}|rP|tv r0tttƒt |¡ ƒS z
t|ƒW S  tyN   Y dS 0 dS )Nr   r?   r   )r-   r   r+   rJ   Úindexr   Ú
ValueError)Úxr?   r   r   r   Úrelease_index”   s    
rT   c                 C   sR   t jdtdd� t| ƒ}t|ƒ}z
|| W S  tyL   ||k||k   Y S 0 d S )Nz^compare_release(x,y) is deprecated; please use the release_index(x) as key for sort() instead.r(   )Ú
stacklevel)ÚwarningsÚwarnÚDeprecationWarningrT   Ú	TypeError)rS   ÚyZ	suite_x_iZ	suite_y_ir   r   r   Úcompare_release    s    
r[   c                  C   s²   g } t j ¡ }d|d< tjddg|tjtjdd� ¡ d  d¡}| d	¡D ]b}| 	¡ }t
 d
|¡}|rtt| d¡ƒ}| d¡rJ| dd¡}t|ƒdkrJ|  |t|d ƒf¡ qJ| S )NzC.UTF-8ÚLC_ALLz	apt-cacheÚpolicyT)ÚenvÚstdoutÚstderrZ	close_fdsr   zutf-8Ú
z(-?\d+)r   r.   ú )ÚosÚenvironÚcopyÚ
subprocessÚPopenÚPIPEZcommunicateÚdecoderI   Ústripr)   r*   r+   r,   Ú
startswithrJ   ÚappendrP   )rL   ZC_envr]   Úliner0   ÚpriorityrM   r   r   r   Úparse_apt_policyª   s,    
üüü
ro   ÚmainZexperimentalúDebian Ports©zftp.ports.debian.orgzftp.debian-ports.orgc                    sx   t ƒ }|sd S ‡ ‡‡‡‡fdd„|D ƒ}|s0d S |jdd„ dd� |d d ‰‡fdd„|D ƒ}|jtd	� |d d
 S )Nc              	      sš   g | ]’}|d    dd¡ˆkrX|d    dd¡ˆvrX|d    dd¡ˆkrX|d    dd¡ˆks’|d    dd¡ˆ v r|d    dd¡ˆ   |d    dd¡¡v r|‘qS )r   r$   Ú r?   r@   rA   )r-   ©r   rS   )Úalternate_olabelsr@   ÚignoresuitesrA   r$   r   r   Ú
<listcomp>É   s   &úz*guess_release_from_apt.<locals>.<listcomp>c                 S   s   | d S r   r   )Útupler   r   r   r   Õ   r
   z(guess_release_from_apt.<locals>.<lambda>T)r   Úreverser   c                    s   g | ]}|d  ˆ kr|‘qS )r   r   rt   )Úmax_priorityr   r   rw   Û   r
   r   r   )ro   r   rT   )r$   r@   rv   rA   ru   Zreleasesr   )ru   r@   rv   rA   rz   r$   r   Úguess_release_from_apt¿   s    	r{   c               
   C   sB  i } d| d< t j dd¡}t j |¡ræz~t|ƒ�b}|D ]L}z4| dd¡\}}| ¡ }| ¡ }|dkrl|| d< W q6 t	y€   Y q60 q6W d   ƒ n1 s˜0    Y  W n@ t
yä } z(td| d	 t|ƒtjd
� W Y d }~n
d }~0 0 t| d ƒ t  ¡ d }|dv �rd| | d< n4|dk�r.d| | d< n|dv �rB|| d< nd| d< d|  | d< t j dd¡}t j |¡�r^z:t|ƒ�}	|	 ¡  ¡ }
W d   ƒ n1 �s 0    Y  W nF t
�yò } z,td| d	 t|ƒtjd
� d}
W Y d }~n
d }~0 0 |
dd…  ¡ �s"t|
dƒ}|  |
|dœ¡ n<|
 d¡�rV|
 d¡ ¡ dk�rL|
 d¡ad| d< n|
| d< |  d¡�sþtƒ }|�rþ| d¡}
|
d k�r¼| d!¡d"k�r¼| d#¡d$v �r¼d }
| d%d&i¡ |
�rÎt|
dƒ}n | d%d&¡}
|
dk�rêt}nd'}|  |
|dœ¡ |  d¡�r| d  d(|  7  < |  d¡�r>| d  d)|  7  < | S )*Nr   ÚIDZLSB_ETC_DPKG_ORIGINS_DEFAULTz/etc/dpkg/origins/defaultz: r   ZvendorúUnable to open ú:©Úfiler   )ZLinuxZHurdZNetBSDzGNU/ZOSZFreeBSDzGNU/k)z	GNU/LinuxzGNU/kFreeBSDZGNUz%(ID)s %(OS)sÚDESCRIPTIONZLSB_ETC_DEBIAN_VERSIONz/etc/debian_versionr/   zn/a)ÚRELEASEÚCODENAMEz/sidr   ztesting/unstabler‚   rƒ   r   z1.0r$   rq   rA   rr   r?   r   r   z %(RELEASE)sz (%(CODENAME)s))rc   rd   r-   ÚpathÚexistsr   rI   r   rj   rR   r   ÚprintÚstrÚsysr`   r&   ÚunameÚreadÚisalphar1   ÚupdateÚendswithÚrstripr!   r{   )ÚdistinfoZetc_dpkg_origins_defaultZdpkg_origins_filerm   ÚheaderZcontentÚmsgZkernZetc_debian_versionZdebian_versionr.   ÚcodenameZrinfor   r   r   Úguess_debian_releaseà   s|    
*2




0




*
r“   c               
   C   sD  i } t j dd¡}t j |¡�r@zÜt|ƒ�À}|D ]ª}| ¡ }|sBq0d|vrLq0| dd¡\}}| d¡r|| 	d¡r||dd… }|r0|dkr–| ¡ | d< q0|d	kr¬| ¡ | d
< q0|dkrÆ| ¡  
¡ | d< q0|dkr0| ¡ | d< q0W d   ƒ n1 sð0    Y  W nB t�y> } z(td| d t|ƒtjd� W Y d }~n
d }~0 0 | S )NZLSB_OS_RELEASEz/usr/lib/os-releaserH   r   ú"éÿÿÿÿZ
VERSION_IDr‚   ZVERSION_CODENAMErƒ   r|   ZPRETTY_NAMEr�   r}   r~   r   )rc   rd   r-   r„   r…   r   rj   rI   rk   r�   Útitler   r†   r‡   rˆ   r`   )r�   Z
os_releaseZos_release_filerm   ÚvarÚargr‘   r   r   r   Úget_os_release>  s4    
02r™   c                  C   s4   t ƒ } dD ]$}|| vr
tƒ }| | ¡ |  S q
| S )N)r|   r‚   rƒ   r�   )r™   r“   rŒ   )Zlsbinfor   r�   r   r   r   Úget_distro_information_  s    

rš   c                   C   s   t tƒ ƒ t tƒ ƒ d S r=   )r†   rš   r>   r   r   r   r   Útestj  s    
r›   Ú__main__)r   )N)Z
__future__r   rˆ   rf   rc   r)   rV   r   r&   r1   r<   Úsetr   ZsetsÚSetr>   rK   rP   rT   r[   ro   r{   r“   r™   rš   r›   Ú__name__r   r   r   r   Ú<module>   sD   

5ÿ
ý
!^!
