³ò
SÏíHc           @   sÎ  d  d k  Z  d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k	 Z	 d  d k
 Z
 d  d k Td „  Z d „  Z d „  Z d d  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(&   iÿÿÿÿN(   t   *c   
         s]  t  i i ƒ  i ƒ  } | d j o' t  i i t d ƒ ƒ t  i d ƒ n xQ t  i i ƒ  i ƒ  } | p Pn | i d ƒ o t	 | t
 d ƒ ƒ |  _ qL qL h  ‰  g  } x› t  i i ƒ  D]Š } | p Pn | i ƒ  \ } } } } }	 | d j p | d j o q¹ n |	 d j o | i | ƒ q¹ |	 d j o q¹ q¹ |	 ˆ  | <q¹ Wt ‡  f d	 †  | ƒ S(
   Ns	   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**c            s   ˆ  |  S(    (    (   t   pkg(   t	   filenames(    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   <lambda>S   s    (   t   syst   stdint   readlinet   rstript   stderrt   writet   _t   exitt
   startswitht   intt   lent   quiett	   readlinest   splitt   appendt   map(
   t   configt   versiont   linet   ordert   pkglinet   pkgnamet
   oldversiont   comparet
   newversiont   filename(    (   R   s-   /usr/share/apt-listchanges/apt_listchanges.pyt   read_apt_pipeline*   s4    
  
c         C   së   d t  d ƒ |  | f GHt i i d ƒ } d | _ t i i | _ t i i ƒ  } | i | ƒ t | i	 t
 i ƒ  d p d d ƒ ƒ } t i i | d ƒ | d <|  | d	 <| i | ƒ t i d
 d ƒ } | i | i ƒ  ƒ | i ƒ  d  S(   Ns   apt-listchanges: s   Mailing %s: %ss   utf-8t   8biti   t   asciit   replacet   Subjectt   Tos   /usr/sbin/sendmail -oi -tt   w(   R   t   emailt   Charsett   body_encodingt   QPt   header_encodingt   Messaget   set_charsett   unicodet   decodet   localet	   getlocalet   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_changesU   s    	)
c         C   sb  h  t  d <t d <t d <t d <t d <t d <} |  d j o( t i i t	 d
 ƒ d |  ƒ d }  n |  d j o8 t
 i i d ƒ o$ t i i t	 d ƒ d ƒ d }  n |  d j ov t
 i i d ƒ oY y t d ƒ } | i | |  <Wq5t j
 o) } t i i t	 d ƒ | ƒ d }  q5Xq9d }  n | i |  ƒ p d  Sn | |  | | ƒ S(   Nt   textt   pagert   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
(   RC   RD   s	   xterm-w3m(   R?   R@   RA   RB   t   xterm_pagert   xterm_browserR   R
   R   R   R4   t   patht   existst   environt   has_keyt
   __import__t   gtk2t   ImportErrort   None(   t   namet   packagesR   t	   frontendsRE   t   e(    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   make_frontendf   s2    				
!

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(   RS   R   (   t   selfRS   R   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   __init__   s    	c         C   s   d  S(   N(    (   RX   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   update_progress‘   s    c         C   s   d  S(   N(    (   RX   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   progress_done”   s    c         C   s   d  S(   N(    (   RX   R?   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   display_output—   s    c         C   s   g  } xy | i  d ƒ D]h } y | i d ƒ } Wn" t j
 o | i d ƒ } n X| i | i t i ƒ  d p d d ƒ ƒ q Wd i | ƒ S(   Ns   
s   utf-8s	   iso8859-1i   R"   R#   (   R   R/   t   UnicodeErrorR   t   encodeR0   R1   t   join(   RX   R?   t   newtextR   t   uline(    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   _renderš   s     .c         C   s   d S(   Ni   (    (   RX   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt   confirm¨   s    c         C   s   d  S(   N(    (   RX   R?   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyt	   set_title«   s    (	   t   __name__t
   __module__RY   RZ   R[   R\   Rb   Rc   Rd   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRW   Œ   s   						t
   ttyconfirmc           B   s   e  Z d  „  Z RS(   c         C   s…   y t  d d ƒ } Wn t j
 o } d Sn X| i d t d ƒ ƒ | i ƒ  | i ƒ  } | d j p t i t i	 t i
 ƒ | ƒ S(   Ns   /dev/ttys   r+iÿÿÿÿs   apt-listchanges: s   Do you want to continue? [Y/n] s   
(   t   opent   IOErrorR   R   t   flushR   t   ret   searchR0   t   nl_langinfot   YESEXPR(   RX   t   ttyRU   t   response(    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRc   ¯   s    	
"(   Re   Rf   Rc   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRg   ®   s   t   simpleprogressc           B   s   e  Z d  „  Z d „  Z RS(   c         C   sV   |  i  i d j o d  Sn t |  d ƒ p' d |  _ t i i t d ƒ d ƒ n d  S(   Ni   t   message_printeds   Reading changelogss   ...
(   R   R   t   hasattrRr   R   R
   R   R   (   RX   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRZ   »   s
    	c         C   s   d  S(   N(    (   RX   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR[   Ã   s    (   Re   Rf   RZ   R[   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRq   º   s   	RA   c           B   s   e  Z RS(    (   Re   Rf   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRA   Æ   s   R?   c           B   s   e  Z d  „  Z RS(   c         C   s   t  i i | ƒ d  S(   N(   R   t   stdoutR   (   RX   R?   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR\   Ê   s    (   Re   Rf   R\   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR?   É   s   t   fancyprogressc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s‹   t  |  d ƒ p d |  _ d |  _ n |  i d 7_ t d ƒ d |  i d |  i } t | ƒ |  _ t i i | d ƒ t i i	 ƒ  d  S(   Nt   progressi    i   s   Reading changelogss   ... %d%%id   s   (
   Rs   Rv   t   line_lengthR   RS   R   R   Rt   R   Rj   (   RX   R   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRZ   Î   s    	"c         C   sh   t  |  d ƒ oT t i i d |  i d ƒ t i i t d ƒ d t d ƒ d ƒ t i i ƒ  n d  S(   NRw   t    s   s   Reading changelogss   ... t   Dones   
(   Rs   R   Rt   R   Rw   R   Rj   (   RX   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR[   Ú   s    ((   Re   Rf   RZ   R[   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRu   Í   s   	t
   runcommandc           B   s)   e  Z e i Z d  Z d „  Z d „  Z RS(   t    c         C   só   |  i  t i j o t i ƒ  d j o d  Sq2 n t i d |  i ƒ } | i |  i | ƒ ƒ | i	 ƒ  |  i
 ƒ  d | i } t i t i d d d | ƒ } | d j o" t d | d t | ƒ ƒ ‚ n |  i  t i j o t i d ƒ n d  S(	   Ni    t   suffixRx   s   /bin/sht   shs   -cs   Subprocess s    exited with status (   t   modeR4   t   P_NOWAITt   forkt   tempfilet   NamedTemporaryFileR|   R   Rb   Rj   t   get_commandRR   t   spawnlt   P_WAITt   OSErrort   strR   R   (   RX   R?   t   tmpt   shellcommandt   status(    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR\   ä   s    
"c         C   s   |  i  S(   N(   t   command(   RX   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRƒ   ö   s    (   Re   Rf   R4   R…   R~   R|   R\   Rƒ   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRz   à   s   		R@   c           B   s   e  Z d  „  Z RS(   c         G   s9   t  t i |  g t | ƒ ƒ |  i i d d ƒ |  _ d  S(   NR@   s   sensible-pager(   t   applyRW   RY   t   listR   t   getR‹   (   RX   t   args(    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRY   ú   s    (   Re   Rf   RY   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR@   ù   s   t   xtermc           B   s   e  Z d  „  Z d „  Z RS(   c         G   sE   t  t i |  g t | ƒ ƒ t i |  _ |  i i d d ƒ |  _	 d  S(   NR   s   x-terminal-emulator(
   RŒ   RW   RY   R   R4   R   R~   R   RŽ   R   (   RX   R   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRY   ÿ   s    c         C   s   |  i  d |  i S(   Ns    -T apt-listchanges -e (   R   t   xterm_command(   RX   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRƒ     s    (   Re   Rf   RY   Rƒ   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR   þ   s   	RH   c           B   s   e  Z d  „  Z RS(   c         G   s9   t  t i |  g t | ƒ ƒ |  i i d d ƒ |  _ d  S(   NR@   s   sensible-pager(   RŒ   R   RY   R   R   RŽ   R‘   (   RX   R   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRY     s    (   Re   Rf   RY   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRH     s   t   htmlc           B   sŒ   e  Z d  Z e i d e i ƒ Z e i d e i ƒ Z d Z e i d e i ƒ Z	 e i d e i ƒ Z
 d Z e i 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      	      s4  t  i ƒ  } | i d ƒ | i ˆ  i ƒ | i d ƒ xä | i d ƒ D]Ó } y | i d ƒ } Wn" t j
 o | i d ƒ } n X| i d ƒ i d d ƒ i d d	 ƒ i d
 d ƒ } ˆ  i	 i
 ‡  f d †  | ƒ } ˆ  i i
 ‡  f d †  | ƒ } ˆ  i i
 d | ƒ } | i | d ƒ qF W| i d ƒ | i ƒ  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   ˆ  i  i ˆ  i |  i d  ƒ ƒ S(   i    (   t	   lp_bug_ret   subt
   lp_bug_fmtt   group(   t   m(   RX   (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR   5  s    c            s   ˆ  i  i ˆ  i |  i d  ƒ ƒ S(   i    (   t   bug_reR–   t   bug_fmtR˜   (   R™   (   RX   (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR   6  s    s    <a href="mailto:\g<0>">\g<0></a>s   </pre></body></html>(   t	   cStringIOt   StringIOR   t   titleR   R/   R]   R^   R#   t   lp_bug_stanza_reR–   t   bug_stanza_ret   email_ret   getvalue(   RX   R?   t   htmltextR   Ra   (    (   RX   s-   /usr/share/apt-listchanges/apt_listchanges.pyRb     s,     (   Re   Rf   R|   Rk   t   compilet   IRŸ   R•   R—   R    Rš   R›   R¡   Rž   Rb   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyR’     s   RB   c           B   s   e  Z d  „  Z d „  Z RS(   c         G   s9   t  t i |  g t | ƒ ƒ |  i i d d ƒ |  _ d  S(   NRB   s   sensible-browser(   RŒ   R@   RY   R   R   RŽ   R‹   (   RX   R   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRY   >  s    c         C   s   | |  _  d  S(   N(   Rž   (   RX   R?   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRd   A  s    (   Re   Rf   RY   Rd   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRB   =  s   	RI   c           B   s   e  Z d  „  Z RS(   c         G   s9   t  t i |  g t | ƒ ƒ |  i i d d ƒ |  _ d  S(   NRB   s   sensible-browser(   RŒ   R   RY   R   R   RŽ   R‘   (   RX   R   (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRY   E  s    (   Re   Rf   RY   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pyRI   D  s   (    (    (    (    (    (    (   R   R4   t   os.pathRk   R0   t   email.MessageR'   t   email.Headert   email.CharsetRœ   R   t   ALChacksR    R>   RV   RW   Rg   Rq   RA   R?   Ru   Rz   R@   R   RH   R’   RB   RI   (    (    (    s-   /usr/share/apt-listchanges/apt_listchanges.pys   <module>   s4   
	+		&"	1