HOME


Mini Shell 1.0
DIR: /lib/python3/dist-packages/landscape/lib/apt/package/__pycache__/
Upload File :
Current File : //lib/python3/dist-packages/landscape/lib/apt/package/__pycache__/store.cpython-312.pyc
�

�~�e�A��
�dZddlZ	ddlZddlmZmZddl	m
Z
ddlmZGd�de
�ZGd	�d
e
�ZGd�d�ZGd
�de�ZGd�de�ZGd�d�ZGd�d�Zd�Zd�Zd�Zy#e$r	ddlmZY�uwxYw)zEProvide access to the persistent data used by L{PackageTaskHandler}s.�N)�dbapi2)�	iteritems�long)�bpickle)�with_cursorc��eZdZdZy)�UnknownHashIDRequestz$Raised for unknown hash id requests.N��__name__�
__module__�__qualname__�__doc__���A/usr/lib/python3/dist-packages/landscape/lib/apt/package/store.pyr	r	s��.rr	c��eZdZdZy)�InvalidHashIdDbzARaised when trying to add an invalid hash=>id lookaside database.Nr
rrrrrs��Krrc��eZdZdZdZd�Zd�Zed��Zed��Z	ed��Z
ed��Zed	��Zed
��Z
y)�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.
    Nc��||_y�N)�	_filename)�self�filenames  r�__init__zHashIdStore.__init__"s	��!��rc�.�t|j�yr)�ensure_hash_id_schema�_db�rs r�_ensure_schemazHashIdStore._ensure_schema%s���d�h�h�'rc�x�t|�D],\}}|jd|tj|�f��.y)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�cursor�hash_ids�hash�ids     r�set_hash_idszHashIdStore.set_hash_ids(s<��"�(�+�	�H�D�"��N�N�1��W�^�^�D�)�*�
�	rc�~�|jdtj|�f�|j�}|r|dSy)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)r"r#r$�fetchone)rr%r'�values    r�get_hash_idzHashIdStore.get_hash_id4s?��	���.�
�^�^�D�
!�#�	
����!�����8�O�rc��|jd�|j�D�cic]}t|d�|d��c}Scc}w)z=Return a C{dict} holding all the available hash=>id mappings.zSELECT hash, id FROM hashr�)r"�fetchall�bytes�rr%�rows   r�get_hash_idszHashIdStore.get_hash_idsCs=��	���2�3�17���1B�C�#��c�!�f�
�s�1�v�%�C�C��Cs�Ac��t|ttf�sJ�|jd|f�|j	�}|rt|d�Sy)zAReturn the hash associated to C{id}, or C{None} if not available.z SELECT hash FROM hash WHERE id=?rN)�
isinstance�intrr"r,r2)rr%r(r-s    r�get_id_hashzHashIdStore.get_id_hashIsI���"�s�D�k�*�*�*����9�B�5�A����!�����q��?�"�rc�&�|jd�y)zDelete all hash=>id mappings.zDELETE FROM hashN�r"�rr%s  r�clear_hash_idszHashIdStore.clear_hash_idsSs��	���)�*rc��	|jdd�y#tj$rt|j��wxYw)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)r"r#�
DatabaseErrorrrr<s  r�check_sanityzHashIdStore.check_sanityXs:��	2��N�N�=�u�E���$�$�	2�!�$�.�.�1�1�	2�s��)>)rrr
rrrr rr)r.r5r9r=rArrrrrs�����C�"�(��	��	������D��D�
�����+��+��
2��
2rrc�6��eZdZdZ�fd�Z�fd�Zd�Zd�Zd�Zd�Z	e
d��Ze
d	��Ze
d
��Z
e
d��Ze
d��Ze
d
��Ze
d��Ze
d��Ze
d��Ze
d��Ze
d��Ze
d��Ze
d��Ze
d��Ze
d��Ze
d��Ze
d��Ze
d��Ze
d��Ze
d��Ze
d��Ze
d��Z e
d��Z!e
d��Z"e
d ��Z#e
d!��Z$e
d"��Z%e
d#��Z&e
d$��Z'e
d%��Z(e
d'd&��Z)�xZ*S)(�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.
    c�2��t�|�|�g|_yr)�superr�_hash_id_stores)rr�	__class__s  �rrzPackageStore.__init__rs���
����"�!��rc�L��t�|��t|j�yr)rEr �ensure_package_schemar�rrGs �rr zPackageStore._ensure_schemavs���
��� ��d�h�h�'rc��t|�}	|j�|jj	|�y#t$r}|�d}~wwxYw)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)rrArrF�append)rr�
hash_id_store�es    r�add_hash_id_dbzPackageStore.add_hash_id_dbzsL��$�H�-�
�	��&�&�(�
	
���#�#�M�2��	�	��G��	�s�9�	A	�A�A	c�2�t|j�dkDS)z?Return C{True} if one or more lookaside databases are attached.r)�lenrFrs r�has_hash_id_dbzPackageStore.has_hash_id_db�s���4�'�'�(�1�,�,rc��t|t�sJ�|jD]}|j|�}|s�|cStj||�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}.
        )r7r2rFr.r)rr'�storer(s    rr.zPackageStore.get_hash_id�sX���$��&�&�&��)�)�	�E��"�"�4�(�B���	�	��&�&�t�T�2�2rc�~�|jD]}|j|�}|��|cStj||�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.
        )rFr9r)rr(rTr's    rr9zPackageStore.get_id_hash�sI���)�)�	�E��$�$�R�(�D�����	��&�&�t�R�0�0rc�8�|D]}|jd|f��y)Nz!REPLACE INTO available VALUES (?)r;�rr%�idsr(s    r�
add_availablezPackageStore.add_available��$���	G�B��N�N�>���F�	Grc�^�djd�|D��}|jd|�d��y)N�,c3�DK�|]}tt|�����y�wr��strr8��.0r(s  r�	<genexpr>z0PackageStore.remove_available.<locals>.<genexpr>������6�B�3�s�2�w�<�6��� z#DELETE FROM available WHERE id IN (�)��joinr"�rr%rX�id_lists    r�remove_availablezPackageStore.remove_available��,���(�(�6�#�6�6�����<�W�I�Q�G�Hrc�&�|jd�y)NzDELETE FROM availabler;r<s  r�clear_availablezPackageStore.clear_available�������.�/rc�p�|jd�|j�D�cgc]}|d��	c}Scc}w)NzSELECT id FROM availabler�r"r1r3s   r�
get_availablezPackageStore.get_available��.�����1�2�"(�/�/�"3�4�3��A��4�4��4��3c�8�|D]}|jd|f��y)Nz)REPLACE INTO available_upgrade VALUES (?)r;rWs    r�add_available_upgradesz#PackageStore.add_available_upgrades�s$���	O�B��N�N�F���N�	Orc�^�djd�|D��}|jd|�d��y)Nr\c3�DK�|]}tt|�����y�wrr^r`s  rrbz9PackageStore.remove_available_upgrades.<locals>.<genexpr>�rcrdz+DELETE FROM available_upgrade WHERE id IN (rerfrhs    r�remove_available_upgradesz&PackageStore.remove_available_upgrades�s.���(�(�6�#�6�6�����9�'��!�D�	
rc�&�|jd�y)NzDELETE FROM available_upgrader;r<s  r�clear_available_upgradesz%PackageStore.clear_available_upgrades�s�����6�7rc�p�|jd�|j�D�cgc]}|d��	c}Scc}w)Nz SELECT id FROM available_upgraderrpr3s   r�get_available_upgradesz#PackageStore.get_available_upgrades�s.�����9�:�"(�/�/�"3�4�3��A��4�4��4rsc�8�|D]}|jd|f��y)Nz%REPLACE INTO autoremovable VALUES (?)r;rWs    r�add_autoremovablezPackageStore.add_autoremovable�s$���	K�B��N�N�B�R�E�J�	Krc�^�djd�|D��}|jd|�d��y)Nr\c3�DK�|]}tt|�����y�wrr^r`s  rrbz4PackageStore.remove_autoremovable.<locals>.<genexpr>�rcrdz'DELETE FROM autoremovable WHERE id IN (rerfrhs    r�remove_autoremovablez!PackageStore.remove_autoremovable�s,���(�(�6�#�6�6�����@��	��K�Lrc�&�|jd�y)NzDELETE FROM autoremovabler;r<s  r�clear_autoremovablez PackageStore.clear_autoremovable�s�����2�3rc�p�|jd�|j�D�cgc]}|d��	c}Scc}w)NzSELECT id FROM autoremovablerrpr3s   r�get_autoremovablezPackageStore.get_autoremovable�s.�����5�6�"(�/�/�"3�4�3��A��4�4��4rsc�8�|D]}|jd|f��y)Nz REPLACE INTO security VALUES (?)r;rWs    r�add_securityzPackageStore.add_security�s$���	F�B��N�N�=��u�E�	Frc�^�djd�|D��}|jd|�d��y)Nr\c3�DK�|]}tt|�����y�wrr^r`s  rrbz/PackageStore.remove_security.<locals>.<genexpr>�rcrdz"DELETE FROM security WHERE id IN (rerfrhs    r�remove_securityzPackageStore.remove_security�s,���(�(�6�#�6�6�����;�G�9�A�F�Grc�&�|jd�y)NzDELETE FROM securityr;r<s  r�clear_securityzPackageStore.clear_security�s�����-�.rc�p�|jd�|j�D�cgc]}|d��	c}Scc}w)NzSELECT id FROM securityrrpr3s   r�get_securityzPackageStore.get_security�s.�����0�1�"(�/�/�"3�4�3��A��4�4��4rsc�8�|D]}|jd|f��y)Nz!REPLACE INTO installed VALUES (?)r;rWs    r�
add_installedzPackageStore.add_installedrZrc�^�djd�|D��}|jd|�d��y)Nr\c3�DK�|]}tt|�����y�wrr^r`s  rrbz0PackageStore.remove_installed.<locals>.<genexpr>rcrdz#DELETE FROM installed WHERE id IN (rerfrhs    r�remove_installedzPackageStore.remove_installed	rkrc�&�|jd�y)NzDELETE FROM installedr;r<s  r�clear_installedzPackageStore.clear_installedrnrc�p�|jd�|j�D�cgc]}|d��	c}Scc}w)NzSELECT id FROM installedrrpr3s   r�
get_installedzPackageStore.get_installedrrrsc�p�|jd�|j�D�cgc]}|d��	c}Scc}w)z+Get the package ids of all locked packages.zSELECT id FROM lockedrrpr3s   r�
get_lockedzPackageStore.get_lockeds0��	���.�/�"(�/�/�"3�4�3��A��4�4��4rsc�8�|D]}|jd|f��y)z9Add the given package ids to the list of locked packages.zREPLACE INTO locked VALUES (?)Nr;rWs    r�
add_lockedzPackageStore.add_lockeds&���	D�B��N�N�;�b�U�C�	Drc�^�djd�|D��}|jd|�d��y)Nr\c3�DK�|]}tt|�����y�wrr^r`s  rrbz-PackageStore.remove_locked.<locals>.<genexpr>%rcrdz DELETE FROM locked WHERE id IN (rerfrhs    r�
remove_lockedzPackageStore.remove_locked#s,���(�(�6�#�6�6�����9�'��!�D�Erc�&�|jd�y)z/Remove all the package ids in the locked table.zDELETE FROM lockedNr;r<s  r�clear_lockedzPackageStore.clear_locked(s��	���+�,rc���t|�}|jdtjt	j
|��t
j�f�t|j|j�S)Nz<INSERT INTO hash_id_request (hashes, timestamp) VALUES (?,?))
�listr"r#r$r�dumps�time�
HashIDRequestr�	lastrowid)rr%�hashess   r�add_hash_id_requestz PackageStore.add_hash_id_request-sS���f������M�
�^�^�G�M�M�&�1�
2�D�I�I�K�@�	
��T�X�X�v�'7�'7�8�8rc��|jd|f�|j�st|��t|j|�S)Nz(SELECT 1 FROM hash_id_request WHERE id=?)r"r,r	r�r)rr%�
request_ids   r�get_hash_id_requestz PackageStore.get_hash_id_request6s>�����6�
�M�	
���� �&�z�2�2��T�X�X�z�2�2rc��|jd�|j�D�cgc]}t|j|d���c}Scc}w)NzSELECT id FROM hash_id_requestr)r"r1r�rr3s   r�iter_hash_id_requestsz"PackageStore.iter_hash_id_requests@s9�����7�8�;A�?�?�;L�M�C�
�d�h�h��A��/�M�M��Ms� Ac�&�|jd�y)NzDELETE FROM hash_id_requestr;r<s  r�clear_hash_id_requestsz#PackageStore.clear_hash_id_requestsEs�����4�5rc���tj|�}tj�}|jd||t	j
|�f�t
|j|j|||�S)Nz8INSERT INTO task (queue, timestamp, data) VALUES (?,?,?))	rr�r�r"r#r$�PackageTaskrr�)rr%�queue�data�nows     r�add_taskzPackageStore.add_taskIs\���}�}�T�"���i�i�k�����F�
�C�����-�.�	
��4�8�8�V�%5�%5�u�c�4�H�Hrc��|jd|f�|j�}|r%t|j|d|d|d|d�Sy)NzLSELECT id, queue, timestamp, data FROM task WHERE queue=? ORDER BY timestamprr0��)r"r,r�r)rr%r�r4s    r�
get_next_taskzPackageStore.get_next_taskSsS�����
/�
�H�	
�
�o�o�����t�x�x��Q���Q���Q���Q��H�H�rc��|jdjdj|D�cgc]}t|j���c}���ycc}w)Nz%DELETE FROM task WHERE id NOT IN ({})r\)r"�formatrgr_r()rr%�except_tasks�tasks    r�clear_taskszPackageStore.clear_tasks_s>�����3�:�:����<�@�4�#�d�g�g�,�@�A�
�	
��@s�A)r)+rrr
rrr rOrRr.r9rrYrjrmrqrurxrzr|r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��
__classcell__�rGs@rrCrCfs����	�"�(�3�2-�3�$1��G��G��I��I��0��0��5��5��O��O��
��
��8��8��5��5��K��K��M��M��4��4��5��5��F��F��H��H��/��/��5��5��G��G��I��I��0��0��5��5��5��5�
�D��D�
�F��F��-��-��9��9��3��3��N��N��6��6��I��I��	��	��
��
rrCc�b��eZdZdZ�fd�Zed��Zed��Zed��Zed��Z	�xZ
S)�FakePackageStorezT
    A L{PackageStore} with an additional message table to store sent messages.
    c�L��t�|��t|j�yr)rEr �ensure_fake_package_schemarrJs �rr zFakePackageStore._ensure_schemams���
��� �"�4�8�8�,rc�v�|jdtjtj|��f�y)Nz%INSERT INTO message (data) VALUES (?))r"r#r$rr�)rr%�messages   r�save_messagezFakePackageStore.save_messageqs)�����3�
�^�^�G�M�M�'�2�
3�5�	
rc�l�|jd�j�D�cgc]}|d��	c}Scc}w)NzSELECT id FROM messagerrpr3s   r�get_message_idsz FakePackageStore.get_message_idsxs;���~�~�&>�?�H�H�J�
��
��F�
�	
��
s�1c�P�|jd|D�cgc]}|f��c}�ycc}w)Nz#INSERT INTO message (id) VALUES (?))�executemany)rr%�message_ids�
message_ids    r�save_message_idsz!FakePackageStore.save_message_idss&�����1�-8�9�z�j�]�9�	
��9s�
#
c���djdgt|�z�}|jd|�d�t|��j	�}|D�cgc]}|dt|d�f��c}Scc}w)Nz, �?z*SELECT id, data FROM message WHERE id IN (z
) ORDER BY idrr0)rgrQr"�tupler1r2)rr%r��params�resultr4s      r�get_messages_by_idsz$FakePackageStore.get_messages_by_ids�sw�����C�5�3�{�#3�3�4�����8���A�
��+��
��(�*�		�
4:�:�C��Q���s�1�v��'�:�:��:s�A-)rrr
rr rr�r�r�r�r�r�s@rr�r�hs]����-��
��
��
��
��
��
��;��;rr�c��eZdZd�Zeed���Zed��Zed��Zeee�Z	ed��Z
ed��Zee
e�Zed��Z
y)	r�c� �||_||_yr)rr()r�dbr(s   rrzHashIDRequest.__init__�s�������rc��|jd|jf�tjt	|j�d��S)Nz-SELECT hashes FROM hash_id_request WHERE id=?r)r"r(r�loadsr2r,r<s  rr�zHashIDRequest.hashes�s>��	���;�
�W�W�J�	
��}�}�U�6�?�?�#4�Q�#7�8�9�9rc�b�|jd|jf�|j�dS)Nz0SELECT timestamp FROM hash_id_request WHERE id=?r�r"r(r,r<s  r�_get_timestampzHashIDRequest._get_timestamp�s.�����>�
�W�W�J�	
���� ��#�#rc�@�|jd||jf�y)Nz1UPDATE hash_id_request SET timestamp=? WHERE id=?�r"r(�rr%r-s   r�_set_timestampzHashIDRequest._set_timestamp�s�����?�
�D�G�G��	
rc�b�|jd|jf�|j�dS)Nz1SELECT message_id FROM hash_id_request WHERE id=?rr�r<s  r�_get_message_idzHashIDRequest._get_message_id�s.�����?�
�W�W�J�	
���� ��#�#rc�@�|jd||jf�y)Nz2UPDATE hash_id_request SET message_id=? WHERE id=?r�r�s   r�_set_message_idzHashIDRequest._set_message_id�s�����@�
�D�G�G��	
rc�>�|jd|jf�y)Nz&DELETE FROM hash_id_request WHERE id=?r�r<s  r�removezHashIDRequest.remove�s�����?�$�'�'��LrN)rrr
r�propertyrr�r�r��	timestampr�r�r�r�rrrr�r��s������:���:��$��$��
��
����8�I��$��$��
��
��/�?�;�J��M��Mrr�c�"�eZdZd�Zed��Zy)r�c�p�||_||_||_||_t	j
|�|_yr)rr(r�r�rr�r�)rr��cidr�r�r�s      rrzPackageTask.__init__�s.����������
�"����M�M�$�'��	rc�>�|jd|jf�y)NzDELETE FROM task WHERE id=?r�r<s  rr�zPackageTask.remove�s�����4�t�w�w�j�ArN)rrr
rrr�rrrr�r��s��(��B��Brr�c��|j�}	|jd�|j�|j�y#tj
tjf$r#|j�|j�YywxYw)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�r%r"�close�commitr#�OperationalErrorr@�rollback�r�r%s  rrr�sk��
�Y�Y�[�F�	����M�	
�	����
�	�	���
�$�$�g�&;�&;�<������
���
����A�AB
�	B
c���|j�}	|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|j�|j�y	#tj
$r#|j�|j
�Yy	wxYw)
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)r%r"r�r�r#r�r�r�s  rrIrI�s����Y�Y�[�F�����J�K����D�	
�	���H�I����K�L����H�	
�	���K�L����
0�	
�
	���
/�	
�	����
�	�	����#�#������
���
��s�BB;�;3C1�0C1c��|j�}	|jd�|j�|j�y#tj
tjf$r#|j�|j�YywxYw)Nz8CREATE TABLE message (id INTEGER PRIMARY KEY, data BLOB)r�r�s  rr�r�si��
�Y�Y�[�F�	����I�	
�	����
�	�	���
�$�$�g�&;�&;�<������
���
��r�)rr�r#�ImportError�	pysqlite2r�twisted.python.compatrr�
landscape.libr�landscape.lib.storer�	Exceptionr	rrrCr�r�r�rrIr�rrr�<module>r�s���K��,��2�!�+�/�9�/�L�i�L�L2�L2�^
�;�
�D&;�|�&;�R2M�2M�j
B�
B��$$�N��M�,�+�,�s�A4�4B�B