
    h_                     ,   d dl Z  e j                  dde       d dlm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  G d d      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d d      Z G d d      Zy)    NignorezAccessed deprecated property)gettext)Gio)utilsc                       e Zd ZddZd Zy)
UpdateItemc                 J    || _         || _        || _        || _        || _        y N)iconnamepkg	to_remove	sensitiveselfr   r   r   r   r   s         ?/usr/lib/python3/dist-packages/UpdateManager/Core/UpdateList.py__init__zUpdateItem.__init__/   s%    		""    c                     | j                   s.| j                  j                  xs | j                  j                  S | j                  j                  S r
   )r   r   marked_installmarked_upgrademarked_deleter   s    r   is_selectedzUpdateItem.is_selected6   s8    ~~88**Edhh.E.EE88)))r   NT)__name__
__module____qualname__r   r    r   r   r   r   .   s    #*r   r   c                   d    e Zd Zi ZddZed        Z	 	 	 	 ddZd Zd Z	d Z
ddZd	 Zd
 Zd Zy)UpdateGroupc                     t         j                  | |||||       t               | _        t               | _        d | _        |:t        |||||      | _        | j                  j                  | j
                         y y r
   )r   r   set_items_deps	core_itemaddr   s         r   r   zUpdateGroup.__init__@   se    D#tT9iHeU
?'T4INDNKKOODNN+ r   c                 X    g }|j                  | j                         t        |d       S )Nc                 6    | j                   j                         S r
   r   loweras    r   <lambda>z#UpdateGroup.items.<locals>.<lambda>M   s    qvv||~ r   key)extendr$   sorted)r   	all_itemss     r   itemszUpdateGroup.itemsI   s'    	%i%=>>r   Nc           	      t   t        j                  |      }t        j                  j	                  d      }| j
                  j                  t        |||||             |rZ|j                  |v rK|j                  | j                  vr2| j                  s| j                  ||       | j                  |||       y y y y Npackage)r   get_package_labelr   
ThemedIconnewr$   r'   r   r   r%   
_init_deps	_add_deps)r   r   cacheeventloop_callbackr   r   r   r   s           r   r'   zUpdateGroup.addO   s     &&s+~~!!),
3dIyIJ SXX&3884::+E:: '9:NN3'9: ,F&5r   c                     || j                   v S r
   )r$   r   items     r   containszUpdateGroup.containsd   s    t{{""r   c                     | j                   D ]O  }|j                  s|j                  j                  | j                  vs3| j	                  |j                  ||       Q y r
   )r$   r   r   r%   r<   )r   r=   r>   rA   s       r   r;   zUpdateGroup._init_depsg   sF    KK 	DDxxDHHMM;txx0BC	Dr   c                    |$|j                   |j                  | j                  v r@| xs |j                    xr dxs d|j                  z  }t        j                  d|z         yt        | j                        dz  dk(  rt        |      r |        | j                  j                  |j                         |j                  | j                  v rI| j                  |j                     D ],  }|| j                  vs||v s| j                  ||   ||       . y|j                   }|j                  dd      }t        j                  j                  |      D ]m  }|j                  }	|	| j                  vs|	|v s#| j                  j                  |j                  g       j                  |	       | j                  ||	   ||       o y)	z8Adds pkg and dependencies of pkg to the dependency list.Nz,Package was None or didn't have a candidate.z%s already in _deps.zUseless call to _add_deps. %s   r   Depends
Recommends)	candidater   r%   loggingdebuglencallabler'   	_depcacher<   get_dependencies	itertoolschainfrom_iterable
setdefaultappend)
r   r   r=   r>   reasondeprH   dependenciesdependency_pkgr   s
             r   r<   zUpdateGroup._add_depsl   s   ;#--/388tzz3I
 -- CB5)CHH4 
 MM9FBCtzz?S A%(3E*F 

sxx 88t~~%~~chh/ Jdjj(SE\NN5:u6HIJ I$55iNL"+//"?"?"M K%**tzz)demNN--chh;BB4HNN5;7IJ	Kr   c                 r    | j                   s|r| j                  ||       |j                  | j                   v S r
   )r%   r;   r   )r   	maybe_depr=   r>   s       r   is_dependencyzUpdateGroup.is_dependency   s-    zzeOOE#56~~++r   c                 J    | j                   D ]  }|j                         s y y)NTF)r4   r   r@   s     r   packages_are_selectedz!UpdateGroup.packages_are_selected   s)    JJ 	D!	 r   c                     | j                   D cg c]  }|j                         s| }}t        |      dkD  xr! t        |      t        | j                         k  S c c}w Nr   )r4   r   rK   )r   rA   pkgs_installings      r   selection_is_inconsistentz%UpdateGroup.selection_is_inconsistent   s\    ,0JJMD$:J:J:L4MM?#a' 
C,@3JJD
 -
 	
 Ns
   AAc                     | j                   ryd}| j                  D ]&  }|t        |j                  j                  dd      z  }( |S )Nr   size)r   r4   getattrr   rH   )r   rb   rA   s      r   get_total_sizezUpdateGroup.get_total_size   sF    >>JJ 	;DGDHH..::D	;r   r   )NNFT)NN)r   r   r   rM   r   propertyr4   r'   rB   r;   r<   rZ   r\   r`   rd   r   r   r   r!   r!   =   sY    I, ? ? ;*#D
K@,
r   r!   c                         e Zd Zd fd	Z xZS )UpdateApplicationGroupc                 t    |j                         }|j                         }t        t        |   |||||       y r
   )get_display_nameget_iconsuperrg   r   )r   r   applicationr   r   r   r   	__class__s          r   r   zUpdateApplicationGroup.__init__   s:    ++-##%$d4tY		
r   r   r   r   r   r   __classcell__rm   s   @r   rg   rg          
 
r   rg   c                         e Zd Zd fd	Z xZS )UpdatePackageGroupc                     t        j                  |      }t        j                  j	                  d      }t
        t        |   |||||       y r6   )r   r8   r   r9   r:   rk   rs   r   )r   r   r   r   r   r   rm   s         r   r   zUpdatePackageGroup.__init__   sB    &&s+~~!!), $0tY		
r   r   rn   rp   s   @r   rs   rs      rq   r   rs   c                         e Zd Zd fd	Z xZS )UpdateSystemGroupc                     t        d      t        j                  |      z  }t        j                  j                  d      }t        t        | #  d ||||       y )Nz%s baser=   zdistributor-logo)	_r   get_ubuntu_flavor_namer   r9   r:   rk   rv   r   )r   r=   r   r   r   r   rm   s         r   r   zUpdateSystemGroup.__init__   sN     |e::GG~~!!"45/$i	
r   r   rn   rp   s   @r   rv   rv      s    
 
r   rv   c                       e Zd Zd Zy)UpdateOriginc                 .    g | _         || _        || _        y r
   )packages
importancedescription)r   descr   s      r   r   zUpdateOrigin.__init__   s    $r   Nr   r   r   r   r   r   r   r|   r|      s     r   r|   c                   n    e Zd Z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	 	 ddZdg g fdZy)
UpdateListz}
    class that contains the list of available updates in
    self.pkgs[origin] where origin is the user readable string
    zPhased-Update-Percentagez/etc/machine-idz/var/lib/dbus/machine-idz+/usr/share/app-install/desktop/%s:*.desktopz-Update-Manager::Always-Include-Phased-Updatesz,Update-Manager::Never-Include-Phased-UpdatesNc                    |r|nt        j                         | _        d| _        g | _        g | _        g | _        g | _        g | _        g | _	        g | _
        d| _        t        j                         | _        g | _        	 t        | j                         5 }|j#                         | _        d d d        dt*        j,                  v r't*        j,                  d   rt*        j,                  d   }nd}|j/                  d      D cg c]"  }t*        j0                  j3                  |d      $ c}| _        dt*        j,                  v r,t*        j,                  j7                  d      | _        i | _        y d| _        i | _        y # 1 sw Y   xY w# t&        $ rD t        | j(                        5 }|j#                         | _        d d d        n# 1 sw Y   nxY wY "w xY wc c}w )Nr   XDG_DATA_DIRSz/usr/local/share/:/usr/share/:applicationsXDG_CURRENT_DESKTOP )r   get_distdistdistUpgradeWouldDelete
oem_groupsupdate_groupssecurity_groupskernel_autoremove_groupsduplicate_groupsubuntu_pro_groupsubuntu_pro_fake_groupsnum_updatesrandomRandomignored_phased_updatesopenUNIQ_MACHINE_ID_FILEreadmachine_uniq_idFileNotFoundErrorUNIQ_MACHINE_ID_FILE_FALLBACKosenvironsplitpathjoinapplication_dirsgetcurrent_desktopdesktop_cache)r   parentr   f	data_dirsbases         r   r   zUpdateList.__init__   s    Denn&6	&'#!(*% "!#&(#mmo&(#	0d//0 0A'(vvx$0 bjj(RZZ-H

?3I7I;D??3;O!
37BGGLL~.!
 !BJJ.#%::>>2G#HD    $&D %0 0  	0d889 0Q'(vvx$0 0 0	0!
sH   >F E;)F ?'G;F F G%G;	GG		GGc                     |j                  d      syt        j                  j                  |      }| j                  D ]  }|j                  |      s y y)Nz.desktopFT)endswithr   r   abspathr   
startswith)r   	file_pathapp_dirs      r   _file_is_applicationzUpdateList._file_is_application  sT     !!*- GGOOI.	,, 	G##G,	 r   c                     d}t         j                  j                  |j                               }t         j                  j	                  |      d   }|j                         r|dz  }||j                  k(  r|dz  }|S )Nr         )r   r   basenameget_filenamesplitextshould_showr   )r   rl   r   scoredesktop_fileapplication_ids         r   _rate_application_for_packagez(UpdateList._rate_application_for_package  sl    ww''(@(@(BC)),7:""$QJE)
r   c                 l   g }g }|j                   D ]%  }| j                  |      s|j                  |       ' |j                  | j                  v r|| j                  |j                     z  }|D ]h  }	 t
        j                  j                  |      }|j                  | j                         | j                  ||      }|dkD  sV|j                  ||f       j |j                  d d       t        |      dkD  r|d   d   S y # t        $ r%}t        j                  d|d|       Y d }~d }~ww xY w)NzError loading .desktop file : r   c                     | d   S r^   r   )apps    r   r.   z9UpdateList._get_application_for_package.<locals>.<lambda>=  s
    A r   T)r0   reverser   )installed_filesr   rS   r   r   r   DesktopAppInfonew_from_filenameset_desktop_envr   	ExceptionrI   warningr   sortrK   )	r   r   desktop_filesrated_applicationsinstalled_filer   rl   er   s	            r   _get_application_for_packagez'UpdateList._get_application_for_package#  s@   !11 	5N((8$$^4	5 88t)))T//99M) 	@L	!00BB  ++D,@,@A 66{CHEqy"))5+*>?	@ 	$6E!"Q&%a(++  <H!L 	s   3:D	D3D..D3c                    |st        j                  d       y t        |      dk(  r| j                  |d   z  }n| j                  dz  }t	        j
                  |      D ]t  }	 |j                  d      d   j                  d      d   }||v s/| j                  j                  |g       j                  |       t        j                  d	|d
|       v y # t        $ r t        j                  d|z         Y w xY w)Nz;_populate_desktop_cache called with empty list of packages.r   r   */r   z7Could not extract package name from '%s'. File ignored.zApp candidate for r   )rI   r   rK   APP_INSTALL_PATTERNglobiglobr   
IndexErrorerrorr   rR   rS   rJ   )r   	pkg_namespatternr   r   s        r   _populate_desktop_cachez"UpdateList._populate_desktop_cacheC  s    OO ^q ..1=G ..4G JJw/ 	PL
"((-b177<Q? i""--c26==lKCNO	P   $&23 s   "&C!C:9C:c                    | j                   sy|j                  j                  }|j                  j                  D ]  }|r8t        j
                  j                  |j                  |j                        dk  r=|j                  D ]\  \  }}|j                  d| j                   z  k(  s#|j                  dk(  s3|j                  j                  j                  |      }|s[  y  y)a  This will test if the pkg is a security update.
        This includes if there is a newer version in -updates, but also
        an older update available in -security.  For example, if
        installed pkg A v1.0 is available in both -updates (as v1.2) and
        -security (v1.1). we want to display it as a security update.

        :return: True if the update comes from the security pocket
        Fr   z%s-securityUbuntuT)r   _pkgcurrent_verversion_listaptapt_pkgversion_comparever_str	file_listarchiveorigin_pcache_list
find_index)r   r   inst_verververFileIterindex	indexfiles          r   _is_security_updatezUpdateList._is_security_updated  s     yy88''88(( 	$C KK//X=M=MN (+ $$e''=499+DD#**h6 # 1 1 < <[ II #$	$" r   c           	         t         j                  j                  j                  | j                  d      ry| j
                  |j                  j                  v rt         j                  j                  j                  | j                  d      rt        j                  d       y| j                  j                  |j                  j                  d|j                  j                  d| j                         |j                  j                  | j
                     }| j                  j!                  dd      }|t#        |      kD  r*t        j                  d|j$                  d|d	|d
       yy)zThis will test if the pkg is a phased update and if
        it needs to get installed or ignored.

        :return: True if the updates should be ignored
        Fz,holding back phased update per configurationT-r   d   zholding back phased update z (z < ))r   r   configfind_bALWAYS_INCLUDE_PHASED_UPDATESPHASED_UPDATES_KEYrH   recordNEVER_INCLUDE_PHASED_UPDATESrI   infor   seedsource_nameversionr   randintintr   )r   r   	threshold
percentages       r   _is_ignored_phased_updatez$UpdateList._is_ignored_phased_update  s    ;;$$..
 ""cmm&:&::{{!!((115 KL
 KK MM--MM))((	 ,,T-D-DEI,,Q4JC	N*xxJ8 r   c           
         |sg S g }g }g }|D ]F  }	| j                  |	      }
|
 t        |	|
||      }|j                  |       6|j                  |	       H t        |      D ]w  }	g }|D ]7  }|j	                  |	||      s|j                  |       t        |      dkD  s7 n t        |      dk(  sP|d   j                  |	|||       |j                  |	       y d }|rd}t        j                  ddj                  |D cg c]  }d|z   	 c}      z   dz         }t        d d d ||      }t        j                  |      }|d	d
g}|D ]9  }	|j                  |	j                        s|j                  |	j                         ; |D ]  }	|	|v s|r|j                  ||	            |D ]R  }	|j	                  |	||      r!|t!        |||      }|j                  |	       7|j                  t#        |	||             T |j%                  d        |j%                  d        |r|j                  |       ||z   S c c}w )Nr   r   )zlinux$zlinux-.*-buildinfo.*zlinux-.*-dev.*zlinux-.*-generic.*zlinux-.*-headers.*zlinux-.*-hwe.*zlinux-.*-gcp.*zlinux-.*-kernel.*zlinux-.*-lowlatency.*zlinux-.*-modules.*zlinux-.*-raspi.*zlinux-.*-tools.*zlinux-.*-virtual.*zlinux-base.*zlinux-crashdump.*zlinux-doc.*(|^r   rx   zubuntu-standardzubuntu-minimalc                 6    | j                   j                         S r
   r*   r,   s    r   r.   z)UpdateList._make_groups.<locals>.<lambda>      afflln r   r/   c                 6    | j                   j                         S r
   r*   r,   s    r   r.   z)UpdateList._make_groups.<locals>.<lambda>  r  r   )r   rg   rS   listrZ   rK   r'   removerecompiler   r!   r   get_ubuntu_flavor_packagematchr   rv   rs   r   )r   r=   pkgsr>   r   r   ungrouped_pkgs
app_groups
pkg_groupsr   r   	app_group
dep_groupsgroupsystem_grouplinux_namesnlinux_regexpubuntu_base_groupflavor_packageubuntu_base_pkgss                        r   _make_groupszUpdateList._make_groups  s   I

 	+C33C8C2i	 !!),%%c*	+ ' 		+CJ# &&sE3EF%%e,:*	
 :!#1!!#u.@)L%%c*		+ K$ ::chh=Aa=>>DL !,dD)Y! #<<5IN!  
  6%%chh/$++CHH56 ( 6%<	 &))%*56 & $22 2 $+'8!9i( !$$S)%%*3	9E 	4545l+J&&O  >s   H=c                 h   g | _         |j                         | _        g }g }g }g }g }	g }
 G d d       G fdd      }g }g }|D ]4  \  }}}}|r|j                  |       |j                   ||||             6 |D ]  }|j                  s|j
                  rt        |j                  dd       t        d|j                         J| j                  |      }|s-| j                  |      r| j                  j                  |       t        j                  |j                  d      r|j                  |       |j                  |v }|r|j                  |       n%|r|j                  |       n|j                  |       | j                  dz   | _        |j                  r?|j                  s3|j
                  s'| j                   j                  |j                         a|j                   rg|j"                  r[|j"                  j%                  |j                        r6|j&                  j%                  |j                        s|	j                  |       |j                  |v s|
j                  |        |	D ]  }|j)                           |
D ]  }|j)                           | j                  D ]  }|j+                           |s|s|r6||z   |	z   |
z   |z   D cg c]  }|j                   }}| j-                  |       | j/                  |||      | _        | j/                  |||      | _        | j/                  |||      | _        | j/                  ||	|d	      | _        | j/                  ||
|d	      | _        | j/                  |||d
      | _        | j/                  |||      | _        y c c}w )Nc                       e Zd Zd Zy)8UpdateList.update.<locals>.FakeUbuntuProPackageCandidatec                 f    || _         || _        || _        || _        || _        d| _        i | _        y NF)r   summaryr   r   rb   downloadabler   )r   r   r   rb   s       r   r   zAUpdateList.update.<locals>.FakeUbuntuProPackageCandidate.__init__  s6    #. *#. & 	$)! r   Nr   r   r   r   FakeUbuntuProPackageCandidater!    s    !r   r&  c                   $    e Zd Z fdZd Zd Zy)/UpdateList.update.<locals>.FakeUbuntuProPackagec                 j    || _          |||      | _        d| _        d| _        d| _        g | _        y r#  )r   rH   r   r   r   r   )r   package_namer   rb   r&  s       r   r   z8UpdateList.update.<locals>.FakeUbuntuProPackage.__init__'  s?    (	!> '4" ',#&+#%*"')$r   c                      y r
   r   r   s    r   mark_installz<UpdateList.update.<locals>.FakeUbuntuProPackage.mark_install1      r   c                      y r
   r   r   s    r   mark_deletez;UpdateList.update.<locals>.FakeUbuntuProPackage.mark_delete4  r-  r   N)r   r   r   r   r,  r/  )r&  s   r   FakeUbuntuProPackager(  &  s    *r   r0  originsz1WARNING: upgradable but no candidate.origins?!?: z
oem-*-metar   TF)r   )	held_backsaveDistUpgrader   rS   is_upgradabler   rc   rH   printr   r   r  r   fnmatchr   r   is_auto_removableversioned_kernel_pkgs_regexpr  running_kernel_pkgs_regexpr/  	mark_keepr   r  r   r   r   r   r   r   r   )r   r=   r>   duplicate_packagesua_security_packagesoem_pkgspro_pkgssecurity_pkgsupgrade_pkgskernel_autoremove_pkgsduplicate_pkgsr0  fake_ua_packagesua_packages_namesr*  r   rb   r%  r   is_security_updatecomes_from_propr   r&  s                          @r   updatezUpdateList.update	  s     ',&;&;&=#!#	! 	!	 	"  "	 
!((6 ''(wE	  +	+C  C$6$63==)T:B K 
 &*%=%=c%B")55c:33::3? ??388\:OOC(!$->!>!OOC('!((- '',#'#3#3a#7   ""c&8&8%%chh/$$2266<<SXXF88>>sxxH&--c2xx--%%c*W+	+^ * 	COO	! 	COO	.. 	CMMO	 LH '() !! 	 I  ((3++8/
 "..<!3
  $00="4 
 )-(9(9)+=t)
% !% 1 1>#5t!
 '+&7&7#%75 '8 '
# "&!2!28/"
7s   N/r
   )FT)r   r   r   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r  r  rH  r   r   r   r   r      s     4 -$>!G 	8 "
 	7 !! F@PB>&P GL#\'B  S
r   r   )warningsfilterwarningsDeprecationWarningr   ry   r   r6  rI   rO   r   r   r   r  gi.repositoryr   UpdateManager.Corer   r   r!   rg   rs   rv   r|   r   r   r   r   <module>rO     s   2    ,.@ ! 
    	   	  $* *g* gT
[ 

 

 
   Q
 Q
r   