B
    `y                 @   sz   d dl mZ d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
 eeZdaG dd deZG d	d
 d
eZdS )    )pickleN)datetime)OpenResourceNamespaceManager	Container)InvalidCacheBackendError)null_synchronizerc               @   sv   e Zd Zi Zedd ZdddZdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )GoogleNamespaceManagerc             C   s@   t d k	rd S ytdjjj a W n tk
r:   tdY nX d S )Nzgoogle.appengine.ext.dbzCDatastore cache backend requires the 'google.appengine.ext' library)db
__import__Z	appengineextImportErrorr   )cls r   Y/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/beaker/ext/google.py_init_dependencies   s    z)GoogleNamespaceManager._init_dependenciesbeaker_cachec                sb   t | |  fdd} | _tj | | _i | _d| _d| _	t
jt k| _d| j | _dS )z%Creates a datastore namespace managerc                 s.   t t t t d} t tjf| }|S )N)createdaccesseddata)dictr	   ZDateTimePropertyZBlobPropertytypeZModel)Z
table_dicttable)
table_namer   r   
make_cache!   s
    z3GoogleNamespaceManager.__init__.<locals>.make_cacheFzp%sN)r   __init__r   r   tables
setdefaultcachehash_is_newloadedloggingDEBUGloggetEffectiveLevel	log_debug	namespace)selfr&   r   paramsr   r   )r   r   r      s    zGoogleNamespaceManager.__init__c             C   s   t  S )N)r   )r'   r   r   r   get_access_lock2   s    z&GoogleNamespaceManager.get_access_lockc             C   s   t  S )N)r   )r'   keyr   r   r   get_creation_lock5   s    z(GoogleNamespaceManager.get_creation_lockc             C   s   | j r|| _d S | j| j}|s0d| _i | _nXd| _ytt	|j
| _W n: ttttjfk
r   | jrvtd i | _d| _Y nX || _d| _ d S )NTFz.Couln't load pickle data, creating new storage)r    flagsr   get_by_key_namer&   r   r   r   loadsstrr   IOErrorOSErrorEOFErrorPickleErrorr%   r#   debug)r'   r,   replaceitemr   r   r   do_open9   s"    
zGoogleNamespaceManager.do_openc             C   s   | j d k	r| j dks| j dkr| jrd| j| jd}t| j|_t	 |_
t	 |_|  d| _n.| j| j}t| j|_t	 |_|  d | _ d S )Ncw)Zkey_nameF)r,   r   r   r&   r   dumpsr   r   r   nowr   r   putr-   )r'   r6   r   r   r   do_closeP   s    


zGoogleNamespaceManager.do_closec             C   s&   | j | j}|  i | _d| _d S )NT)r   r-   r&   deleter   r   )r'   r6   r   r   r   	do_remove`   s    z GoogleNamespaceManager.do_removec             C   s
   | j | S )N)r   )r'   r*   r   r   r   __getitem__i   s    z"GoogleNamespaceManager.__getitem__c             C   s
   || j kS )N)r   )r'   r*   r   r   r   __contains__l   s    z#GoogleNamespaceManager.__contains__c             C   s   || j |< d S )N)r   )r'   r*   valuer   r   r   __setitem__o   s    z"GoogleNamespaceManager.__setitem__c             C   s   | j |= d S )N)r   )r'   r*   r   r   r   __delitem__r   s    z"GoogleNamespaceManager.__delitem__c             C   s
   | j  S )N)r   keys)r'   r   r   r   rE   u   s    zGoogleNamespaceManager.keysN)r   )__name__
__module____qualname__r   classmethodr   r   r)   r+   r7   r=   r?   r@   rA   rC   rD   rE   r   r   r   r   r      s   
	r   c               @   s   e Zd ZeZdS )GoogleContainerN)rF   rG   rH   r   Znamespace_classr   r   r   r   rJ   y   s   rJ   )Zbeaker._compatr   r!   r   Zbeaker.containerr   r   Zbeaker.exceptionsr   Zbeaker.synchronizationr   	getLoggerrF   r#   r	   r   rJ   r   r   r   r   <module>   s   
j