
    xQ2                         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m	Z	m
Z
 ddlmZ ddlmZ  ej                  d	      Zd
 Z G d de	j                        Z G d de      Zy)z0Provides AptWorker which processes transactions.z%Sebastian Heinlein <devel@glatzor.de>)
BaseWorkerDummyWorker    N)GObjectGLib   )enums)errorszAptDaemon.Workerc                     | S )N )ss    ;/usr/lib/python3/dist-packages/aptdaemon/worker/__init__.py<lambda>r   '   s    a     c                      e Zd ZdZej
                  j                  dej                  ffej
                  j                  dej                  ffdZdZ	ddZ
ed        Zd Zd Zd Zd	 Zd
 Zd ZddZd Zd Zd Zd Zd Zd Zy)r   z3Worker which processes transactions from the queue.N)transaction-donetransaction-simulatedc                     t         j                   j                  |        d| _        t        j                         | _        || _        d| _        i | _        y)z$Initialize a new AptWorker instance.N)r   __init__transtimelast_action_timestampchroot
marked_tidplugins)selfr   load_pluginss      r   r   zBaseWorker.__init__6   s@      &
%)YY[" r   c                     d| v r| j                  dd      \  }}d}n"d| v r| j                  dd      \  }}d}n| }dx}}|||fS )zUReturn the name, the version number and the release of the
        specified package.=   N/)split)packagenameversionreleases       r   _split_package_idzBaseWorker._split_package_idA   s`     '>#MM#q1MD'GG^#MM#q1MD'GD $$GgWg%%r   c                     t         j                  d|j                         | j                  rt	        d      || _        t        j                  | j                  |       y)Process the given transaction in the background.

        Keyword argument:
        transaction -- core.Transcation instance to run
        Processing transaction %s&There is already a running transactionN)loginfotidr   	Exceptionr   idle_add_run_transaction_idler   transactions     r   runzBaseWorker.runP   sE     	,koo>::DEE 
d00+>r   c                     t         j                  d|j                  z         t        j                  |_        t        j                  | j                  |       y)a5  Return the dependencies which will be installed by the transaction,
        the content of the dpkg status file after the transaction would have
        been applied, the download size and the required disk space.

        Keyword arguments:
        trans -- the transaction which should be simulated
        zSimulating trans: %sN)	r+   r,   r-   r   STATUS_RESOLVING_DEPstatusr   r/   _simulate_transaction_idler   r   s     r   simulatezBaseWorker.simulate\   s;     	'%))3411d55u=r   c                 h    t         j                  d|j                         | j                  d|       y)zuEmit the transaction-simulated signal.

        Keyword argument:
        trans -- the simulated transaction
        z"Emitting transaction-simulated: %sr   Nr+   debugr-   emitr8   s     r   _emit_transaction_simulatedz&BaseWorker._emit_transaction_simulatedh   s&     			6		B		)51r   c                 h    t         j                  d|j                         | j                  d|       y)zoEmit the transaction-done signal.

        Keyword argument:
        trans -- the finished transaction
        zEmitting transaction-done: %sr   Nr;   r8   s     r   _emit_transaction_donez!BaseWorker._emit_transaction_doneq   s&     			1599=		$e,r   c                    t        j                          | _        t        j                  |_        d|_        	 | j                  |       t        j                  |_        d|_        t        j                          | _        |j6                  dd }d| _        d| _        | j=                  |       t>        jA                  d|       y# t        j                  $ r t        j                  |_        Y t        j                  $ r&}||_        t        j                  |_        Y d}~d}~wt        t         f$ r t        j                  |_        Y t"        $ r}t%        j&                         }t        j                  t        j(                  |      |_        t        j                  |_        	 ddlm} |j/                  t1        |      dt3        |      ||       n# t4        $ r Y nw xY wY d}~d}~ww xY w# d|_        t        j                          | _        |j6                  dd }d| _        d| _        | j=                  |       t>        jA                  d|       w xY w)	zRun the transaction   Nr   crash: d   Finished transaction %sF)!r   r   r   STATUS_RUNNINGr6   progress_run_transactionEXIT_SUCCESSexitr	   TransactionCancelledEXIT_CANCELLEDTransactionFailederrorEXIT_FAILEDKeyboardInterrupt
SystemExitr.   	traceback
format_excERROR_UNKNOWN rD   create_reporttypestrImportErrorr-   r   r   r@   r+   r,   )r   r   exceptbkrD   r-   s         r   r0   z BaseWorker._run_transaction_idlez   s   %)YY["++	5!!%(( ++EJ EN)-D&))A,CDJ"DO''.HH.49 ** 	.--EJ'' 	+EK**EJJ!:. 	.--EJ 
	0&&(C 2253F3FLEK**EJ0# ##USZ$H$'0  
	0 !EN)-D&))A,CDJ"DO''.HH.4s   C G1 (G.*G1 ,G.>DG1 'G.G1 G.AG)#G)+G)	G G)G  G)#G1 )G..G1 1A&Ic                 X   	 | j                  |      \  |_        |_        |_        |_        |_        t        j                  |_        t        j                         |_
        |j                  | _        | j9                  |       t        j                         | _        y# t        j                  $ r&}||_        t        j                   |_        Y d }~_d }~wt$        $ r}t'        j(                         }t        j                  t        j*                  |      |_        	 ddlm} |j1                  t3        |      dt5        |      ||       n# t6        $ r Y nw xY wt        j                   |_        Y d }~d }~ww xY w# | j9                  |       t        j                         | _        w xY w)Nr   rC   rE   F)_simulate_transactiondependsdownloadspaceunauthenticatedhigh_trust_packagesr   STATUS_SETTING_UPr6   r   	simulatedr-   r   r	   rO   rP   rQ   rL   r.   rT   rU   rV   rW   rD   rX   rY   rZ   r[   r>   r   )r   r   r\   r]   rD   s        r   r7   z%BaseWorker._simulate_transaction_idle   sI   	5 .2-G-G-N+U]ENEK%)  !22EL"iikEO#iiDO,,U3)-D&+ '' 	+EK**EJJ 
	+&&(C 2253F3FLEK0# ##USZ$H$'0  
 **EJJ
	+  ,,U3)-D&sd   0B ?E= E:/CE= E:=E5E +E5	EE5EE5/E= 5E::E= =,F)c           	         t         j                  j                  t         j                  j                  t              d      g}t        j                  |      }t
        j                  j                  |      \  }}|D ]!  }t
        j                  j                  |       # |D ]x  }t        j                  ||      D ]]  }		 | j                  j                  |g       j                  |	j                                t        j!                  d||	j"                         _ z y#  t        j%                  d|d|	j"                         Y xY w)z/Load the plugins from setuptools' entry points.r   zLoaded %s plugin: %szFailed to load z	 plugin: N)ospathjoindirname__file__pkg_resourcesEnvironmentworking_setfind_pluginsadditer_entry_pointsr   
setdefaultappendloadr+   r<   distcritical)
r   r   entry_pointplugin_dirsenvdistsr	   rv   r#   epts
             r   _load_pluginszBaseWorker._load_plugins   s   ww||BGGOOH$=yIJ''4%11>>sCv 	0D%%))$/	0 		FD$66{7;= FFLL++D"5<<SXXZH
 II4dCHHEF		F
:LL)-sxx"9 :s   ?9D'Ec                 N    g g g g g g g g}g }g }g }d}g x}x}x}	x}
x}x}}|ddg g fS )4This method needs to be implemented by the backends.r   r   )r   r   r`   rc   rd   	skip_pkgssizeinstalls
reinstallsremovalspurgesupgradesupgradables
downgradess                 r   r_   z BaseWorker._simulate_transaction   sl    r2r2r2. 		 	: 	 	6 	H 	{1b"$$r   c                 H    t        j                  t        j                        r   )r	   rO   r   ERROR_NOT_SUPPORTEDr8   s     r   rJ   zBaseWorker._run_transaction   s    &&u'@'@AAr   c                     t         )zYSet a configuration option.

        This method needs to be implemented by the backends.NotImplementedError)r   optionvaluefilenames       r   
set_configzBaseWorker.set_config   
     "!r   c                     t         )zYGet a configuration option.

        This method needs to be implemented by the backends.r   )r   r   s     r   
get_configzBaseWorker.get_config   r   r   c                     g S r   r   r   s    r   get_trusted_vendor_keysz"BaseWorker.get_trusted_vendor_keys   s    	r   c                      y)r   Fr   r   s    r   is_reboot_requiredzBaseWorker.is_reboot_required   s    r   )NT)zaptdaemon.plugins)__name__
__module____qualname____doc__r   SignalFlags	RUN_FIRSTTYPE_PYOBJECT__gsignals__NATIVE_ARCHr   staticmethodr&   r3   r9   r>   r@   r0   r7   r}   r_   rJ   r   r   r   r   r   r   r   r   r   *   s    =)0)<)<)F)F)-*1*?*?)A)C /6.A.A.K.K.2/6/D/D.F.HIL K	 & &
?
>2-#J8F$
%B""r   r   c                   "    e Zd ZdZd Zd Zd Zy)r   zCAllows to test the daemon without making any changes to the system.c                 v   t         j                  d|j                         | j                  rt	        d      || _        t        j
                         | _        t        j                  | j                  _	        d| j                  _
        d| j                  _        t        j                  d| j                  |       y)r(   r)   r*   r   T   N)r+   r,   r-   r   r.   r   r   r   rH   r6   rI   cancellabler   timeout_addr0   r1   s     r   r3   zDummyWorker.run   s     	,koo>::DEE 
%)YY["!00



!%

d88+Fr   c                 j   |j                   rt        j                  |_        n|j                  dk(  rt        j
                  |_        ni|j                  t        j                  k(  rt        j                  |_        n5|j                  t        j                  k(  rt        j
                  |_        n|j                  t        j                  k(  rt        j                  |_        n|j                  t        j                  k(  r|j                  dk(  rt        j                  |_        ns|j                  dk(  rt        j                  |_        nM|j                  dk(  rt        j                  |_        d|_        n |j                  dk(  rd|_        t        j$                  |_        d|_        |j"                  r/t)        j*                         j-                          |j"                  r/d	|_        d	|_        t        j                  |_        n|j                  d
k(  rud|_        d|_        t        j2                  |_        |j"                  r/t)        j*                         j-                          |j"                  r/t        j                  |_        n
|j                  dk(  rd|_        n|j                  dk(  rd|_        t        j6                  |_        n|j                  t        j8                  k(  r|j                  dk(  rt        j                  |_        n|j                  dk(  rt        j                  |_        d|_        nY|j                  dk(  rd|_        nB|j                  dk(  rd|_        n+|j                  dk(  rd|_        t        j6                  |_        |xj                  dz  c_        yt        j:                  |_        t=        j<                         | _        | j@                  jB                  d	d	 }| j@                  }d	| _         | jE                  |       tF        jI                  d|       y)zRun the workerrF   r      2   zHeyas!7   T)z
/etc/fstabz	/etc/mtabN<   )zDebian Lenny 5.0 CD 1z
USB CD-ROMF   zServus!Z   rW   zHola!rG   F)%	cancelledr   rN   rL   rI   rK   roleROLE_UPDATE_CACHErQ   ROLE_UPGRADE_PACKAGESROLE_UPGRADE_SYSTEMROLE_INSTALL_PACKAGESr5   r6   STATUS_DOWNLOADINGSTATUS_COMMITTINGstatus_detailspaused!STATUS_WAITING_CONFIG_FILE_PROMPTconfig_file_conflictr   main_context_default	iterationconfig_file_conflict_resolutionrequired_mediumSTATUS_WAITING_MEDIUMstatus_deatilsSTATUS_CLEANING_UPROLE_REMOVE_PACKAGESSTATUS_FINISHEDr   r   r   r-   r@   r+   r,   )r   r   r-   s      r   r0   z!DummyWorker._run_transaction_idle  s   ??--EJ^^s"++EJZZ5222**EJZZ5666++EJZZ5444--EJzzU888>>Q&#(#=#=EL^^q(#(#;#;EL^^r)#(#:#:EL+3E(^^r)#'EL#(#J#JEL1JE.,,113==?  ,,<@E915E.#(#:#:EL^^r)-;E)#'EL#(#>#>EL,,113==?  ,,#(#;#;EL^^r)+4E(^^r)+-E(#(#;#;ELu999>>Q&#(#=#=EL^^q(#(#:#:EL+3E(^^r)+2E(^^r)+4E(^^r)+-E(#(#;#;ELNNaN,,%)YY["jjnnQ


##E**C0r   c                 "    g g g g g g g g}|ddg g fS )Nr   r   )r   r   r`   s      r   r9   zDummyWorker.simulateI  s'    r2r2r2.1b"$$r   N)r   r   r   r   r3   r0   r9   r   r   r   r   r      s    MG AF%r   r   )r   
__author____all__loggingrh   rm   r   rT   gi.repositoryr   r   rW   r   r	   	getLoggerr+   _r   r   r   r   r   <module>r      si    7" 5

'  	    '  g*+ E EPY%* Y%r   