Ë
    ojÆ  ã                   óÔ   — d 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
mZ  G d„ de«      Z ee«       G d„ d	«      «       ZeZ G d
„ dej                  «      Zd„ Zd„ Zd„ Zg d¢Zy)z`
Save and load Small OBjects to and from files, using various formats.

Maintainer: Moshe Zadka
é    N)Ú	InterfaceÚimplementer)Ústyles)ÚlogÚruntimec                   ó   — e Zd ZdZd„ Zdd„Zy)ÚIPersistablez9An object which can be saved in several formats to a filec                  ó   — y©zWSet desired format.

        @type style: string (one of 'pickle' or 'source')
        N© ©Ústyles    ú7/usr/lib/python3/dist-packages/twisted/persisted/sob.pyÚsetStylezIPersistable.setStyle   ó   � ó    Nc                  ó   — y)úxSave object to file.

        @type tag: string
        @type filename: string
        @type passphrase: string
        Nr   )ÚtagÚfilenameÚ
passphrases      r   ÚsavezIPersistable.save!   r   r   ©NNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r	   r	      s   „ áCòôr   r	   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd	d„Z	y)
Ú
PersistentÚpicklec                 ó    — || _         || _        y ©N)ÚoriginalÚname)Úselfr#   r$   s      r   Ú__init__zPersistent.__init__.   s   € Ø ˆŒØˆ�	r   c                 ó   — || _         yr   r   )r%   r   s     r   r   zPersistent.setStyle2   s   € ð
 ˆ�
r   c                 óÄ   — |r|}|dz   }||fS |r,| j                   › d|› d|› �}| j                   › d|› d|› �}||fS | j                   › d|› �}| j                   › d|› �}||fS )Nz-2ú-z-2.ú.)r$   )r%   r   Úextr   Ú	finalnames        r   Ú_getFilenamezPersistent._getFilename9   sœ   € ÙØ ˆIØ  4Ñ'ˆHð ˜(Ð"Ð"ñ ØŸ)™)˜ A c U¨#¨c¨UÐ3ˆHØŸ9™9˜+ Q s e¨1¨S¨EÐ2ˆIð ˜(Ð"Ð"ð Ÿ)™)˜ C¨ uÐ-ˆHØŸ9™9˜+ Q s eÐ,ˆIØ˜(Ð"Ð"r   c                 ól   — t        |d«      5 } || j                  |«       d d d «       y # 1 sw Y   y xY w)NÚwb)Úopenr#   )r%   r   ÚdumpFuncÚfs       r   Ú	_saveTempzPersistent._saveTempE   s1   € Ü�(˜DÓ!ð 	' QÙ�T—]‘] AÔ&÷	'÷ 	'ñ 	'ús   �*ª3c                 óL   — | j                   dk(  rddlm} d}||fS dd„}d}||fS )NÚsourcer   )ÚjellyToSourceÚtasc                 ó2   — t        j                  | |d«       y )Né   )r    Údump)ÚobjÚfiles     r   r1   z&Persistent._getStyle.<locals>.dumpFuncP   s   € Ü—‘˜C  qÕ)r   Útapr"   )r   Útwisted.persisted.aotr6   )r%   r1   r+   s      r   Ú	_getStylezPersistent._getStyleI   s8   € Ø�:‰:˜Ò!ÝGàˆCð �Hˆ}Ðó	*ð ˆCØ�Hˆ}Ðr   Nc                 óÎ  — | j                  «       \  }}|�t        d«      ‚| j                  |||«      \  }}t        j                  d| j
                  z   dz   |z   dz   «       | j                  ||«       t        j                  dk(  r4t        j                  j                  |«      rt        j                  |«       t        j                  ||«       t        j                  d«       y)r   Nzpassphrase must be NonezSaving z application to z...Úwin32zSaved.)r?   Ú	TypeErrorr-   r   Úmsgr$   r3   r   ÚplatformTypeÚosÚpathÚisfileÚremoveÚrename)r%   r   r   r   r+   r1   r,   s          r   r   zPersistent.saveV   sµ   € ð Ÿ™Ó(‰ˆˆXØÐ!ÜÐ5Ó6Ð6Ø"×/Ñ/°¸#¸sÓCÑˆ	�8Ü�‰�	˜DŸI™IÑ%Ð(:Ñ:¸YÑFÈÑNÔOØ�‰�x Ô*Ü×Ñ 7Ò*¬r¯w©w¯~©~¸iÔ/HÜ�I‰I�iÔ Ü
�	‰	�(˜IÔ&Ü�‰�Õr   r   )
r   r   r   r   r&   r   r-   r3   r?   r   r   r   r   r   r   *   s%   „ à€Eòòò
#ò'òôr   r   c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú_EverythingEphemeralr   c                 ó   — || _         y)zS
        @param mainMod: The '__main__' module that this class will proxy.
        N)ÚmainMod)r%   rM   s     r   r&   z_EverythingEphemeral.__init__p   s   € ð ˆ�r   c                 óÀ   — 	 t        | j                  |«      S # t        $ r< | j                  r‚ t	        j
                  d|z  «       t        j                  «       cY S w xY w)Nz#Warning!  Loading from __main__: %s)ÚgetattrrM   ÚAttributeErrorÚinitRunr   rC   r   Ú	Ephemeral)r%   Úkeys     r   Ú__getattr__z _EverythingEphemeral.__getattr__v   sR   € ð	*Ü˜4Ÿ<™<¨Ó-Ð-øÜò 	*Ø�|Š|Øä—‘Ð=ÀÑCÔDÜ×'Ñ'Ó)Ò)ð	*ús   ‚ ˜AAÁAN)r   r   r   rQ   r&   rT   r   r   r   rK   rK   m   s   „ Ø€Gòó*r   rK   c                 óþ  — d}|dk(  rddl m} nt        j                  d}}t	        | |«      }t        t        j                  d   «      }|t        j                  d<   d|_        |5  	  ||«      }|j                  t        j                  d<   	 ddd«       t        j                  «        d|_        t        d«      }|�|j                  |«       |S # |j                  t        j                  d<   w xY w# 1 sw Y   ŒgxY w)	z·Load an object from a file.

    Deserialize an object from a file. The file can be encrypted.

    @param filename: string
    @param style: string (one of 'pickle' or 'source')
    Úrr5   r   )ÚunjellyFromSourceÚrbÚ__main__é   N)r>   rW   r    Úloadr0   rK   ÚsysÚmodulesrQ   rM   r   Ú	doUpgrader	   r   )r   r   ÚmodeÚ_loadÚfpÚeeÚvalueÚpersistables           r   r[   r[   �   sß   € ð €DØ�ÒÞDä—k‘k 4ˆtˆä	ˆh˜Ó	€BÜ	œcŸk™k¨*Ñ5Ó	6€BØ „C‡K�K�
ÑØ€B„JØ	ñ 1ð	1Ù˜"“IˆEð ')§j¡jŒC�K‰K˜
Ò#÷1ô ×ÑÔØ€B„JÜ˜u dÓ+€KØÐØ×Ñ˜UÔ#Ø€Løð ')§j¡jŒC�K‰K˜
Ò#ú÷1ð 1ús$   Á%C3Á'CÁ/C3ÃC0Ã0C3Ã3C<c                 ó¬   — t        | «      5 }|j                  «       }ddd«       d| i}t        | d«      }t        |||«       ||   }|S # 1 sw Y   Œ.xY w)zÚLoad the value of a variable in a Python file.

    Run the contents of the file in a namespace and return the result of the
    variable named C{variable}.

    @param filename: string
    @param variable: string
    NÚ__file__Úexec)r0   ÚreadÚcompileÚeval)r   ÚvariableÚfileObjÚdataÚdÚcodeObjrc   s          r   ÚloadValueFromFilerp   ¢   s_   € ô 
ˆh‹ð ˜7Ø�|‰|‹~ˆ÷à	�XÐ€AÜ�d˜H fÓ-€GÜˆ�!�QÔØˆh‰K€EØ€L÷ð ús   ŒA
Á
Ac                 ó`   — t         j                  j                  | «      d   }ddddddddœ|   S )NrZ   Úpythonr    r5   )z.tacz.etacz.pyz.tapz.etapz.tasz.etas)rE   rF   Úsplitext)r   r+   s     r   Ú	guessTypert   ´   sD   € Ü
�'‰'×
Ñ
˜8Ó
$ QÑ
'€CàØØØØØØñð 
ñð r   )rp   r[   r   Ú
Persistantr	   rt   )r   rE   r    r\   Úzope.interfacer   r   Útwisted.persistedr   Útwisted.pythonr   r   r	   r   ru   rR   rK   r[   rp   rt   Ú__all__r   r   r   ú<module>rz      sy   ðñó 
Û Û 
ç 1å $ß 'ô�9ô ñ& ˆ\Ó÷;ð ;ó ð;ð~ €
ô*˜6×+Ñ+ô *ò(òBò$
ò�r   