%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /opt/alt/python37/lib/python3.7/site-packages/beaker/ext/__pycache__/
Upload File :
Create Path :
Current File : //opt/alt/python37/lib/python3.7/site-packages/beaker/ext/__pycache__/mongodb.cpython-37.pyc

B

��[?�@s�ddlZddlZddlZddlZddlZyddlZddlZddlZWnek
r`dZdZYnXddl	m
Z
ddlmZddl
mZmZddlmZddlmZmZGdd�de
�ZGd	d
�d
e�ZdS)�N)�NamespaceManager)�SynchronizerImpl)�SyncDict�machine_identifier)�sha1)�string_type�PY2cs�eZdZdZdZe�Z�fdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zddd�Z
dd�Zdd�Zdd�Zdd�Zdd�Z�ZS)�MongoNamespaceManagera^Provides the :class:`.NamespaceManager` API over MongoDB.

    Provided ``url`` can be both a mongodb connection string or
    an already existing MongoClient instance.

    The data will be stored into ``beaker_cache`` collection of the
    *default database*, so make sure your connection string or
    MongoClient point to a default database.
    ics\tt|��|�d|_tdkr&td��t|t�rFtj�	|tj
|�|_n||_|j��|_
dS)Nzpymongo3 is not available)�superr	�__init__Zlock_dir�pymongo�RuntimeError�
isinstancer�clients�get�MongoClient�client�get_default_database�db)�self�	namespace�url�kw)�	__class__��C/opt/alt/python37/lib/python3.7/site-packages/beaker/ext/mongodb.pyr$s
zMongoNamespaceManager.__init__cCsXt|t�s|�d�}t|�|jt|j�dkrJts>|�d�}t|��	�}d|j|fS)N�ascii�zutf-8z%s:%s)
r�str�decode�len�MAX_KEY_LENGTHrr�encoder�	hexdigest)r�keyrrr�_format_key1s


z!MongoNamespaceManager._format_keycCst|�|�|j�S)N)�MongoSynchronizerr%r)rr$rrr�get_creation_lock:sz'MongoNamespaceManager.get_creation_lockcCs>|��|jj�d|�|�i�}|dkr0t|��t�|d�S)N�_id�value)�_clear_expiredr�backer_cache�find_oner%�KeyError�pickle�loads)rr$�entryrrr�__getitem__=s
z!MongoNamespaceManager.__getitem__cCs(|��|jj�d|�|�i�}|dk	S)Nr()r*rr+r,r%)rr$r0rrr�__contains__Dsz"MongoNamespaceManager.__contains__cCs||kS)Nr)rr$rrr�has_keyIszMongoNamespaceManager.has_keyNcCs\|��d}|dk	r t��|}t�|�}|jjjd|�|�idt�	|�|d�idd�dS)Nr(z$set)r)�
expirationT)�upsert)
r*�timer.�dumpsrr+�
update_oner%�bson�Binary)rr$r)Z
expiretimer4rrr�	set_valueLs

zMongoNamespaceManager.set_valuecCs|�||�dS)N)r;)rr$r)rrr�__setitem__Ysz!MongoNamespaceManager.__setitem__cCs$|��|jj�d|�|�i�dS)Nr()r*rr+�delete_manyr%)rr$rrr�__delitem__\sz!MongoNamespaceManager.__delitem__cCs |jj�ddd|jii�dS)Nr(z$regexz^%s)rr+r=r)rrrr�	do_remove`szMongoNamespaceManager.do_removecCs&dd�|jj�ddd|jii�D�S)NcSs g|]}|d�dd�d�qS)r$�:r���)�split)�.0�errr�
<listcomp>dsz.MongoNamespaceManager.keys.<locals>.<listcomp>r(z$regexz^%s)rr+Zfind_allr)rrrr�keyscszMongoNamespaceManager.keyscCs0t��}|jj�dd|jid|d�d��dS)Nz$regexz^%s)z$nez$lte)r(r4)r6rr+r=r)r�nowrrrr*hsz$MongoNamespaceManager._clear_expired)N)�__name__�
__module__�__qualname__�__doc__r!rrrr%r'r1r2r3r;r<r>r?rFr*�
__classcell__rr)rrr	s	
	

r	csZeZdZdZdZe�Z�fdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
�ZS)r&a�Provides a Writer/Reader lock based on MongoDB.

    Provided ``url`` can be both a mongodb connection string or
    an already existing MongoClient instance.

    The data will be stored into ``beaker_locks`` collection of the
    *default database*, so make sure your connection string or
    MongoClient point to a default database.

    Locks are identified by local machine, PID and threadid, so
    are suitable for use in both local and distributed environments.
    i�csJtt|���||_t|t�r4tj�|t	j
|�|_n||_|j��|_
dS)N)r
r&r�
identifierrrr	rrrrrrr)rrMr)rrrr�s
zMongoSynchronizer.__init__cCs:tj��}|tj|jd�}|jj�|jd|id��|S)N)�secondsz$lte)r(�	timestamp)�datetime�utcnow�	timedelta�LOCK_EXPIRATIONr�beaker_locksr=rM)rrGZexpiredrrr�_clear_expired_locks�s
z&MongoSynchronizer._clear_expired_lockscCsd|jt��t��jfS)Nz%s-%s-%s)�
MACHINE_ID�os�getpid�	threading�current_thread�ident)rrrr�
_get_owner_id�szMongoSynchronizer._get_owner_idcCs,|��}|jj�|j|d�dd|ii�dS)N)r(�readersz$pullr])r\rrTr8rM)r�owner_idrrr�do_release_read_lock�sz&MongoSynchronizer.do_release_read_lockcCst|��}|��}x^y.|jjj|jdd�d|id|id�dd�dStjjk
rj|s\dSt	�
d�YqXqWdS)	N)r(�ownerrOr])z$setz$pushT)r5Fg�������?)rUr\rrTr8rMr�errors�DuplicateKeyErrorr6�sleep)r�waitrGr^rrr�do_acquire_read_lock�s
z&MongoSynchronizer.do_acquire_read_lockcCs|jj�|j|��d��dS)N)r(r`)rrTZ
delete_onerMr\)rrrr�do_release_write_lock�sz'MongoSynchronizer.do_release_write_lockcCsr|��}|��}x\y,|jjj|jdgd�d||d�idd�dStjjk
rh|sZdSt	�
d�YqXqWdS)N)r(r`r]z$set)r`rOT)r5Fg�������?)rUr\rrTr8rMrrarbr6rc)rrdrGr^rrr�do_acquire_write_lock�sz'MongoSynchronizer.do_acquire_write_lock)rHrIrJrKrSrrVrrUr\r_rerfrgrLrr)rrr&ns	r&)rPrWrYr6r.rZpymongo.errorsr9�ImportErrorZbeaker.containerrZbeaker.synchronizationrZbeaker.utilrrZbeaker.crypto.utilrZbeaker._compatrrr	r&rrrr�<module>s$
X

Zerion Mini Shell 1.0