� L�g $���ddlZddlZddlmZddlmZddlm Z m Z ddl m Z e ��ZGd�de ��ZGd�de��ZdS) �N)� ResponseError)� BaseCache� _ensure_key)�JsonSerializerc ����eZdZdZdZddddedddddf �fd� Zdd �Zdd �Zdd �Z dd �Z dd�Z dd�Z d�Z dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd dd�d�Zd�Zdd�d�Z�xZS) � RedisBackendz_if redis.call('get',KEYS[1]) == ARGV[1] then return redis.call('del',KEYS[1]) else return 0 endz�if redis.call('get',KEYS[1]) == ARGV[2] then if #ARGV == 4 then return redis.call('set', KEYS[1], ARGV[1], ARGV[3], ARGV[4]) else return redis.call('set', KEYS[1], ARGV[1]) end else return 0 endz 127.0.0.1i�rNFc �:��t��jdi| ��|turtjdt ��||_t|��|_t|��|_ ||_ |�dnt|��|_ |rt|��nd|_ | pi} |rtj| d<| p tj} | d|j|j|j |j d|j |j d�| ��} tj| ���|_d|j_dS)Nz;Parameter 'pool_min_size' is deprecated since aiocache 0.12�connection_classF)�host�port�db�password�decode_responses�socket_connect_timeout�max_connections)�connection_poolT�)�super�__init__�_NOT_SET�warnings�warn�DeprecationWarning�endpoint�intr r r� pool_max_size�float�create_connection_timeout�redis� SSLConnection�ConnectionPool�Redis�client�auto_close_connection_pool)�selfrr r r� pool_min_sizerr�ssl�connection_pool_class�connection_pool_kwargs�kwargsr� __class__s ��g/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/aiocache/backends/redis.pyrzRedisBackend.__init__#sK��� �����"�"�6�"�"�"� �� (� (� �M�M�"� � � � !�� ���I�I�� ��b�'�'��� �� �%2�%:�T�T��M�@R�@R���0I� S�E�+� ,� ,� ,�t� �&�"8�!=�2�� � M�9>�9L� "�#5� 6�!6� M��9M��/�/� ���T�Y�4�7��]�U�#'�#A� �.�  � � %�  � ���k�/�B�B�B�� �26�� �.�.�.��utf-8c��|K�|j�|���d{V��}|�|�|S|�|��S�N)r#�get�decode)r%�key�encoding�_conn�values r,�_getzRedisBackend._getYsL�����k�o�o�c�*�*�*�*�*�*�*�*�� � �u�}��L��|�|�H�%�%�%r-c��BK�|�|||����d{V��S)N�r4r5)r7)r%r3r4r5s r,�_getszRedisBackend._gets_s0�����Y�Y�s�X�U�Y�C�C�C�C�C�C�C�C�Cr-c��V�K�|jj|��d{V��}��|S�fd�|D��S)Nc�B��g|]}|�|n|������Sr0�r2��.0�vr4s �r,� <listcomp>z+RedisBackend._multi_get.<locals>.<listcomp>fs-���G�G�G�1�Q�Y���A�H�H�X�$6�$6�G�G�Gr-)r#�mget)r%�keysr4r5�valuess ` r,� _multi_getzRedisBackend._multi_getbsO�����'�t�{�'��.�.�.�.�.�.�.�� � ��M�G�G�G�G��G�G�G�Gr-c��fK�|� |�|||||����d{V��S|�!|j�||���d{V��St|t��r4t |dz��}|j�|||���d{V��S|j�|||���d{V��S)N)�ttlr5��)�_casr#�set� isinstancerr�psetex�setex)r%r3r6rG� _cas_tokenr5s r,�_setzRedisBackend._seths����� � !����3��z�s�%��P�P�P�P�P�P�P�P� P� �;������e�4�4�4�4�4�4�4�4� 4� �c�5� !� !� =��c�D�j�/�/�C���+�+�C��e�<�<�<�<�<�<�<�<� <��[�&�&�s�C��7�7�7�7�7�7�7�7�7r-c��K�d}|�-t|t��rdt|dz��fnd|f}|jd|jd|||g|�Rd|i��d{V��S)Nr�PXrH�EX�eval�r5)rKrr�_raw� CAS_SCRIPT)r%r3r6�tokenrGr5�argss r,rIzRedisBackend._casrs~������ �?�.8��e�.D�.D�U�D�#�c�D�j�/�/�*�*�4�QT�+�D��T�Y�v�t���3��u�a�t�a�a�a�[`�a�a�a�a�a�a�a�a�ar-c���K�|pd}ttj�d�|D������}|r|�||���d{V��n|jjdg|�R��d{V��dS)Nrc3�$K�|] \}}||fV�� dSr0r)r?r3r6s r,� <genexpr>z*RedisBackend._multi_set.<locals>.<genexpr>{s*����6\�6\� ��U��U�|�6\�6\�6\�6\�6\�6\r-�MSETT)�list� itertools�chain� from_iterable�_RedisBackend__multi_set_ttlr#�execute_command)r%�pairsrGr5� flatteneds r,� _multi_setzRedisBackend._multi_setxs������h�Q�����6�6�6\�6\�V[�6\�6\�6\�\�\�]�]� � � B��&�&�y�#�6�6� 6� 6� 6� 6� 6� 6� 6� 6�-�$�+�-�f�A�y�A�A�A� A� A� A� A� A� A� A��tr-c��K�|j�d���4�d{V��}|jdg|�R�t|t��rt |dz��|jfn||jf\}}|ddd�D]}|||����|����d{V��ddd���d{V��dS#1�d{V��swxYwYdS)NT)� transactionr\rH�)�time) r#�pipelinerbrKrr�pexpire�expire�execute)r%rdrG�p�expr3s r,�__multi_set_ttlzRedisBackend.__multi_set_ttl�s~�����;�'�'�D�'�9�9� � � � � � � �Q� �A� �f� 1�y� 1� 1� 1� 1�7A�#�u�7M�7M�b��C�$�J�����3�3�TW�YZ�Ya�Sb�H�C�� ���1��~� #� #����C�c�"�"�"�"�"��)�)�+�+� � � � � � � �  � � � � � � � � � � � � � � � � � � � � � � � ���� � � � � � s�A>B5�5 B?�B?c���K�ddi}t|t��rt|dz��|d<n||d<|jj||fi|���d{V��}|s"t d�|�����|S)N�nxTrH�px�exz3Key {} already exists, use .set to update the value)rKrrr#rJ� ValueError�format)r%r3r6rGr5r*�was_sets r,�_addzRedisBackend._add�s��������� �c�5� !� !� ��s�T�z�?�?�F�4�L�L��F�4�L�'�� ���U�=�=�f�=�=�=�=�=�=�=�=��� `��R�Y�Y�Z]�^�^�_�_� _��r-c��dK�|j�|���d{V��}t|��Sr0)r#�exists�bool)r%r3r5�numbers r,�_existszRedisBackend._exists�s9�����{�)�)�#�.�.�.�.�.�.�.�.���F�|�|�r-c��K� |j�||���d{V��S#t$rtd��d�wxYw)NzValue is not an integer)r#�incrby�IncrbyException� TypeError)r%r3�deltar5s r,� _incrementzRedisBackend._increment�sf���� A���+�+�C��7�7�7�7�7�7�7�7� 7��� A� A� A��5�6�6�D� @� A���s � %�Ac��K�|dkr |j�|���d{V��S|j�||���d{V��S)Nr)r#�persistrl)r%r3rGr5s r,�_expirezRedisBackend._expire�sa���� �!�8�8���,�,�S�1�1�1�1�1�1�1�1� 1��[�'�'��S�1�1�1�1�1�1�1�1�1r-c��FK�|j�|���d{V��Sr0)r#�delete)r%r3r5s r,�_deletezRedisBackend._delete�s.�����[�'�'��,�,�,�,�,�,�,�,�,r-c���K�|rK|j�d�|�����d{V��}|r|jj|��d{V��n|j����d{V��dS)Nz{}:*T)r#rCrvr��flushdb)r%� namespacer5rCs r,�_clearzRedisBackend._clear�s����� � (���)�)�&�-�-� �*B�*B�C�C�C�C�C�C�C�C�D�� 0�(�d�k�(�$�/�/�/�/�/�/�/�/���+�%�%�'�'� '� '� '� '� '� '� '��tr-r9c���K�t|j|��|i|���d{V��}��0|dkr|�|����}n|dvr�fd�|D��}|S)Nr1>rCrBc�B��g|]}|�|n|������Sr0r=r>s �r,rAz%RedisBackend._raw.<locals>.<listcomp>�s-���O�O�O�A�a�i���Q�X�X�h�-?�-?�O�O�Or-)�getattrr#r2)r%�commandr4r5rXr*r6s ` r,rUzRedisBackend._raw�s������3�g�d�k�7�3�3�T�D�V�D�D�D�D�D�D�D�D�� � ��%���E�$5�� � �X�.�.����,�,�,�O�O�O�O��O�O�O��� r-c��NK�|�d|jd||���d{V��S)NrSrT)rU�RELEASE_SCRIPT)r%r3r6s r,�_redlock_releasezRedisBackend._redlock_release�s5�����Y�Y�v�t�':�A�s�E�J�J�J�J�J�J�J�J�Jr-)r5c��HK�|j����d{V��dSr0)r#�close)r%r5rXr*s r,�_closezRedisBackend._close�s2�����k���!�!�!�!�!�!�!�!�!�!�!r-)r.N)NNN)NNr0)�__name__� __module__� __qualname__r�rVrrr7r:rErOrIrerarxr}r�r�r�r�rUr�r�� __classcell__�r+s@r,rrs�������� �� ��� � ����"&� �"�#�46�46�46�46�46�46�l&�&�&�&� D�D�D�D�H�H�H�H� 8�8�8�8�b�b�b�b� � � � ���� � � � �����A�A�A�A� 2�2�2�2� -�-�-�-�����3:�������K�K�K�)-�"�"�"�"�"�"�"�"�"r-rc�L��eZdZdZdZd�fd� Zed���Zdd�Zd�Z �xZ S) � RedisCacheaD Redis cache implementation with the following components as defaults: - serializer: :class:`aiocache.serializers.JsonSerializer` - plugins: [] Config options are: :param serializer: obj derived from :class:`aiocache.serializers.BaseSerializer`. :param plugins: list of :class:`aiocache.plugins.BasePlugin` derived classes. :param namespace: string to use as default prefix for the key used in all operations of the backend. Default is None. :param timeout: int or float in seconds specifying maximum timeout for the operations to last. By default its 5. :param endpoint: str with the endpoint to connect to. Default is "127.0.0.1". :param port: int with the port to connect to. Default is 6379. :param db: int indicating database to use. Default is 0. :param password: str indicating password to use. Default is None. :param pool_max_size: int maximum pool size for the redis connections pool. Default is None. :param create_connection_timeout: int timeout for the creation of connection. Default is None rNc �Z��t��jdd|p t��i|��dS)N� serializerr)rrr)r%r�r*r+s �r,rzRedisCache.__init__�s6��������M�M�J�$B�.�2B�2B�M�f�M�M�M�M�Mr-c�V�i}|dd��d��^}}|r||d<|S)aQ Given a uri path, return the Redis specific configuration options in that path string according to iana definition http://www.iana.org/assignments/uri-schemes/prov/redis :param path: string containing the path. Example: "/0" :return: mapping containing the options. Example: {"db": "0"} rTN�/r )�split)�cls�path�optionsr �_s r,�parse_uri_pathzRedisCache.parse_uri_path�s<�����a�b�b�����$�$���Q� � ��G�D�M��r-c���|�(d�||rdndt|����S|j�2d�|j|jrdndt|����S|S)Nz{}{}{}�:�)rvrr�)r%r3r�s r,� _build_keyzRedisCache._build_key�s{�� � ��?�?��)�3�3�3��[��5E�5E�G�G� G� �>� %��?�?���t�~� =���2�{�3�?O�?O�Q�Q� Q�� r-c�B�d�|j|j��S)NzRedisCache ({}:{}))rvrr )r%s r,�__repr__zRedisCache.__repr__�s��#�*�*�4�=�$�)�D�D�Dr-r0) r�r�r��__doc__�NAMEr� classmethodr�r�r�r�r�s@r,r�r��s����������* �D�N�N�N�N�N�N�� � ��[� �����E�E�E�E�E�E�Er-r�)r^r� redis.asyncio�asyncior�redis.exceptionsrr�� aiocache.baserr�aiocache.serializersr�objectrrr�rr-r,�<module>r�s�����������������=�=�=�=�=�=�0�0�0�0�0�0�0�0�/�/�/�/�/�/� �6�8�8��q"�q"�q"�q"�q"�9�q"�q"�q"�h5E�5E�5E�5E�5E��5E�5E�5E�5E�5Er-
Memory