o
    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yJ   d dlZejZY nw 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 dS )-é    )Úprint_functionNÚDebianc                 C   sÂ   zt }W n ty   t}Y nw z
td|  ¡  ƒ}W n |y'   tdƒ}Y nw 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 )ÚversionÚ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   s    z!get_distro_info.<locals>.<lambda>©Úkeyé   Údebianzunknown.new.testing)Ústablezproposed-updatesÚtestingztesting-proposed-updatesÚunstableÚsid)ÚFileNotFoundErrorÚ	NameErrorÚIOErrorÚopenÚlowerÚcsvÚ
DictReaderÚRELEASE_CODENAME_LOOKUPÚlistÚitemsÚRELEASES_ORDERÚsortÚzipÚTESTING_CODENAMEÚextendÚclose)ÚoriginÚFileNotFoundExceptionÚcsvfileÚreaderr   r   r	   Úget_distro_info   s&   þþ
r+   c                 C   sR   t  d| ¡}|s
|S t| d¡ƒdk rd| 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ÚmÚshortreleaser   r   r	   Úlookup_codename<   s   r7   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   sJ  | dkrddgS | dkr|dv rdgS |dkrddgS g d¢S | dkrE|dkr+ddgS |d	kr2dgS |d
v r9dgS |dkrAg d¢S g d¢S | dkrs|dkrQg d¢S |d	krXdgS |d
v r`ddgS |dkrgdgS |dkrog d¢S g d¢S | dkr¢|dkrg d¢S |d	kr†dgS |d
v rŽg d¢S |dkr–ddgS |dkržg d¢S g d¢S | gS )Nú3.0ú2.0ú3.1)ÚdesktopÚqt4Úcxx)r9   r8   r:   ú3.2r;   r<   )ÚprintingÚ	languagesÚ
multimedia)r8   r:   r>   )r9   r8   r:   r>   ú4.0)r:   r>   rB   Úsecurity)r8   r:   r>   rB   )r9   r8   r:   r>   rB   ú4.1)r:   r>   rB   rD   )r>   rB   rD   )r8   r:   r>   rB   rD   )r9   r8   r:   r>   rB   rD   r   )r   Úmoduler   r   r	   Úvalid_lsb_versionsL   sV   rF   c                  C   s  t j ¡ } d| d< tjg d¢t ¡  | tjtjdd� ¡ d  	d¡}|s&g S t
ƒ }| t j¡D ]S}|s5 nN| dd	¡\}}t d
|d	¡d }| d¡D ]6}t |¡}|sUqK| ¡ }| d¡rhd| }	| |	¡ qK|d }	t||	ƒD ]}
|
|d< d| }	| |	¡ qqqKq/t|ƒ}| ¡  |S )NÚCÚLC_ALL)z
dpkg-queryz-fz${Version} ${Provides}
z-WT©ÚenvÚstdoutÚstderrÚ	close_fdsr   úutf-8ú r   z[-+~]ú,r   z%(module)s-%(version)s-%(arch)srE   )ÚosÚenvironÚcopyÚ
subprocessÚPopenÚPACKAGESÚsplitÚPIPEÚcommunicateÚdecodeÚsetÚlinesepr.   Ú	modnamereÚsearchÚ	groupdictr2   ÚaddrF   r   r"   )ÚC_envÚoutputÚmodulesÚliner   ÚprovidesÚpkgÚmobÚmgroupsrE   Úvr   r   r	   Úcheck_modules_installedˆ   sJ   üüü

ýôrj   r   r'   ÚsuiteÚ	componentÚlabel)ri   ÚoÚaÚcÚlc                 C   sX   i }|   d¡}|D ] }|  dd¡}t|ƒdkr)|d d… \}}|tv r)||t| < q	|S )NrP   ú=r   r-   )rW   ÚlenÚ	longnames)ÚdataÚretvalÚbitsÚbitÚkvÚkri   r   r   r	   Úparse_policy_line³   s   
€r{   c                 C   sT   | d   d¡}|r(|tv rtttƒt |¡ ƒS zt|ƒW S  ty'   Y dS w dS )Nr   rk   r   )r2   r!   r0   rs   Úindexr   Ú
ValueError)Úxrk   r   r   r	   Úrelease_index¾   s   
ÿr   c                 C   sN   t jdtdd� t| ƒ}t|ƒ}z|| W S  ty&   ||k||k   Y S w )Nz^compare_release(x,y) is deprecated; please use the release_index(x) as key for sort() instead.r-   )Ú
stacklevel)ÚwarningsÚwarnÚDeprecationWarningr   Ú	TypeError)r~   ÚyÚ	suite_x_iÚ	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 ]1}| 	¡ }t
 d
|¡}|r:t| d¡ƒ}| d¡rV| dd¡}t|ƒdkrV|  |t|d ƒf¡ q%| S )NzC.UTF-8rH   z	apt-cacheÚpolicyTrI   r   rN   Ú
z(-?\d+)r   r3   rO   )rQ   rR   rS   rT   rU   rX   rY   rZ   rW   Ústripr.   r/   r0   r1   Ú
startswithrs   Úappendr{   )ru   ra   r‰   rd   r5   Úpriorityrw   r   r   r	   Úparse_apt_policyÔ   s.   
üüü
€r�   ÚmainÚexperimentalúDebian Ports©zftp.ports.debian.orgzftp.debian-ports.orgc                    sx   t ƒ }|sd S ‡ ‡‡‡‡fdd„|D ƒ}|sd S |jdd„ dd� |d d ‰‡fdd„|D ƒ}|jtd	� |d d
 S )Nc              	      sš   g | ]I}|d    dd¡ˆkr,|d    dd¡ˆvr,|d    dd¡ˆkr,|d    dd¡ˆksI|d    dd¡ˆ v rK|d    dd¡ˆ   |d    dd¡¡v r|‘qS )r   r'   Ú rk   rl   rm   )r2   ©r   r~   )Úalternate_olabelsrl   Úignoresuitesrm   r'   r   r	   Ú
<listcomp>ó   s    &úz*guess_release_from_apt.<locals>.<listcomp>c                 S   s   | d S r   r   )Útupler   r   r	   r   ÿ   s    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   )r�   r"   r   )r'   rl   r—   rm   r–   Úreleasesr   )r–   rl   r—   rm   r›   r'   r	   Úguess_release_from_apté   s   	r�   c               
   C   s6  i } d| d< t j dd¡}t j |¡rrz>t|ƒ�0}|D ]%}z| dd¡\}}| ¡ }| ¡ }|dkr6|| d< W q t	y@   Y qw W d   ƒ n1 sKw   Y  W n  t
yq } ztd| d	 t|ƒtjd
� W Y d }~nd }~ww t| d ƒ t  ¡ d }|dv r‰d| | d< n|dkr”d| | d< n|dv r�|| d< nd| d< d|  | d< t j dd¡}t j |¡�r)zt|ƒ�}	|	 ¡  ¡ }
W d   ƒ n1 sËw   Y  W n" t
yó } ztd| d	 t|ƒtjd
� d}
W Y d }~nd }~ww |
dd…  ¡ �st|
dƒ}|  |
|dœ¡ n|
 d¡�r%|
 d¡ ¡ dk�r |
 d¡ad| d< n|
| d< |  d¡�sytƒ }|�ry| d¡}
|
d k�rX| d!¡d"k�rX| d#¡d$v �rXd }
| d%d&i¡ |
�rat|
dƒ}n| d%d&¡}
|
dk�rot}nd'}|  |
|dœ¡ |  d¡�r‰| d  d(|  7  < |  d¡�r™| d  d)|  7  < | S )*Nr   ÚIDÚLSB_ETC_DPKG_ORIGINS_DEFAULTz/etc/dpkg/origins/defaultz: r   ÚvendorúUnable to open ú:©Úfiler   )ÚLinuxÚHurdÚNetBSDzGNU/ÚOSÚFreeBSDzGNU/k)z	GNU/LinuxzGNU/kFreeBSDÚGNUz%(ID)s %(OS)sÚDESCRIPTIONÚLSB_ETC_DEBIAN_VERSIONz/etc/debian_versionr4   zn/a)ÚRELEASEÚCODENAMEz/sidr   ztesting/unstabler­   r®   r   z1.0r'   r’   rm   r“   rk   r   r   z %(RELEASE)sz (%(CODENAME)s))rQ   rR   r2   ÚpathÚexistsr   rW   r   r‹   r}   r   ÚprintÚstrÚsysrL   r+   ÚunameÚreadÚisalphar7   ÚupdateÚendswithÚrstripr$   r�   )ÚdistinfoÚetc_dpkg_origins_defaultÚdpkg_origins_filerd   ÚheaderÚcontentÚmsgÚkernÚetc_debian_versionÚdebian_versionr3   ÚcodenameÚrinfor   r   r	   Úguess_debian_release
  s’   
€ÿùÿ€
(€ÿ

ÿ€€þ




*
rÅ   c               
   C   sH  i } t j dd¡}t j |¡r¢zqt|ƒ�b}|D ]U}| ¡ }|s qd|vr%q| dd¡\}}| d¡r=| 	d¡r=|dd… }|rl|dkrJ| ¡ | d< q|d	krU| ¡ | d
< q|dkrb| ¡  
¡ | d< q|dkrl| ¡ | d< qW d   ƒ W | S 1 syw   Y  W | S  ty¡ } ztd| d t|ƒtjd� W Y d }~| S d }~ww | S )NÚLSB_OS_RELEASEz/usr/lib/os-releaserr   r   ú"éÿÿÿÿÚ
VERSION_IDr­   ÚVERSION_CODENAMEr®   rž   ÚPRETTY_NAMEr«   r¡   r¢   r£   )rQ   rR   r2   r¯   r°   r   r‹   rW   rŒ   r¸   Útitler   r±   r²   r³   rL   )rº   Ú
os_releaseÚos_release_filerd   ÚvarÚargr¿   r   r   r	   Úget_os_releaseh  sF   
€ëÿæý&€ýrÑ   c                  C   s4   t ƒ } dD ]}|| vrtƒ }| | ¡ |  S q| S )N)rž   r­   r®   r«   )rÑ   rÅ   r·   )Úlsbinfor   rº   r   r   r	   Úget_distro_information‰  s   
ýrÓ   c                   C   s   t tƒ ƒ t tƒ ƒ d S ©N)r±   rÓ   rj   r   r   r   r	   Útest”  s   
rÕ   Ú__main__)r   rÔ   )Ú
__future__r   r³   rT   rQ   r.   r�   r   r+   r7   rV   Úcompiler]   rF   r[   r   ÚsetsÚSetrj   rt   r{   r   rˆ   r�   r�   rÅ   rÑ   rÓ   rÕ   Ú__name__r   r   r   r	   Ú<module>   sN   


5
þ(ÿ

ý!^!
ÿ