
^;Tc           @   s  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	 Z	 d  d l
 Z
 d  d l Td   Z d   Z d   Z d d" d     YZ d e f d	     YZ d
 d# d     YZ d d$ d     YZ d e e f d     YZ d e e e f d     YZ d d% d     YZ d d& d     YZ d e e e e f d     YZ d e e e e f d     YZ d e f d     YZ d d' d     YZ d e e f d     YZ d  e e f d!     YZ d S((   iN(   t   *c         C   sO  |  j  r t j j d  n  t j j   j   } |  j  rQ t j j d |  n  | d k r t j j t d   t j d  n  xm t j j   j   } |  j  r t j j d |  n  | s Pn  | j	 d  r t
 | t d   |  _ q q i  } g  } g  } x t j j   D] } | j   } |  j  rGt j j d |  n  | sQPn  | j   \ } } }	 }
 } |	 d k s| d k rqn  | d	 k r| j |  q| d
 k s| d k r| j |  q| | | <qWx | D] } | | =qWg  } x5 | D]- } | | k r| j | |  | | =qqW| j t | j     | S(   Ns   APT pipeline messages:
s   	%s
s	   VERSION 2sr   Wrong or missing VERSION from apt pipeline
(is Dpkg::Tools::Options::/usr/bin/apt-listchanges::Version set to 2?)
i   s   quiet=t   <t   -s   **CONFIGURE**s
   **REMOVE**s	   **ERROR**(   t   debugt   syst   stderrt   writet   stdint   readlinet   rstript   _t   exitt
   startswitht   intt   lent   quiett	   readlinest   splitt   appendt   extendt   sortedt   values(   t   configt   versiont   linet	   filenamest   toconfigt   toremovet   pkglinet   pkgnamet
   oldversiont   comparet
   newversiont   filenamet   pkgt   ordered_filenames(    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   read_apt_pipeline*   sV    		
		c         C   s   d t  d  |  | f GHt j j d  } d | _ t j j | _ t j j   } | j |  t | j	 t
 j   pw d d   } d | d <t j j | d  | d	 <|  | d
 <| j |  t j d d  } | j | j    | j   d  S(   Ns   apt-listchanges: s   Mailing %s: %ss   utf-8t   8bitt   asciit   replaces   auto-generateds   Auto-Submittedt   Subjectt   Tos   /usr/sbin/sendmail -oi -tt   w(   R
   t   emailt   Charsett   body_encodingt   QPt   header_encodingt   Messaget   set_charsett   unicodet   decodet   localet   getpreferredencodingt   Headert   set_payloadt   ost   popenR   t	   as_stringt   close(   t   addresst   changest   subjectt   charsett   messaget   fh(    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   mail_changesm   s    	$

c         C   sM  i t  d 6t d 6t d 6t d 6t d 6t d 6t d 6} |  d k rj t j j	 t
 d  d |   d }  n  |  d k r t j j d  r t j j	 t
 d  d  d }  n  |  d k r)t j j d  r y t d  } | j | |  <Wq&t k
 r} t j j	 t
 d  |  d }  q&Xq)d }  n  | j |   s<d  S| |  | |  S(   Nt   textt   pagert   debconft   mailt   browsers   xterm-pagers   xterm-browsert   newtt   w3ms	   xterm-w3ms*   The %s frontend is deprecated, using pagers   
s   /usr/sbin/sendmails;   The mail frontend needs a installed 'sendmail', using pagert   gtkt   DISPLAYt   AptListChangesGtks   The gtk frontend needs a working python-gtk2 and python-glade2.
Those imports can not be found. Falling back to pager.
The error is: %s
(   RH   RI   s	   xterm-w3m(   RC   RD   RE   RF   RG   t   xterm_pagert   xterm_browserR   R   R   R
   R8   t   patht   existst   environt   has_keyt
   __import__t   gtk2t   ImportErrort   None(   t   namet   packagesR   t	   frontendsRJ   t   e(    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   make_frontend   s4    

			t   frontendc           B   sG   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   RX   R   (   t   selfRX   R   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   __init__   s    	c         C   s   d  S(   N(    (   R]   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   update_progress   s    c         C   s   d  S(   N(    (   R]   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   progress_done   s    c         C   s   d  S(   N(    (   R]   RC   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   display_output   s    c         C   s   g  } xr | j  d  D]a } y | j d  } Wn  t k
 rQ | j d  } n X| j | j t j   pm d d   q Wd j |  S(   Ns   
s   utf-8s	   iso8859-1R&   R'   (   R   R3   t   UnicodeErrorR   t   encodeR4   R5   t   join(   R]   RC   t   newtextR   t   uline(    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   _render   s    )c         C   s   d S(   Ni   (    (   R]   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   confirm   s    c         C   s   d  S(   N(    (   R]   RC   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt	   set_title   s    (	   t   __name__t
   __module__R^   R_   R`   Ra   Rg   Rh   Ri   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR\      s   						RE   c           B   s   e  Z d    Z d   Z RS(   c         C   s   | |  _  d  S(   N(   t   title(   R]   RC   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRi      s    c   	      C   s  d d  l  } d d  l } d t j k s: t j d d k r> d  S| j  | j | j d  } | j t j d  | j   } | j   | j	 d | d |  } t
 j d d	  } t j | j   d
  | j d  xH | j d  D]7 } | j   r
| j d | d  q | j d  q W| j   | j d | j  | j   | j d  | j d d |  j  | j d d |  j  | j d  | j d d d  | j d d  | j   | j   d  S(   Nit   DEBIAN_FRONTENDt   passthroughi    t   DEBCONF_PIPEt   readR   t   prefixs   apt-listchanges-tmpi  s   Template: apt-listchanges/info
Type: title
Description: NEWS

Template: apt-listchanges/title
Type: title
Description: ${title}

Template: apt-listchanges/news
Type: note
Description: ${packages} packages
s   
s     s    .
t   x_loadtemplatefiles   apt-listchanges/infos   apt-listchanges/titleRl   s   apt-listchanges/newsRX   t   seent   falset   high(   t   socketRE   R8   RQ   t   AF_UNIXt   SOCK_STREAMt   connectt   makefileR;   t   Debconft   tempfilet   NamedTemporaryFilet   fchmodt   filenoR   R   t   stript   flusht   commandRW   t   infot   substRl   RX   t   settitlet   fsett   inputt   go(	   R]   RC   Rv   t   dct   sockt   dcfdt   dbt   tmpR   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRa      s8    "




(   Rj   Rk   Ri   Ra   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRE      s   	t
   ttyconfirmc           B   s   e  Z d    Z RS(   c         C   s   y t  d d  } Wn t k
 r) } d SX| j d t d   | j   | j   } | d k p~ t j t j	 t j
  |  S(   Ns   /dev/ttys   r+is   apt-listchanges: s   Do you want to continue? [Y/n] s   
(   t   opent   IOErrorR   R
   R   R   t   ret   searchR4   t   nl_langinfot   YESEXPR(   R]   t   ttyRZ   t   response(    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRh      s    
!(   Rj   Rk   Rh   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR      s   t   simpleprogressc           B   s   e  Z d    Z d   Z RS(   c         C   sO   |  j  j d k r d  St |  d  sK d |  _ t j j t d  d  n  d  S(   Ni   t   message_printeds   Reading changelogss   ...
(   R   R   t   hasattrR   R   R   R   R
   (   R]   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR_     s
    	c         C   s   d  S(   N(    (   R]   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR`   	  s    (   Rj   Rk   R_   R`   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR      s   	RF   c           B   s   e  Z RS(    (   Rj   Rk   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRF     s   RC   c           B   s   e  Z d    Z RS(   c         C   s   t  j j |  d  S(   N(   R   t   stdoutR   (   R]   RC   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRa     s    (   Rj   Rk   Ra   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRC     s   t   fancyprogressc           B   s   e  Z d    Z d   Z RS(   c         C   s   t  |  d  s$ d |  _ d |  _ n  |  j d 7_ t d  d |  j d |  j } t |  |  _ t j j | d  t j j	   d  S(   Nt   progressi    i   s   Reading changelogss   ... %d%%id   s   (
   R   R   t   line_lengthR
   RX   R   R   R   R   R   (   R]   R   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR_     s    	"c         C   sf   t  |  d  rb t j j d |  j d  t j j t d  d t d  d  t j j   n  d  S(   NR   t    s   s   Reading changelogss   ... t   Dones   
(   R   R   R   R   R   R
   R   (   R]   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR`      s    ((   Rj   Rk   R_   R`   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR     s   	t
   runcommandc           B   s)   e  Z e j Z d  Z d   Z d   Z RS(   t    c         C   s   |  j  t j k r+ t j   d k r+ d  Sn  t j d d d |  j  } | j |  j |   | j	   |  j
   d | j } t j t j d d d |  } | d k r t d	 | d
 t |    n  |  j  t j k r t j d  n  d  S(   Ni    Rq   s   apt-listchanges-tmpt   suffixR   s   /bin/sht   shs   -cs   Subprocess s    exited with status (   t   modeR8   t   P_NOWAITt   forkR|   R}   R   R   Rg   R   t   get_commandRW   t   spawnlt   P_WAITt   OSErrort   strR   R   (   R]   RC   R   t   shellcommandt   status(    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRa   *  s    
!c         C   s   |  j  S(   N(   R   (   R]   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR   <  s    (   Rj   Rk   R8   R   R   R   Ra   R   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR   &  s   		RD   c           B   s   e  Z d    Z RS(   c         G   sX   d t  j k r d t  j d <n  t t j |  g t |   |  j j d d  |  _ d  S(   Nt   LESSs   -P?e(q to quit)RD   s   sensible-pager(	   R8   RQ   t   applyR\   R^   t   listR   t   getR   (   R]   t   args(    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR^   @  s    (   Rj   Rk   R^   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRD   ?  s   t   xtermc           B   s   e  Z d    Z d   Z RS(   c         G   sE   t  t j |  g t |   t j |  _ |  j j d d  |  _	 d  S(   NR   s   x-terminal-emulator(
   R   R\   R^   R   R8   R   R   R   R   R   (   R]   R   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR^   G  s    c         C   s   |  j  d |  j S(   Ns    -T apt-listchanges -e (   R   t   xterm_command(   R]   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR   L  s    (   Rj   Rk   R^   R   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR   F  s   	RM   c           B   s   e  Z d    Z RS(   c         G   s9   t  t j |  g t |   |  j j d d  |  _ d  S(   NRD   s   sensible-pager(   R   R   R^   R   R   R   R   (   R]   R   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR^   P  s    (   Rj   Rk   R^   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRM   O  s   t   htmlc           B   s   e  Z d  Z e j d e j  Z e j d e j  Z d Z e j d e j  Z	 e j d e j  Z
 d Z e j d  Z d Z d	   Z RS(
   s   .htmls   (?:lp:?\s+\#\d+(?:,\s*\#\d+)*)s   (?P<linktext>#(?P<bugnum>\d+))s@   <a href="https://launchpad.net/bugs/\g<bugnum>">\g<linktext></a>sE   (?:closes:\s*(?:bug)?\#?\s?\d+(?:,\s*(?:bug)?\#?\s?\d+)*|(?<!">)#\d+)s   (?P<linktext>#?(?P<bugnum>\d+))s<   <a href="http://bugs.debian.org/\g<bugnum>">\g<linktext></a>sr   ([a-zA-Z0-9_\-\.]+)@(([[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)s   apt-listchanges outputc            s2  t  j   } | j d  | j   j  | j d  x | j d  D] } y | j d  } Wn  t k
 r | j d  } n X| j d  j d d  j d d	  j d
 d  }   j	 j
   f d   |  }   j j
   f d   |  }   j j
 d |  } | j | d  qF W| j d  | j   S(   Ns%   <html>
        <head>
        <title>s   </title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        </head>

        <body>
        <pre>s   
s   utf-8s	   iso8859-1t   &s   &amp;R   s   &lt;t   >s   &gt;c            s     j  j   j |  j d   S(   Ni    (   t	   lp_bug_ret   subt
   lp_bug_fmtt   group(   t   m(   R]   (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   <lambda>}  s    c            s     j  j   j |  j d   S(   Ni    (   t   bug_reR   t   bug_fmtR   (   R   (   R]   (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR   ~  s    s    <a href="mailto:\g<0>">\g<0></a>s   </pre></body></html>(   t	   cStringIOt   StringIOR   Rl   R   R3   Rb   Rc   R'   t   lp_bug_stanza_reR   t   bug_stanza_ret   email_ret   getvalue(   R]   RC   t   htmltextR   Rf   (    (   R]   s-   /usr/share/apt-listchanges/apt_listchanges.pyRg   d  s*    (   Rj   Rk   R   R   t   compilet   IR   R   R   R   R   R   R   Rl   Rg   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR   T  s   RG   c           B   s   e  Z d    Z d   Z RS(   c         G   s9   t  t j |  g t |   |  j j d d  |  _ d  S(   NRG   s   sensible-browser(   R   RD   R^   R   R   R   R   (   R]   R   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR^     s    c         C   s   | |  _  d  S(   N(   Rl   (   R]   RC   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRi     s    (   Rj   Rk   R^   Ri   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRG     s   	RN   c           B   s   e  Z d    Z RS(   c         G   s9   t  t j |  g t |   |  j j d d  |  _ d  S(   NRG   s   sensible-browser(   R   R   R^   R   R   R   R   (   R]   R   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR^     s    (   Rj   Rk   R^   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRN     s   (    (    (    (    (    (    (   R   R8   t   os.pathR   R4   t   email.MessageR+   t   email.Headert   email.CharsetR   R|   t   ALChacksR$   RB   R[   R\   RE   R   R   RF   RC   R   R   RD   R   RM   R   RG   RN   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   <module>   s6   
	C		'",	1