
    Ѯh(                        U g d Z ddlZddlmZmZmZ ddlmZmZm	Z	m
Z
mZ ddlmZ ddlmZmZmZmZmZmZmZ ddlmZmZmZmZ ddlmZmZm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,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2  ed      Z3 edde(      Z4 ed      Z5ee(   e6d<    ed      Z7ee8e'e         e6d<    ed      Z9ee   e6d<    ed      Z:ee   e6d<    ed      Z;eee      e6d<    edd      Z<eee-      e6d<   dGdee4   de4fdZ=dGdee-   dee-   fd Z>dee   fd!Z?	 	 dHd"ee@   dee(   d#ee3   d$ede'e3   f
d%ZAdefd&ZBdefd'ZCd(ee3   d)e3ded   fd*ZDde(ded   fd+ZEd,e8e'e      ded   fd-ZFdGdee(   de8e'e      fd.ZGde-ded   fd/ZHd0e3de3fd1ZIe	 dGd2d3dee.   d#ee   d4ed2   dee   fd5       ZJe	 dGdee,   d#ee   d4ed   dee   fd6       ZJ	 dGd2d3dee-   d#ee   d4eKdefd7ZJde8e4   dee4gee4   f   fd8ZLdId9ZM	 	 	 	 dJd,ee8e'e         dee8e(      dee-   d:eKded;ee(   f   f
d<ZNd=e dee   fd>ZO ed?e!e      ZPd=e ddfd@ZQdAeReSef   dBeReSef   ddfdCZTdDePddfdEZUdDePdePfdFZVy)K)add_paginationapply_items_transformercreate_pagepagination_ctxpagination_itemsrequestresolve_items_transformerresolve_pageresolve_paramsresponseset_items_transformerset_page
set_params    N)AsyncIteratorIteratorSequence)AbstractContextManager	ExitStackasynccontextmanagercontextmanagersuppress)
ContextVar)AnyCallableLiteralOptionalTypeVarcastoverload)DependsFastAPIRequestResponse)get_body_fieldget_parameterless_sub_dependantlenient_issubclass)APIRoute	APIRouter)	BaseModel)request_response   )AbstractPageAbstractParams)UninitializedConfigurationError)AsyncItemsTransformerItemsTransformerSyncItemsTransformer)IS_PYDANTIC_V2is_async_callableunwrap_annotatedTTAbstractParams_coT)	covariantbound_params_val	_page_val_rsp_val_req_val
_items_val_items_transformer_val)defaultparamsreturnc                     | #	 t        t        t        j                               S | S # t        $ r t        d      d w xY w)Nz,Use params, add_pagination or pagination_ctx)r   r6   r9   getLookupErrorr.   r@   s    h/home/www/academy-backend.kofcorporation.com/venv/lib/python3.12/site-packages/fastapi_pagination/api.pyr
   r
   ;   sK    ~	l*KOO,=>> M  	l12`agkk	ls   !( >transformerc                 2    | t         j                         S | S N)r>   rC   rG   s    rF   r   r   E   s    %))++    c                  ^    	 t         j                         S # t        $ r t        d      d w xY w)Nz2pagination_items must be called inside create_page)r=   rC   rD   r.    rK   rF   r   r   L   s5    n~~ n-.bcimmn    ,totalitemskwargsc                    |||d<   |||d<   t        t        |       5   t        |      j                  | fi |cddd       S # 1 sw Y   yxY w)z
    Creates an instance of AbstractPage with provided items and optional parameters.

    Returns:
        AbstractPage[T]: An instance of AbstractPage containing the provided items and additional parameters.
    NrO   r@   )_ctx_var_with_resetr=   r	   create)rP   rO   r@   rQ   s       rF   r   r   S   s\     w!x	Z	/ <*|F#**5;F;< < <s   AAc                  ^    	 t         j                         S # t        $ r t        d      d w xY w)Nz response context var must be set)r;   rC   rD   RuntimeErrorrM   rK   rF   r   r   i   s3    I||~ I=>DHIrN   c                  ^    	 t         j                         S # t        $ r t        d      d w xY w)Nzrequest context var must be set)r<   rC   rD   rV   rM   rK   rF   r   r   p   s3    H||~ H<=4GHrN   varvaluec                 h      j                  |      t        dt        d    f fd       } |       S )NrA   c               3      K   d  t        t              5  j                          d d d        y # 1 sw Y   y xY wwrI   )r   
ValueErrorreset)tokenrX   s   rF   
_reset_ctxz'_ctx_var_with_reset.<locals>._reset_ctxz   s2     j! 	IIe	 	 	s   >2	>;>)setr   r   )rX   rY   r_   r^   s   `  @rF   rS   rS   w   s7    GGENE   <rK   c                 "    t        t        |       S rI   )rS   r9   rE   s    rF   r   r      s    {F33rK   pagec                 "    t        t        |       S rI   )rS   r:   )rb   s    rF   r   r      s    y$//rK   c                    	 t         j                         S # t        $ r! | r| j                  x}r|cY S t	        d      d w xY w)Nzcan't resolve page type, use set_page or pagination_ctx with page argument, or use params that connected to page via set_page method)r:   rC   rD   __page_type__r.   )r@   rb   s     rF   r	   r	      sR    	}} v333t3K-@
 		s    A A c                 "    t        t        |       S rI   )rS   r>   rJ   s    rF   r   r      s    5{CCrK   objc                    K   | S wrI   rM   )rg   s    rF   async_wrappedri      s     Js   F)async_rj   c                    y rI   rM   rP   rG   rj   s      rF   r   r      s     	rK   c                  K   y wrI   rM   rl   s      rF   r   r      s      	   c                   t        |      }||rt        |       S | S t        |      }|r|st        d      |r ||       S  ||       } |rt        |       S | S )NzIapply_items_transformer called with async_=False but transformer is async)r   ri   r3   r\   )rP   rG   rj   is_coros       rF   r   r      sk     ,K8K'-}U#858,Gvdee5!!E#)=4u4rK   c                     dt         dt         dt        t           f fd}t        j                         }t
        rt        t        t              5  t         t              rw j                  j                         D cg c]@  \  }}t        j                  |t        j                  j                  |j                  |      B }}}|j!                  |      }d d d        ||_        |S c c}}w # 1 sw Y   xY w)NargsrQ   rA   c                 h   K    | i |}t        |      5  | d d d        y # 1 sw Y   y xY wwrI   )r   )rr   rQ   valr@   s      rF   _pagination_paramsz5_create_params_dependency.<locals>._pagination_params   s6     d%f%_ 	I	 	 	s   2&	2/2)namekind
annotationr?   )
parameters)r   r   r6   inspect	signaturer2   r   r\   	TypeError
issubclassr)   model_fieldsrP   	ParameterKEYWORD_ONLYrx   replace__signature__)r@   ru   signrv   fieldsign_paramss   `     rF   _create_params_dependencyr      s     s }M_?` 
 V$Dj), 	<&), (.':':'@'@'B $e %%!$..;;#(#3#3 %	  ||{|;	< (,$	< 	<s   .C/>AC)C/)C//C8c                     K   y wrI   rM   rM   rK   rF   	_noop_depr      s	     rn   __page_ctx_dep__.c           
            | j                   }|t        |      nt        }t        |      fdt        dt
        dt        dt        t           f fd}|rd|_	        |S )Nreqres_paramsrA   c                ^  K   t               5 }|j                  t                     |j                  t                     |j                  t	        t
        |             |j                  t	        t        |              t        t        |       d d d        y # 1 sw Y   y xY wwrI   )	r   enter_contextr   r   rS   r;   r<   r   r-   )r   r   r   stackrb   rG   s       rF   _page_ctx_dependencyz,pagination_ctx.<locals>._page_ctx_dependency   s     
 [ 		0E##HTN3&##$9+$FG 3Hc BC 3Hc BC~w//		0 		0 		0s   B-B
B!	B-!B*&B-T)
__params_type__r   r   r    r"   r#   r   r   r-   r   )rb   r@   rG   r   
params_depr   s   ` `   rF   r   r      sy     FN%%;A;M/7S\J
 z*000 0 
~	&	0  04-rK   routec                     	 t        | j                  | j                  | j                        S # t        t
        f$ r$ t        | j                  | j                        cY S w xY w)N)flat_dependantrv   embed_body_fields)	dependantrv   )r$   r   	unique_id_embed_body_fieldsr|   AttributeError)r   s    rF   _bet_body_fieldr     s\    
 ??#66
 	

 ~& 
oo
 	

s   +. 0A! A!ParentTc                    t        d | j                  j                  D              ry t        | j                        }t        |t              sy t        t        t        t              |      }t        t        |d            }| j                  j                  |       | j                  j                  j                  t        || j                               t        |       | _        t#        | j%                               | _        y )Nc              3   H   K   | ]  }t        |j                  d         yw)r   N)hasattrcall).0ds     rF   	<genexpr>z _update_route.<locals>.<genexpr>%  s     
U17166-.
Us    "T)r   )dependspath)anyr   dependenciesr4   response_modelr&   r,   r   typer   r    r   appendr%   path_formatr   
body_fieldr*   get_route_handlerapp)r   page_clsclsdeps       rF   _update_router   $  s    

U8T8T
UU 4 45Hh5
tL%&
1C
.t<
=C	c"	OO  '''""	
 'u-E !8!8!:;EIrK   dstsrcc                     t        t              5  | d   j                  |d          d d d        t        t              5  | d   d   j                  |d   d          d d d        y # 1 sw Y   ?xY w# 1 sw Y   y xY w)Npaths
componentsschemas)r   KeyErrorupdate)r   r   s     rF   _patch_openapir   <  s    	(	 *GCL)* 
(	 JL)$++C,=i,HIJ J* *J Js   A&A2&A/2A;parentc                    | j                   D ]  }t        |t              st        |         t        | t              rC| j
                  r6| j
                  d c}| _        t        || j                                || _        y y y rI   )routes
isinstancer'   r   r!   openapi_schemar   openapi)r   r   
old_schemas      rF   _add_paginationr   D  sq     !eX&% ! &'"v'<'<,2,A,A4)
F)z6>>#34 * (="rK   c                      t                t         t              r j                  n }|j                  t
        dt        dt        t           f fd       }||_         S )Nr   rA   c                   K   t                |       4 d {   }| d d d       d {    y 7 7 # 1 d {  7  sw Y   y xY wwrI   )r   )r   maybe_state_original_lifespan_contextr   s     rF   lifespanz add_pagination.<locals>.lifespanW  sN     -c2 	 	k	 	 	 	 	 	 	s<   A6A:A8AAA AAA)r   r   r!   routerlifespan_contextr   r   r   )r   r   r   r   s   `  @rF   r   r   Q  s_    F(9V]]vF!'!8!8C M#$6   'FMrK   rI   )NN)rA   N)NNNF)W__all__rz   collections.abcr   r   r   
contextlibr   r   r   r   r   contextvarsr   typingr   r   r   r   r   r   r   fastapir    r!   r"   r#   fastapi.dependencies.utilsr$   r%   r&   fastapi.routingr'   r(   pydanticr)   starlette.routingr*   basesr,   r-   errorsr.   typesr/   r0   r1   utilsr2   r3   r4   r5   r6   r9   __annotations__r:   r   r;   r<   r=   r>   r
   r   r   intr   r   r   rS   r   r   r	   r   ri   r   boolr   r   r   r   r   r   dictstrr   r   r   rM   rK   rF   <module>r      s      = = g g "   8 7 
 0  . / 3 P P F FCL1TX *4]*CZ' C1;K1H	:d<,-. H!+J!7*X
 7 *: 6*W
 6(2<(@
Jx}% @AKLdnrAs 
8,<#=> s8$67 CU 84D+E QYZjQk n(3- n  '+	< C=< ^$	<A;<
 < !_<,I( IH H
Z] 
1 
9OPT9U 
4~ 4*@*F 404S)* 0/Ed/K 0
.1 
\RUEV@W 
D'7 D<RSW<X DQ 1  
 37	
 #	 ./	C=	
 EN	 c]	 
	 
 48	 /0	C=	
 DM	 c]	 
	 /35
 5 *+5C=5
 5 	50#$!"M2D$EEF<	
 /3-1.2"	 
4S)*
+ T.)*  *+  	 
 c=001 B
8 
 
 )Y
0< <d <0JS#X JT#s(^ J J
+G 
+ 
+7 w rK   