
    1yi                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZ d dlZd dlmZmZ d dlmZmZ d dlmZmZ  e j.                  d      Zdeeed	f   eef   d
efdZded
efdZ G d d      Z G d de      Zy)    N)defaultdict)DictTupleAnyListOptionalUnion)DatabaseFakeSelector)VersionType
ServerType)AccessControlList
ClientInfo	fakeredisv.returnc                     t        | t              r| S t        | t              r| fS t        | t              r#| j	                  d      }t        d |D              S | S )N.c              3   2   K   | ]  }t        |        y wN)int.0xs     S/var/www/html/content_weaver/venv/lib/python3.12/site-packages/fakeredis/_server.py	<genexpr>z"_create_version.<locals>.<genexpr>   s     -SV-   )
isinstancetupler   strsplit)r   v_splits     r   _create_versionr#      sO    !U!St!S''#,-W---H    c                 h    t        | t              rdj                  d | D              S t        |       S )Nr   c              3   2   K   | ]  }t        |        y wr   )r    r   s     r   r   z"_version_to_str.<locals>.<genexpr>   s     *1A*r   )r   r   joinr    )r   s    r   _version_to_strr(      s*    !Uxx****q6Mr$   c            
           e Zd ZU i Zeed f   ed<   	 	 	 ddedede	ee
e
f      ddfdZdefdZed	edededd fd
       Zy)
FakeServer_servers_mapNversionserver_typeconfigr   c                 0    t        j                          _        t         fd       _        i  _        t        t        j                         _        t        t        j                         _	        t        t        j                         _
        t        t        j                                _        d _        g  _        g  _        t#        |       _        |dvrt'        d|       | _        |xs i  _        t-                _        i  _        d _        y)a  Initialize a new FakeServer instance.
        :param version: The version of the server (e.g. 6, 7.4, "7.4.1", can also be a tuple)
        :param server_type: The type of server (redis, dragonfly, valkey)
        :param config: A dictionary of configuration options.

        Configuration options:
        - `requirepass`: The password required to authenticate to the server.
        - `aclfile`: The path to the ACL file.
        c                  .    t         j                        S r   )r
   lock)selfs   r   <lambda>z%FakeServer.__init__.<locals>.<lambda>5   s    HTYY<O r$   T)redis	dragonflyvalkeyzUnsupported server type:    N)	threadingLockr1   r   dbsscript_cacheweakrefWeakSetsubscriberspsubscribersssubscribersr   timelastsave	connectedsocketsclosed_socketsr#   r,   
ValueErrorr-   r.   r   aclclients_next_client_id)r2   r,   r-   r.   s   `   r   __init__zFakeServer.__init__%   s     NN$	(34O(P02>I'//>Z?J7???[?J7???[ -"$)+$3G$<>>8FGG'2*0,B&7&924 r$   c                     | j                   5  | j                  }| xj                  dz  c_        d d d        |S # 1 sw Y   S xY w)Nr7   )r1   rI   )r2   	client_ids     r   get_next_client_idzFakeServer.get_next_client_idI   sE    YY 	&,,I  A% 	& 	& s	   "9Akeyc                     | t         j                  vrt        ||      t         j                  | <   t         j                  |    S )Nr,   r-   )r*   r+   )rN   r,   r-   s      r   
get_serverzFakeServer.get_serverO   s9    j---+5gS^+_J##C(&&s++r$   ))   r4   N)__name__
__module____qualname__r+   r   r    __annotations__r   r   r   bytesrJ   r   rM   staticmethodrQ    r$   r   r*   r*   "   s    ,.L$sL().  $")/3	"!"!  "! eUl+,	"!
 
"!HC  , ,k ,
 ,| , ,r$   r*   c                   <     e Zd Zddddededededd	f
 fd
Z xZS )FakeBaseConnectionMixin)rR   r   r4   rP   argsr,   r-   kwargsr   Nc          	         d | _         |  d | _        d | _        |j                  dd       | _        |j                  dt
        j                        | _        |j                  dt                     | _	        |j                  dd       | _
        |j                  dd       }|j                  dd      }| j                  |r|| _        n.|j                  d      |j                  d	      }}| d
| | _        | xj                  d
| dt        |      d    z  c_        t        j                  | j                  ||      | _        || j                  _        |j                  di       }	t#        | H  |i | t'        | dd      }
|	j)                  t+        d8i d| j                  j-                         ddddddddddddddddddd dd!d"d#d$d%d&d'd(d)dd*d+d,dd-dd.dd/dd0d1d2d3d4d5d6d"d7|
       t/        d8i |	| _        y )9Nserverclient_classlua_moduleswriterpathrC   Thostport:z:vr   )r-   r,   client_infoprotocol   idaddrz127.0.0.1:57275laddrz127.0.0.1:6379fd   name idleflagsNdbsubpsubssubmultiqbuf0   	qbuf_freeiA  argv_mem   	multi_memrbsi   rbpoblollomemtot_memi1I  eventsrcmdauthredirresprY   )client_name_sock	_selectorpop_serverr4   Redis_client_classset_lua_modules_writer
server_keygetr(   r*   rQ   rC   superrJ   getattrupdatedictrM   r   _client_info)r2   r,   r-   r\   r]   rc   rC   rd   re   rg   rh   	__class__s              r   rJ   z FakeBaseConnectionMixin.__init__W   s    +/
15zz(D1#ZZD"JJ}ce<zz(D1zz&$'JJ{D1	<<"&#ZZ/F1Cd%)F!D6"2OO;-r/'2J12M1NOOO%00kcj0kDL%.DLL"jj3$)&)4Q/ <<224& ' 	
              !" #$ %& '( )* +, -. /0 12 34 5	
< '55r$   )rS   rT   rU   r   r   r   rJ   __classcell__)r   s   @r   r[   r[   V   s;    17SZ8686#.86FP86fi86	86 86r$   r[   ) loggingr8   rA   r<   collectionsr   typingr   r   r   r   r   r	   r4   fakeredis._helpersr
   r   fakeredis._typingr   r   fakeredis.modelr   r   	getLoggerLOGGERr   r    r#   r(   r*   objectr[   rY   r$   r   <module>r      s        # : :  5 5 9			;	'uU38_c367 K { s 1, 1,h96f 96r$   