HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python3/dist-packages/landscape/lib/apt/package/__pycache__/store.cpython-38.pyc
U

���c^B�@s�dZddlZzddlZWn ek
r8ddlmZYnXddlmZmZddl	m
Z
ddlmZGdd�de
�ZGd	d
�d
e
�ZGdd�de�ZGd
d�de�ZGdd�de�ZGdd�de�ZGdd�de�Zdd�Zdd�Zdd�ZdS)zEProvide access to the persistent data used by L{PackageTaskHandler}s.�N)�dbapi2)�	iteritems�long)�bpickle)�with_cursorc@seZdZdZdS)�UnknownHashIDRequestz$Raised for unknown hash id requests.N��__name__�
__module__�__qualname__�__doc__�r
r
�A/usr/lib/python3/dist-packages/landscape/lib/apt/package/store.pyrsrc@seZdZdZdS)�InvalidHashIdDbzARaised when trying to add an invalid hash=>id lookaside database.Nrr
r
r
rrsrc@sleZdZdZdZdd�Zdd�Zedd��Zed	d
��Z	edd��Z
ed
d��Zedd��Zedd��Z
dS)�HashIdStoreaC{HashIdStore} stores package hash=>id mappings in a file.

    The file is a SQLite database that contains a single table called "hash".
    The table schema is defined in L{ensure_hash_id_schema}.

    @param filename: The file where the mappings are persisted to.
    NcCs
||_dS�N)�	_filename��self�filenamer
r
r�__init__!szHashIdStore.__init__cCst|j�dSr)�ensure_hash_id_schema�_db�rr
r
r�_ensure_schema$szHashIdStore._ensure_schemacCs,t|�D]\}}|�d|t�|�f�qdS)zbSet the ids of a set of hashes.

        @param hash_ids: a C{dict} of hash=>id mappings.
        zREPLACE INTO hash VALUES (?, ?)N)r�execute�sqlite3�Binary)r�cursorZhash_ids�hash�idr
r
r�set_hash_ids's�zHashIdStore.set_hash_idscCs,|�dt�|�f�|��}|r(|dSdS)z�Return the id associated to C{hash}, or C{None} if not available.

        @param hash: a C{bytes} representing a hash.
        � SELECT id FROM hash WHERE hash=?rN)rrr�fetchone)rrr�valuer
r
r�get_hash_id1s
�zHashIdStore.get_hash_idcCs|�d�dd�|��D�S)z=Return a C{dict} holding all the available hash=>id mappings.zSELECT hash, id FROM hashcSsi|]}t|d�|d�qS�r���bytes��.0�rowr
r
r�
<dictcomp>Bs
z,HashIdStore.get_hash_ids.<locals>.<dictcomp>�r�fetchall�rrr
r
r�get_hash_ids>s
zHashIdStore.get_hash_idscCs<t|ttf�st�|�d|f�|��}|r8t|d�SdS)zAReturn the hash associated to C{id}, or C{None} if not available.z SELECT hash FROM hash WHERE id=?rN)�
isinstance�intr�AssertionErrorrr#r))rrr r$r
r
r�get_id_hashDszHashIdStore.get_id_hashcCs|�d�dS)zDelete all hash=>id mappings.zDELETE FROM hashN�rr0r
r
r�clear_hash_idsNszHashIdStore.clear_hash_idscCs6z|�dd�Wn tjk
r0t|j��YnXdS)z�Check database integrity.

        @raise: L{InvalidHashIdDb} if the filenme passed to the constructor is
            not a SQLite database or does not have a table called "hash" with
            a compatible schema.
        r")�N)rr�
DatabaseErrorrrr0r
r
r�check_sanitySszHashIdStore.check_sanity)r	r
rrrrrrr!r%r1r5r7r:r
r
r
rrs 
	


	
rcs�eZdZdZ�fdd�Z�fdd�Zdd�Zdd	�Zd
d�Zdd
�Z	e
dd��Ze
dd��Ze
dd��Z
e
dd��Ze
dd��Ze
dd��Ze
dd��Ze
dd��Ze
dd��Ze
d d!��Ze
d"d#��Ze
d$d%��Ze
d&d'��Ze
d(d)��Ze
d*d+��Ze
d,d-��Ze
d.d/��Ze
d0d1��Ze
d2d3��Ze
d4d5��Ze
d6d7��Ze
d8d9��Z e
d:d;��Z!e
d<d=��Z"e
d>d?��Z#e
d@dA��Z$e
dBdC��Z%e
dDdE��Z&e
dFdG��Z'e
dHdI��Z(e
dMdKdL��Z)�Z*S)N�PackageStorea�Persist data about system packages and L{PackageTaskHandler}'s tasks.

    This class extends L{HashIdStore} by adding tables to the SQLite database
    backend for storing information about the status of the system packages and
    about the tasks to be performed by L{PackageTaskHandler}s.

    The additional tables and schemas are defined in L{ensure_package_schema}.

    @param filename: The file where data is persisted to.
    cstt|��|�g|_dSr)�superr;r�_hash_id_storesr��	__class__r
rrmszPackageStore.__init__cstt|���t|j�dSr)r<r;r�ensure_package_schemarrr>r
rrqszPackageStore._ensure_schemac
CsLt|�}z|��Wn&tk
r:}z|�W5d}~XYnX|j�|�dS)a 
        Attach an additional "lookaside" hash=>id database.

        This method can be called more than once to attach several
        hash=>id databases, which will be queried *before* the main
        database, in the same the order they were added.

        If C{filename} is not a SQLite database or does not have a
        table called "hash" with a compatible schema, L{InvalidHashIdDb}
        is raised.

        @param filename: a secondary SQLite databases to look for pre-canned
                         hash=>id mappings.
        N)rr:rr=�append)rrZ
hash_id_store�er
r
r�add_hash_id_dbuszPackageStore.add_hash_id_dbcCst|j�dkS)z?Return C{True} if one or more lookaside databases are attached.r)�lenr=rr
r
r�has_hash_id_db�szPackageStore.has_hash_id_dbcCs<t|t�st�|jD]}|�|�}|r|Sqt�||�S)a	Return the id associated to C{hash}, or C{None} if not available.

        This method composes the L{HashIdStore.get_hash_id} methods of all
        the attached lookaside databases, falling back to the main one, as
        described in L{add_hash_id_db}.
        )r2r)r4r=r%r)rr�storer r
r
rr%�s


zPackageStore.get_hash_idcCs2|jD]}|�|�}|dk	r|Sqt�||�S)a'Return the hash associated to C{id}, or C{None} if not available.

        This method composes the L{HashIdStore.get_id_hash} methods of all
        the attached lookaside databases, falling back to the main one in
        case the hash associated to C{id} is not found in any of them.
        N)r=r5r)rr rFrr
r
rr5�s



zPackageStore.get_id_hashcCs|D]}|�d|f�qdS)Nz!REPLACE INTO available VALUES (?)r6�rr�idsr r
r
r�
add_available�szPackageStore.add_availablecCs&d�dd�|D��}|�d|�dS)N�,css|]}tt|��VqdSr��strr3�r+r r
r
r�	<genexpr>�sz0PackageStore.remove_available.<locals>.<genexpr>z&DELETE FROM available WHERE id IN (%s)��joinr�rrrHZid_listr
r
r�remove_available�szPackageStore.remove_availablecCs|�d�dS)NzDELETE FROM availabler6r0r
r
r�clear_available�szPackageStore.clear_availablecCs|�d�dd�|��D�S)NzSELECT id FROM availablecSsg|]}|d�qS�rr
r*r
r
r�
<listcomp>�sz.PackageStore.get_available.<locals>.<listcomp>r.r0r
r
r�
get_available�s
zPackageStore.get_availablecCs|D]}|�d|f�qdS)Nz)REPLACE INTO available_upgrade VALUES (?)r6rGr
r
r�add_available_upgrades�sz#PackageStore.add_available_upgradescCs&d�dd�|D��}|�d|�dS)NrJcss|]}tt|��VqdSrrKrMr
r
rrN�sz9PackageStore.remove_available_upgrades.<locals>.<genexpr>z.DELETE FROM available_upgrade WHERE id IN (%s)rOrQr
r
r�remove_available_upgrades�s�z&PackageStore.remove_available_upgradescCs|�d�dS)NzDELETE FROM available_upgrader6r0r
r
r�clear_available_upgrades�sz%PackageStore.clear_available_upgradescCs|�d�dd�|��D�S)Nz SELECT id FROM available_upgradecSsg|]}|d�qSrTr
r*r
r
rrU�sz7PackageStore.get_available_upgrades.<locals>.<listcomp>r.r0r
r
r�get_available_upgrades�s
z#PackageStore.get_available_upgradescCs|D]}|�d|f�qdS)Nz%REPLACE INTO autoremovable VALUES (?)r6rGr
r
r�add_autoremovable�szPackageStore.add_autoremovablecCs&d�dd�|D��}|�d|�dS)NrJcss|]}tt|��VqdSrrKrMr
r
rrN�sz4PackageStore.remove_autoremovable.<locals>.<genexpr>z*DELETE FROM autoremovable WHERE id IN (%s)rOrQr
r
r�remove_autoremovable�sz!PackageStore.remove_autoremovablecCs|�d�dS)NzDELETE FROM autoremovabler6r0r
r
r�clear_autoremovable�sz PackageStore.clear_autoremovablecCs|�d�dd�|��D�S)NzSELECT id FROM autoremovablecSsg|]}|d�qSrTr
r*r
r
rrU�sz2PackageStore.get_autoremovable.<locals>.<listcomp>r.r0r
r
r�get_autoremovable�s
zPackageStore.get_autoremovablecCs|D]}|�d|f�qdS)Nz REPLACE INTO security VALUES (?)r6rGr
r
r�add_security�szPackageStore.add_securitycCs&d�dd�|D��}|�d|�dS)NrJcss|]}tt|��VqdSrrKrMr
r
rrN�sz/PackageStore.remove_security.<locals>.<genexpr>z%DELETE FROM security WHERE id IN (%s)rOrQr
r
r�remove_security�szPackageStore.remove_securitycCs|�d�dS)NzDELETE FROM securityr6r0r
r
r�clear_security�szPackageStore.clear_securitycCs|�d�dd�|��D�S)NzSELECT id FROM securitycSsg|]}|d�qSrTr
r*r
r
rrU�sz-PackageStore.get_security.<locals>.<listcomp>r.r0r
r
r�get_security�s
zPackageStore.get_securitycCs|D]}|�d|f�qdS)Nz!REPLACE INTO installed VALUES (?)r6rGr
r
r�
add_installed�szPackageStore.add_installedcCs&d�dd�|D��}|�d|�dS)NrJcss|]}tt|��VqdSrrKrMr
r
rrNsz0PackageStore.remove_installed.<locals>.<genexpr>z&DELETE FROM installed WHERE id IN (%s)rOrQr
r
r�remove_installedszPackageStore.remove_installedcCs|�d�dS)NzDELETE FROM installedr6r0r
r
r�clear_installedszPackageStore.clear_installedcCs|�d�dd�|��D�S)NzSELECT id FROM installedcSsg|]}|d�qSrTr
r*r
r
rrUsz.PackageStore.get_installed.<locals>.<listcomp>r.r0r
r
r�
get_installeds
zPackageStore.get_installedcCs|�d�dd�|��D�S)z+Get the package ids of all locked packages.zSELECT id FROM lockedcSsg|]}|d�qSrTr
r*r
r
rrUsz+PackageStore.get_locked.<locals>.<listcomp>r.r0r
r
r�
get_lockeds
zPackageStore.get_lockedcCs|D]}|�d|f�qdS)z9Add the given package ids to the list of locked packages.zREPLACE INTO locked VALUES (?)Nr6rGr
r
r�
add_lockedszPackageStore.add_lockedcCs&d�dd�|D��}|�d|�dS)NrJcss|]}tt|��VqdSrrKrMr
r
rrNsz-PackageStore.remove_locked.<locals>.<genexpr>z#DELETE FROM locked WHERE id IN (%s)rOrQr
r
r�
remove_lockedszPackageStore.remove_lockedcCs|�d�dS)z/Remove all the package ids in the locked table.zDELETE FROM lockedNr6r0r
r
r�clear_locked"szPackageStore.clear_lockedcCs6t|�}|�dt�t�|��t��f�t|j|j	�S)Nz<INSERT INTO hash_id_request (hashes, timestamp) VALUES (?,?))
�listrrrr�dumps�time�
HashIDRequestr�	lastrowid)rr�hashesr
r
r�add_hash_id_request's
�z PackageStore.add_hash_id_requestcCs*|�d|f�|��st|��t|j|�S)Nz(SELECT 1 FROM hash_id_request WHERE id=?)rr#rrnr)rrZ
request_idr
r
r�get_hash_id_request/s�z PackageStore.get_hash_id_requestcs |�d��fdd�|��D�S)NzSELECT id FROM hash_id_requestcsg|]}t�j|d��qSrT)rnrr*rr
rrU:sz6PackageStore.iter_hash_id_requests.<locals>.<listcomp>r.r0r
rr�iter_hash_id_requests7s
z"PackageStore.iter_hash_id_requestscCs|�d�dS)NzDELETE FROM hash_id_requestr6r0r
r
r�clear_hash_id_requests<sz#PackageStore.clear_hash_id_requestscCs4t�|�}|�d|t��t�|�f�t|j|j�S)Nz8INSERT INTO task (queue, timestamp, data) VALUES (?,?,?))	rrlrrmrr�PackageTaskrro)rr�queue�datar
r
r�add_task@s
�zPackageStore.add_taskcCs.|�d|f�|��}|r*t|j|d�SdS)Nz4SELECT id FROM task WHERE queue=? ORDER BY timestampr)rr#rur)rrrvr,r
r
r�
get_next_taskHs�zPackageStore.get_next_taskr
cCs"|�dd�dd�|D���dS)Nz%DELETE FROM task WHERE id NOT IN (%s)rJcSsg|]}t|j��qSr
)rLr )r+Ztaskr
r
rrUTsz,PackageStore.clear_tasks.<locals>.<listcomp>)rrP)rrZexcept_tasksr
r
r�clear_tasksQs�zPackageStore.clear_tasks)r
)+r	r
rrrrrCrEr%r5rrIrRrSrVrWrXrYrZr[r\r]r^r_r`rarbrcrdrerfrgrhrirjrqrrrsrtrxryrz�
__classcell__r
r
r>rr;as�






























r;csPeZdZdZ�fdd�Zedd��Zedd��Zedd	��Zed
d��Z	�Z
S)�FakePackageStorezT
    A L{PackageStore} with an additional message table to store sent messages.
    cstt|���t|j�dSr)r<r|r�ensure_fake_package_schemarrr>r
rr\szFakePackageStore._ensure_schemacCs|�dt�t�|��f�dS)Nz%INSERT INTO message (data) VALUES (?))rrrrrl)rr�messager
r
r�save_message`s�zFakePackageStore.save_messagecCsdd�|�d���D�S)NcSsg|]}|d�qSrTr
r*r
r
rrUgsz4FakePackageStore.get_message_ids.<locals>.<listcomp>zSELECT id FROM messager.r0r
r
r�get_message_idses�z FakePackageStore.get_message_idscCs|�ddd�|D��dS)Nz#INSERT INTO message (id) VALUES (?)cSsg|]
}|f�qSr
r
)r+�
message_idr
r
rrUnsz5FakePackageStore.save_message_ids.<locals>.<listcomp>)Zexecutemany)rr�message_idsr
r
r�save_message_idsjs�z!FakePackageStore.save_message_idscCs:d�dgt|��}|�d|t|����}dd�|D�S)Nz, �?z9SELECT id, data FROM message WHERE id IN (%s) ORDER BY idcSs g|]}|dt|d�f�qSr&r(r*r
r
rrUvsz8FakePackageStore.get_messages_by_ids.<locals>.<listcomp>)rPrDr�tupler/)rrr�Zparams�resultr
r
r�get_messages_by_idsps��z$FakePackageStore.get_messages_by_ids)r	r
rrrrrr�r�r�r{r
r
r>rr|Ws


r|c@steZdZdd�Zeedd���Zedd��Zedd��Zeee�Z	ed	d
��Z
edd��Zee
e�Zed
d��Z
dS)rncCs||_||_dSr)rr )r�dbr r
r
rr{szHashIDRequest.__init__cCs&|�d|jf�t�t|��d��S)Nz-SELECT hashes FROM hash_id_request WHERE id=?r)rr r�loadsr)r#r0r
r
rrps�zHashIDRequest.hashescCs|�d|jf�|��dS)Nz0SELECT timestamp FROM hash_id_request WHERE id=?r�rr r#r0r
r
r�_get_timestamp�s�zHashIDRequest._get_timestampcCs|�d||jf�dS)Nz1UPDATE hash_id_request SET timestamp=? WHERE id=?�rr �rrr$r
r
r�_set_timestamp�s�zHashIDRequest._set_timestampcCs|�d|jf�|��dS)Nz1SELECT message_id FROM hash_id_request WHERE id=?rr�r0r
r
r�_get_message_id�s�zHashIDRequest._get_message_idcCs|�d||jf�dS)Nz2UPDATE hash_id_request SET message_id=? WHERE id=?r�r�r
r
r�_set_message_id�s�zHashIDRequest._set_message_idcCs|�d|jf�dS)Nz&DELETE FROM hash_id_request WHERE id=?r�r0r
r
r�remove�szHashIDRequest.removeN)r	r
rr�propertyrrpr�r��	timestampr�r�r�r�r
r
r
rrnys 





rnc@s eZdZdd�Zedd��ZdS)rucCsf||_||_|��}z|�d|f�|��}W5|��X|d|_|d|_t�	t
|d��|_dS)Nz2SELECT queue, timestamp, data FROM task WHERE id=?rr'�)rr r�closerr#rvr�rr�r)rw)rr�r rr,r
r
rr�s�


zPackageTask.__init__cCs|�d|jf�dS)NzDELETE FROM task WHERE id=?r�r0r
r
rr��szPackageTask.removeN)r	r
rrrr�r
r
r
rru�sruc	CsX|��}z|�d�Wn,tjtjfk
rB|��|��YnX|��|��dS)zeCreate all tables needed by a L{HashIdStore}.

    @param db: A connection to a SQLite database.
    z<CREATE TABLE hash (id INTEGER PRIMARY KEY, hash BLOB UNIQUE)N�rrr�OperationalErrorr9r��rollback�commit�r�rr
r
rr�srcCs�|��}zT|�d�|�d�|�d�|�d�|�d�|�d�|�d�|�d�Wn&tjk
r�|��|��YnX|��|��d	S)
zfCreate all tables needed by a L{PackageStore}.

    @param db: A connection to a SQLite database.
    z.CREATE TABLE security (id INTEGER PRIMARY KEY)z3CREATE TABLE autoremovable (id INTEGER PRIMARY KEY)z,CREATE TABLE locked (id INTEGER PRIMARY KEY)z/CREATE TABLE available (id INTEGER PRIMARY KEY)z7CREATE TABLE available_upgrade (id INTEGER PRIMARY KEY)z/CREATE TABLE installed (id INTEGER PRIMARY KEY)zkCREATE TABLE hash_id_request (id INTEGER PRIMARY KEY, timestamp TIMESTAMP, message_id INTEGER, hashes BLOB)zVCREATE TABLE task (id INTEGER PRIMARY KEY, queue TEXT, timestamp TIMESTAMP, data BLOB)N)rrrr�r�r�r�r�r
r
rr@�s	






r@c	CsX|��}z|�d�Wn,tjtjfk
rB|��|��YnX|��|��dS)Nz8CREATE TABLE message (id INTEGER PRIMARY KEY, data BLOB)r�r�r
r
rr}�sr})rrmr�ImportErrorZ	pysqlite2rZtwisted.python.compatrrZ
landscape.librZlandscape.lib.storer�	Exceptionrr�objectrr;r|rnrurr@r}r
r
r
r�<module>s&Jw",%