
    \d                         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dS )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dS )IPersistablez9An object which can be saved in several formats to a filec                     dS zWSet desired format.

        @type style: string (one of 'pickle' or 'source')
        N styles    5lib/python3.11/site-packages/twisted/persisted/sob.pysetStylezIPersistable.setStyle             Nc                     dS )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C       r   r	   c                   8    e Zd ZdZd Zd Zd Zd Zd Zd	dZ	dS )

Persistentpicklec                 "    || _         || _        d S N)originalname)selfr#   r$   s      r   __init__zPersistent.__init__/   s     			r   c                     || _         dS r   r   )r%   r   s     r   r   zPersistent.setStyle3   s    
 


r   c                     |r|}|dz   }n9|r| j          d| d| }| j          d| d| }n| j          d| }| j          d| }||fS )Nz-2-z-2..)r$   )r%   r   extr   	finalnames        r   _getFilenamezPersistent._getFilename:   s     	- I 4'HH 	-)33c33c33H922s22S22II)----H9,,s,,I(""r   c                 z    t          |d          5 } || j        |           d d d            d S # 1 swxY w Y   d S )Nwb)openr#   )r%   r   dumpFuncfs       r   	_saveTempzPersistent._saveTempF   s    (D!! 	'QHT]A&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   044c                 >    | j         dk    r	ddlm} d}ndd}d}||fS )Nsourcer   )jellyToSourcetasc                 2    t          j        | |d           d S )N   )r    dump)objfiles     r   r1   z&Persistent._getStyle.<locals>.dumpFuncQ   s    Cq)))))r   tapr"   )r   twisted.persisted.aotr6   )r%   r1   r+   s      r   	_getStylezPersistent._getStyleJ   sM    :!!GGGGGGCC* * * * CH}r   Nc                    |                                  \  }}|t          d          |                     |||          \  }}t          j        d| j        z   dz   |z   dz              |                     ||           t          j        dk    r3t          j
                            |          rt          j        |           t          j        ||           t          j        d           dS )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.saveW   s     ((X!5666"//#sCC	8	DI%(::YFNOOOx***7**rw~~i/H/H*Ii   
	(I&&&r   r   )
r   r   r   r   r&   r   r-   r3   r?   r   r   r   r   r   r   *   sz         E    
# 
# 
#' ' '       r   r   c                       e Zd ZdZd Zd ZdS )_EverythingEphemeralr   c                     || _         dS )zS
        @param mainMod: The '__main__' module that this class will proxy.
        N)mainMod)r%   rM   s     r   r&   z_EverythingEphemeral.__init__r   s     r   c                     	 t          | j        |          S # t          $ r5 | 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__x   sl    	*4<--- 	* 	* 	*| *=CDDD')))))	*s    <AAN)r   r   r   rQ   r&   rT   r   r   r   rK   rK   n   s7        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<   n# |j	        t          j        d<   w xY w	 ddd           n# 1 swxY w Y   t          j                     d|_        t          |d          }||                    |           |S )	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[      sM    DDDDDDDDk4t	h		B	ck*5	6	6B CK
BJ	 1 1	1E"IIE ')jCK
##bjCK
#0000#1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 BJud++KU###Ls*   %B-'B2B-BB--B14B1c                     t          |           5 }|                                }ddd           n# 1 swxY w Y   d| i}t          || d          }t          |||           ||         }|S )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Ls   155c                 l    t           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      sJ    
'

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      sO    
			  



 1 1 1 1 1 1 1 1 $ $ $ $ $ $ ' ' ' ' ' ' ' '    9   & \< < < < < < < <@ 
* * * * *6+ * * **  B  $
 
 
  r   