o
    wvXjÙ  ã                   @   sp   d dl Z d dlZd dlmZ d dlmZ d dlmZ ddlm	Z	 e
eddƒZeƒ Zdd	d
„ZG dd„ deƒZdS )é    N)Úsettings)Ú	BaseCache)Úimport_stringé   )ÚConnectionInterruptedÚDJANGO_REDIS_SCAN_ITERSIZEé
   c                    s2   ˆ du rt jtˆd�S t  ˆ ¡‡ ‡fdd„ƒ}|S )zl
    Simple decorator that intercepts connection
    errors and ignores these if settings specify this.
    N©Úreturn_valuec              
      sd   zˆ | g|¢R i |¤ŽW S  t y1 } z| jr*| jr"| j t|ƒ¡ ˆW  Y d }~S |j‚d }~ww ©N)r   Ú_ignore_exceptionsÚ_log_ignored_exceptionsÚloggerÚerrorÚstrÚ	__cause__)ÚselfÚargsÚkwargsÚe©Úmethodr
   © úO/var/www/html/myproject/venv/lib/python3.10/site-packages/django_redis/cache.pyÚ
_decorator   s   €úz"omit_exception.<locals>._decorator)Ú	functoolsÚpartialÚomit_exceptionÚwraps)r   r
   r   r   r   r   r      s
   r   c                       s:  e Zd Z‡ fdd„Zedd„ ƒZedd„ ƒZedd„ ƒZed	d
„ ƒZ	d3dd„Z
eed�dd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZei d�dd„ ƒZedd„ ƒZedd„ ƒZedd „ ƒZed!d"„ ƒZed#d$„ ƒZed%d&„ ƒZed'd(„ ƒZed)d*„ ƒZed+d,„ ƒZed-d.„ ƒZed/d0„ ƒZed1d2„ ƒZ‡  ZS )4Ú
RedisCachec                    s�   t ƒ  |¡ || _|| _| di ¡}| dd¡| _t| jƒ| _d | _| dtt	ddƒ¡| _
tt	ddƒ| _| jrCt tt	dtƒ¡| _d S d | _d S )	NÚOPTIONSÚCLIENT_CLASSz!django_redis.client.DefaultClientÚIGNORE_EXCEPTIONSÚDJANGO_REDIS_IGNORE_EXCEPTIONSFÚ#DJANGO_REDIS_LOG_IGNORED_EXCEPTIONSÚDJANGO_REDIS_LOGGER)ÚsuperÚ__init__Ú_serverÚ_paramsÚgetÚ_client_clsr   Ú_clientÚgetattrr   r   r   ÚloggingÚ	getLoggerÚ__name__r   )r   ÚserverÚparamsÚoptions©Ú	__class__r   r   r'   (   s*   ÿ
þÿÿÿýzRedisCache.__init__c                 C   s$   | j du r|  | j| j| ¡| _ | j S )z2
        Lazy client connection property.
        N)r,   r+   r(   r)   ©r   r   r   r   ÚclientA   s   
zRedisCache.clientc                 O   ó   | j j|i |¤ŽS r   )r7   Úset©r   r   r   r   r   r   r9   J   ó   zRedisCache.setc                 O   r8   r   )r7   Úincr_versionr:   r   r   r   r<   N   r;   zRedisCache.incr_versionc                 O   r8   r   )r7   Úaddr:   r   r   r   r=   R   r;   zRedisCache.addNc                 C   s    |   ||||¡}|tu r|}|S r   )Ú_getÚCONNECTION_INTERRUPTED)r   ÚkeyÚdefaultÚversionr7   Úvaluer   r   r   r*   V   s   zRedisCache.getr	   c                 C   s   | j j||||d�S )N)rA   rB   r7   )r7   r*   )r   r@   rA   rB   r7   r   r   r   r>   \   s   zRedisCache._getc                 O   r8   r   )r7   Údeleter:   r   r   r   rD   `   r;   zRedisCache.deletec                 O   s"   |  dt¡|d< | jj|i |¤ŽS )NÚitersize)r*   r   r7   Údelete_patternr:   r   r   r   rF   d   s   zRedisCache.delete_patternc                 O   r8   r   )r7   Údelete_manyr:   r   r   r   rG   i   r;   zRedisCache.delete_manyc                 C   s
   | j  ¡ S r   )r7   Úclearr6   r   r   r   rH   m   s   
zRedisCache.clearc                 O   r8   r   )r7   Úget_manyr:   r   r   r   rI   q   r;   zRedisCache.get_manyc                 O   r8   r   )r7   Úset_manyr:   r   r   r   rJ   u   r;   zRedisCache.set_manyc                 O   r8   r   )r7   Úincrr:   r   r   r   rK   y   r;   zRedisCache.incrc                 O   r8   r   )r7   Údecrr:   r   r   r   rL   }   r;   zRedisCache.decrc                 O   r8   r   )r7   Úhas_keyr:   r   r   r   rM   �   r;   zRedisCache.has_keyc                 O   r8   r   )r7   Úkeysr:   r   r   r   rN   …   r;   zRedisCache.keysc                 O   r8   r   )r7   Ú	iter_keysr:   r   r   r   rO   ‰   r;   zRedisCache.iter_keysc                 O   r8   r   )r7   Úttlr:   r   r   r   rP   �   r;   zRedisCache.ttlc                 O   r8   r   )r7   Úpersistr:   r   r   r   rQ   ‘   r;   zRedisCache.persistc                 O   r8   r   )r7   Úexpirer:   r   r   r   rR   •   r;   zRedisCache.expirec                 O   r8   r   )r7   Úlockr:   r   r   r   rS   ™   r;   zRedisCache.lockc                 K   s   | j jdi |¤Ž d S )Nr   )r7   Úclose)r   r   r   r   r   rT   �   s   zRedisCache.closec                 O   r8   r   )r7   Útouchr:   r   r   r   rU   ¡   r;   zRedisCache.touch)NNN)r0   Ú
__module__Ú__qualname__r'   Úpropertyr7   r   r9   r<   r=   r*   r?   r>   rD   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   Ú__classcell__r   r   r4   r   r   '   s^    





















r   )NN)r   r.   Údjango.confr   Údjango.core.cache.backends.baser   Údjango.utils.module_loadingr   Ú
exceptionsr   r-   r   Úobjectr?   r   r   r   r   r   r   Ú<module>   s    
