
    9iW                    H   d dl mZ 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
Z
d dlmZmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3 ddl4m5Z5  edddddddddddd      Z6dEd Z7dFd!Z8dGd"Z9	 	 	 	 	 	 	 	 	 	 	 	 dHd#Z:dIdJd%Z;ddde2jx                  dd&d'f	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dKd(Z=	 dL	 	 	 	 	 	 	 	 	 	 	 dMd)Z> e
j(                  d*+      dNd,       Z?e?j                  d-+      edNd.              ZAe?j                  d/+       e
j                  d0dd12       e
j                  d3dd42       e
j                  d5dd62       e
j                  d7dd82       e
j                  d9d:d;2      e	 	 	 	 	 dO	 	 	 	 	 	 	 	 	 	 	 dPd<                                                 ZCe?j                  d=+       e
j                  d0dd12       e
j                  d3dd42       e
j                  d5dd62       e
j                  d7dd$d>?       e
j                  d@d$dAB      e	 	 	 	 dQ	 	 	 	 	 	 	 	 	 	 	 dRdC                                                 ZDeEdDk(  r e?        yy)S    )annotationsN)partial)Any)urlparse)Flaskcurrent_app)with_appcontext)RateLimiter)Consolegroup)Live)Pretty)Confirm)Table)Theme)Tree)	TypedDict)MethodNotAllowedNotFound)Rule   )Limiter)RuntimeLimit)Callable	Generatorcast)
ConfigVarsExemptionScopeHeaderNames)get_qualified_namez
bold greenbold redmagentacyanyellowzbold yellow)successdangererror	blueprintdefaultcallableentityexemptroutehttpoptionc                    t        |       r<| j                  dk(  rd| j                   dS d| j                   d| j                   dS t        |       S )Nz<lambda>z[callable]<lambda>(z)[/callable]z
[callable].z()[/callable])r*   __name__
__module__r   )funcs    I/var/www/html/venv/lib/python3.12/site-packages/flask_limiter/commands.pyrender_funcr6   /   sQ    ~==J&((9FFDOO,Admm_MJJ$<    c                   t        | j                  xs d      }| j                  r|j                  d| j                  j                  j
                   d       |j                  d| j                  j                   d       |j                  t        | j                  xs i              | j                  j                         }|r|j                  d       |S |j                  d       |S )NzN/A[entity]	[/entity]z[success]OK[/success]z[error]Error[/error])	r   _storage_uristorageadd	__class__r2   r   _storage_optionscheck)extrenderhealths      r5   render_storagerD   7   s    #""+e,F
{{

Xckk33<<=YGH

Xckk112)<=

6#..4"56""$JJ./ M JJ-.Mr7   c                6    d| j                   j                   dS )Nr9   r:   )r>   r2   )strategys    r5   render_strategyrG   E   s    h((112)<<r7   c                   ||j                  ||      g}| j                  r&| j                  r| j                  j                         sy | j                  j                  |j
                  g| } | j                  j                  |j
                  g| }|s d|d    d|j
                  j                   dS d|d    d|j
                  j                   dS )Nz&: [error]Storage not available[/error]z: [error]Fail[/error] (r   z out of z remaining)z: [success]Pass[/success] ()	scope_forr<   r@   limitertestlimitget_window_statsamount)rJ   endpointrL   keymethodargsrK   statss           r5   render_limit_staterT   I   s     623D??ww7L7L7N77??3d3D,GOO,,U[[@4@E(q
(5;;;M;M:NkZZ,U1XJhu{{?Q?Q>RR]^^r7   Tc                :   t        | j                        }|r|S g }| j                  r'|j                  dt	        | j                                | j
                  r'|j                  dt	        | j
                                |r| ddj                  |       d}|S )Nzdeduct_when: zexempt_when: z
 [option]{z, z
}[/option])strrL   deduct_whenappendr6   exempt_whenjoin)rL   simplerB   optionss       r5   render_limitr]   W   s    FG{53D3D'E&FGH{53D3D'E&FGH8;tyy'9&:+FMr7   GET c
                ,   d }
|r	|r| d| }
|
xs |	xs d}	t        |	      }g }|d   |d   z   D ]%  }|rm| j                  j                  |d       }|r ||j                  j	                  | |      v rdn-||j                  j                  |rt        |      nd      v rdnd}nd}|j                  rd|rb|j                  rV|j                  D ]F  }t        |d      }d	| d
| d| d| d
	}|r|t        ||xs d|||      z  }|j                  |       H t        |d      }d	| d
| d| d
}|r|t        ||xs d|||      z  }|j                  |       ( |s|r|j                  d       |S |D cg c]  }|j                  |       c} |S c c}w )N: r_   r   r   r(   r-   r)   F[]z [http](z
)[/http][/z[/z[exempt]Exempt[/exempt])r   view_functionsgetlimit_managerblueprint_limitsdecorated_limitsr    
per_methodmethodsr]   rT   rX   r=   )apprJ   limitsrO   r(   ruleexemption_scoperK   rQ   label_label
renderableentriesrL   	view_funcsourcerenderedentrys                     r5   render_limitsrw   e   s    F:Rv&!e!rEeJGVAY& "**..x>I '*?*?*P*PQTV_*`!`  ,,==9B*95 
 #  F,, &'u5F81XJhvhjPQR/RPTV\]]Eu%& $E51Hxq
"VHA6E+GX^UDRXYYNN5!;"< 01  -445	4 	5s   4Fc                   |s|sy |r/|t         j                  v r|S |j                  d| d       t        |rb| j                  j	                  d      }t        |      }	 |j                  |j                  ||j                        \  }}t        t        |      S t        # t        $ r |j                  d| d       Y t        t        $ r2 |sJ |j                  d|j                          d| d       Y t        w xY w)Nz[red]Error: z
 not foundzdev.null)rQ   
query_argsz[error]Error: z, could not be matched to an endpoint[/error]ra   )r   rd   printurl_mapbindr   matchpathqueryr   rV   r   r   upper
SystemExit)	rk   consolerO   r~   rQ   adapterparsedfilter_endpoint_s	            r5   get_filtered_endpointr      s    {111OMML
*=>  
++"":.$
	!(v{{6V\VbVb!cOQ_--   	_MMN4&0\]^    	M6MM  04&>? 	s    :B! !D 2D ?D z-Flask-Limiter maintenance & utility commmands)helpc                      y N r   r7   r5   clir      s    r7   z View the extension configurationc                    t        j                         5  t        t              } t	        t         j
                  j                  dt                           }|xr t	        |      d   }|r t        d      }|j                  d       |j                  d       |j                  d       |j                  d	t        j                  t        |j                               |j                  d
t        j                  t!        |j"                               |j                  dt        j$                  t        |j&                               t)        t        j*                        }t)        t-        |j.                              }|j1                  t        j2                        }|j1                  d       |j1                  d       |j1                  t        j4                         |j1                  d       |j1                  t7        |             |j                  d||       |j8                  j:                  r&|j                  dt        j<                  t        |j8                  j:                  D cg c]  }t?        |       c}             |j                  d t        j@                  t        |jB                               |j                  d t        jD                  t!        |jF                               |j                  d t        jH                  t!        |jJ                               |j                  d t        jL                  t        |jN                               n*|j                  dt        j<                  t        g              |j8                  jP                  r&|j                  dt        jR                  t        |j8                  jP                  D cg c]  }t?        |       c}             |j                  d t        jT                  t        |jV                               |j                  d t        jX                  t!        |jZ                               |j                  d t        j\                  t!        |j^                               |j                  d t        j`                  t!        |jb                               n*|j                  dt        jR                  t        g              |jd                  r[|j                  dt        jf                  t        ti        jj                  |jd                   D cg c]  }t?        |       c}             |jl                  rt)        t        jn                        }|j1                  t        jp                         |j1                  t        jr                         |j1                  t        jt                         |j1                  t        jv                         t)        t        |jl                              }	|	j1                  t        |jx                  tz        j|                                  |	j1                  t        |jx                  tz        j~                                  |	j1                  t        |jx                  tz        j                                  |	j1                  t        |j                               |j                  d||	       n*|j                  dt        jn                  t        d             |j                  dt        j                  t        |j                               |j                  dt        j                  t!        |j                               | j                  |       n| j                  dt          d       d d d        y c c}w c c}w c c}w # 1 sw Y   y xY w)NthemerJ   r   zFlask-Limiter Config)titleNotesConfigurationValueEnabledzKey Functionz
Key PrefixInstanceBackendStatuszRate Limiting ConfigApplication LimitszApplicationLimits LimitszDefault LimitszMeta LimitszHeader configurationFzFail on first breachzOn breach callback(No Flask-Limiter extension installed on r!   style)Gr   test_request_contextr   limiter_themelist
extensionsre   setr   
add_columnadd_rowr   ENABLEDr   enabledKEY_FUNCr6   	_key_func
KEY_PREFIX_key_prefixr   STRATEGYrG   rJ   r=   STORAGE_URISTORAGE_OPTIONSrD   rf   application_limitsAPPLICATION_LIMITSr]   APPLICATION_LIMITS_PER_METHOD_application_limits_per_methodAPPLICATION_LIMITS_EXEMPT_WHEN_application_limits_exempt_whenAPPLICATION_LIMITS_DEDUCT_WHEN_application_limits_deduct_whenAPPLICATION_LIMITS_COST_application_limits_costdefault_limitsDEFAULT_LIMITSDEFAULT_LIMITS_PER_METHOD_default_limits_per_methodDEFAULT_LIMITS_EXEMPT_WHEN_default_limits_exempt_whenDEFAULT_LIMITS_DEDUCT_WHEN_default_limits_deduct_whenDEFAULT_LIMITS_COST_default_limits_cost_meta_limitsMETA_LIMITS	itertoolschain_headers_enabledHEADERS_ENABLEDHEADER_RESETHEADER_REMAININGHEADER_RETRY_AFTERHEADER_RETRY_AFTER_VALUE_header_mappingr   RESET	REMAININGRETRY_AFTER_retry_afterFAIL_ON_FIRST_BREACH_fail_on_first_breach	ON_BREACH
_on_breachrz   )
r   limitersrJ   extension_detailslimiter_configlimiter_config_valuesnoderL   header_configsheader_valuess
             r5   configr      s    
	)	)	+ F...229ceDE0tH~a0 %,B C((1((9((1%%i1C1CVGOOE\]%%
 3 3[ARAR5S %%j33VG<O<O5P "*"5"56N$()I$J!!%%j&<&<=DHHZ HHYz99:x(!%%nW&=>%%&<nNcd$$77!))(11:A:O:O:b:bce,c "))<<7AAB
 "))== G GH
 "))== G GH
 "))667;;< ")).112J
 $$33!))$--W=R=R=a=abEL/bc
 "))887==>
 "))99 C CD
 "))99 C CD
 "))22 < <= "))*:J<U<UW]^`Wab##!))!**:C//7K_K_:`ae,a ''!%j&@&@!A"":#:#:;"":#>#>?"":#@#@A"":#F#FG $VG,D,D%E F!!&)@)@ARAR)S"TU!!&)@)@AVAV)W"XY!!&)@)@AXAX)Y"Z[!!&)=)=">?!))*"! "))*J,F,Fu %%&//w445
 %%$$$G../ MM+,MM:;-H   GF F< dB c< b{F Fs9   I^>+^/=E^>^4$E^>4^9I ^>/^>>_z3Enumerate details about all routes with rate limitsz
--endpointzEndpoint to filter by)r)   r   z--pathzPath to filter byz--methodzHTTP Method to filter byz--keyzTest the limitz--watch/--no-watchFzCreate a live dashboardc                F    t        j                         5  t         j                  j                  dt	                     }|rt        |      d   nd t        t              }rj                  }i t        t         |       }t        t         j                  j                  |      d       D ]"  }	|	j                  }
|
dk(  rt        |
j                  d            dkD  rdj!                  |
j                  d      d d	       }j#                  |g       j%                  t'        t(        t         |j+                  t         |
|      |
||	|j-                  t         |
|      

             j#                  dg       j%                  t'        t(        t         |j+                  t         |
d      |
d |	|j-                  t         |
d       

             % t/               d fd       }|s|j1                   |              n]t3         |       |dd      5 }	 	 |j5                   |              t7        j8                  d       -|j1                  dt          d       d d d        y # t:        $ r Y nw xY w	 d d d        "# 1 sw Y   +xY w# 1 sw Y   y xY w)NrJ   r   r   c                    t        |       S r   rV   rs    r5   <lambda>zlimits.<locals>.<lambda>f      sSTv r7   rP   staticr1   r   )rn   rQ   rK   rootr_   c            	   3    K   rj                   j                  rmsksit        t        t	        t        j                  j                         g fd       t        t        j                   j                  g fd       D ]_  } | dk(  rt        dt        j                   d      }nt        d|  d      }|    D cg c]  }|j                   |              c} | a y c c}w w)	Nz[gold3]Meta Limits[/gold3])rK   rQ   ro   z![gold3]Application Limits[/gold3]r   z[gold3]z[/gold3]z[blue]z[/blue])rf   r   rw   r   r   r   r   r   r   namer=   )	r   
group_treerq   rO   groupsrP   rJ   rQ   r~   s	      r5   console_renderablez"limits.<locals>.console_renderable  s     w44GGQY]a'#ioow/C/CDErJ %:  (# ..AA2F %A  # %Dv~%)GK4D4D3EX*N%O
%)F4&*@%A
DJ4LQjZ^^JL1Q$$%
 Rs   CC3C.$C3g?T)r   refresh_per_secondscreenr   r!   r   )returnr   )r   r   r   re   r   r   r   r   rf   r   sortedr{   
iter_rulesrO   lensplitrZ   
setdefaultrX   r   rw   resolve_limitsrn   r   rz   r   updatetimesleepKeyboardInterrupt)rO   r~   rQ   rP   watchr   r   managerr   rm   rule_endpointbp_fullnamer   liver   rJ   s   ````          @@r5   rl   rl   N  s    
	)	)	+ a!,!7!7!;!;Isu!M7?$x."3T.++G;=F3K(TXZ`aO##..?EU ( !% H,}**3/014"%((=+>+>s+CCR+H"IK%%k26==)'##22;{[)' ,3,C,C +]K- $*!$" %%fb188)'##22;rR)  ,3,C,C +]D- $*!$3(T W% % %4 023&(#'*	 "
 " KK(:(<= JJsO  MM:;-H   }a av  1 "!"!" " "ca asN   HJ J#+I2JJ2	I>;J=I>>J	JJ	JJ zClear limits for a specific keyzKey to reset the limits for)r)   requiredr   z-yzSkip prompt for confirmation)is_flagr   c                p   t        j                         5  t        t         j                  j	                  dt                           }|r|d   nd }t        t              }|r&|j                  }t        t         ||||      }	 G d dt              }
i }t        t         j                  j                  |	      d       D ]  }|j                  }|dk(  rt        |j!                  d	            d
kD  rFd	j#                  |j!                  d	      d d       } |
||j%                  t         ||            ||<   x |
||j%                  t         |d            ||<    d }|	s|j                  j&                  }|so|r%|j)                  t+        t         ||g fd|              |j-                         D ]5  \  }}|d   s|j)                  t+        t         ||d   ||d   |              7 |st/        j0                  d|  d      r|rwt3        d      }|D ]V  }|j4                  j7                  |j8                  | |j;                  d|             |j=                  t?        |       d       X |j)                  |       |j-                         D ]  \  }}|d   st3        |      }|d   \  }}||z   D ]  }|j@                  rb|d   r]|d   jB                  rN|sL|d   jB                  D ]9  }|j4                  j7                  |j8                  | |j;                  ||             ; n7|j4                  j7                  |j8                  | |j;                  ||             |j=                  t?        |       d        |j)                  |        n|j)                  dt          d       d d d        y # 1 sw Y   y xY w)NrJ   r   r   c                  "    e Zd ZU ded<   ded<   y)clear.<locals>.Detailsr   rm   tuple[list[RuntimeLimit], ...]rl   N)r2   r3   __qualname____annotations__r   r7   r5   Detailsr    s    
66r7   r  c                    t        |       S r   r   r   s    r5   r   zclear.<locals>.<lambda>  r   r7   r   r   r1   r   r   )rm   rl   r_   r   )ro   rK   rl   rm   )rm   rK   z/Proceed with resetting limits for key: [danger]z
[/danger]?z: [success]Cleared[/success]r   r!   r   )"r   r   r   r   re   r   r   r   rf   r   r   r   r{   r   rO   r   r   rZ   r   r   rz   rw   itemsr   askr   rJ   clearrL   rI   r=   r]   ri   rj   )rP   rO   r~   rQ   yr   rJ   r   r   r   r  rule_limitsrm   r   r   r   detailsr   rL   r)   	decoratedrule_methods                         r5   r	  r	    s    
	)	)	+ a..229ceDE19(1+t.++G3K(TXZ`aO7) 7 /1K##..?EU  !% H,}**3/014"%((=+>+>s+CCR+H"IK18!&55k=R]^2K.
 29!&55k=RTU2K." "&"%,%:%:%M%M"%MM%'#/4"6!$ *5):):)< %Hgx() + ' ' 1 (%,V_%(	 GKK"QRUQVV` ab% 45D!3 W--!KK!OOB7
 L$7#88T!UVW MM$')4):):)< ,%Hgx(#H~-4X->*%,y%8 [E % 0 0$+FO$+FO$;$;(.3:6?3J3J !&K$+OO$9$9(-(+(-+(N%&!& !( 5 5$)KK$'$)OOHf$E!"
 !HHU(;'<<X%YZ'[(  d+1,4 MM:;-H   }a a as   F#N,9CN,DN,,N5__main__)r4   r   r   zstr | Pretty)rA   r   r   r   )rF   r
   r   rV   )rJ   r   rO   rV   rL   r   rP   rV   rQ   rV   r   rV   )T)rL   r   r[   boolr   rV   )rk   r   rJ   r   rl   r  rO   
str | Noner(   r  rm   zRule | Nonern   r   rK   r  rQ   rV   ro   r  r   r   r   )rk   r   r   r   rO   r  r~   r  rQ   r  r   r  )r   None)NNr^   NF)rO   r  r~   r  rQ   rV   rP   r  r   r  r   r  )NNr^   F)rP   rV   rO   r  r~   r  rQ   rV   r
  r  r   r  )F
__future__r   r   r   	functoolsr   typingr   urllib.parser   clickflaskr   r   	flask.clir	   limits.strategiesr
   rich.consoler   r   	rich.liver   rich.prettyr   rich.promptr   
rich.tabler   
rich.themer   	rich.treer   typing_extensionsr   werkzeug.exceptionsr   r   werkzeug.routingr   
_extensionr   _limitsr   _typingr   r   r   	constantsr   r   r   utilr    r   r6   rD   rG   rT   r]   NONErw   r   r   commandr   r/   rl   r	  r2   r   r7   r5   <module>r,     s   "     !  $ % ) '       ' : !  ! . . > > $"=__ #_,8_?B_LO__$   &4&9&96	66 +6 	6
 6 6 $6 6 6 6 
6| 	  	
  > AB	 C	 45G  6GT GHlD/FGh+>?j$-GHgt*:;"E8QRhh
h h 
	h
 h 
h  S < I @ H IhV 34lD/FGh+>?j$-GHgtd9VWdD'EF  h	hh h 	h
 h 
h  G X I @ H 5hV zE r7   