
    Dc``?                         d dl mZ d dlmZ d dlZd dlZ G d de          Z G d de          Z	 G d d	e	          Z
ddZdS )    )ndbm)_Nc                       e Zd ZdS )DbErrorN)__name__
__module____qualname__     '/usr/share/apt-listchanges/ALCSeenDb.pyr   r       s        Dr   r   c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	seendb_dummyzYInterface for seen database.
       Also used when path to the database is not configuredc                     dS )NFr
   self
srcpackages     r   __contains__zseendb_dummy.__contains__&   s    ur   c                     d S Nr
   r   s     r   __getitem__zseendb_dummy.__getitem__)       r   c                     d S r   r
   r   r   versions      r   __setitem__zseendb_dummy.__setitem__,   r   r   c                     d S r   r
   r   s    r   close_dbzseendb_dummy.close_db/   r   r   c                     d S r   r
   r   s    r   apply_changeszseendb_dummy.apply_changes2   r   r   c                 :    t          t          d                    )NzPath to the seen database is unknown.
Please either specify it with --save-seen option
or pass --profile=apt to have it read from the configuration file.)r   r   r   s    r   dumpzseendb_dummy.dump5   s+    a ] ^ ^ _ _ 	_r   N)
r   r   r	   __doc__r   r   r   r   r    r"   r
   r   r   r   r   #   s        @ @          _ _ _ _ _r   r   c                   H     e Zd ZdZd
 fd	Zd Zd Zd Zd Zd Z	d	 Z
 xZS )seendbz!Class to manage the seen databaseFc                    t                                                       d| _        |dd          | j        k    r't          t	          d          || j        dz            |d d         | _        	 |rdnd}t          j        | j        |d          | _        d| j        v  nB# t          $ r5}t          t	          d	          |t          |          d
z            |d }~ww xY wi | _        d S )Nz.dbz)Database %(db)s does not end with %(ext)s)dbextrc  zfoo%0z*Database %(db)s failed to load: %(errmsg)s)r(   errmsg)super__init__
_extensionr   r   _dbpathr   open_seen	Exceptionstr	_seen_new)r   pathreadOnlymodeex	__class__s        r   r/   zseendb.__init__<   s   9''!GHH%)$/BBC D D D crc	G"+33D4<u==DJtz!!! 	G 	G 	G!HII%)SWW==> ? ?DFG	G
 s   3/B# #
C"-0CC"c                     || j         v S r   )r3   r   s     r   r   zseendb.__contains__P   s    TZ''r   c                 @    | j         |                                         S r   )r3   decoder   s     r   r   zseendb.__getitem__S   s    z*%,,...r   c                     | j                             |d                                          |k    r|| j        |<   d S d S )Nr   )r3   getr>   r6   r   s      r   r   zseendb.__setitem__V   sC    :>>*c**1133w>>)0DN:&&& ?>r   c                 F    | j                                          d | _         d S r   )r3   closer   s    r   r   zseendb.close_db[   s!    



r   c                 r     j         sd S  fd} |d           |d           |d          }}}t          j                            |          rt	          j        ||           t          j         j        dz   dd          } j         	                                D ]
\  }}|||<   |
                                 t          j                            |          rt          j        |           t          j                            |          rt          j        ||           t          j        ||           d S )Nc                 (    j         | z   j        z   S r   )r1   r0   )argr   s    r   mkz seendb.apply_changes.<locals>.mkd   s    <#%77r   z-old z-newr+   r,   )r6   osr7   isfileshutilcopyr   r2   r1   itemsrB   unlinklinkrename)r   rF   oldcurnewseenkeyvalues   `       r   r    zseendb.apply_changes_   s4   ~ 	F	8 	8 	8 	8 	8FRRVVRRZZ#S
 7>># 	"KS!!! y.U;; N0022 	 	LS%DII

 7>># 	IcNNN7>># 	GC
	#sr   c                     t          | j                                                  D ]G}| j        |         }t          |                                d|                                           Hd S )N )sortedr3   keysprintr>   )r   rT   rU   s      r   r"   zseendb.dump{   sf    $*//++,, 	< 	<CJsOESZZ\\\\5<<>>>:;;;;	< 	<r   F)r   r   r	   r#   r/   r   r   r   r   r    r"   __classcell__)r;   s   @r   r%   r%   :   s        ++     (( ( (/ / /1 1 1
    8< < < < < < <r   r%   Fc                 V    | j         rt          | j         |          S t                      S r   )	save_seenr%   r   )configr8   s     r   make_seen_dbr`      s*     2f&111>>r   r[   )dbmr   ALChacksr   rH   rJ   r4   r   objectr   r%   r`   r
   r   r   <module>rd      s   4             				 	 	 	 	 	i 	 	 	_ _ _ _ _6 _ _ _.D< D< D< D< D<\ D< D< D<N     r   