U
    xùb]5:  ã                   @   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Z
e d	¡Zd
d„ Zze W n" ek
r–   d dlZejZY nX 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k
r    t}Y nX ztd|  ¡  ƒ}W n |k
rR   tdƒ}Y nX 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
 ddddddg¡ | ¡  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>.   s       z#get_distro_info.<locals>.<dictcomp>c                 S   s   t | d ƒS ©Nr   )Úfloat)Únr   r   r   Ú<lambda>0   ó    z!get_distro_info.<locals>.<lambda>©Úkeyé   Zdebianzunknown.new.testingZ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   z`lsb-core lsb-cxx lsb-graphics lsb-desktop lsb-languages lsb-multimedia lsb-printing lsb-securityzIlsb-(?P<module>[a-z0-9]+)-(?P<arch>[^ ]+)(?: \(= (?P<version>[0-9.]+)\))?c                 C   sŒ  | dkrddgS | dkrD|dkr&dgS |dkr6ddgS dddgS nB| dkrš|dkr\ddgS |dkrjdgS |d	krxdgS |dkrŠdddgS ddddgS  nì| d
kr|dkr¶ddd
gS |dkrÄdgS |d	krÔdd
gS |dkrâd
gS |dk rødddd
gS ddddd
gS n~| dkr†|dkr(ddd
dgS |dkr8dgS |d	krLdd
dgS |dkr^d
dgS |dkrvdddd
dgS ddddd
dgS | gS )Nz3.0z2.0z3.1)ÚdesktopÚqt4Zcxxz3.2r2   r3   )ZprintingÚ	languagesZ
multimediaz4.0Zsecurityz4.1r   )r   Úmoduler   r   r   Úvalid_lsb_versionsL   sV    










r6   c                  C   s   t j ¡ } d| d< tjddddgt ¡  | tjtjdd ¡ d	  	d
¡}|sPg S t
ƒ }| t j¡D ]¨}|sp q| dd¡\}}t d|d¡d	 }| d¡D ]l}t |¡}|s°qœ| ¡ }| d¡rÖd| }	| |	¡ qœ|d }	t||	ƒD ]}
|
|d< d| }	| |	¡ qèqœqbt|ƒ}| ¡  |S )NÚCÚLC_ALLz
dpkg-queryz-fz${Version} ${Provides}
z-WT©ÚenvÚstdoutÚstderrZ	close_fdsr   úutf-8ú r   z[-+~]ú,r   z%(module)s-%(version)s-%(arch)sr5   )ÚosÚenvironÚcopyÚ
subprocessÚPopenÚPACKAGESÚsplitÚPIPEÚcommunicateÚdecodeÚsetÚlinesepr)   Ú	modnamereÚsearchÚ	groupdictr-   Úaddr6   r   r   )ÚC_envÚoutputÚmodulesÚliner   ZprovidesZpkgZmobZmgroupsr5   Úvr   r   r   Úcheck_modules_installedˆ   sH    
 üüü

rU   r   r$   ÚsuiteÚ	componentÚlabel)rT   ÚoÚaÚcÚlc                 C   sX   i }|   d¡}|D ]@}|  dd¡}t|ƒdkr|d d… \}}|tkr||t| < q|S )Nr?   ú=r   r(   )rF   ÚlenÚ	longnames)ÚdataZretvalÚbitsÚbitZkvÚkrT   r   r   r   Úparse_policy_line³   s    
rd   c                 C   sV   | d   d¡}|rR|tkr0tttƒt |¡ ƒS z
t|ƒW S  tk
rP   Y dS X dS )Nr   rV   r   )r-   r   r+   r^   Úindexr   Ú
ValueError)ÚxrV   r   r   r   Úrelease_index¾   s    
rh   c                 C   sT   t jdtdd t| ƒ}t|ƒ}z
|| W S  tk
rN   ||k||k   Y S X d S )Nz^compare_release(x,y) is deprecated; please use the release_index(x) as key for sort() instead.r(   )Ú
stacklevel)ÚwarningsÚwarnÚDeprecationWarningrh   Ú	TypeError)rg   ÚyZ	suite_x_iZ	suite_y_ir   r   r   Úcompare_releaseÊ   s    
ro   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-8r8   z	apt-cacheÚpolicyTr9   r   r=   Ú
z(-?\d+)r   r.   r>   )r@   rA   rB   rC   rD   rG   rH   rI   rF   Ústripr)   r*   r+   r,   Ú
startswithr^   Úappendrd   )r`   rP   rp   rS   r0   Úpriorityra   r   r   r   Úparse_apt_policyÔ   s.    
 
üüü
rv   Ú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¡ˆkrX|d    dd¡ˆkrX|d    dd¡ˆks’|d    dd¡ˆ kr|d    dd¡ˆ   |d    dd¡¡kr|‘qS )r   r$   Ú rV   rW   rX   )r-   ©r   rg   )Úalternate_olabelsrW   ÚignoresuitesrX   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   r{   )Úmax_priorityr   r   r~     s      r   r   )rv   r   rh   )r$   rW   r}   rX   r|   Zreleasesr   )r|   rW   r}   rX   r   r$   r   Úguess_release_from_apté   s    	r‚   c               
   C   s  i } d| d< t j dd¡}t j |¡rÒzlt|ƒZ}|D ]N}z4| dd¡\}}| ¡ }| ¡ }|dkrl|| d< W q6 t	k
r‚   Y q6X q6W 5 Q R X W n> t
k
rÐ } z td| d	 t|ƒtjd
 W 5 d }~X Y nX t| d ƒ t  ¡ d }|dkrd| | d< n4|dkrd| | d< n|dkr.|| d< nd| d< d|  | d< t j dd¡}t j |¡r2z$t|ƒ}	|	 ¡  ¡ }
W 5 Q R X W nD t
k
rÆ } z$td| d	 t|ƒtjd
 d}
W 5 d }~X Y nX |
dd…  ¡ söt|
dƒ}|  |
|dœ¡ n<|
 d¡r*|
 d¡ ¡ dkr |
 d¡ad| d< n|
| d< |  d¡sÒtƒ }|rÒ| d¡}
|
d kr| d!¡d"kr| d#¡d$krd }
| 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$   rx   rX   ry   rV   r   r   z %(RELEASE)sz (%(CODENAME)s))r@   rA   r-   ÚpathÚexistsr   rF   r   rr   rf   r   ÚprintÚstrÚsysr<   r&   ÚunameÚreadÚisalphar1   ÚupdateÚendswithÚrstripr!   r‚   )ÚdistinfoZetc_dpkg_origins_defaultZdpkg_origins_filerS   ÚheaderZcontentÚmsgZkernZetc_debian_versionZdebian_versionr.   ÚcodenameZrinfor   r   r   Úguess_debian_release
  s|    
.









*
rš   c               
   C   s.  i } t j dd¡}t j |¡r*zÈt|ƒ¶}|D ]ª}| ¡ }|sBq0d|k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 5 Q R X W n@ tk
r( } z td| d t|ƒtjd W 5 d }~X Y nX | S )NZLSB_OS_RELEASEz/usr/lib/os-releaser]   r   ú"éÿÿÿÿZ
VERSION_IDr‰   ZVERSION_CODENAMErŠ   rƒ   ZPRETTY_NAMErˆ   r„   r…   r†   )r@   rA   r-   r‹   rŒ   r   rr   rF   rs   r”   Útitler   r   rŽ   r   r<   )r–   Z
os_releaseZos_release_filerS   ÚvarÚargr˜   r   r   r   Úget_os_releaseh  s4    
.r    c                  C   s4   t ƒ } dD ]$}|| k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 )N)r   r¡   rU   r   r   r   r   Útest”  s    
r¢   Ú__main__)r   )N)Z
__future__r   r   rC   r@   r)   rj   r   r&   r1   rE   ÚcompilerL   r6   rJ   r   ZsetsÚSetrU   r_   rd   rh   ro   rv   r‚   rš   r    r¡   r¢   Ú__name__r   r   r   r   Ú<module>   sJ   


5( ÿ
ý
!^!
