
    1yiC                         d dl Z d dlmZmZmZmZmZmZmZ d dl	m
Z d dlmZ d dlmZmZmZmZ d dlmZmZmZmZmZmZ d dlmZmZmZmZmZ d dl m!Z!  G d d	      Z"y)
    N)ListUnionTupleCallableOptionalAnyDict)extract_args)KeycommandCommandItemInt)SimpleError	casematchOKcurrent_timeDatabaseSimpleString)XStreamStreamRangeTestStreamGroupStreamEntryKey
ClientInfo)VersionTypec                       e Zd ZU eeeeef      eege	f   ge	f   e
d<   de	de	ddf fdZ ed e       fef      d	ededee   fd
       Z ed ee      fefej&                        d	ededefd       Z ed ee      f      d	edefd       Z ed ee      eefef      d	ededededee   f
d       Z ed ee      eefef      d	ededededee   f
d       Z edefefej4                        dedeeee	f      fd       Z edeeefef      dededededeeeeeeeeee   f      f            f
d       Z ed ee      fef      d	ededefd       Z  ed  ee      efef      d	edededefd!       Z! ed" ee      efef      d	edededeeeee      f   fd#       Z" ed$ ee      eefefej&                        d	eded%edede#f
d&       Z$ ed' ee      eefef      d	eded%edede#f
d(       Z% ed) ee      efd*      d	ededefd+       Z& ed, ee      eefd*      d	edededefd-       Z' ed. ee      eefd*      d	edededefd/       Z( ed0 ee      fd*      d	edeee	f   fd1       Z) ed2 ee      fefejT                        d	ededee   fd3       Z+ ed4 ee      efd*      d	ededeeeeeef   f      fd5       Z, ed6 ee      eee-efef      d	ededed7ededeee   eeeeee   f         f   fd8       Z. ed9 ee      eee-efef      d	ededed7ed:ededeeeeeeeeeee   f      f      f      fd;       Z/e0d<ededed=ed>eedf   dee   fd?       Z1ded@eee2eef      d>edAedBedeeee	f      fdCZ3dDeeeef      d>edEedBededeee	f   eeeeeeeee   f      f         f   f
dFZ4e0d	edGedefdH       Z5 xZ6S )IStreamsCommandsMixin	_blockingargskwargsreturnNc                 8    t        t        | 
  |i | |  |  |  y N)superr   __init__)selfr   r   	__class__s      i/var/www/html/content_weaver/venv/lib/python3.12/site-packages/fakeredis/commands_mixins/streams_mixin.pyr$   zStreamsCommandsMixin.__init__   s!    "D2DCFC    XADD)namefixedrepeatkeyc                    t        |dd      \  \  }}}}}|r|j                  y |d   }|dd  }	|	rt        |	      dz  dk7  r(t        t        j
                  j                  d            |j                  |j                  n	t               }
| j                  dk  r3|d	k7  r.t        j                  |      st        t        j                        |
j                  |	|
      }|Jt        j                  |d         st        t        j                        t        t        j                        |||
j                  |||       |j                  |
       |S )N)
nomkstream+limit~+maxlen~minidFerror_on_unexpectedr         r)         *)	entry_key
max_lengthstart_entry_keylimit)r
   valuelenr   msgsWRONG_ARGS_MSG6formatr   versionr   	valid_keyXADD_INVALID_IDaddXADD_ID_LOWER_THAN_LASTtrimupdate)r%   r-   r   r/   r>   maxlenminid	left_argsr:   elementsstreamress               r'   xaddzStreamsCommandsMixin.xadd   s8   8D: %9
5*UFEI
 #))+aL	QR=3x=1,1d2299&ABB!ii3<<$9#4_=V=VW`=ad2233%zz(izH;",,Yq\:!$"6"677d::;;!2KK65KN

6
r(   XTRIM)r*   r+   r,   flagsc                    t        |d      \  \  }}}}||t        t        j                        ||t        t        j                        |j                  xs
 t               }|j                  |||      }|j                  |       |S )N)r0   r1   r2   r;   )r
   r   rA   SYNTAX_ERROR_MSGr?   r   rI   rJ   )	r%   r-   r   r>   rK   rL   _rO   rP   s	            r'   xtrimzStreamsCommandsMixin.xtrim/   s    $07W$X!%"3d3344>emd3344'gikkVU%kP

6
r(   XLEN)r*   r+   c                 ,    t        |j                        S r"   )r@   r?   )r%   r-   s     r'   xlenzStreamsCommandsMixin.xlen;   s    399~r(   XRANGE_min_maxc                 b    t        |d      \  \  }}| j                  |j                  ||d|      S )N+countFr
   _xranger?   r%   r-   r\   r]   r   countrV   s          r'   xrangezStreamsCommandsMixin.xrange?   s1     #45!||CIItT5%@@r(   	XREVRANGEc                 b    t        |d      \  \  }}| j                  |j                  ||d|      S )Nr_   Tra   rc   s          r'   	xrevrangezStreamsCommandsMixin.xrevrangeH   s1     #45!||CIItT4??r(   XREADc           	      x   t        |dd      \  \  }}}t        |      dk  s t        |d   d      rt        |      dz  dk7  rt        t        j
                        |dd  }t        t        |      dz        }g }t        |      D ]h  }t        ||   | j                  | j                  j                  ||         d 	      }| j                  ||||z            }	|j                  ||   |	f       j || j                  ||dd
      S | j                  |dz  t        j                   | j                  ||d            S )N)r`   +blockFr3      r      STREAMSr6   r5   itemdefault)blocking
first_pass     @@T)r
   r@   r   r   rA   rU   intranger   _dbget_parse_start_idappend_xreadr   	functoolspartial)
r%   r   rd   timeoutrM   num_streamsstream_start_id_listiro   start_ids
             r'   xreadzStreamsCommandsMixin.xreadQ   sT     !&
	
 y>AYy|Z%HCPYN]^L^bcLcd3344abM	#i.1,-DF{# 	BAy|TXXDHHLLST<V`deD++D)AO2LMH ''1x(@A	B ?;;3UUW\;]]>>& !!$++/CUDQ r(   
XREADGROUPgroup_const
group_nameconsumer_namec           
         t        d|      st        t        j                        t	        |dd      \  \  }}}}t        |      dk  s t        |d   d      rt        |      dz  d	k7  rt        t        j                        |d	d  }t        t        |      dz        }	g }
t        |	      D ]  }t        ||   | j                  | j                  j                  ||         d 
      }|j                  t        t        j                        |j                  j                  |      }|sHt        t        j                  j                  ||   j!                         |j!                                     |
j#                  |||   |||	z      f        || j%                  ||
||d      }n6| j'                  |dz  t)        j*                  | j$                  ||
||            }| j,                  j.                  dk(  r|r|gS d S |S )Ns   GROUP)r`   rk   noackFr3   rl   r   rm   r6   r5   rn   rs   )r   r   rA   rU   r
   r@   rt   ru   r   rv   rw   r?   XGROUP_KEY_NOT_FOUND_MSG	group_get%XREADGROUP_KEY_OR_GROUP_NOT_FOUND_MSGrC   decodery   _xreadgroupr   r{   r|   _client_infoprotocol_version)r%   r   r   r   r   rd   r}   r   rM   r~   group_paramsr   ro   grouprP   s                  r'   
xreadgroupzStreamsCommandsMixin.xreadgroups   s    ;/d3344-9/U.
* y>AYy|Z%HCPYN]^L^bcLcd3344abM	#i.1,- @B{# 	Ay|TXXDHHLLST<V`deDzz!!$"?"?@@!%!5!5j!AE!>>EEiPQlFYFYF[]g]n]n]pq  aLa+o.	  ?""=,ueTC..& !!$"2"2M<QVX]^C --2C5)T)
r(   XDELc                     t        |      dk(  r(t        t        j                  j	                  d            |j
                  j                  |      }|S )Nr   xdel)r@   r   rA   rB   rC   r?   delete)r%   r-   r   rP   s       r'   r   zStreamsCommandsMixin.xdel   sB    t9>d2299&ABB99##D)
r(   XACKc                     t        |      dk(  r(t        t        j                  j	                  d            |j
                  y|j
                  j                  |      }|sy|j                  |      S )Nr   xack)r@   r   rA   rB   rC   r?   r   ack)r%   r-   r   r   r   s        r'   r   zStreamsCommandsMixin.xack   s`     t9>d2299&ABB99 YY00<yyr(   XPENDINGc                 f   |j                   yd\  }}}}}t        |      dkD  r,t        d|d         rt        j                  |d         }|dd  }dt        |      cxk  rdk  rn nt        t        j                        t        |      dk\  r[t        j                  |d         t        j                  |d         t        j                  |d         }}}t        |      dkD  r|d   }|j                   j                  |      }	|	s|dS g S ||	j                  |||||      S |	j                         S )Nr   )NNNNN   s   idler5   r6   rl   )r?   r@   r   r   r   r   rA   rU   r   r   pendingpending_summary)
r%   r-   r   r   idlestartendrd   consumerr   s
             r'   xpendingzStreamsCommandsMixin.xpending   s'   99,H)eS%t9q=YwQ8::d1g&D8Ds4y1d3344Y!^&&tAw/&&tAw/

47# 3E
 4y1}7 YY00<)11r1==uc5(CC((**r(   zXGROUP CREATE	start_keyc                 B   t        |d      \  \  }}}|j                  |st        t        j                        |j                  j                  |      t        t        j                        |j                  j                  |||       |j                          t        S )N)mkstream+entriesread)
r
   r?   r   rA   r   r   XGROUP_BUSYGROUP	group_addupdatedr   )r%   r-   r   r   r   r   entries_readrV   s           r'   xgroup_createz"StreamsCommandsMixin.xgroup_create   s    &249U&V# <!99Xd;;<<99z*6d3344		J	<@	r(   zXGROUP SETIDc                 F   t        |d      \  \  }}|j                  t        t        j                        |j                  j                  |      }|s7t        t        j                  j                  |j                         |            |j                  ||       t        S )N)r   )r
   r?   r   rA   r   r   XGROUP_GROUP_NOT_FOUND_MSGrC   r   set_idr   )r%   r-   r   r   r   r   rV   r   s           r'   xgroup_setidz!StreamsCommandsMixin.xgroup_setid   s    )$0AB99d;;<<		##J/d==DDZEVEVEXZ]^__Y-	r(   zXGROUP DESTROY c                     |j                   t        t        j                        |j                   j	                  |      }|S r"   )r?   r   rA   r   group_delete)r%   r-   r   rP   s       r'   xgroup_destroyz#StreamsCommandsMixin.xgroup_destroy   s6    99d;;<<99))*5
r(   zXGROUP CREATECONSUMERc                    |j                   t        t        j                        |j                   j	                  |      }|s7t        t        j
                  j                  |j                         |            |j                  |      S r"   )	r?   r   rA   r   r   r   rC   r   add_consumerr%   r-   r   r   r   s        r'   xgroup_createconsumerz*StreamsCommandsMixin.xgroup_createconsumer   m    99d;;<< YY00<d==DDZEVEVEXZ]^__!!-00r(   zXGROUP DELCONSUMERc                    |j                   t        t        j                        |j                   j	                  |      }|s7t        t        j
                  j                  |j                         |            |j                  |      S r"   )	r?   r   rA   r   r   r   rC   r   del_consumerr   s        r'   xgroup_delconsumerz'StreamsCommandsMixin.xgroup_delconsumer   r   r(   zXINFO GROUPSc                     |j                   t        t        j                        |j                   j	                         }|S r"   )r?   r   rA   
NO_KEY_MSGgroups_info)r%   r-   rP   s      r'   xinfo_groupsz!StreamsCommandsMixin.xinfo_groups   s2    99doo.. #		 5 5 7
r(   zXINFO STREAMc                     t        |d      \  \  }}|j                  t        t        j                        |j                  j                  |      }|S )N)full)r
   r?   r   rA   r   stream_info)r%   r-   r   r   rV   rP   s         r'   xinfo_streamz!StreamsCommandsMixin.xinfo_stream  sF    !$	2
99doo..99006
r(   zXINFO CONSUMERSc                    |j                   t        t        j                        |j                   j	                  |      }|s7t        t        j
                  j                  |j                         |            |j                         }|S r"   )	r?   r   rA   r   r   r   rC   r   consumers_info)r%   r-   r   r   rP   s        r'   xinfo_consumersz$StreamsCommandsMixin.xinfo_consumers  so    99d;;<< YY00<d==DDZEVEVEXZ]^__272F2F2H
r(   XCLAIMmin_idle_msc                    |j                   }|t        t        j                        |j	                  |      }|s7t        t        j
                  j                  |j                         |            t        |ddd      \  \  }}	}
}}}||dkD  r|	t               |z
  }	|j                  ||||	|      \  }}|r|D cg c]  }|j                          c}S |D cg c]  }|j                  |       c}S c c}w c c}w )N)z+idlez+timez+retrycountforcejustidF)r4   left_from_first_unexpectedr   )r?   r   rA   r   r   r   rC   r   r
   r   claimencodeformat_record)r%   r-   r   r   r   r   rO   r   r   _timeretryr   r   msg_idsmsgs_claimedrV   msgs                    r'   xclaimzStreamsCommandsMixin.xclaim  s     >d;;<<#--j9d==DDZEVEVEXZ]^__7C@ %',	8
4+ueUFW qU] NT)E++k7M5RWXa,89SCJJL995ABc$$S)BB :Bs   >C7C<
XAUTOCLAIMr   c                    t        |d      \  \  }}}	|xs d}|j                  }
|
t        t        j                        |
j                  |      }|s7t        t        j                  j                  |j                         |            |j                  |||      }|j                  |||d d      \  }}t        |      dkD  rt        |      j                         n||r|D cg c]  }|j                          c}n|D cg c]  }|
j                  |       c}g}| j                  dk\  r-|j!                  |D cg c]  }|j                          c}       |S c c}w c c}w c c}w )N)r`   r   d   Fr   r7   )r
   r?   r   rA   r   r   r   rC   r   read_pel_msgsr   r@   maxr   r   rD   ry   )r%   r-   r   r   r   r   r   rd   r   rV   rO   r   keysr   msgs_removedr   rP   s                    r'   
xautoclaimzStreamsCommandsMixin.xautoclaim2  sE    *$0DE>d;;<<#--j9d==DDZEVEVEXZ]^__%*%8%8eU%S%*[[dMSWY^%_"l +.l*;a*?C$$&U6<\2cSZZ\2htBuad6CWCWX[C\BuX
 <<4JJ=

=>
	 3Bu >s   #EE ;E%rO   reverserd   c                 V    | g S |t        |       }| j                  |||      }|d | S )N)r   )r@   irange)rO   r\   r]   r   rd   rP   s         r'   rb   zStreamsCommandsMixin._xrangeJ  s<     >I=KEmmD$m86E{r(   r   r   rr   c                     i }|D ]9  \  }}}	|j                  ||	||      }
|r| y t        |
      dkD  s|	dk7  s5|
||<   ; |S )Nr      >)
group_readr@   )r%   r   r   rd   r   rr   rP   r   stream_namer   stream_resultss              r'   r   z StreamsCommandsMixin._xreadgroupY  sd     !#,8 	2(E;"--mXueTNu}>"Q&(d*:#1K 	2 
r(   r   rq   c                    t        j                  d      }i }|D ]t  \  }}t        || j                  | j                  j	                  |      d       }	| j                  |	j                  ||d|      }
t        |
      dkD  sf|
||	j                  <   v |r|rt        |      dk(  ry | j                  j                  dk(  r%|j                         D cg c]	  \  }}||g c}}S |S c c}}w )N   +rn   Fr   r6   )r   r   r   rv   rw   rb   r?   r@   r-   r   r   items)r%   r   rd   rq   rr   max_infrP   r   r   ro   r   kvs                r'   rz   zStreamsCommandsMixin._xreadj  s     "((. "%9 	/!K{DHH488<<;T^bcD!\\$**hPUVN>"Q& .DHH		/ #c(a---2'*yy{3tq!QF33
 4s   C$sc                     |dk(  rP| j                   t        j                  d      S t        j                  | j                   j                         d      S t        j                  |d      S )N   $s   0-0T)	exclusive)r?   r   r   last_item_key)r-   r   s     r'   rx   z$StreamsCommandsMixin._parse_start_id|  sW    9yy &--f55"))#))*A*A*CtTT%%a488r(   )7__name__
__module____qualname__r   r   r   floatrt   boolr   __annotations__r$   r   r   bytesr   rQ   r   rA   FLAG_LEAVE_EMPTY_VALrW   rZ   r   r   re   rh   FLAG_SKIP_CONVERT_TO_RESP2r	   strr   r   r   r   r   r   r   r   r   r   r   r   r   FLAG_DO_NOT_CREATEr   r   r   r   r   staticmethodrb   r   r   rz   rx   __classcell__)r&   s   @r'   r   r      s7   %s
"34hvs{6KLcQRR&c &S &T & &%: E huo  ;2 '#g,%IbIbc	 	U 	s 	 d	 &W0   1 7|_o>x
A+ A_ AO A\a Afjkpfq A
A 7|_o>x
@[ @ @ @_d @imnsit @
@ '%5($BaBab5 Xd38n%=  cB ,ueU&;UHM( (.3(DI(RW(	$tE%eE4;4F.G)H"HIJK	L( N(T &WA E c  B 7|U#x
  u  
 *S\5$95(K+K +U +5 +USVX\]abg]hXiSiMj + L+6 /#g,u)Euh^b^w^wx % E Z_ dp  y .Wue(DeXV  5 Y^ co  W "3w<*?K+ 5 S  L )#g,u1MVXY1 1% 1X] 1be 1 Z1 &s7|UE.JSUV1k 1u 1UZ 1_b 1 W1 .WC UCZ0@  D .WPTPgPgh E d5k  i #CL%+@L; E d4PSUZ[`be[eUfPfKgFh  M (3w<sE"JTYS[\CC,1CBGCVYCbgC	tE{DeE4;,>&?!@AA	BC ]C2 ,s7|UE3&NX]W_`,1BGVYbgpu	eE4eT%tE{8J2K-L&L MNNO	P a.   	
 S$Y 
e  5eU!:;< 	
   
$ucz"	#"$(uo/E)F$GPS_cqu	tT%*%tDud5PTUZP[I[C\>]7]1^,_'``	a$ 9[ 9U 9 9 9r(   r   )#r{   typingr   r   r   r   r   r   r	   fakeredis._msgs_msgsrA   fakeredis._command_args_parsingr
   fakeredis._commandsr   r   r   r   fakeredis._helpersr   r   r   r   r   r   fakeredis.modelr   r   r   r   r   fakeredis._typingr   r   r   r(   r'   <module>r     s8     D D D  8 > > _ _ ] ] )v9 v9r(   