o
    b                     @   s   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 deZeeG dd	 d	ZeZG d
d dejZdd Zdd Zd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                   @   s"   e Zd ZdZdd ZdddZdS )IPersistablez9An object which can be saved in several formats to a filec                 C      dS zWSet desired format.

        @type style: string (one of 'pickle' or 'source')
        N styler
   r
   7/usr/lib/python3/dist-packages/twisted/persisted/sob.pysetStyle       zIPersistable.setStyleNc                 C   r   )xSave object to file.

        @type tag: string
        @type filename: string
        @type passphrase: string
        Nr
   )tagfilename
passphraser
   r
   r   save!   r   zIPersistable.saveNNN)__name__
__module____qualname____doc__r   r   r
   r
   r
   r   r      s    r   c                   @   sB   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdddZ	dS )
Persistentpicklec                 C   s   || _ || _d S N)originalname)selfr   r   r
   r
   r   __init__/   s   
zPersistent.__init__c                 C   
   || _ dS r	   r   )r   r   r
   r
   r   r   3   s   
zPersistent.setStylec                 C   sx   |r|}|d }||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   	finalnamer
   r
   r   _getFilename:   s   zPersistent._getFilenamec                 C   s<   t |d}|| j| W d    d S 1 sw   Y  d S )Nwb)openr   )r   r   dumpFuncfr
   r
   r   	_saveTempF   s   "zPersistent._saveTempc                 C   s8   | j dkrddlm} d}||fS ddd}d}||fS )	Nsourcer   )jellyToSourcetasc                 S   s   t | |d d S )N   )r   dump)objfiler
   r
   r   r)   Q   s   z&Persistent._getStyle.<locals>.dumpFunctapr   )r   twisted.persisted.aotr-   )r   r)   r$   r
   r
   r   	_getStyleJ   s   

zPersistent._getStyleNc                 C   s   |   \}}|durtd| |||\}}td| j d | d  | || tjdkr;t	j
|r;t	| t	|| td dS )r   Nzpassphrase must be NonezSaving z application to z...win32zSaved.)r5   	TypeErrorr&   r   msgr   r+   r   platformTypeospathisfileremoverename)r   r   r   r   r$   r)   r%   r
   r
   r   r   W   s   
zPersistent.saver   )
r   r   r   r   r    r   r&   r+   r5   r   r
   r
   r
   r   r   *   s    r   c                   @   s    e Zd ZdZdd Zdd ZdS )_EverythingEphemeralr   c                 C   r!   )zS
        @param mainMod: The '__main__' module that this class will proxy.
        N)mainMod)r   r@   r
   r
   r   r    r   s   
z_EverythingEphemeral.__init__c                 C   s@   zt | j|W S  ty   | jr td|  t  Y S w )Nz#Warning!  Loading from __main__: %s)getattrr@   AttributeErrorinitRunr   r8   r   	Ephemeral)r   keyr
   r
   r   __getattr__x   s   z _EverythingEphemeral.__getattr__N)r   r   r   rC   r    rF   r
   r
   r
   r   r?   n   s    r?   c              
   C   s   d}|dkrddl m} ntjd}}t| |}ttjd }|tjd< d|_| z||}W |j	tjd< n|j	tjd< w W d   n1 sHw   Y  t
  d|_t|d}|durb|| |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')
    rr,   r   )unjellyFromSourcerb__main__   N)r4   rH   r   loadr(   r?   sysmodulesrC   r@   r   	doUpgrader   r   )r   r   mode_loadfpeevaluepersistabler
   r
   r   rL      s&   




rL   c                 C   s\   t | }| }W d   n1 s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)r(   readcompileeval)r   variablefileObjdatadcodeObjrT   r
   r
   r   loadValueFromFile   s   
	
r`   c                 C   s(   t j| d }dddddddd| S )NrK   pythonr   r,   )z.tacz.etacz.pyz.tapz.etapz.tasz.etas)r:   r;   splitext)r   r$   r
   r
   r   	guessType   s   rc   )r`   rL   r   
Persistantr   rc   )r   r:   r   rM   zope.interfacer   r   twisted.persistedr   twisted.pythonr   r   r   r   rd   rD   r?   rL   r`   rc   __all__r
   r
   r
   r   <module>   s    @!