
~Mc           @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z y
 e Z Wn/ e k
 rk d  d l Z e j Z e j Z n Xd e	 f d     YZ
 d a d d  Z e d  Z d a e d  Z d a e d  Z d a e d  Z d a e d	  Z 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(   iNt   PyCentralEmptyValueErrorc           B   s   e  Z d  Z RS(   s   Python Central Value Error(   t   __name__t
   __module__t   __doc__(    (    (    s'   /usr/share/pycentral-data/pyversions.pyR       s   c         C   s   d d l  m } m } t s\ t j j d  rS |   } | j t d   | a q\ t	  n  t r |  r y t j
 d |   } Wn | k
 r t	  n X| Sd  S(   Ni(   t   SafeConfigParsert   NoOptionErrors!   /usr/share/python/debian_defaultst   DEFAULT(   t   ConfigParserR   R   t	   _defaultst   ost   patht   existst   readfpt   filet
   ValueErrort   gett   None(   t   nameR   R   t   configt   value(    (    s'   /usr/share/pycentral-data/pyversions.pyt   read_default   s    			
c         C   sY  |  j    j d  r4 t j |  d d d d }  n  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 } x |  j d
  D]} | j   } | d k r d | d <q n  | d k r| | d <q n  | j d t
    t j d  }	 |	 j |  }
 yw |
 j d  |
 j d  } } | d k r{| j |  n8 t } | | } g  | D] } | | |  r| ^ q} Wq t k
 rt d  q Xq W| r | r| | d <n  d | k rU| rt
 |  | d <q| d =qUn5 d | k rU| | d <| rU| j |  | d <qUn  | S(   Ns   python:versions=t   =t   maxspliti   is   >=s   <=s   <<t   version_onlyt   ,t   allt   currentt   current_extt   versionss   (>=|<=|<<|=)? *(\d\.\d)$i   s&   error parsing Python-Version attributet   vexact(   s   currents   current_ext(   NR   (   t   lowert
   startswitht   stringt   splitt   operatort   eqR   t   get   let   ltt   sett   supported_versionst   Truet   old_versionst   Falset   stript
   setdefaultt   ret   compilet   matcht   groupt   addt	   ExceptionR   t   union(   t   vstringt	   add_exactR"   t	   operatorst   vinfot   exact_versionst   version_ranget
   relop_seent   fieldt   vet   mt   opt   vt   filtopt   av(    (    s'   /usr/share/pycentral-data/pyversions.pyt   parse_versions"   sV    


,
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/pycentral-data/pyversions.pyR*   U   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/pycentral-data/pyversions.pyt   unsupported_versionsc   s    ,c   
      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.4s	   python2.5i   (   t   _supported_versionsR   R!   R,   R   t
   subprocesst   PopenR+   t   PIPERK   t   ImportErrorR	   t   popent   joinR   R   t   closeR.   t   sub(
   R   R   RE   t   cmdRO   t   pt   fdt   dependst   lineR@   (    (    s'   /usr/share/pycentral-data/pyversions.pyR(   q   s6    ,,
(	c         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]iRI   i   RJ   RK   s6   /usr/bin/python -c 'import sys; print sys.version[:3]'s   \d\.\d$t   pythons   default-versions	   python2.5s   /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   RO   RP   R+   RQ   RK   RR   RS   t   readlineR,   RU   R.   R0   R   R   R
   RT   (   R   t   linkRW   RO   RX   RY   R[   t   debian_default(    (    s'   /usr/share/pycentral-data/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(   NR6   R   i   R   R   R   R   s*   both `current' and `all' in version strings+   `current' version not in supported versionss   error in version strings   empty set of versionss   python%s(   R   RC   R)   R(   t   lenRc   t   intersectionR   R'   t   updateR    (   R5   R   R   R8   t	   supportedR   R@   (    (    s'   /usr/share/pycentral-data/pyversions.pyt   requested_versions   sH    			c   	      C   s7  d  } t |  d t } t d t  } t d t  } t d t  } | j |  t |  d k r d | k ry | } qd | k r t d t  g } qd | k r | d } q| d j	 |  } n3d | k r d | k r t
 d  nd | k rJd | k r| d j	 |  } n t |  } d | k r| j | d  qn d | k rt d t  } | | d k rt
 d	  n  | g } no d | k s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(   NR6   R   i   R   R   R   R   s*   both `current' and `all' in version strings+   `current' version not in supported versionss   error in version strings   empty set of versionss   python%s(   R   RC   R)   R*   RG   R(   t   extendRd   Rc   Re   R   R'   Rf   R    (	   R5   R   R   R8   t   oldt   unsupportedRg   R   R@   (    (    s'   /usr/share/pycentral-data/pyversions.pyt   requested_versions_for_runtime   sN    			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   Rg   RE   R   R@   (    (    s'   /usr/share/pycentral-data/pyversions.pyt   installed_versions  s    	0
t   ControlFileValueErrorc           B   s   e  Z RS(    (   R   R   (    (    (    s'   /usr/share/pycentral-data/pyversions.pyRq     s   t   MissingVersionValueErrorc           B   s   e  Z RS(    (   R   R   (    (    (    s'   /usr/share/pycentral-data/pyversions.pyRr     s   c         C   s  d } d } d } xt |   D] } | j   } | d k rh | d k rO q n  | d k r_ Pn  d } q | j d  r d } q | j d |  r | } q | j d  r | d k r t d  n  | j d d  d j   } q | j d	  r | | k r| j d d  d j   } qq q W| d k r;t d
  n  | d k rc| d k r_t d  n  | S| d k rt d |  n  | S(   s{   read the debian/control file, extract the XS-Python-Version
    field; check that XB-Python-Version exists for the package.t    t   Sources   Source:s	   Package: s   XS-Python-Version:s1   attribute XS-Python-Version not in Source sectionRM   i   s   XB-Python-Version:s   not a control files)   missing XS-Python-Version in control files)   missing XB-Python-Version for package `%sN(   R   R   R,   R   R   R!   Rq   Rr   (   t   fnt   pkgt   versiont   sversiont   sectionR[   (    (    s'   /usr/share/pycentral-data/pyversions.pyt   extract_pyversion_attribute   sD    				&	c         C   s]   g  |  j  d  D] } t |  ^ q } g  | j  d  D] } t |  ^ q8 } t | |  S(   Nt   .(   R!   t   intt   cmp(   t   ver1t   ver2t   it   v1t   v2(    (    s'   /usr/share/pycentral-data/pyversions.pyt   version_cmpI  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!   Rd   R   t   appendR   Ro   (   R5   R   R   t   py_supported_shortt   itemR@   t   verR   (    (    s'   /usr/share/pycentral-data/pyversions.pyt   requested_versions_bisN  s0    

 c         C   s   t  |   j   j d  } | S(   Ns   
(   R   R`   t   rstrip(   Ru   R5   (    (    s'   /usr/share/pycentral-data/pyversions.pyt   extract_pyversion_attribute_bisi  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XnT| j rt |  d k rd  j t | j   GHn| j rt |  d k rd  j t | j   GHn| j rt |  d k rt |  d k r d! } n
 | d } yCt j j |  r,| } y% t | d"  }	 t |	 | j  }
 Wq>t k
 rt j j d# | | f  t j d  q>t k
 r(t j j t j j |  d$  } t j j d% | | f  y" t |  }	 t |	 | j  }
 Wq)t  k
 r$t j j d& |  t | j  }
 q)Xq>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 versionsRg   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 XS-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   RL   s   debian/controlRt   s   %s: not a control file: %s, t
   pyversionss?   %s: missing XS-Python-Version in control file, fall back to %s
sD   %s: missing debian/pyversions file, fall back to supported versions
s   %s: %s
s   usage: %s %s
(!   t   optparseR   t
   add_optionR+   t
   parse_argsR	   R
   Rn   t   syst   argvR   Rd   Rc   R   R   t   exitRg   RT   R(   R   Rp   R   t   isfileRz   Rh   Rq   t   stderrt   writeRr   t   dirnameR   R   t   IOError(   R   R   t   parsert   optst   argst   programt   msgR   Ru   R5   t   vs(    (    s'   /usr/share/pycentral-data/pyversions.pyt   mainm  s|    	
!t   __main__(#   R	   R.   R    R   R'   t   SetTypet	   NameErrort   setst   SetR   R    R   R   R   R+   RC   RD   R*   RF   RG   RN   R(   R]   Rc   Rh   Rl   Rp   Rq   Rr   Rz   R   R   R   R   R   (    (    (    s'   /usr/share/pycentral-data/pyversions.pyt   <module>   s<   0
	2! ..	)			D