
    j0                        U d dl mZ g dZd dl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 d dlmZ d dl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 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* ddl+m,Z,m-Z- 	 d dl"m.Z. n# e/$ r	 d dl0m.Z. Y nw xY wddl1m2Z2m3Z3m4Z4 ddl5m6Z6 ddl%m7Z7 ddl8m9Z9m:Z:m;Z; ddl<m=Z=m>Z>  ed          Z? edde3          Z@ ed          ZAee3         eBd<    ed          ZCeeDe2e                           eBd<    ed          ZEee         eBd<    ed          ZFee         eBd<    ed          ZGeee                  eBd<    ed d!          ZHee:dz           eBd <   dNd"e@dz  d#e@fd$ZIdNd%e:dz  d#e:dz  fd&ZJd#ee         fd'ZK	 	 dOd(eLdz  d"e3dz  d)ee?         d*ed#e2e?         f
d+ZMd#efd,ZNd#efd-ZOd.ee?         d/e?d#e
d         fd0ZPd"e3d#e
d         fd1ZQd2eDe2e                  d#e
d         fd3ZRdNd"e3dz  d#eDe2e                  fd4ZSd%e:d#e
d         fd5ZTd6e?d#e?fd7ZUe	 dNd8d9d%e;dz  d)ee         d:ed8         d#ee         fd;            ZVe	 dNd%e9dz  d)ee         d:ed         d#ee         fd<            ZV	 dNd8d9d%e:dz  d)ee         d:eWd#efd=ZVed#eWfd>            ZXd"eDe@         d#ee@gee@         f         fd?ZYdPd@ZZ	 	 	 	 dQd2eDe2e                  dz  d"eDe3         dz  d%e:dz  dAeWd#edBee3         f         f
dCZ[dDe#d#edz  fdEZ\ edFe$e          Z]dDe#d#dfdGZ^dHe_e`ef         dIe_e`ef         d#dfdJZadKee$z  d#dfdLZbdKe]d#e]fdMZcdS )R    )cache)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_paramsN)AsyncIteratorCallableIteratorSequence)AbstractContextManager	ExitStackasynccontextmanagercontextmanagersuppress)
ContextVar)copy)	AnnotatedAnyLiteralTypeVarcastoverload)DependsFastAPIRequestResponse)get_body_fieldget_parameterless_sub_dependantlenient_issubclass)APIRoute	APIRouter)	BaseModel)IS_PYDANTIC_V2_12_5_OR_HIGHER)create_annotated_tp   )FieldV2UndefinedV2)request_response)AbstractPageAbstractParamsBaseAbstractPage)UninitializedConfigurationError)IS_PYDANTIC_V2)AsyncItemsTransformerItemsTransformerSyncItemsTransformer)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                     | K	 t          t          t                                                    S # t          $ r t          d          d w xY w| S )Nz,Use params, add_pagination or pagination_ctx)r    r=   r@   getLookupErrorr5   rG   s    a/DATA/AppData/hermes/projects/honcho/.venv/lib/python3.11/site-packages/fastapi_pagination/api.pyr   r   G   s`    ~	l*KOO,=,=>>> 	l 	l 	l12`aagkk	l Ms	   +0 Atransformerc                 <    | t                                           S | S N)rE   rJ   rN   s    rM   r
   r
   Q   s     %))+++    c                  r    	 t                                           S # t          $ r t          d          d w xY w)Nz2pagination_items must be called inside create_page)rD   rJ   rK   r5    rR   rM   r   r   X   sI    n~~ n n n-.bccimmn    6totalitemskwargsc                    |||d<   |||d<   t          t          |           5   t          |          j        | fi |cddd           S # 1 swxY w Y   dS )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.
    NrV   rG   )_ctx_var_with_resetrD   r   create)rW   rV   rG   rX   s       rM   r   r   _   s     w!x	Z	/	/ < <*|F##*5;;F;;< < < < < < < < < < < < < < < < < <s   AAAc                  r    	 t                                           S # t          $ r t          d          d w xY w)Nz response context var must be set)rB   rJ   rK   RuntimeErrorrT   rR   rM   r   r   u   sF    I||~~ I I I=>>DHIrU   c                  r    	 t                                           S # t          $ r t          d          d w xY w)Nzrequest context var must be set)rC   rJ   rK   r]   rT   rR   rM   r	   r	   |   sF    H||~~ H H H<==4GHrU   varvaluec                                            |          t          dt          d          f fd            } |            S )NrH   c               3      K   d V  t          t                    5                                  d d d            d S # 1 swxY w Y   d S rP   )r   
ValueErrorreset)tokenr_   s   rM   
_reset_ctxz'_ctx_var_with_reset.<locals>._reset_ctx   s      j!! 	 	IIe	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ?AA)setr   r   )r_   r`   rf   re   s   `  @rM   rZ   rZ      sY    GGENNE       ^ :<<rR   c                 ,    t          t          |           S rP   )rZ   r@   rL   s    rM   r   r      s    {F333rR   pagec                 ,    t          t          |           S rP   )rZ   rA   )ri   s    rM   r   r      s    y$///rR   c                    	 t                                           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)rA   rJ   rK   __page_type__r5   )rG   ri   s     rM   r   r      sm    	}}    	v33t 	KKK-@
 
 		s    AAc                 ,    t          t          |           S rP   )rZ   rE   rQ   s    rM   r   r      s    5{CCCrR   objc                 
   K   | S rP   rT   )rn   s    rM   async_wrappedrp      s      JrR   F)async_rq   c                   d S rP   rT   rW   rN   rq   s      rM   r   r      s	     	DrR   c               
   K   d S rP   rT   rs   s      rM   r   r      s       	DrR   c                   t          |          }||rt          |           n| S t          |          }|r|st          d          |r ||           S  ||           } |rt          |           n| S )NzIapply_items_transformer called with async_=False but transformer is async)r
   rp   r:   rc   )rW   rN   rq   is_coros       rM   r   r      s     ,K88K'-8}U###58,,G fv fdeee "{5!!!KE#)4=u4rR   c                  P    t          j        t          j                  } d| j        v S )Nby_name)inspect	signaturer+   model_validate
parameters)signs    rM   !_model_validate_has_by_name_paramr~      s"    Y566D''rR   c                 X    ddt           dt           dt          t                   f fd}t          j                   }t
          rt          rdt          dt          dt          j	        fdndt          dt          dt          j	        fd	t          t          t                    5  t           t                    d d d            n# 1 swxY w Y   rNfd
t          t                     j                                        D             }|                    |          }||_        |S )NFargsrX   rH   c                 J  K   rht                      rZ| rt          d          t          t          t          t          t
                                                 |d                    }n | i |}t          |          5  |W V  d d d            d S # 1 swxY w Y   d S )Nz=Positional arguments are not supported for Pydantic v2 modelsT)rx   )r~   rc   r    r3   typer+   r{   r   )r   rX   valis_pydantic_v2_modelrG   s      rM   _pagination_paramsz5_create_params_dependency.<locals>._pagination_params   s       
	*$E$G$G 
	* b !`aaaT)_f--<<VT<RR CC
 &$)&))C__ 	 	IIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   BBBnamefieldc                     t          |          }|j        t          ur|j        }t          |_        nt          j        j        }t          j        | t          j        j        t          |j        |          |          S N)r   kind
annotationrF   )	r   rF   r0   ry   	ParameteremptyKEYWORD_ONLYr-   r   )r   r   param_defaults      rM   
_get_paramz-_create_params_dependency.<locals>._get_param   sp    U =33$)MM$/EMM$+$5$;M( *7253CUKK)	   rR   c                 Z    t          j        | t           j        j        |j        |          S r   )ry   r   r   r   )r   r   s     rM   r   z-_create_params_dependency.<locals>._get_param  s1    ( *7$/!	   rR   c                 .    g | ]\  }} ||          S rT   rT   ).0r   r   r   s      rM   
<listcomp>z-_create_params_dependency.<locals>.<listcomp>  s)    sss{tU::dE22sssrR   )r|   )r   r   r=   ry   rz   r6   r,   strr/   r   r   rc   	TypeError
issubclassr+   r    model_fieldsrW   replace__signature__)rG   r   r}   sign_paramsr   r   s   `   @@rM   _create_params_dependencyr      s    ! s }M_?`         V$$D #8( 	 W 9J     & W 9J     j),, 	A 	A#-fi#@#@ 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A   	8ssssd9V\F]F]FjFpFpFrFrsssK<<;<77D'+$s   &CCCc                  
   K   d S rP   rT   rT   rR   rM   	_noop_depr   "  s      DrR   __page_ctx_dep__.c           
            	| j         }|t          |          nt          }dt          dt          dt
          t          t          |          f         dt          t                   f fd}|rd|_
        |S )Nreqres_paramsrH   c                  K   t                      5 }"|                    t                               "|                    t                               |                    t	          t
          |                     |                    t	          t          |                      t          t          |          W V  d d d            d S # 1 swxY w Y   d S rP   )	r   enter_contextr   r   rZ   rB   rC   r    r3   )r   r   r   stackri   rN   s       rM   _page_ctx_dependencyz,pagination_ctx.<locals>._page_ctx_dependency1  s     
 [[ 		0E##HTNN333&##$9+$F$FGGG 3Hc B BCCC 3Hc B BCCC~w//////		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0s   B1CCCT)__params_type__r   r   r$   r%   r   r   r"   r   r3   r   )ri   rG   rN   r   
params_depr   s   ` `   rM   r   r   &  s     FN%;A;M/777S\J000 3
 3 3340 
~	&	0 0 0 0 0 0 0   504-rR   routec                     	 t          | j        | j        | j                  S # t          t
          f$ r t          | j        | j                  cY S w xY w)N)flat_dependantr   embed_body_fields)	dependantr   )r&   r   	unique_id_embed_body_fieldsr   AttributeError)r   s    rM   _bet_body_fieldr   G  s{    
 ?#6
 
 
 	

 ~& 
 
 
o
 
 
 	
 	
 	

s    # ,AAParentTc                 F   t          d | j        j        D                       rd S t          | j                  }t          |t                    sd S t          t          t          t                            |          }t          t          |d                    }| j                            |           | j        j                            t          || j                             t!          |           | _        t%          |                                           | _        d S )Nc              3   @   K   | ]}t          |j        d           V  dS )r   N)hasattrcall)r   ds     rM   	<genexpr>z _update_route.<locals>.<genexpr>Z  s/      
U
U1716-..
U
U
U
U
U
UrR   T)r   )dependspath)anyr   dependenciesr;   response_modelr(   r4   r    r   r2   r   r"   r   appendr'   path_formatr   
body_fieldr1   get_route_handlerapp)r   page_clsclsdeps       rM   _update_router   Y  s   

U
U8T
U
U
UUU  455Hh(899 
tL%&
1
1C
.t<<<
=
=C	c"""	O '''"	
 	
 	
   'u--E !8!8!:!:;;EIIIrR   dstsrcc                 T   t          t                    5  | d                             |d                    d d d            n# 1 swxY w Y   t          t                    5  | d         d                             |d         d                    d d d            d S # 1 swxY w Y   d S )Npaths
componentsschemas)r   KeyErrorupdate)r   r   s     rM   _patch_openapir   q  s1   	(		 * *GCL)))* * * * * * * * * * * * * * * 
(		 J JL)$++C,=i,HIIIJ J J J J J J J J J J J J J J J J Js#   "AA
A".BB!$B!parentc                   | j         D ]&}t          |t                    rt          |           't          | t                    rA| j        r<| j        d c}| _        t          ||                                            || _        d S d S d S rP   )routes
isinstancer)   r   r#   openapi_schemar   openapi)r   r   
old_schemas      rM   _add_paginationr   y  s     ! !eX&& 	!%    &'"" +v'< +,2,A4)
F)z6>>#3#3444 *+ + + +rR   c                      t                      t           t                    r j        n }|j        t
          dt          dt          t                   f fd            }||_         S )Nr   rH   c                   K   t                      |           4 d {V }|W V  d d d           d {V  d S # 1 d {V swxY w Y   d S rP   )r   )r   maybe_state_original_lifespan_contextr   s     rM   lifespanz add_pagination.<locals>.lifespan  s      --c22 	 	 	 	 	 	 	k	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   =
A
A)r   r   r#   routerlifespan_contextr   r   r   )r   r   r   r   s   `  @rM   r   r     s    F(99EV]]vF!'!8C M#$6        'FMrR   rP   )NN)rH   N)NNNF)d	functoolsr   __all__ry   collections.abcr   r   r   r   
contextlibr   r   r   r   r   contextvarsr   r   typingr   r   r   r   r    r!   fastapir"   r#   r$   r%   fastapi.dependencies.utilsr&   r'   r(   fastapi.routingr)   r*   pydanticr+   "fastapi_pagination.pydantic.constsr,   fastapi_pagination.typing_utilsr-   pydantic.v2r/   r0   r1   ImportErrorstarlette.routingbasesr2   r3   r4   errorsr5   r6   typesr7   r8   r9   utilsr:   r;   r<   r=   r@   __annotations__rA   r   rB   rC   rD   rE   r   r
   r   intr   r   r	   rZ   r   r   r   r   rp   r   boolr~   r   r   r   r   r   r   dictr   r   r   r   rT   rR   rM   <module>r      s              G G G G G G G G G G G G g g g g g g g g g g g g g g " " " " " "                      8 7 7 7 7 7 7 7 7 7 7 7         
 0 / / / / / / /       L L L L L L ? ? ? ? ? ? - - - - - - - -30000000 3 3 3222222223 B A A A A A A A A A 3 3 3 3 3 3 $ $ $ $ $ $ P P P P P P P P P P 6 6 6 6 6 6 6 6GCLLW1TXXX *4*]*C*CZ' C C C1;K1H1H	:d<,-. H H H!+J!7!7*X
 7 7 7 *
: 6 6*W
 6 6 6(2
<(@(@
Jx}% @ @ @>HjIako>p>p>p 
#3d#:; p p p -4 @R     +;d+B N^aeNe    n(3- n n n n $(	< < :< T!	<A;<
 < !_< < < <,I( I I I IH H H H H
Z] 
1 
9OPT9U 
 
 
 
4~ 4*@*F 4 4 4 404S)* 0/Ed/K 0 0 0 0
 
$. 
T,sBS=T 
 
 
 
D'7 D<RSW<X D D D DQ 1     
 04	
 #	 	 	 &,	C=	
 EN	 c]	 	 	 
	 
 15	 	 '-	C=	
 DM	 c]	 	 	 
	 ,05
 5 5 5 "D(5C=5
 5 	5 5 5 50 (4 ( ( ( (
>#$>!"M2D$EEF> > > >B	 	 	 	
 ,0*.+/"	   
|C 
!D
(  4'  "D(  	 
 c=001       B
8 
d
 
 
 
 
 ')Y
0
0< <d < < < <0JS#X JT#s(^ J J J J J
+Gi/ 
+t 
+ 
+ 
+ 
+7 w      s   ?B BB