
    kd                        d Z dZd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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d
lmZ d Z ej8                  d      Z ej8                  d      ZdZej@                  ejB                  ejD                  ejF                  ejH                  ejJ                  ejL                  dZ' e(d      dz   Z) G d dejT                  jV                  jX                        Z- G d dejT                  jV                  j\                        Z/ G d de/      Z0 G d de1      Z2 G d de2      Z3 G d de3      Z4 G d de4      Z5 G d  d!e4      Z6y)"z$Progress handlers for APT operationsz%Sebastian Heinlein <devel@glatzor.de>)DaemonAcquireProgressDaemonOpenProgressDaemonInstallProgressDaemonDpkgInstallProgressDaemonForkProgressDaemonDpkgRecoverProgress    N)GLib   )enums)lock)mainloop)IsoCodesc                     | S N )ss    4/usr/lib/python3/dist-packages/aptdaemon/progress.py<lambda>r   *   s    a     zAptDaemon.WorkerzAptDaemon.Worker.TerminaliX  )install	configureremovetrigprocpurge	disappearupgrade   z\[[;?0-9]*[A-Za-z]c                   &    e Zd ZdZddZddZd Zy)r   z*Handles the progress of the cache opening.c                 :   t         j                  j                  j                  j	                  |        || _        dD cg c]  }|||z
  |z  z    c}| _        t        |      | _        | j                  j                  d      | _
        d| _        || _        yc c}w )aR  Initialize a new DaemonOpenProgress instance.

        Keyword arguments:
        transaction -- corresponding transaction D-Bus object
        begin -- begin of the progress range (defaults to 0)
        end -- end of the progress range (defaults to 100)
        quiet -- do not emit any progress information for the transaction
        )g      ?      ?g      ?      ?r!   r   N)aptprogressbase
OpProgress__init___transactionstepsfloatprogress_beginpopprogress_endquiet)selftransactionbeginendr-   modifiers         r   r&   zDaemonOpenProgress.__init__@   s     	$$--d3' 'EF # sU{h66 F
 $El JJNN1-
Fs   BNc                    |xs | j                   }|dk  rEt        | j                  |dz  | j                  | j                  z
  z  z         }| j                  |k(  ryd}|| _        | j
                  s|| j                  _        yy)zpCallback for progress updates.

        Keyword argument:
        percent - current progress in percent
        e   d   N)percentintr*   r,   r#   r-   r'   )r.   r6   r#   s      r   updatezDaemonOpenProgress.updateT   s     )T\\S=4..'C- --0C0CC2E E FH}}(H zz)1D& r   c                     | j                   | _        | j                   | _        	 | j                  j	                  d      | _         y#  t
        j                  d       Y yxY w)zXCallback after completing a step.

        Sets the progress range to the next interval.r   z0An additional step to open the cache is requiredN)r,   r#   r*   r(   r+   logwarningr.   s    r   donezDaemonOpenProgress.doneg   sO    
 ))"//	L $

q 1D	LKKJKs    A A)r   r5   Fr   )__name__
__module____qualname____doc__r&   r8   r=   r   r   r   r   r   <   s    4(2&Lr   r   c                   V    e Zd ZdZddZddZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)r   z-
    Handle the package download process
    c                     t         j                  j                  j                  j	                  |        || _        || _        || _        d| _        y )Nr   )r"   r#   r$   AcquireProgressr&   r/   r,   r*   r.   r/   r0   r1   s       r   r&   zDaemonAcquireProgress.__init__y   s?    ))2248&#r   c                    |j                   j                  t        j                  j                  k(  r(t
        j                  }|j                   j                  }n|j                   j                  t        j                  j                  k(  rt
        j                  }n|j                   j                  t        j                  j                  k(  rt
        j                  }n|j                   j                  t        j                  j                  k(  rt
        j                  }nR|j                   j                  t        j                  j                  k(  rt
        j                  }nt
        j                   }|j                   j                  t        j                  j                  k7  r-|j                   j"                  r|j                   j"                  }n/|j                   j$                  r|j                   j$                  }nd}|j&                  ||j(                  ||j                   j                  z  ||j                   j*                  z  |f| j,                  _        y )N )ownerstatusapt_pkgAcquireItem	STAT_DONEr   DOWNLOAD_DONEfilesizeSTAT_AUTH_ERRORDOWNLOAD_AUTH_ERRORSTAT_FETCHINGDOWNLOAD_FETCHING
STAT_ERRORDOWNLOAD_ERROR	STAT_IDLEDOWNLOAD_IDLEDOWNLOAD_NETWORK_ERROR
error_textmodeuri	shortdescpartialsizer/   progress_download)r.   item
total_sizecurrent_sizerI   msgs         r   _emit_acquire_itemz(DaemonAcquireProgress._emit_acquire_item   s   :: 3 3 = ==((F::..LZZ'"5"5"E"EE..FZZ'"5"5"C"CC,,FZZ'"5"5"@"@@))FZZ'"5"5"?"??((F 11FJJ!4!4!>!>>

%%**''CZZ__**//CCHHfdnn,,,4::111	.*r   c                 p   t               }|D ]Y  }|j                  j                  r&|j                  |j                  j                         ?|j                  |j                         [ |rL| j
                  j                  ddt        |            ddj                  |      iz  }|| j
                  _	        yy)$Emit the transaction status details.zDownloading %(files)sfiles N)
setrH   idaddr[   r/   ngettextlenjoinstatus_details)r.   itemsnamesr^   ra   s        r   _emit_status_detailsz*DaemonAcquireProgress._emit_status_details   s     	*Dzz}}		$**--(		$..)		*
 ""++,C,C,/J8;B;>88E?;LLC /2D+ r   c                 &    | j                  |       y)z<Invoked when an item is successfully and completely fetched.Nrb   r.   r^   s     r   r=   zDaemonAcquireProgress.done       %r   c                 &    | j                  |       y)z*Invoked when an item could not be fetched.Nrr   rs   s     r   failzDaemonAcquireProgress.fail   rt   r   c                 &    | j                  |       y)z0Invoked when some of the item's data is fetched.Nrr   rs   s     r   fetchzDaemonAcquireProgress.fetch   rt   r   c                 &    | j                  |       y)zInvoked when an item is confirmed to be up-to-date.

        Invoked when an item is confirmed to be up-to-date. For instance,
        when an HTTP download is informed that the file on the server was
        not modified.
        Nrr   rs   s     r   ims_hitzDaemonAcquireProgress.ims_hit   s     	%r   c                    | j                   j                  ry| j                  | j                  | j                  | j
                  | j                  | j                  f| j                   _        | j                  | j                  z   dz  t        | j
                  | j                  z         z  }t        | j                  |dz  | j                  | j                  z
  z  z         }| j                  |kD  rd| j                   _        n|| j                   _        || _        g }|j                  D ][  }|j                  s| j!                  |j                  |j"                  |j$                         |j'                  |j                         ] | j)                  |       t+        j,                         j/                         rEt+        j,                         j1                          t+        j,                         j/                         rEy)z'Callback to update progress informationFg      Y@r5   r4   T)r/   	cancelledcurrent_itemstotal_itemscurrent_bytestotal_bytescurrent_cpselapsed_timeprogress_detailsr)   r7   r*   r,   r#   workerscurrent_itemrb   r_   r`   appendrp   r	   main_context_defaultpending	iteration)r.   rH   r6   r#   rn   workers         r   pulsezDaemonAcquireProgress.pulse   s   %%-1-?-?-1-=-=-1-?-?-1-=-=-1-=-=-1->->-@) ''$*<*<<E))D,<,<<=>t**Ws]))D,?,??.A A B ==8#(+D%(0D%$DMmm 	.F&&##F$7$7$*$5$5$*$7$79 LL,,-	. 	!!%('')113%%'113 '')113r   c                 d    t         j                  | j                  _        d| j                  _        yz*Callback at the beginning of the operationTN)r   STATUS_DOWNLOADINGr/   rI   cancellabler<   s    r   startzDaemonAcquireProgress.start   s$    "'":":'+$r   c                 ~    d| j                   _        | j                  | j                   _        d| j                   _        y)$Callback at the end of the operation)r   r   r   r   g        r   FN)r/   r   r,   r#   r   r<   s    r   stopzDaemonAcquireProgress.stop   s2    ,@)$($5$5!',$r   c                    ||f| j                   _        d| j                   _        t        j                  | j                   _        | j                   j                  r9t        j                         j                          | j                   j                  r9t        j                  | j                   _        | j                   j                  ryy)zCallback for media changesTF)r/   required_mediumpausedr   STATUS_WAITING_MEDIUMrI   r	   r   r   r   r|   )r.   mediumdrives      r   media_changez"DaemonAcquireProgress.media_change   s    +15=("&"'"="=%%%%'113 %%"'":":%%r   Nr   r5   r   r   )r>   r?   r@   rA   r&   rb   rp   r=   rv   rx   rz   r   r   r   r   r   r   r   r   r   u   s?    <2 &&&&!F,
-
r   r   c                   ,    e Zd ZdZddZd Zd ZddZy)	DaemonAcquireRepoProgressz*Handle the repository information downloadc                     t         j                  | |||       t        ddd      | _        t        dd      | _        d| _        y )Niso_639iso_639_1_codeiso_639_2T_code)tagfallback_tagiso_3166alpha_2_coder4   )r   r&   r   	languagesregionsr#   rE   s       r   r&   z"DaemonAcquireRepoProgress.__init__  s@    &&t[%E!)1A/@B
N;r   c                 d    t         j                  | j                  _        d| j                  _        yr   )r   STATUS_DOWNLOADING_REPOr/   rI   r   r<   s    r   r   zDaemonAcquireRepoProgress.start	  s$    "'"?"?'+$r   c                    t               }|D ]A  }	 |j                  |j                  j                         d   j                  d      d          C |rJ| j
                  j                  ddt        |            dj                  |      z  }|| j
                  _
        yy# t        $ r- |j                  | j
                  j                  d             Y w xY w)rd   r   ://local repositoryzDownloading from %srf   N)rg   ri   descriptionsplit
IndexErrorr/   gettextrj   rk   rl   rm   )r.   rn   reposr^   ra   s        r   rp   z.DaemonAcquireRepoProgress._emit_status_details  s     	HDH		$**00215;;EB2FG	H ""++,A,A,/J8:=((5/JC /2D+ 	  H 		$**223EFGHs   >B3CCc                 >
   |j                   j                  t        j                  j                  k(  r(t
        j                  }|j                   j                  }n|j                   j                  t        j                  j                  k(  rt
        j                  }n|j                   j                  t        j                  j                  k(  rt
        j                  }n|j                   j                  t        j                  j                  k(  rt
        j                  }nR|j                   j                  t        j                  j                  k(  rt
        j                  }nt
        j                   }|j                   j                  t        j                  j                  k7  r-|j                   j"                  r|j                   j"                  }n/|j                   j$                  r|j                   j$                  }nd}|j&                  j)                         dd \  }}	 |j)                  d      d   }|d|}	|j0                  dk(  r | j,                  j/                  d	      |	z  }n(|j0                  d
k(  r | j,                  j/                  d      |	z  }n|j0                  dk(  r | j,                  j/                  d      |	z  }n|j0                  j3                  d      r | j,                  j/                  d      |	z  }n|j0                  j3                  d      r | j,                  j/                  d      |	z  }nT|j0                  dk(  r | j,                  j/                  d      |	z  }n%|j0                  j3                  d      r|j0                  j)                  dd      d   }
	 |
j)                  d      \  }
}| j6                  j9                  |
| j,                  j:                        }| j<                  j9                  || j,                  j:                        }|r$|r"| j,                  j/                  d      |||	fz  }nP|r!| j,                  j/                  d      ||	fz  }n-| j,                  j/                  d      |
|	fz  }n|j0                  }|j>                  ||||j                   j                  z  ||j                   j@                  z  |f| j,                  _!        y # t*        $ r | j,                  j/                  d      }Y w xY w# t4        $ r d }Y _w xY w)NrG   r      r   r
   r   rf   	InReleasezStructure of %sReleasezDescription of %szRelease.gpgzDescription signature of %sPackageszAvailable packages from %sSourceszAvailable sources from %sTranslationIndexzAvailable translations from %szTranslation--r   _z Translations for %s (%s) from %szTranslations for %s from %szTranslations (%s) from %s)"rH   rI   rJ   rK   rL   r   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r   r   r   r/   r   r[   
startswith
ValueErrorr   get_localised_namelocaler   rZ   r\   r]   )r.   r^   r_   r`   rI   ra   hostdistdescrepo	lang_coderegion_codelangregions                 r   rb   z,DaemonAcquireRepoProgress._emit_acquire_item   sC   :: 3 3 = ==((F::..LZZ'"5"5"E"EE..FZZ'"5"5"C"CC,,FZZ'"5"5"@"@@))FZZ'"5"5"?"??((F 11FJJ!4!4!>!>>

%%**''CZZ__**//CC%%++-a2
d	@::e$Q'D
 %>>[(##++,=>ED^^y(##++,?@4GD^^},##++ -4 57;<D^^&&z2##++,.045D^^&&y1##+++-/34D^^11##++ -1 2489D^^&&~6,,S!4R8I#)2)=&	; >>44Y595E5E5L5LND\\44[595E5E5L5LNF ''//68;?:NO ''// 15 69=tE
 ''// 15 69BD8IJ >>DHHfdJ1D1D$D4::1113.8*o  	@ ##++,>?D	@>  #"#s$    S" (T "$T
	T
TTNr   r   )r>   r?   r@   rA   r&   r   rp   rb   r   r   r   r   r      s    4,
2$U8r   r   c                   `    e Zd ZdZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)r   a	  Forks and executes a given method in the child process while
    monitoring the output and return state.

    During the run() call the mainloop will be iterated.

    Furthermore a status file descriptor is available to communicate
    with the child process.
    c                 r   || _         d| _        d| _        || _        || _        d| _        d| _        d| _        t        j                         \  | _
        | _        t        t        d      r@t        j                  | j                  d       t        j                  | j                  d       d| _        d| _        y )NrG   r   r   set_inheritableT)r/   rI   r#   r*   r,   _child_exitlast_activity	child_pidospipestatus_parent_fdstatus_child_fdhasattrr   output_line_bufferrE   s       r   r&   zDaemonForkProgress.__init__  s    &#68ggi3t32()t44d;t33T:r   c                 &    | j                          | S r   )start_updater<   s    r   	__enter__zDaemonForkProgress.__enter__  s    r   c                 $    | j                          y r   )finish_update)r.   etypeevalueetbs       r   __exit__zDaemonForkProgress.__exit__  s    r   c                     t         j                  d       t        j                  | j                  _        d| j                  _        t        j                         | _        t        j                         | _	        y )NzStart updateT)
r:   debugr   STATUS_COMMITTINGr/   rI   term_attachedtimer   
start_timer<   s    r   r   zDaemonForkProgress.start_update  sK    		.!"'"9"9)-&!YY[))+r   c                 &    d| j                   _        y)r   FN)r/   r   r<   s    r   r   z DaemonForkProgress.finish_update  s    ).&r   c                 b     ||  t        j                  d       t        j                  d       y)zCall the given method or function with the
        corrsponding arguments in the child process.

        This method should be replace in subclasses.
        r    r   N)r   sleepr   _exit)r.   methodargss      r   _childzDaemonForkProgress._child  s!     	

3
r   c           	      H	   t         j                  d       d}| j                  j                  r	 t	        j
                  | j                  j                  t        j                  t        j                  z  t        j                  z        }t        j                  |      }t        j                  |t        j                         | j!                         }|dk(  rt	        j"                  | j$                         	 | j'                           | j(                  |i | t1        j2                  d       t	        j4                  t6        j8                  j:                         n&|| _        t	        j"                  | j>                         t         j                  d|       g }t@        jB                  t@        jD                  z  t@        jF                  z  }| j                  j                  r?|jI                  tA        jJ                  |t@        jL                  || jN                               |jI                  tA        jJ                  | jP                  t@        jL                  || jR                  |             |jI                  tA        jT                  t@        jL                  || jV                               |jI                  tA        jJ                  | j$                  t@        jL                  t@        jB                  | jX                               | jZ                  dk(  r2tA        j\                         j_                          | jZ                  dk(  r2|D ]  }tA        j`                  |        |r&	 t        jb                  |t        jd                         | jP                  | j$                  |fD ]  }		 t	        j"                  |	        t	        jh                  | jZ                        S # t        t        j                  f$ r d| j                  _        Y Cw xY w# t*        $ r t-        j.                          Y w xY w# t1        j2                  d       t	        j4                  t6        j8                  j:                         w xY w# t        j                  $ r Y w xY w# t        tf        f$ r Y w xY w)zxSetup monitoring, fork and call the self._child() method in the
        child process with the given arguments.
        RunNrG   r   r
   zChild pid: %sr   )5r:   r   r/   terminalr   openO_RDWRO_NOCTTY
O_NONBLOCKtermios	tcgetattrttysetrawTCSANOWOSErrorerror_forkcloser   _setup_childr   	Exception	traceback	print_excr   r   r   rJ   PackageManagerRESULT_FAILEDr   r   r	   IO_INIO_ERRIO_HUPr   io_add_watchPRIORITY_HIGH_IDLE_copy_io	master_fd_copy_io_masterchild_watch_add_on_child_exit_on_status_updater   r   r   source_remove	tcsetattr	TCSADRAIN	TypeErrorWEXITSTATUS)
r.   r   kwargsterminal_fdterminal_attrpidwatchersflagsrh   fds
             r   runzDaemonForkProgress.run  s{    			%$$	/ !ggd&6&6&?&?&(ii"++&=&MO ' 1 1+ >

;8 jjl!8HHT**+?!!#T,V,
 

1 //==> DNHHT))*		/3'

T[[(4;;6$$OOD--k.2.E.E.3.2mm= > 	))$..*.*A*A5*.*>*>M 	N 	  !8!8!$d&9&9;	< 	))$*?*?*.*A*A*.***.*@*@B 	C "$%%'113 "$ 	#Br"	# !!+w/@/@"/1
 >>4#8#8+F 	B	
 ~~d..//w W]]+ /,.  )/  &##%& 

1 //==>D ==  Y' s[   BO 7"P	  %Q4 "R*PP	P*&P- )P**P- -AQ14R
RR! R!c                 >    t         j                  d|       || _        y)NzChild exited: %sF)r:   r   r   )r.   r  	conditions      r   r  z!DaemonForkProgress._on_child_exit  s    		$i0$r   c                      y)zCallback for changes on the status file descriptor.

        The method has to return True to keep the monitoring alive. If
        it returns False the monitoring will stop.

        Replace this method in your subclass if you use the status fd.
        Fr   )r.   sourcer  s      r   r  z$DaemonForkProgress._on_status_update  s     r   c                 >    t        j                         \  }| _        |S )zgFork and create a master/slave pty pair by which the forked process
        can be controlled.
        )r   forkptyr  )r.   r  s     r   r   zDaemonForkProgress._fork	  s     !jjlT^
r   c                    d }t        j                   t         j                  |       t        j                  t        _        t        j                          dt        j                  d<   t        j                  t        j                  d       | j                  j                  r*t        j                  d| j                  j                         | j                  j                  s-t        j                  dd       t        j                  dd       nt        j                  d	d
       | j                  j                  rxt        j                  d| j                  j                         t        j                  dd       t         j"                  t$        j&                  k(  rCt        j                  dd       n,| j                  j                  st        j                  dd       | j                  j(                  r4t*        j,                  j/                  d| j                  j(                         d| j                  j0                  d| j                  j2                  d}t*        j,                  j/                  d|       y)z+Setup the environment of the child process.c                 ^    t        j                  t        j                  j                         y r   )r   r   rJ   r   r  )signumframes     r   interrupt_handlerz:DaemonForkProgress._setup_child.<locals>.interrupt_handler  s     HHW++99:r   1DPKG_UNTRANSLATED_MESSAGESCLANGAPT_LISTCHANGES_FRONTENDnoneAPT_LISTBUGS_FRONTENDTERMlinuxDEBCONF_PIPEDEBIAN_FRONTENDpassthroughDEBCONF_DEBUG.noninteractivezAcquire::http::Proxyzaptdaemon role='z
' sender=''zCommandLine::AsStringN)signalSIGINTsys__excepthook__
excepthookr   quitr   environr   	setlocaleLC_ALLr/   putenvr   debconfr:   levelloggingDEBUG
http_proxyrJ   configrg   rolesender)r.   r$  cmds      r   r   zDaemonForkProgress._setup_child  s   	;
 	fmm%67++ 47

/0,""IIfd..556 (( II0&9II-v6IIfg&##IInd&6&6&>&>?II'7yyGMM)		/3/!!**II')9:&&NN5#//::< 483C3C3H3H373C3C3J3JL2C8r   c                    |t         j                  k(  rt        j                         | _        	 t	        j
                  |d      }|j                  dd      }|dk(  r\t        j                  t        d| j                        }|r-t        j                  |       | xj                  |dz   z  c_        d| _        n| xj                  |z  c_        |r	 t	        j                   ||       yy	 t	        j"                  |       y	# t        $ r t        j                  d       Y yw xY w# t        $ r t        j                  d       Y yw xY w# t        $ r Y y	w xY w)
Nr
   zFaild to read from masterTUTF-8ignore
rG   z'Failed to write to controlling terminalF)r	   r  r   r   r   readr   r:   r   decoderesubREGEX_ANSI_ESCAPE_CODEr   log_terminalr   writer   )r.   r  r  target	char_bytecharlines          r   r	  z"DaemonForkProgress._copy_io_master>  s,   

"!%DGGFA.	
 ##GX6Dt|vv4b$:K:KL &&t,KK4$;.K$&!!!T)!IHHVY/ 	HHV 3  		56"  IIIGHI
  		s5   C> D" (E >DD"EE	EEc                 ~   |t         j                  k(  r	 t        j                  |d      }t        j                  | j
                  |       | j                  j                  r8| j                  j                  r"d | j                  _	        d| j                  _        yt        j                  |       y# t        $ r Y !w xY w)Nr
   FT)r	   r  r   rL  rR  r  r/   r   config_file_conflictconfig_file_conflict_resolutionr   r   )r.   r  r  rU  s       r   r  zDaemonForkProgress._copy_io^  s    

"wwvq).
 $$++((==GKD$$D.3D$$+
  s   6B0 0	B<;B<N)2   r5   )r>   r?   r@   rA   r&   r   r   r   r   r   r  r  r  r   r   r	  r  r   r   r   r   r   x  sL     &/I0V
,9\@r   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
r   z>Progress to execute APT package operations in a child process.c                 j    t         j                  |        t        j                  j	                          y r   )r   r   r   status_lockreleaser<   s    r   r   z"DaemonInstallProgress.start_updatet  s"    ''-  "r   c                     t         j                  |        t        j                  | j                  t        j
                         y)r   N)r   r   r   wait_for_lockr/   r]  r<   s    r   r   z#DaemonInstallProgress.finish_updatex  s,    ((.4++T-=-=>r   c                     	 |j                  | j                        }t        j                  |       y #  t        j                  t        j
                  j                         Y y xY wr   )
do_installr   r   r   rJ   r   r  )r.   pmress      r   r   zDaemonInstallProgress._child}  sG    	-- 4 45C HHSM	;HHW++99:s	   3 /A$c                 X   t         j                  d       d}	 |j                  d      sTt        j                         | _        |t        j                  |d      j                  dd      z  }|j                  d      sT	 |j                  dd	      \  }}}}|j                         }|dk(  r| j                  ||       nh|dk(  rOt        j                  d|      }	|	rJ|	j                  d      |	j                  d      }}
| j                  |
|       n|dk(  r|j!                  d      rt"        j$                  }n|j!                  d      rt"        j&                  }n|j!                  d      rt"        j(                  }n|j!                  d      rt"        j*                  }nf|j!                  d      rt"        j,                  }nC|j!                  d      rt"        j.                  }n |j!                  d      rt"        j0                  }n|j!                  d      rt"        j2                  }n|j!                  d      rt"        j4                  }n|j!                  d      rt"        j6                  }n|j!                  d      rt"        j8                  }nv|j!                  d      rt"        j:                  }nT|j!                  d      rt"        j<                  }n2|j!                  d      rt"        j>                  }nt"        j@                  }| jC                  |tE        |      |       | j                  tF        z   t        j                         k  rF| jH                  r:t         jK                  dtF               t        jL                  | jH                  d       y
#  Y yxY w# t        $ r Y y
w xY w) z)Parse messages from APT on the status fd.UpdateInterfacerG   rK  r
   rI  rJ  F:   Tpmerror
pmconffile\s*'(.*)'\s*'(.*)'.*r   pmstatus
Installing	InstalledConfiguringzPreparing to configurezPreparing for removal ofRemovingRemovedzPreparing to completely removezCompletely removingzCompletely removed	Unpacking	PreparingzNoting disappearance ofRunningz#Killing child since timeout of %s s   )'r:   r   endswithr   r   r   rL  rM  r   r   strip_errorrN  matchgroup	_conffiler   r   PKG_INSTALLINGPKG_INSTALLEDPKG_CONFIGURINGPKG_PREPARING_CONFIGUREPKG_PREPARING_REMOVEPKG_REMOVINGPKG_REMOVEDPKG_PREPARING_PURGEPKG_PURGING
PKG_PURGEDPKG_UNPACKINGPKG_PREPARING_INSTALLPKG_DISAPPEARINGPKG_RUNNING_TRIGGERPKG_UNKNOWN_status_changedr)   INSTALL_TIMEOUTr   criticalkill)r.   r  r  
status_msgrI   pkgr6   message_rawmessagery  newoldstatus_enums                r   r  z'DaemonInstallProgress._on_status_update  s   		#$
	 ))$/%)YY["bggfa077JJ
 !))$/
	2<2B2B32J/VS'; ##%YKKW%|# HH7EE ;;q>5;;q>SsC(z!!!,/#22##K0#11##M2#33##$<=#;;##$>?#88##J/#00##I.#//##$DE#77##$9:#//##$89#..##K0#11##K0#99##$=>#44##I.#77#//  eGnkB0499;>LL>(*GGDNNB'q	  		s   A$N ?N N	N)(N)c                    t         j                  d|||       | j                  |dz  | j                  | j                  z
  z  z   }| j                  |k  r!t        |      | j                  _        || _        t        j                  |      }| j                  j                  |      |z  }|| j                  _
        ||f| j                  _        y)z%Callback to update status informationzAPT status: %s, %s, %sr5   N)r:   r   r*   r,   r#   r7   r/   r   get_package_status_from_enumr   rm   progress_package)r.   r  r6   r  r#   r   ra   s          r   r  z%DaemonInstallProgress._status_changed  s    		*C+F&&3$:K:K:>:M:M;N *O O==8#(+HD%$DM 11+>&&t,s2*-'-0+,>)r   c                    t         j                  d|d|d       ||f| j                  _        d| j                  _        t
        j                  | j                  _        | j                  j                  r9t        j                         j                          | j                  j                  r9t         j                  d| j                  j                         | j                  j                  dk(  r!t        j                  | j                  d       n9| j                  j                  dk(  r t        j                  | j                  d	       d
| j                  _        d
| j                  _        t
        j                   | j                  _        y)z#Callback for a config file conflictzConfig file prompt: 'z' ()TzSending config file answer: %sreplaces   y
keeps   n
N)r:   r;   r/   rX  r   r   !STATUS_WAITING_CONFIG_FILE_PROMPTrI   r	   r   r   r   rY  r   rR  r  r   )r.   currentr  s      r   r{  zDaemonInstallProgress._conffile  s   wDE18#-"&"'"I"I%%%%'113 %%		2""BB	D;;yHHHT^^V,==GHHT^^V,;?804-"'"9"9r   c                 8    t         j                  |d|       y)zCallback for an errorz: N)r:   r  )r.   r  ra   s      r   rx  zDaemonInstallProgress._error  s    c*+r   N)r>   r?   r@   rA   r   r   r   r  r  r{  rx  r   r   r   r   r   p  s*    H#?
@D? &,r   r   c                   $    e Zd ZdZddZd Zd Zy)r   z9Progress handler for a local Debian package installation.c                 4    t         j                  | |||       y r   )r   r&   rE   s       r   r&   z"DaemonDpkgInstallProgress.__init__  s    &&t[%Er   c                 x   t         j                  d   dt        | j                        g}|j	                  t         j                  j                  d             | j                  j                  s|j	                  ddg       |j	                  d|g       t        j                  t         j                  d   g|  y )NDir::Bin::DPkg--status-fdzDPkg::Options--force-confdef--force-confoldz-i
rJ   rD  strr   extend
value_listr/   r   r   execlp)r.   debfiler   s      r   r   z DaemonDpkgInstallProgress._child  s    /0-D(()+GNN--o>?((KK*,=>?T7O$
		'..!12:T:r   c                    t         j                  d       d}	 |j                  d      s;|t        j                  |d      j                  dd      z  }|j                  d      s;	 |j                  dd	      D cg c]  }|j                          }}|d   dk(  ry|d   dk(  r| j                  |d   |d	          y
|d   dk(  rOt        j                  d|d	         }|r4|j                  d      |j                  d      }}| j                  ||       y
|d   dk(  r#	 t        |d      }	| j%                  |d   d|	       y
#  Y yxY wc c}w # t        $ r Y y
w xY w# t        $ r t         j"                  }	Y Mw xY w)Nrf  rG   rK  r
   rI  rJ  Frg  rh  Tr   rI   r   r   conffilerk  
processingr4   )r:   r   rv  r   rL  rM  r   rw  r   rx  rN  ry  rz  r{  MAP_DPKG_STAGEKeyErrorr   PKG_UNKONWNr  )
r.   r  r  
status_rawr   rI   ry  r  r  r  s
             r   r  z+DaemonDpkgInstallProgress._on_status_update  s   		#$
	 ))$/bggfa077JJ
 !))$/	)3)9)9#q)ABAaggiBFB !9 ayG#F1Ivay1  j(!;VAYG${{1~u{{1~CNN3,  AY,&0,VAY7   C=9	B 		*  0#//0sB   AE  &E :EE E  EE 	EEE76E7N)r4   r4   )r>   r?   r@   rA   r&   r   r  r   r   r   r   r     s    CF;"r   r   c                       e Zd ZdZd Zy)r   z-Progress handler for dpkg --confiure -a call.c                 V   t         j                  d   dt        | j                        ddg}|j	                  t         j                  j                  d             | j                  j                  s|j	                  ddg       t        j                  t         j                  d   g|  y )	NzDir::Bin::Dpkgr  z--configurez-azDpkg::Optionsr  r  r  r  )r.   r   s     r   r   z DaemonDpkgRecoverProgress._child(  s    /0-D(()=$@GNN--o>?((KK*,=>?
		'..!12:T:r   Nr>   r?   r@   rA   r   r   r   r   r   r   $  s
    7;r   r   c                       e Zd ZdZd Zy)DaemonDpkgReconfigureProgressz+Progress handler for dpkg-reconfigure call.c                     dg}|dk7  r|j                  d|g       |j                  |       t        j                  dg|  y )Nz/usr/sbin/dpkg-reconfiguredefaultz
--priority)r  r   r  )r.   packagespriorityr   s       r   r   z$DaemonDpkgReconfigureProgress._child5  sA    ,-y KKx01H
		.66r   Nr  r   r   r   r  r  1  s
    57r   r  )7rA   
__author____all__r   rA  r   platformrN  r5  r7  r   r   r   r   rJ   apt.progress.baser"   apt.debfilegi.repositoryr	   rG   r   r   loopr   utilsr   r   	getLoggerr:   rQ  r  r|  r~  r  r  r  r  PKG_UPGRADINGr  chrrP  r#   r$   r%   r   rD   r   r   objectr   r   r   r   r  r   r   r   <module>r     sr   + 5
>   	  	  
    
         g*+ w  !<="11$44!..#77 ,,$55"002 R#77 6L**55 6LrFCLL--== FRw8 5 w8tu up|,. |,~2 5 2j
; 9 
;	7$= 	7r   