
    Ϫf                         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 ("" ))AcU#cU3H99+Qse1SE2I ("" ))Cu-H99+Qse,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	DII%(::YFNOx*7*rww~~i/HIIi 
		(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)	zLoad 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kk4t	h	B	ckk*5	6B CKK
BJ	 1	1"IE ')jjCKK
#1 BJud+KU#L ')jjCKK
#1 1s$   %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)zLoad 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dHf-G!QhKE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   