U
    Zf-                     @   sj   d dl Z d dlZd dlZG dd dZG dd deZG dd deZG dd	 d	eZG d
d deZdS )    Nc                   @   s~   e Zd ZdZejddddZejfee	j
eddddZe	je	jd	d
dZejfe	jeedddZee	jdddZdS )BaseSerializerzThis is the base interface for all default serializers.

    BaseSerializer.load and BaseSerializer.dump will
    default to pickle.load and pickle.dump. This is currently
    used only by FileSystemCache which dumps/loads to/from a file stream.
    N)ereturnc                 C   s   t d|  d S )Nz:An exception has been raised during a pickling operation: )loggingwarning)selfr    r   8/tmp/pip-unpacked-wheel-7m7iy3r0/cachelib/serializers.py_warn   s    zBaseSerializer._warn)valuefprotocolr   c              
   C   sL   zt ||| W n4 t jt jfk
rF } z| | W 5 d }~X Y nX d S N)pickledumpPickleErrorPicklingErrorr
   )r   r   r   r   r   r   r   r	   r      s    zBaseSerializer.dump)r   r   c              
   C   sL   zt |}W n4 t jk
rB } z| | W Y d S d }~X Y nX |S d S r   )r   loadr   r
   )r   r   datar   r   r   r	   r      s    
zBaseSerializer.loadr   r   r   c              
   C   sJ   zt ||}W n4 t jt jfk
rD } z| | W 5 d }~X Y nX |S r   )r   dumpsr   r   r
   )r   r   r   Z
serializedr   r   r   r	   r   )   s
    zBaseSerializer.dumps)bvaluer   c              
   C   sL   zt |}W n4 t jk
rB } z| | W Y d S d }~X Y nX |S d S r   )r   loadsr   r
   )r   r   r   r   r   r   r	   r   0   s    
zBaseSerializer.loads)__name__
__module____qualname____doc__r   r   r
   HIGHEST_PROTOCOLint_tIOr   BinaryIOAnyr   bytesr   r   r   r   r   r	   r      s     r   c                   @   s   e Zd ZdZdS )UWSGISerializerz"Default serializer for UWSGICache.Nr   r   r   r   r   r   r   r	   r$   C   s   r$   c                   @   s   e Zd ZdZdS )SimpleSerializerz#Default serializer for SimpleCache.Nr%   r   r   r   r	   r&   G   s   r&   c                   @   s   e Zd ZdZdS )FileSystemSerializerz'Default serializer for FileSystemCache.Nr%   r   r   r   r	   r'   K   s   r'   c                   @   sB   e Zd ZdZejfejee	dddZ
eje	 ejdddZdS )	RedisSerializerz"Default serializer for RedisCache.r   c                 C   s   dt || S )zDumps an object into a string for redis. By default it serializes
        integers as regular string and pickle dumps everything else.
           !)r   r   )r   r   r   r   r   r	   r   R   s    zRedisSerializer.dumps)r   r   c                 C   sl   |dkrdS | drDzt|dd W S  tjk
rB   Y dS X z
t|W S  tk
rf   | Y S X dS )zUThe reversal of :meth:`dump_object`. This might be called with
        None.
        Nr)      )
startswithr   r   r   r   
ValueError)r   r   r   r   r	   r   X   s    

zRedisSerializer.loadsN)r   r   r   r   r   r   r   r"   r   r#   r   Optionalr   r   r   r   r	   r(   O   s   r(   )	r   r   typingr   r   r$   r&   r'   r(   r   r   r   r	   <module>   s   =