ó
é©Tc           @   sE  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z 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 Z d Z d Z d	 e j f d
 „  ƒ  YZ d e j f d „  ƒ  YZ d „  Z d „  Z d d d d „ Z d d d d „ Z d d d „ Z d e e d d d „ Z d S(   iÿÿÿÿN(   t   open_url(   t	   NoNetwork(   t   Deb822(   t   debian_supports3   http://qa.debian.org/madison.php?package=%s&text=ons   http://incoming.debian.org/s$   http://ftp-master.debian.org/new.822t
   BaseParserc           B   s/   e  Z d  „  Z d „  Z d „  Z d d „ Z RS(   c         C   s   t  j j |  ƒ d  |  _ d  S(   N(   t   sgmllibt
   SGMLParsert   __init__t   Nonet   savedata(   t   self(    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyR   1   s    c         C   s&   |  j  d  k	 r" |  j  | |  _  n  d  S(   N(   R	   R   (   R
   t   data(    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyt   handle_data8   s    c         C   s   d |  _  d  S(   Nt    (   R	   (   R
   (    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyt   save_bgn=   s    i    c         C   sA   |  j  } d  |  _  | r= | d  k	 r= d j | j ƒ  ƒ } n  | S(   Nt    (   R	   R   t   joint   split(   R
   t   modeR   (    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyt   save_end@   s
    		 (   t   __name__t
   __module__R   R   R   R   (    (    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyR   0   s   			t   IncomingParserc           B   s   e  Z d  d „ Z d „  Z RS(   t   i386c         C   sd   t  j j |  ƒ g  |  _ d  |  _ d t j | ƒ d } t j t j | ƒ d | d ƒ |  _	 d  S(   Ns   (?:all|t   )s	   _([^_]+)_s   .deb(
   R   R   R   t   foundR   R	   t   ret   escapet   compilet   package(   R
   R   t   arch(    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyR   G   s
    		c         C   sg   x` | D]X \ } } | j  ƒ  d k r+ q n  |  j j | ƒ } | r |  j j | j d ƒ ƒ q q Wd  S(   Nt   hrefi   (   t   lowerR   t   matchR   t   appendt   group(   R
   t   attrst   attribt   valuet   mob(    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyt   start_aN   s    (   R   R   R   R(   (    (    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyR   F   s   c         C   s"   |  s | r d St  j | |  ƒ S(   sh   Return 1 if upstream is newer than current, -1 if current is
    newer than upstream, and 0 if the same.i    (   R   t   version_compare(   t   currentt   upstream(    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyt   compare_versionsW   s     c         C   s   t  |  | ƒ d k r | S|  S(   Ni    (   R,   (   t   at   b(    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyt   later_version]   s    R   c         C   s@  | s d } n  t  j ƒ  } t |  } | d d j | ƒ 7} | d | 7} y t | ƒ } Wn; t k
 rn i  St j k
 r— } t j	 d	 I| IJi  SX| s¢ i  S| j
 ƒ  j d
 d ƒ j ƒ  } | j ƒ  i  }	 xi | j d ƒ D]X }
 |
 j d ƒ } t | ƒ d k rqà n  t  j j | d | d ƒ } | d |	 | <qà W|	 S(   Nt	   oldstablet   stablet   testingt   unstablet   experimentals   &s=t   ,s   &a=source,all,s   Warning:R   R   s   
t   |i   i   i   (   R0   R1   R2   R3   R4   (   t   utilst   get_archt   RMADISON_URLR   R    R   t   urllib2t	   HTTPErrort   syst   stderrt   readt   replacet   stript   closeR   t   lent   SUITES2DISTSt   get(   R   t   timeoutt   distst
   http_proxyR   t   urlt   paget   xt   contentt   versionst   linet   lt   dist(    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyt   get_versions_availableb   s2    	

c   
      C   sÞ   | d  k r d	 } n  y t t | | ƒ } Wn; t k
 r? i  St j k
 rh } t j d I| IJi  SX| ss i  Si  } x^ t j	 | ƒ D]M } | d |  k r‰ | d d | d d }	 t
 | d j ƒ  ƒ | |	 <q‰ q‰ W| S(
   Ns   unstable (new queue)s   Warning:t   Sourcet   Distributions    (t   QueueR   t   Version(   s   unstable (new queue)(   R   R    t   NEWQUEUE_URLR   R:   R;   R<   R=   R   t   iter_paragraphst   maxR   (
   R   RE   RF   RG   R   RI   RJ   RL   t   parat   k(    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyt   get_newqueue_available‡   s"    	!c   	      C   së   y t  t | | ƒ } Wn; t k
 r* d  St j k
 rS } t j d I| IJd  SX| s^ d  St |  | ƒ } x | D] } | j	 | ƒ qt W| j
 ƒ  y d  | j j _ Wn n X| j
 ƒ  | j rá | j } ~ t t | d ƒ S~ ~ d  S(   Ns   Warning:t   0(   R    t   INCOMING_URLR   R   R:   R;   R<   R=   R   t   feedRA   t   fpt   _sockt   recvR   t   reduceR/   (	   R   RE   RG   R   RI   RJ   t   parserRM   R   (    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyt   get_incoming_versionŸ   s2    

		c         C   sƒ  i  } | r7 t  |  | | | ƒ }	 |	 r7 |	 | d <q7 n  t |  | | | | ƒ }
 | j |
 ƒ | r® t j |  ƒ } | d  k r† |  } n  t | | | | | ƒ }
 | j |
 ƒ n  i  } d } x¤ | D]œ } | d k rd | k rø | j d d ƒ d } n | } t | | | ƒ } n t | | | ƒ } | d k rD| | | | <qÁ | d k  rÁ | d 7} qÁ qÁ W| ov| t	 | ƒ k } | | f S(   Nt   incomingi    t   :i   (
   Rc   RP   t   updateR7   t   get_source_nameR   RZ   R   R,   RB   (   R   t   versionRE   RF   t   check_incomingt   check_newqueueRG   R   t   availt   ivt   stufft
   srcpackaget   newt   newerRO   t   vert
   comparisont   too_new(    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyt   check_available½   s8    	(   R<   t   osR   R:   R   t   gct   timeR7   t   urlutilsR    t   reportbug.exceptionsR   t   debian.deb822R   t   debianR   R9   R\   RU   R   R   R   R,   R/   R   RP   RZ   Rc   t   TrueRt   (    (    (    s;   /usr/lib/python2.7/dist-packages/reportbug/checkversions.pyt   <module>   s0   		%