ÿØÿà JFIF      ÿÛ C      

!"$"$ÿÛ C  ÿÂ p " ÿÄ              ÿÄ             ÿÚ    ÕÔË®
(%	aA*‚XYD¡(J„¡E¢RE,P€XYae )(E¤²€B¤R¥	BQ¤¢ X«)X…€¤   @  

  ..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ C      

!"$"$ÿÛ C  ÿÂ p " ÿÄ              ÿÄ             ÿÚ    ÕÔË®
(%	aA*‚XYD¡(J„¡E¢RE,P€XYae )(E¤²€B¤R¥	BQ¤¢ X«)X…€¤   @  

  ..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     
<ac           @   s  d  d l  Z  d  d l Z d  d l m Z d  d l m Z d  d l m Z d  d l m	 Z	 d g Z
 d Z d Z e j e  Z e  j e  Z e j d	  Z e j d
  Z e s e re   Z e j d  e s e j d d  d Z n  e se j d d  j d d  Z qn  y# e d   e j d  D  Z Wn e k
 rYe j d  n Xy# e d   e j d  D  Z
 Wn e k
 re j d  n Xd d d  Z d   Z d   Z d   Z  d d  Z! d S(   iN(   t   SafeConfigParser(   t   environ(   t   exists(   t   GeneratorTypei   i   s   (-)?(\d\.\d+)(?:(-)(\d\.\d+)?)?t   DEBPYTHON_SUPPORTEDt   DEBPYTHON_DEFAULTs!   /usr/share/python/debian_defaultst   DEFAULTs   default-versioni   s   supported-versionst   pythont    c         c   s   |  ] } t  |  Vq d  S(   N(   t   int(   t   .0t   i(    (    s&   /usr/share/python/debpython/version.pys	   <genexpr>3   s    t   .s   cannot read debian_defaultsc         c   s4   |  ]* } t  d    | j   j d  D  Vq d S(   c         s   s   |  ] } t  |  Vq d  S(   N(   R	   (   R
   t   j(    (    s&   /usr/share/python/debpython/version.pys	   <genexpr>7   s    R   N(   t   tuplet   stript   split(   R
   R   (    (    s&   /usr/share/python/debpython/version.pys	   <genexpr>7   s   t   ,c            s&  t  |  t  r t |   }  n  |  s= t |   d d g k rL t t  } n |  d d k rb d n |  d  |  d d k r d	 n |  d      k r t  t k r  f n t    } n t    f d   t D  } | r t d   | D  } n% | t k r"t d   | D  } n  | S(
   s>  Return a set of requested and supported Python versions.

    :param available: if set to `True`, return installed versions only,
        if set to `False`, return requested versions that are not installed.
        By default returns all requested versions.
    :type available: bool

    >>> sorted(get_requested_versions([(2, 5), (3, 0)]))
    [(2, 7)]
    >>> sorted(get_requested_versions('')) == sorted(SUPPORTED)
    True
    >>> sorted(get_requested_versions([None, None])) == sorted(SUPPORTED)
    True
    >>> get_requested_versions([(5, 0), None])
    set([])
    i    i   ic   c         3   s1   |  ]' }  | k o    k  n r | Vq d  S(   N(    (   R
   t   v(   t   maxvt   minv(    s&   /usr/share/python/debpython/version.pys	   <genexpr>Y   s    c         s   s%   |  ] } t  d  |  r | Vq d S(   s   /usr/bin/python%d.%dN(   R   (   R
   R   (    (    s&   /usr/share/python/debpython/version.pys	   <genexpr>\   s    c         s   s%   |  ] } t  d  |  s | Vq d S(   s   /usr/bin/python%d.%dN(   R   (   R
   R   (    (    s&   /usr/share/python/debpython/version.pys	   <genexpr>_   s    N(   i    i    (   ic   ic   (	   t
   isinstancet
   basestringt   parse_vranget   listt   Nonet   sett	   SUPPORTEDR   t   False(   t   vranget	   availablet   versions(    (   R   R   s&   /usr/share/python/debpython/version.pyt   get_requested_versions=   s      'c         C   sL  |  d k r d St j |   } | s8 t d |    n  | j   } t |  j d  d k r t d   | d j d  D  } | | f Sd } } | d r | d } n | d } | d } | r t d	   | j d  D  n d } | rt d
   | j d  D  n d } | rB| rB| | k rBt d |    n  | | f S(   s  Return minimum and maximum Python version from given range.

    >>> parse_vrange('2.4-')
    ((2, 4), None)
    >>> parse_vrange('2.4-2.6')
    ((2, 4), (2, 6))
    >>> parse_vrange('2.4-3.0')
    ((2, 4), (3, 0))
    >>> parse_vrange('-2.7')
    (None, (2, 7))
    >>> parse_vrange('2.5')
    ((2, 5), (2, 5))
    >>> parse_vrange('') == parse_vrange('-') == (None, None)
    True
    R   t   -s   version range is invalid: %si   c         s   s   |  ] } t  |  Vq d  S(   N(   R	   (   R
   R   (    (    s&   /usr/share/python/debpython/version.pys	   <genexpr>~   s    i   R   i    c         s   s   |  ] } t  |  Vq d  S(   N(   R	   (   R
   R   (    (    s&   /usr/share/python/debpython/version.pys	   <genexpr>   s    c         s   s   |  ] } t  |  Vq d  S(   N(   R	   (   R
   R   (    (    s&   /usr/share/python/debpython/version.pys	   <genexpr>   s    (   R   R!   N(   NN(	   R   t   RANGE_REt   matcht
   ValueErrort   groupsR   t   countR   R   (   t   valueR#   R%   R   R   (    (    s&   /usr/share/python/debpython/version.pyR   e   s&    #




++c         C   s   t  |  t  r |  St  |  t t f  rS t  |  d t  rS d j d   |  D  Sg  } xM |  D]E } t  | t  r | j |  q` | j d j d   | D   q` W| S(   s   
    >>> vrepr(([2, 7], [3, 2]))
    ['2.7', '3.2']
    >>> vrepr(('2.6', '3.1'))
    ['2.6', '3.1']
    >>> vrepr('2.7')
    '2.7'
    >>> vrepr((2, 7))
    '2.7'
    i    R   c         s   s   |  ] } t  |  Vq d  S(   N(   t   str(   R
   R   (    (    s&   /usr/share/python/debpython/version.pys	   <genexpr>   s    c         s   s   |  ] } t  |  Vq d  S(   N(   R(   (   R
   R   (    (    s&   /usr/share/python/debpython/version.pys	   <genexpr>   s    (   R   R   R   R   R	   t   joint   append(   R'   t   resultt   version(    (    s&   /usr/share/python/debpython/version.pyt   vrepr   s    $c         C   s.   |  s
 d St  d   |  j d d  D  d  S(   s   Return pair of integers that represent version.

    >>> getver('2.5')
    (2, 5)
    >>> getver('2.6.4')
    (2, 6)
    >>> getver(None)
    ''
    R   c         s   s   |  ] } t  |  Vq d  S(   N(   R	   (   R
   R   (    (    s&   /usr/share/python/debpython/version.pys	   <genexpr>   s    R   i   (   R   R   (   R'   (    (    s&   /usr/share/python/debpython/version.pyt   getver   s    
c         C   s   g  } g  } x[ t  |   D]M } t | t  r= t |  } n  | t k  rY | j |  q | j |  q W| j t |   | r | r t |  S| S(   s  Return sorted list of versions starting with default Python
    version (if available) then list of suppored versions greater than default
    one followed by reversed list of older versions.

    List of versions sorted this way can be used in Depends field.

    :param vrepr: return string represenatations of versions, by default the
        same format is used as in :param:`versions`

    >>> debsorted([(2, 6), (3, 1), (2, 5), (2, 4), (2, 7)])[0] == DEFAULT
    True
    >>> debsorted(('2.4', '3.2', '2.6', '2.7'))[-1]
    (2, 4)
    >>> debsorted(set([(2, 1), (2, 2)]))
    [(2, 2), (2, 1)]
    >>> debsorted([(2, 1), (2, 2)], return_str=True)
    ['2.2', '2.1']
    (	   t   sortedR   R   R.   R   R*   t   extendt   reversedR-   (   R   t
   return_strR+   t   old_versionsR,   (    (    s&   /usr/share/python/debpython/version.pyt	   debsorted   s    
(   i   i   (   i   i   ("   t   loggingt   ret   ConfigParserR    t   osR   t   os.pathR   t   typesR   R   R   t   RANGE_PATTERNt   compileR"   t	   getLoggert   __name__t   logt   gett
   _supportedt   _defaultt   _configt   readt   replaceR   R   t	   Exceptiont	   exceptionR   R    R   R-   R.   R4   (    (    (    s&   /usr/share/python/debpython/version.pyt   <module>   sD   		#	(	,		