
    <iC                         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"dS )
    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j                  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j*                  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                 T     t          t          |           j        |i | |  |  |  d S N)superr   __init__)selfr   r   	__class__s      /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fakeredis/commands_mixins/streams_mixin.pyr$   zStreamsCommandsMixin.__init__   s>    2"D))2DCFCCC!%%%    XADD)namefixedrepeatkeyc                    t          |dd          \  \  }}}}}|r	|j        d S |d         }|dd          }	|	rt          |	          dz  dk    r,t          t          j                            d                    |j        |j        nt                      }
| j        dk     r3|d	k    r-t          j
        |          st          t          j                  |
                    |	|
          }|Lt          j
        |d                   st          t          j                  t          t          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   sr   8D: %9
 9
 9
5*UFEI
  	#)+4aL	QRR= 	C3x==1,11d299&AABBB!i3<$9#4#4_=VW`=a=a#4d2333%zz(izHH;",Yq\:: 8!$"6777d:;;;!2KK65KNNN

6
r(   XTRIM)r*   r+   r,   flagsc                 ,   t          |d          \  \  }}}}||t          t          j                  ||t          t          j                  |j        pt                      }|                    |||          }|                    |           |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$X!%"3d3444>emd3444'giikkVU%kPP

6
r(   XLEN)r*   r+   c                 *    t          |j                  S r"   )r@   r?   )r%   r-   s     r'   xlenzStreamsCommandsMixin.xlen;   s    39~~r(   XRANGE_min_maxc                 h    t          |d          \  \  }}|                     |j        ||d|          S )N+countFr
   _xranger?   r%   r-   r\   r]   r   countrV   s          r'   xrangezStreamsCommandsMixin.xrange?   s5     #455!||CItT5%@@@r(   	XREVRANGEc                 h    t          |d          \  \  }}|                     |j        ||d|          S )Nr_   Tra   rc   s          r'   	xrevrangezStreamsCommandsMixin.xrevrangeH   s5     #455!||CItT4???r(   XREADc           	         t          |dd          \  \  }}}t          |          dk     s,t          |d         d          rt          |          dz  dk    rt          t          j                  |dd          }t          t          |          dz            }g }t          |          D ]z}t          ||         | j	        | j	        
                    ||                   d 	          }|                     ||||z                      }	|                    ||         |	f           {||                     ||dd
          S |                     |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   s     !&
 
 
	
 y>>AYy|Z%H%HCPYNN]^L^bcLcLcd3444abbM	#i..1,--DF{## 	B 	BAy|TXDHLLST<V<V`deeeD++D)AO2LMMH ''1x(@AAAA?;;3UUW\;]]]>>& !$+/CUDQQ  r(   
XREADGROUPgroup_const
group_nameconsumer_namec           
      n   t          d|          st          t          j                  t	          |dd          \  \  }}}}t          |          dk     s,t          |d         d          rt          |          dz  d	k    rt          t          j                  |d	d          }t          t          |          dz            }	g }
t          |	          D ]}t          ||         | j	        | j	        
                    ||                   d 
          }|j        t          t          j                  |j                            |          }|sWt          t          j                            ||                                         |                                                    |
                    |||         |||	z            f           ||                     ||
||d          }n4|                     |dz  t)          j        | j        ||
||                    }| j        j        dk    r|r|gn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   sL    ;// 	5d3444-9/U.
 .
 .
* y>>AYy|Z%H%HCPYNN]^L^bcLcLcd3444abbM	#i..1,-- @B{## 	 	Ay|TXDHLLST<V<V`deeeDz!!$"?@@@!%!5!5j!A!AE !>EEiPQlFYFYF[F[]g]n]n]p]pqq   aLa+o.    ?""=,ueTTCC..& !$"2M<QVX]^^ C -22)C55T)
r(   XDELc                     t          |          dk    r,t          t          j                            d                    |j                            |          }|S )Nr   xdel)r@   r   rA   rB   rC   r?   delete)r%   r-   r   rP   s       r'   r   zStreamsCommandsMixin.xdel   sJ    t99>>d299&AABBB9##D))
r(   XACKc                     t          |          dk    r,t          t          j                            d                    |j        dS |j                            |          }|sdS |                    |          S )Nr   xack)r@   r   rA   rB   rC   r?   r   ack)r%   r-   r   r   r   s        r'   r   zStreamsCommandsMixin.xack   sq     t99>>d299&AABBB91 Y00<< 	1yyr(   XPENDINGc                    |j         dS d\  }}}}}t          |          dk    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    rit          j        |d                   t          j        |d                   t          j        |d                   }}}t          |          dk    r|d         }|j         	                    |          }	|	s|dng S ||	
                    |||||          S |	                                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^   91,H)eS%t99q==YwQ88=:d1g&&D8Ds4yy1d3444YY!^^&tAw//&tAw//
47## 3E
 4yy1}}7 Y00<< 	2)11r1==uc5(CCC((***r(   zXGROUP CREATE	start_keyc                 F   t          |d          \  \  }}}|j        |st          t          j                  |j                            |          t          t          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&V# <!9Xd;<<<9z**6d3444	J	<@@@	r(   zXGROUP SETIDc                 \   t          |d          \  \  }}|j        t          t          j                  |j                            |          }|s?t          t          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B9d;<<<	##J// 	`d=DDZEVEVEXEXZ]^^___Y---	r(   zXGROUP DESTROY c                 z    |j         t          t          j                  |j                             |          }|S r"   )r?   r   rA   r   group_delete)r%   r-   r   rP   s       r'   xgroup_destroyz#StreamsCommandsMixin.xgroup_destroy   s5    9d;<<<9))*55
r(   zXGROUP CREATECONSUMERc                 "   |j         t          t          j                  |j                             |          }|s?t          t          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   {    9d;<<< Y00<< 	`d=DDZEVEVEXEXZ]^^___!!-000r(   zXGROUP DELCONSUMERc                 "   |j         t          t          j                  |j                             |          }|s?t          t          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                 x    |j         t          t          j                  |j                                         }|S r"   )r?   r   rA   
NO_KEY_MSGgroups_info)r%   r-   rP   s      r'   xinfo_groupsz!StreamsCommandsMixin.xinfo_groups   s2    9do... #	 5 5 7 7
r(   zXINFO STREAMc                     t          |d          \  \  }}|j        t          t          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  sI    !$	22
9do...90066
r(   zXINFO CONSUMERSc                 $   |j         t          t          j                  |j                             |          }|s?t          t          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  s}    9d;<<< Y00<< 	`d=DDZEVEVEXEXZ]^^___272F2F2H2H
r(   XCLAIMmin_idle_msc                    |j         t          t          j                                      |          }|s?t          t          j                            |                                |                    t          |ddd          \  \  }}}	}
}}||dk    r|t                      |z
  }|
                    |||||
          \  }}|rd |D             S fd|D             S )N)z+idlez+timez+retrycountforcejustidF)r4   left_from_first_unexpectedr   c                 6    g | ]}|                                 S r   encode.0msgs     r'   
<listcomp>z/StreamsCommandsMixin.xclaim.<locals>.<listcomp>/  s     999SCJJLL999r(   c                 :    g | ]}                     |          S r   format_recordr   r   rO   s     r'   r   z/StreamsCommandsMixin.xclaim.<locals>.<listcomp>0  s'    BBBc$$S))BBBr(   )r?   r   rA   r   r   r   rC   r   r
   r   claim)r%   r-   r   r   r   r   r   r   _timeretryr   r   msg_idsmsgs_claimedrV   rO   s                  @r'   xclaimzStreamsCommandsMixin.xclaim  s    >d;<<<#--j99 	`d=DDZEVEVEXEXZ]^^___7C@ %',	8
 8
 8
4+ueUFW qU] NNT)E++k7M5RWXXa 	:99L9999BBBB\BBBBr(   
XAUTOCLAIMr   c                    t          |d          \  \  }}}	|pd}|j        t          t          j                                      |          }
|
s?t          t          j                            |                                |                    |
	                    |||          }|

                    |||d d          \  }}t          |          dk    r!t          |                                          n||rd |D             nfd|D             g}| j        dk    r|                    d |D                        |S )	N)r`   r   d   Fr   c                 6    g | ]}|                                 S r   r   r   s     r'   r   z3StreamsCommandsMixin.xautoclaim.<locals>.<listcomp>D  s     222cSZZ\\222r(   c                 :    g | ]}                     |          S r   r   r   s     r'   r   z3StreamsCommandsMixin.xautoclaim.<locals>.<listcomp>D  s)    BuBuBuad6CWCWX[C\C\BuBuBur(   r7   c                 6    g | ]}|                                 S r   r   r   s     r'   r   z3StreamsCommandsMixin.xautoclaim.<locals>.<listcomp>G  s     ===

===r(   )r
   r?   r   rA   r   r   r   rC   r   read_pel_msgsr   r@   maxr   rD   ry   )r%   r-   r   r   r   r   r   rd   r   rV   r   keysr   msgs_removedrP   rO   s                  @r'   
xautoclaimzStreamsCommandsMixin.xautoclaim2  sd    *$0DEE>d;<<<#--j99 	`d=DDZEVEVEXEXZ]^^___%*%8%8eU%S%S%*[[dMSWY^%_%_"l +.l*;*;a*?*?C$$&&&U6<u22\2222BuBuBuBuhtBuBuBuX
 <4JJ=====>>>
r(   rO   reverserd   c                 p    | g S |t          |           }|                     |||          }|d |         S )N)r   )r@   irange)rO   r\   r]   r   rd   rP   s         r'   rb   zStreamsCommandsMixin._xrangeJ  sC     >I=KKEmmD$m886E6{r(   r   r   rr   c                     i }|D ]C\  }}}	|                     ||	||          }
|r| d S t          |
          dk    s|	dk    r|
||<   D|S )Nr      >)
group_readr@   )r%   r   r   rd   r   rr   rP   r   stream_namer   stream_resultss              r'   r   z StreamsCommandsMixin._xreadgroupY  sx     !#,8 	2 	2(E;"--mXueTTN u}tt>""Q&&(d*:*:#1K 
r(   r   rq   c                    t          j        d          }i }|D ]p\  }}t          || j        | j                            |          d           }	|                     |	j        ||d|          }
t          |
          dk    r
|
||	j        <   q|r|rt          |          dk    rd S | j	        j
        dk    rd |                                D             S |S )N   +rn   Fr   r6   c                     g | ]	\  }}||g
S r   r   )r   kvs      r'   r   z/StreamsCommandsMixin._xread.<locals>.<listcomp>y  s     333tq!QF333r(   )r   r   r   rv   rw   rb   r?   r@   r-   r   r   items)r%   r   rd   rq   rr   max_infrP   r   r   ro   r   s              r'   rz   zStreamsCommandsMixin._xreadj  s     "(.. "%9 	/ 	/!K{DH48<<;T;T^bcccD!\\$*hPUVVN>""Q&& .DH  	 	#c((a--4-2233syy{{3333
r(   sc                     |dk    rH| j         t          j        d          S t          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|  s^    99y &-f555")#)*A*A*C*CtTTTT%a488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      s
        %s
"34hvs{6KLcQRRRR&c &S &T & & & & & & W&%::: E huo    ;:2 W'##g,,%Ibccc	 	U 	s 	 	 	 dc	 W&W000     10 Ws7||_o>x  
A+ A_ AO A\a Afjkpfq A A A 
A Ws7||_o>x  
@[ @ @ @_d @imnsit @ @ @ 
@ W'%5($Babbb5 Xd38n%=    cbB W,ueU&;UHMMM( (.3(DI(RW(	$tE%eE4;4F.G)H"HIJK	L( ( ( NM(T W&WAAA E c    BA Ws7||U#x  
  u     
 W*SS\\5$95(KKK+K +U +5 +USVX\]abg]hXiSiMj + + + LK+6 W/##g,,u)Euh^b^wxxx % E Z_ dp    yx W.Wue(DeXVVV  5 Y^ co    WV W"33w<<*?KKK+ 5 S    LK W)##g,,u1MVXYYY1 1% 1X] 1be 1 1 1 ZY1 W&ss7||UE.JSUVVV1k 1u 1UZ 1_b 1 1 1 WV1 W.WCCC UCZ0@    DC W.WPTPghhh E d5k    ih W#CCLL%+@LLL; E d4PSUZ[`be[eUfPfKgFh    ML W(33w<<sE"JTYS[\\\CC,1CBGCVYCbgC	tE{DeE4;,>&?!@AA	BC C C ]\C2 W,ss7||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 9 9 \9 9 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     s7       D D D D D D D D D D D D D D D D D D       8 8 8 8 8 8 > > > > > > > > > > > > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ) ) ) ) ) )v9 v9 v9 v9 v9 v9 v9 v9 v9 v9r(   