
SP5                 @   s7  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 i d d 6d d 6d d 6d	 d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6Z d a e	 e j
    Z e j   e	 e	 e e    d  Z e j d d  d! d" g  d d# d$  Z d% Z e j d&  Z d' d(   Z y e Wn' e k
 red  d l Z e j Z Yn Xd) d*   Z i d+ d, 6d- d. 6d/ d0 6d1 d2 6d3 d4 6Z d5 d6   Z d7 d8   Z d9 d:   Z d; d<   Z d= d> d? d= i d@ dA 6dB dC  Z dD dE   Z dF dG   Z  dH dI   Z! dJ dK   Z" e# dL k r3e"   n  d S)M    )print_functionNZbuzzz1.1Zrexz1.2Zboz1.3Zhammz2.0Zslinkz2.1Zpotatoz2.2Zwoodyz3.0Zsargez3.1Zetchz4.0Zlennyz5.0Zsqueezez6.0Zwheezyz7.0Zjessiez8.0zunknown.new.testing   Zstabletestingunstablesidc             C   sB   t  j d |   } | s | Sd | j d d  } t j | |  S)Nz(\d+)\.(\d+)(r(\d+))?z%s.%sr      )rematchgroupRELEASE_CODENAME_LOOKUPget)releaseunknownmZshortrelease r   -/usr/lib/python3/dist-packages/lsb_release.pylookup_codename7   s
    r   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 r[ | d k r5 d g S| d k rK d d g Sd d d g Sn|  d k r | d k r} d d g S| d k r d g S| d k r d g S| d k r d d d g Sd d d d g Sn5|  d k rb| d k r d d d g S| d k rd g S| d k rd d g S| d k r0d g S| d k rLd d d d g Sd d d d d g Sn |  d k r| d k rd d d d g S| d k rd g S| d k rd d d g S| d k rd d g S| d k rd d d d d g Sd d d d d d g Sn  |  g S)Nz3.0z2.0z3.1desktopqt4Zcxxz3.2printing	languages
multimediaz4.0Zsecurityz4.1)r   r   )r   r   r   )r   r   r   )r   r   r   r   )versionmoduler   r   r   valid_lsb_versionsD   sV    




r   c           
   C   s  t  j j   }  d |  d <t j d d d d g t j   d |  d t j d	 t j d
 d j   d j	 d  } | sy g  St
   } x| j t  j  D] } | s Pn  | j d d  \ } } t j d | d  d } x | j d  D] } t j |  } | sq n  | j   } | j d  r<d | }	 | j |	  q | d }	 x8 t | |	  D]' }
 |
 | d <d | }	 | j |	  qVWq Wq Wt |  } | j   | S)NCLC_ALLz
dpkg-queryz-fz${Version} ${Provides}
z-Wenvstdoutstderr	close_fdsTr   zutf-8 r   z[-+~],r   z%(module)s-%(version)s-%(arch)sr   )osenvironcopy
subprocessPopenPACKAGESsplitPIPEcommunicatedecodesetlinesepr   	modnameresearch	groupdictr   addr   listsort)C_envoutputmodulesliner   ZprovidespkgZmobZmgroupsr   vr   r   r   check_modules_installed   s6     
V	




r;   r   r:   originosuitea	componentclabellc             C   s   i  } |  j  d  } xh | D]` } | j  d d  } t |  d k r | d  d  \ } } | t k r| | | t | <q| q q W| S)Nr"   =r   r   )r)   len	longnames)dataZretvalbitsZbitZkvkr:   r   r   r   parse_policy_line   s    rJ   c             C   sM   |  d j  d  } | rI | t k rB t t t  t j |   S| Sn  d S)Nr   r>   r   )r   RELEASES_ORDERintrE   index)xr>   r   r   r   release_index   s    rO   c             C   sg   t  j d t d d t |   } t |  } y | | SWn& t k
 rb | | k | | k  SYn Xd  S)Nz^compare_release(x,y) is deprecated; please use the release_index(x) as key for sort() instead.
stacklevelr   )warningswarnDeprecationWarningrO   	TypeError)rN   yZ	suite_x_iZ	suite_y_ir   r   r   compare_release   s    rV   c           
   C   s  g  }  t  j j   } d | d <t j d d g d | d t j d t j d d	 j   d
 j d  } x | j d  D] } | j	   } t
 j d |  } | r t | j d   } n  | j d  ru | j d d  } t |  d k r|  j | t | d  f  qqu qu W|  S)Nr   r   z	apt-cachepolicyr   r   r   r    Tr   zutf-8
z(-?\d+)r   r   r!   )r#   r$   r%   r&   r'   r*   r+   r,   r)   stripr   r	   rL   r
   
startswithrE   appendrJ   )rG   r5   rW   r8   r   ZpriorityrH   r   r   r   parse_apt_policy   s     
F'r\   DebianmainZexperimentalzftp.debian-ports.orgzDebian Portsc                s   t    } | s d  S     f d d   | D } | s? d  S| j d d d   d d  | d d   f d	 d   | D } | j d t  | d d
 S)Nc                s   g  |  ] } | d  j  d d   k r` | d  j  d d   k r` | d  j  d d   k s | d  j  d d    k r | d  j  d d    j  | d  j  d d   k r |  q S)r   r<    r@   rB   )r   ).0rN   )alternate_olabelsr@   rB   r<   r   r   
<listcomp>   s   	 z*guess_release_from_apt.<locals>.<listcomp>keyc             S   s   |  d S)Nr   r   )tupler   r   r   <lambda>   s    z(guess_release_from_apt.<locals>.<lambda>reverseTr   c                s&   g  |  ] } | d    k r |  q S)r   r   )r`   rN   )max_priorityr   r   rb      s   	 r   )r\   r4   rO   )r<   r@   ZignoresuitesrB   ra   Zreleasesr   )ra   r@   rB   rg   r<   r   guess_release_from_apt   s    	"rh   c           !   C   s  i  }  d |  d <t  j j d d  } t  j j |  ry t |  z } xp | D]h } yM | j d d  \ } } | j   } | j   } | d k r | |  d <n  WqP t	 k
 r YqP XqP WWd  QXWqt
 k
 r} z) t d | d	 t |  d
 t j WYd  d  } ~ XqXn  t  j   d } | d, k r?d | |  d <n@ | d k r\d | |  d <n# | d- k ru| |  d <n
 d |  d <d |  |  d <t  j j d d  } t  j j |  ry+ t |   }	 |	 j   j   }
 Wd  QXWnO t
 k
 r0} z/ t d | d	 t |  d
 t j d }
 WYd  d  } ~ Xn X|
 d d  j   stt |
 d  } |  j i |
 d 6| d 6 q|
 j d  r|
 j d  j   j   d k r|
 j d  a n  d  |  d <q|
 |  d <n  |  j d  st   } | r| j d!  }
 |
 d" k rP| j d#  d$ k rP| j d%  d& k rPd  }
 | j i d' d( 6 n  |
 rht |
 d  } n- | j d( d'  }
 |
 d k rt } n d) } |  j i |
 d 6| d 6 qn  |  j d  r|  d d* |  7<n  |  j d  r|  d d+ |  7<n  |  S).Nr]   IDZLSB_ETC_DPKG_ORIGINS_DEFAULTz/etc/dpkg/origins/defaultz: r   ZvendorzUnable to open :filer   LinuxHurdNetBSDzGNU/ZOSZFreeBSDzGNU/k	GNU/LinuxGNU/kFreeBSDZGNUz%(ID)s %(OS)sDESCRIPTIONZLSB_ETC_DEBIAN_VERSIONz/etc/debian_versionr   zn/aRELEASECODENAMEz/sidr   ztesting/unstabler   z1.0r<   zDebian PortsrB   zftp.debian-ports.orgr   r>   r   z %(RELEASE)sz (%(CODENAME)s))rl   rm   rn   )ro   rp   )r#   r$   r   pathexistsopenr)   lowerrY   
ValueErrorIOErrorprintstrsysr   unamereadisalphar   updateendswithrstripTESTING_CODENAMErh   )distinfoZetc_dpkg_origins_defaultZdpkg_origins_filer8   headerZcontentmsgZkernZetc_debian_versionZdebian_versionr   ZcodenameZrinfor   r   r   guess_debian_release   sz    
:
$!
	6	!r   c              C   sX  i  }  t  j j d d  } t  j j |  rTy t |   } x | D] } | j   } | sd qF n  d | k rv qF n  | j d d  \ } } | j d  rF | d d   } | j d  r | j	 d  r | d d  } n  | r | j   |  | <q qF qF WWd  QXWqTt
 k
 rP} z) t d | d	 t |  d
 t j WYd  d  } ~ XqTXn  |  S)NZLSB_ETC_LSB_RELEASEz/etc/lsb-releaserD   r   ZDISTRIB_   "zUnable to open rj   rk   )r#   r$   r   rt   ru   rv   rY   r)   rZ   r   ry   rz   r{   r|   r   )r   Zetc_lsb_releaseZlsb_release_filer8   varargr   r   r   r   get_lsb_informationY  s*    $:r   c              C   sH   t    }  x8 d D], } | |  k r t   } | j |   | Sq W|  Sd  S)Nri   rr   rs   rq   )zIDzRELEASEzCODENAMEzDESCRIPTION)r   r   r   )Zlsbinforc   r   r   r   r   get_distro_informationr  s    		r   c               C   s   t  t    t  t    d  S)N)rz   r   r;   r   r   r   r   test}  s    r   __main__)$Z
__future__r   r|   r&   r#   r   rQ   r   r   r3   itemsrK   r4   zipextendr   r(   compiler/   r   r-   	NameErrorZsetsSetr;   rF   rJ   rO   rV   r\   rh   r   r   r   r   __name__r   r   r   r   <module>   sd   

	5(	
[