
}k^c           @   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(   iNc         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   sp  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
 } xk|  j d  D]Z} | 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  \ } } t |  d k rvt d   n  | d k r| j |  n8 t } | | } g  | D] } | | |  r| ^ q} Wq t k
 rt d  q Xq W| r7| r| | d <n  d | k rl| r*t |  | d <q4| d =qln5 d | k rl| | d <| rl| j |  | d <qln  | S(   Nit   =s   >=s   <=s   <<t   version_onlyt   ,t   allt   currentt   current_extt   versionss   (>=|<=|<<|=)? *(\d\.\d)$s&   error parsing Python-Version attributei   i   t   .s>   error parsing Python-Version attribute, Python 3 version foundt   vexact(   R   R   (   NR   (   t   operatort   eqR   t   get   let   ltt   sett   supported_versionst   Truet   old_versionst   Falset   splitt   stript
   setdefaultt   ret   compilet   matchR   t   groupt   intt   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    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   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   RE   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-allit   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   PIPERM   t   ImportErrorR   t   popent   joinR   t
   startswitht   closeR+   t   sub(
   R   R   RE   t   cmdRQ   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/python2s   -cs!   import sys; print sys.version[:3]iRK   i   RL   RM   s7   /usr/bin/python2 -c 'import sys; print sys.version[:3]'s   \d\.\d$R`   s   default-versions	   python2.7s   /usr/bins\   /usr/bin/python2 does not match the python2 default version. It must be reset to point to %si   (   t   _default_versionR   t   readlinkt   OSErrorR   RQ   RR   R'   RS   RM   RT   RU   t   readlineR)   RX   R+   R-   R   R   R   RV   (   R   t   linkRZ   RQ   R[   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(   NR4   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   RC   R%   R$   t   lenRg   t   intersectionR   R#   t   update(   R3   R   R   R6   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(   Nis   /usr/bin/python[0-9].[0-9]i   (   t   globR$   R   R   t   basenamet   sort(   R   Rm   Rk   RE   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.pyRq      s   t   MissingVersionValueErrorc           B   s   e  Z RS(    (   Rr   Rs   (    (    (    s   /usr/share/python/pyversions.pyRt      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   RI   t   Sources   Source:s	   Package: s   xs-python-version:s   x-python-version:s3   attribute X(S)-Python-Version not in Source sectionRO   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)   RW   t   lowerR   R(   Rq   Rt   (   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(   R/   t   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    is   empty set of versionsR`   (   R$   R%   R(   Rh   R   t   appendR   Ro   (   R3   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	   Rd   t   rstrip(   Rx   R3   (    (    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 versionsRk   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   RN   s   debian/controlRv   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   Rn   R   t   argvR   Rh   Rg   R   R   R   Rk   RV   R$   R   Rp   R   t   isfileR~   Rl   Rq   t   stderrt   writeRt   t   dirnameR   R   R
   (   R   R   t   parsert   optst   argst   programR   R   Rx   R3   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'   RC   RD   R&   RF   RG   t   environR   R(   R   R)   RP   R$   Ra   Rg   Rl   Rp   R   Rq   Rt   R~   R   R   R   R   Rr   (    (    (    s   /usr/share/python/pyversions.pyt   <module>   s@   $
	5""!	 *	/			G