ó
Ç¡µRc           @   s½  d  d l  Z  d  d l Z d  d l Z y
 e Z Wn/ e k
 r_ d  d l Z e j Z e j Z n Xd a	 d d „ Z
 e d „ Z d a e d „ Z d a e d „ Z g  e  j j d d ƒ j d ƒ D]" Z e j ƒ  rÁ d	 e j ƒ  ^ qÁ a e d
 „ Z d	 e  j j d d ƒ a t d k r#d a n  e d „ Z e d „ Z e d „ Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z  e d „ Z! d „  Z" d „  Z# e$ d k r¹e# ƒ  n  d S(   iÿÿÿÿNc         C   sÆ   d d l  m } m } t s‚ t j j d ƒ r‚ | ƒ  } y | j t d ƒ ƒ Wn% t	 k
 ru } | GHt
 j d ƒ n X| a q‚ n  t rÂ |  rÂ y t j d |  ƒ } Wn | k
 r½ t ‚ n X| Sd  S(   Niÿÿÿÿ(   t   SafeConfigParsert   NoOptionErrors!   /usr/share/python/debian_defaultsi   t   DEFAULT(   t   ConfigParserR    R   t	   _defaultst   ost   patht   existst   readfpt   filet   IOErrort   syst   exitt   gett
   ValueErrort   None(   t   nameR    R   t   configt   msgt   value(    (    s   /usr/share/python/pyversions.pyt   read_default   s"    	
c         C   sO  d d  l  } i | j d  6| j d 6| j d 6| j d 6| j d 6} i  } t g  ƒ } t t d t ƒ t	 d t ƒ ƒ } t
 } xJ|  j d ƒ D]9} | j ƒ  } | d k r¼ d | d <qŽ n  | d k rØ | | d	 <qŽ n  | j d t ƒ  ƒ t j d ƒ }	 |	 j | ƒ }
 y¡ |
 s!t d ƒ ‚ n  |
 j d ƒ |
 j d ƒ } } | j d ƒ \ } } | d k rq| j | ƒ n8 t } | | } g  | D] } | | | ƒ rˆ| ^ qˆ} WqŽ t k
 rÆt d ‚ qŽ XqŽ W| r| rä| | d <n  d | k rK| r	t | ƒ | d <q| d =qKn5 d | k rK| | d <| rK| j | ƒ | d <qKn  | S(   Niÿÿÿÿt   =s   >=s   <=s   <<t   version_onlyt   ,t   allt   currentt   current_extt   versionss   (>=|<=|<<|=)? *(\d\.\d)$s&   error parsing Python-Version attributei   i   t   .t   vexact(   s   currentR   (   NR   (   t   operatort   eqR   t   get   let   ltt   sett   supported_versionst   Truet   old_versionst   Falset   splitt   stript
   setdefaultt   ret   compilet   matchR   t   groupt   addt	   Exceptiont   union(   t   vstringt	   add_exactR   t	   operatorst   vinfot   exact_versionst   version_ranget
   relop_seent   fieldt   vet   mt   opt   vt   vmajt   vmint   filtopt   av(    (    s   /usr/share/python/pyversions.pyt   parse_versions    sX    


,
c         C   s„   t  s[ y8 t d ƒ } g  | j d ƒ D] } | j ƒ  ^ q% a  Wq[ t k
 rW g  a  q[ Xn  |  r| g  t  D] } | d ^ qh St  Sd  S(   Ns   old-versionsR   i   (   t   _old_versionsR   R(   R)   R   (   R   R   t   sR=   (    (    s   /usr/share/python/pyversions.pyR&   V   s    ,c         C   s„   t  s[ y8 t d ƒ } g  | j d ƒ D] } | j ƒ  ^ q% a  Wq[ t k
 rW g  a  q[ Xn  |  r| g  t  D] } | d ^ qh St  Sd  S(   Ns   unsupported-versionsR   i   (   t   _unsupported_versionsR   R(   R)   R   (   R   R   RD   R=   (    (    s   /usr/share/python/pyversions.pyt   unsupported_versionsd   s    ,t   DEBPYTHON_SUPPORTEDt    R   s   python%sc   
      C   s�  t  sty8 t d ƒ } g  | j d ƒ D] } | j ƒ  ^ q% a  Wqtt k
 rpd d d d g } y= d d  l } | j | d d	 d
 t d | j ƒ} | j	 } Wn) t
 k
 rÈ t j d j | ƒ ƒ } n Xd  } xE | D]= } | j d ƒ rÖ | j d d	 ƒ d	 j ƒ  j d ƒ } qÖ qÖ W| j ƒ  | rXg  | D] } t j d d | ƒ ^ q.} | a  n  t  sqd d g a  qqqtXn  |  r•g  t  D] }	 |	 d ^ q�St  Sd  S(   Ns   supported-versionsR   s   /usr/bin/apt-caches   --no-all-versionst   shows
   python-alliÿÿÿÿt   bufsizei   t   shellt   stdoutt    s   Depends:t   :s   \s*(\S+)[ (]?.*s   \1s	   python2.6s	   python2.7i   (   t   _supported_versionsR   R(   R)   R   t
   subprocesst   PopenR'   t   PIPERL   t   ImportErrorR   t   popent   joinR   t
   startswitht   closeR+   t   sub(
   R   R   RD   t   cmdRP   t   pt   fdt   dependst   lineR=   (    (    s   /usr/share/python/pyversions.pyR$   t   s6    ,,
(	t   DEBPYTHON_DEFAULTt   pythonc         C   s[  t  sEy t j d ƒ a  } WnÁ t k
 rà d  a  yL d d d g } d d  l } | j | d d d t d | j ƒ} | j	 } Wn  t
 k
 r¡ t j d	 ƒ } n X| j ƒ  j ƒ  } | j ƒ  t j d
 | ƒ rá d | a  qá n Xy t d ƒ } Wn t k
 r
d } n Xt  | t j j d | ƒ f k r<t d | ‚ n  | a  n  |  rSt  d St  Sd  S(   Ns   /usr/bin/pythons   -cs!   import sys; print sys.version[:3]iÿÿÿÿRJ   i   RK   RL   s6   /usr/bin/python -c 'import sys; print sys.version[:3]'s   \d\.\d$R_   s   default-versions	   python2.6s   /usr/binsZ   /usr/bin/python does not match the python default version. It must be reset to point to %si   (   t   _default_versionR   t   readlinkt   OSErrorR   RP   RQ   R'   RR   RL   RS   RT   t   readlineR)   RW   R+   R-   R   R   R   RU   (   R   t   linkRY   RP   RZ   R[   R]   t   debian_default(    (    s   /usr/share/python/pyversions.pyt   default_version˜   s6    

!	c         C   s  d  } t |  d t ƒ} t d t ƒ } t | ƒ d k rž d | k rN | } qÑd | k ro t d t ƒ g } qÑd | k rˆ | d } qÑ| d j | ƒ } n3d | k rÂ d | k rÂ t d ‚ nd | k rd | k rð | d j | ƒ } n t | ƒ } d | k rÑ| j	 | d ƒ qÑn² d | k rbt d t ƒ } | | d k rVt d	 ‚ n  | g } no d | k szd | k rÈt ƒ  } d | k r¥| d j | ƒ } n  d | k rÑ| j	 | d ƒ qÑn	 t d
 ‚ | sæt d ƒ ‚ n  | rð| Sg  | D] } d | ^ q÷Sd  S(   NR3   R   i   R   R   R   R   s*   both `current' and `all' in version strings+   `current' version not in supported versionss$   No Python versions in version strings+   computed set of supported versions is emptys   python%s(
   R   RB   R%   R$   t   lenRf   t   intersectionR   R#   t   update(   R2   R   R   R5   t	   supportedR   R=   (    (    s   /usr/share/python/pyversions.pyt   requested_versions¸   sH    			c         C   sŽ   d d  l  } t ƒ  } g  | j  d ƒ D]0 } t j j | ƒ | k r% t j j | ƒ ^ q% } | j ƒ  |  r† g  | D] } | d ^ qr S| Sd  S(   Niÿÿÿÿs   /usr/bin/python[0-9].[0-9]i   (   t   globR$   R   R   t   basenamet   sort(   R   Rl   Rj   RD   R   R=   (    (    s   /usr/share/python/pyversions.pyt   installed_versionsâ   s    	0
t   ControlFileValueErrorc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s   /usr/share/python/pyversions.pyRp   î   s   t   MissingVersionValueErrorc           B   s   e  Z RS(    (   Rq   Rr   (    (    (    s   /usr/share/python/pyversions.pyRs   ð   s   c         C   sÎ  d } d } d } y t |  d ƒ } Wn/ t k
 rV } d |  | f GHt j d ƒ n Xx| D]} | j ƒ  } | d k r§ | d k rŽ q^ n  | d k rž Pn  d } q^ | j d ƒ r¿ d } q^ | j d | ƒ rÛ | } q^ | j ƒ  j d ƒ r'| d k rt d
 ‚ n  | j	 d d ƒ d j ƒ  } q^ | j ƒ  j d ƒ r^ | | k rj| j	 d d ƒ d j ƒ  } qjq^ q^ W| d k r†t
 d ‚ n  | d k r®| d k rªt d ‚ n  | S| d k rÊt d | ‚ n  | S(   s“   read the debian/control file, extract the X-Python-Version or
    XS-Python-Version field; check that XB-Python-Version exists for the
    package.t   rs   Cannot open %s: %si   RH   t   Sources   Source:s	   Package: s   xs-python-version:s   x-python-version:s3   attribute X(S)-Python-Version not in Source sectionRN   i   s   xb-python-version:s   not a control files&   no X(S)-Python-Version in control files$   no XB-Python-Version for package `%sN(   s   xs-python-version:s   x-python-version:(   R   R	   R
   R   R   R)   RV   t   lowerR   R(   Rp   Rs   (   t   fnt   pkgt   versiont   sversiont   sectiont   fpR   R]   (    (    s   /usr/share/python/pyversions.pyt   extract_pyversion_attributeó   sN    				&	c         C   s]   g  |  j  d ƒ D] } t | ƒ ^ q } g  | j  d ƒ D] } t | ƒ ^ q8 } t | | ƒ S(   NR   (   R(   t   intt   cmp(   t   ver1t   ver2t   it   v1t   v2(    (    s   /usr/share/python/pyversions.pyt   version_cmp"  s    ((c         C   sa  g  } t  d t ƒ } x |  j d ƒ D]ï } | j d ƒ } t | ƒ d k rð | d sg | d | d <n  | d s‚ | d | d <n  x� | D]` } yF t | | d ƒ d k rÔ t | | d ƒ d k rÔ | j | ƒ n  Wq‰ t k
 rè q‰ Xq‰ Wq% | d | k r% | j | d ƒ q% q% W| j t ƒ | s7t d ‚ n  | s]g  | D] } d | ^ qD} n  | S(	   NR   R   t   -i   i    iÿÿÿÿs   empty set of versionsR_   (   R$   R%   R(   Rg   R…   t   appendR   Rn   (   R2   R   R   t   py_supported_shortt   itemR=   t   verR‚   (    (    s   /usr/share/python/pyversions.pyt   requested_versions_bis'  s0    

 c         C   s   t  |  ƒ j ƒ  j d ƒ } | S(   Ns   
(   R	   Rc   t   rstrip(   Rw   R2   (    (    s   /usr/share/python/pyversions.pyt   extract_pyversion_attribute_bisB  s    c          C   sñ  d d l  m }  d } |  d | ƒ } | j d d d d d	 d
 d d ƒ| j d d d d d	 d
 d d ƒ| j d d d d d	 d
 d d ƒ| j d d d d d	 d
 d d ƒ| j d d d d d t d	 d
 d d ƒ| j ƒ  \ } } t j j t j	 d ƒ } | j
 r`t | ƒ d k r`y t | j ƒ GHWqít k
 r\} d | G| GHt j d ƒ qíXn�| j r•t | ƒ d k r•d  j t | j ƒ ƒ GHnX| j rÊt | ƒ d k rÊd  j t | j ƒ ƒ GHn#| j rÆt | ƒ d k rÆt | ƒ d k r d! } n
 | d } y|t j j | ƒ re| } y% t | d" ƒ }	 t |	 | j ƒ }
 Wqwt k
 r„t j j d# | | f ƒ t j d ƒ qwt k
 r(t j j t j j | ƒ d$ ƒ } t j j d% | | f ƒ y" t | ƒ }	 t |	 | j ƒ }
 Wqbt  k
 r$t j j d& | ƒ t | j ƒ }
 qbXqwt k
 ra} t j j d' | | f ƒ t j d( ƒ qwXn t | | j ƒ }
 d  j |
 ƒ GHWqít k
 rÂ} t j j d' | | f ƒ t j d ƒ qíXn' t j j d) | | f ƒ t j d ƒ d  S(*   Niÿÿÿÿ(   t   OptionParsersk   [-v] [-h] [-d|--default] [-s|--supported] [-i|--installed] [-r|--requested <version string>|<control file>]t   usages   -ds	   --defaultt   helps    print the default python versiont   actiont
   store_truet   destt   defaults   -ss   --supporteds#   print the supported python versionsRj   s   -rs   --requesteds“   print the python versions requested by a build; the argument is either the name of a control file or the value of the X(S)-Python-Version attributet	   requesteds   -is   --installeds-   print the installed supported python versionst	   installeds   -vs	   --versions    print just the version number(s)R   i    s   %s:i   RM   s   debian/controlRu   s   %s: not a control file: %s, t
   pyversionssA   %s: missing X(S)-Python-Version in control file, fall back to %s
sD   %s: missing debian/pyversions file, fall back to supported versions
s   %s: %s
i   s   usage: %s %s
(!   t   optparseRŽ   t
   add_optionR'   t
   parse_argsR   R   Rm   R   t   argvR”   Rg   Rf   R   R   R   Rj   RU   R$   R–   Ro   R•   t   isfileR}   Rk   Rp   t   stderrt   writeRs   t   dirnameR�   R‹   R
   (   RŽ   R�   t   parsert   optst   argst   programR   R   Rw   R2   t   vst   e(    (    s   /usr/share/python/pyversions.pyt   mainF  s‚    	
!t   __main__(%   R   R+   R   R#   t   SetTypet	   NameErrort   setst   SetR   R   R   R'   RB   RC   R&   RE   RF   t   environR   R(   RŠ   R)   RO   R$   R`   Rf   Rk   Ro   R   Rp   Rs   R}   R…   R‹   R�   R¦   Rq   (    (    (    s   /usr/share/python/pyversions.pyt   <module>   s@   $
	5""!	 *	/			G