
    ѮhI>                       U d dl mZ g d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mZmZmZ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  d dl!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/m0Z0 e1e2ef   Z3de4d<   dZ5de4d<    ede5      Z6dPdZ7dQdZ8dRdZ9erd dlmZ: n
 G d d      Z:e G d d e             Z;e	 G d! d"e;             Z<e	 G d# d$e;             Z=e	 G d% d&e;             Z>e	 G d' d(e>             Z?e	 G d) d*e>             Z@e	 G d+ d,e;             ZAe	 G d- d.e;             ZBe	 G d/ d0e;             ZCe	 G d1 d2e;             ZDe	 G d3 d4e;             ZEdSd5ZFe/rd d6lGmHZI dTd7ZJdTd8ZKdTd9ZLnd d:lGmMZI dTd;ZJdTd<ZKdTd=ZLdUd>ZN G d? d@e;      ZO G dA dBe;      ZP G dC dDe;      ZQdVdEZR G dF dGe;      ZS G dH dIe;      ZTeeeUeef   f   ZVde4dJ<    G dK dLe;      ZW G dM dNe;      ZXyO)W    )annotations)ClsNamespaceCustomizedPagePageClsPageCustomizerUseAdditionalFieldsUseCursorEncodingUseExcludedFieldsUseFieldTypeAnnotationsUseFieldsAliasesUseIncludeTotalUseModelConfig	UseModuleUseNameUseOptionalFieldsUseOptionalParams	UseParamsUseParamsFieldsUseQuotedCursorUseRequiredFieldsUseStrCursorget_page_basesnew_page_cls)abstractmethod)Sequence)copy)	dataclass)	new_class)TYPE_CHECKING	AnnotatedAnyClassVarGenericOptionalProtocolTypeVarUnioncastget_type_hintsruntime_checkable)Query)Param)	BaseModel
ConfigDictcreate_model)	TypeAliasUnpack   )AbstractPageAbstractParamsBaseRawParams)CursorDecoderCursorEncoder)Cursor)remove_optional_from_tp)IS_PYDANTIC_V2
get_callerr0   r   ztype[AbstractPage[Any]]r   TPage)boundc                    t         r&| j                  d   }|s| f}|S | |   t        |   f}|S | j                  r| f}|S t	        | j
                        }| |   t        |   f}|S )N
parameters)r:   __pydantic_generic_metadata__r#   __concrete__tuple__parameters__)clsparamsbasess      r/home/www/academy-backend.kofcorporation.com/venv/lib/python3.12/site-packages/fastapi_pagination/customization.pyr   r   A   s     22<@$ L ,/v;*H L 
		
 L s))*Vgfo.L    c                    t        j                  d| j                        t        |       fd      }t	        t
        |      S )N__name__c                &    | j                        S Nupdatensnew_nss    rG   <lambda>znew_page_cls.<locals>.<lambda>T       RYYv. rH   	exec_body)r   getrJ   r   r(   r<   rD   rQ   new_clss    ` rG   r   r   P   s9    

:s||,s.G wrH   c                    t        j                  d| j                        | ffd      }t        t        t
           |      S )NrJ   c                &    | j                        S rL   rM   rO   s    rG   rR   z new_params_cls.<locals>.<lambda>^   rS   rH   rT   )r   rV   rJ   r(   typer4   rW   s    ` rG   new_params_clsr\   Z   s;    

:s||,	.G ^$g..rH   )r    c                      e Zd ZddZy)r   c                F   t        |t              s|f}|^}}t        |t              s
J d|       t        |t              s
J d|       |s|S |j
                  j                  d      }| d}||t               |j                  t        |j                        t        |j                        d}t        ri |d<   n G d d      }||d<   |D ]2  }t        |t              r|j                  ||       &t        d|       t!        |d	   d
d i      |d	<   t#        ||      S )NzExpected type, got z'Expected subclass of AbstractPage, got 
Customized)rJ   __qualname__
__module____params_type____model_aliases____model_exclude__model_configc                      e Zd Zy)0CustomizedPage.__class_getitem__.<locals>.ConfigN)rJ   ra   r`    rH   rG   Configrg      s    rH   ri   zExpected PageCustomizer, got rb   __page_type__)
isinstancerB   r[   
issubclassr3   rJ   removesuffixr;   rb   r   rc   rd   r:   r   customize_page_ns	TypeErrorr\   r   )	rD   itempage_clscustomizersoriginal_namecls_namerQ   ri   
customizers	            rG   __class_getitem__z CustomizedPage.__class_getitem__i   sM   dE*w%)"H{h-Q1DXL/QQ-h5m9`ai`l7mm5$--::<HM'
3H % ((l#+#;#;%)(*D*D%E%)(*D*D%EF )+~&  $*x ) T
j.9006B#&CJ>$RSS	T )7v>O7PSbdhRi(jF$%&11rH   N)rp   r!   returnr!   )rJ   ra   r`   rv   rh   rH   rG   r   r   h   s    (	2rH   r   c                      e Zd Zedd       Zy)r   c                     y rL   rh   selfrq   rP   s      rG   rn   z PageCustomizer.customize_page_ns   s    rH   Nrq   r   rP   r   rw   None)rJ   ra   r`   r   rn   rh   rH   rG   r   r      s     rH   r   c                       e Zd ZU ded<   ddZy)r   strnamec                @    | j                   |d<   | j                   |d<   y )NrJ   r`   )r   rz   s      rG   rn   zUseName.customize_page_ns   s    :!YY>rH   Nr|   rJ   ra   r`   __annotations__rn   rh   rH   rG   r   r      s    
I'rH   r   c                       e Zd ZU ded<   ddZy)r   r   modulec                "    | j                   |d<   y )Nra   )r   rz   s      rG   rn   zUseModule.customize_page_ns   s    ;;<rH   Nr|   r   rh   rH   rG   r   r      s    K'rH   r   c                  .    e Zd ZU ded<   dZded<   ddZy)	_UseOptionalRequiredFieldsboolrequiredtotalpagesizepageslimitoffsetSequence[str]fieldsc                   t        |      }|j                         D ci c]  \  }}|| j                  v s|| }}}|sy | j                  r|j                         D ci c]  \  }}|t	        |       }}}t
        r7t        di |j                         D ci c]  \  }}|t        |       c}}}	nt        di |j                         D ci c]  \  }}|t        |      df c}}}	nt
        ri|j                         D ci c]  \  }}|t        |      xs | }}}t        di |j                         D ci c]  \  }}|t        |      |f c}}}	n?t        di |j                         D ci c]  \  }}|t        t        |         d f c}}}	|	j                  ||       y c c}}w c c}}w c c}}w c c}}w c c}}w c c}}w c c}}w )N.rh   )_get_model_fieldsitemsr   r   _make_field_requiredr:   r   _get_field_tpr   _make_field_optionalr$   rn   )
r{   rq   rP   r   r   fieldfields_to_updatekvru   s
             rG   rn   z,_UseOptionalRequiredFields.customize_page_ns   s   "8,;A<<>aKD%TUYU`U`M`D%Kaa ==GWG]G]G_`tq!#7#: :``4rXhXnXnXp7qPTPQST=;K8K7qr
0u[k[q[q[s3tSWSTVWAa8H#7N4N3tu
P`PfPfPh#i1A';A'>'C!$C#i #i0sYiYoYoYq3rQUQRTUAa8H!7L4L3rs
0 IYI_I_IabAq8M!$45t<<b
 	$$Xr21 b  a 8r3t $j3r cs.   F0F0 F6F<GG?G8GNr|   )rJ   ra   r`   r   r   rn   rh   rH   rG   r   r      s    NFM 3rH   r   c                      e Zd ZU dZded<   y)r   Fr   r   NrJ   ra   r`   r   r   rh   rH   rG   r   r      s    HdrH   r   c                      e Zd ZU dZded<   y)r   Tr   r   Nr   rh   rH   rG   r   r      s    HdrH   r   c                  <    e Zd ZU ded<   dZded<   dZded<   d
dZy	)r   r   include_totalTupdate_annotationsr   r   affected_fieldsc                    | j                   t        rddlm} n|d   } G fdd|      }||d<   | j                  r4t        | j                   | j                        }|j                  ||       y y )Nr2   )r4   rb   c                  $     e Zd Zd fdZ xZS );UseIncludeTotal.customize_page_ns.<locals>.CustomizedParamsc                2    t         |          }|_        |S rL   )superto_raw_paramsr   )r{   
raw_params	__class__r   s     rG   r   zIUseIncludeTotal.customize_page_ns.<locals>.CustomizedParams.to_raw_params   s    "W24
+8
(!!rH   )rw   r5   )rJ   ra   r`   r   __classcell__)r   r   s   @rG   CustomizedParamsr      s    " "rH   r   )r   r   )r   r   rF   r4   r   r   r   rn   )r{   rq   rP   	ParamsClsr   ru   r   s         @rG   rn   z!UseIncludeTotal.customize_page_ns   st    **:,-I	"y 	" !1""3++++J ((26 #rH   Nr|   )rJ   ra   r`   r   r   r   rn   rh   rH   rG   r   r      s&    ##&O] 7rH   r   c                  2    e Zd ZU dZded<   dZded<   ddZy)r	   NzOptional[CursorEncoder]encoderzOptional[CursorDecoder]decoderc                    | j                   s| j                  sy t        rddlm} n|d   }|  G fdd|      }||d<   y )Nr2   CursorParamsrb   c                  2     e Zd Zd fdZd fdZ xZS )=UseCursorEncoding.customize_page_ns.<locals>.CustomizedParamsc                ^    j                   rj                  | |      S t        | 	  |      S rL   )r   r   encode_cursorr{   cursorr   srcs     rG   r   zKUseCursorEncoding.customize_page_ns.<locals>.CustomizedParams.encode_cursor  +    ;;;;tV44w,V44rH   c                ^    j                   rj                  | |      S t        | 	  |      S rL   )r   r   decode_cursorr   s     rG   r   zKUseCursorEncoding.customize_page_ns.<locals>.CustomizedParams.decode_cursor  r   rH   )r   Optional[Cursor]rw   Optional[str])r   r   rw   r   )rJ   ra   r`   r   r   r   )r   r   s   @rG   r   r     s    55 5rH   r   )r   r   r   r   r   )r{   rq   rP   r   r   r   s        @rG   rn   z#UseCursorEncoding.customize_page_ns  sB    ,/0L	5| 	5 !1rH   r|   )rJ   ra   r`   r   r   r   rn   rh   rH   rG   r	   r	     s    '+G$+'+G$+1rH   r	   c                  $    e Zd ZU dZded<   ddZy)r   Tr   quoted_cursorc                N     t         rddlm} n|d   } G  fdd|      }||d<   y )Nr2   r   rb   c                  4    e Zd ZU W  j                  Zded<   y);UseQuotedCursor.customize_page_ns.<locals>.CustomizedParamsClassVar[bool]r   N)rJ   ra   r`   r   r   r{   s   rG   r   r   0  s    ,0,>,>M>>rH   r   r   r   r   r{   rq   rP   r   r   s   `    rG   rn   z!UseQuotedCursor.customize_page_ns*  s-    ,/0L	?| 	? !1rH   Nr|   )rJ   ra   r`   r   r   rn   rh   rH   rG   r   r   &  s    M4	1rH   r   c                  $    e Zd ZU dZded<   ddZy)r   Tr   
str_cursorc                N     t         rddlm} n|d   } G  fdd|      }||d<   y )Nr2   r   rb   c                  4    e Zd ZU W  j                  Zded<   y)8UseStrCursor.customize_page_ns.<locals>.CustomizedParamsr   r   N)rJ   ra   r`   r   r   r   s   rG   r   r   @  s    )-J8rH   r   r   r   s   `    rG   rn   zUseStrCursor.customize_page_ns:  s-    ,/0L	9| 	9 !1rH   Nr|   )rJ   ra   r`   r   r   rn   rh   rH   rG   r   r   6  s    J	1rH   r   c                       e Zd ZU ded<   ddZy)r   type[AbstractParams]rE   c                Z    |j                   |d   urt        d      | j                  |d<   y )Nrb   zuParams type was already customized, cannot customize it again. (IncludeTotal/UseParamsFields must go after UseParams))rb   
ValueErrorrE   rz   s      rG   rn   zUseParams.customize_page_nsJ  s:    ##2.?+@@I 
 !%rH   Nr|   r   rh   rH   rG   r   r   F  s      ,rH   r   c                F    t         ri | j                  S i | j                  S rL   )r:   model_fields
__fields__)rD   s    rG   r   r   T  s%    ##""##cnnrH   )	FieldInfoc                    t        | t              sJ t        |       } t        | j                     | _        d | _        d | _        | S rL   )rk   _PydanticFieldr   r$   
annotationdefaultdefault_factoryr   s    rG   r   r   ^  sB    %000U#E$4$45 $rH   c                    t        | t              sJ t        |       } t        | j                        | _        d| _        d | _        | S )N.)rk   r   r   r9   r   r   r   r   s    rG   r   r   i  sB    %000U253C3CD $rH   c                    t        | t              sJ | j                  r!t        | j                  g| j                     S | j                  S rL   )rk   r   metadatar    r   r   s    rG   r   r   t  sB    %000>>e..@@AArH   )
ModelFieldc                (    t        | t              sJ y rL   )rk   r   r   s    rG   r   r     s    %000rH   c                j    t        | t              sJ t        |       } d| _        d| _        d | _        | S )NT.)rk   r   r   r   r   r   r   s    rG   r   r     s6    %000U $rH   c                >    t        | t              sJ | j                  S rL   )rk   r   type_r   s    rG   r   r     s    %000{{rH   c           
        	 t         t              st         j                   d      t	               }t        |j                         |j                         z
   j                  z
        }|r2t        |      dkD  rdnd}t        d| ddj                  |             t               	d
 fd}d
	fd	}|j                         D ci c]  \  }}| |||       |||      f c}}S c c}}w )Nz must be subclass of BaseModelr2   s zUnknown field z, c                j    | j                   v r|S t        |t        t        f      st	        |      S |S rL   )__class_vars__rk   r,   r   r+   )r   r   rD   s     rG   	_wrap_valz(_update_params_fields.<locals>._wrap_val  s3    3%%%H!e^458OrH   c                B    t         rt        |dd       xs |    S |    S )Nr   )r:   getattr)r   r   annss     rG   _get_annz'_update_params_fields.<locals>._get_ann  s(    1lD1?T$Z?DzrH   )r   r   r   r!   rw   r!   )rl   r-   ro   rJ   r   sortedkeysr   lenr   joinr)   r   )
rD   r   r   	incorrectendingr   r   r   valr   s
   `        @rG   _update_params_fieldsr     s    c9%3<<.(FGHH$S)Lv{{}|'8'8'::S=O=OOPII*=$))I2F1GHII#D PV||~^)$D8D#&	$(<==^^^s   C,c                      e Zd ZddZddZy)r   c                    || _         y rL   r   r{   kwargss     rG   __init__zUseParamsFields.__init__  	    rH   c                l    |d   }t        |j                  fd|it        || j                        |d<   y )Nrb   __base__)r/   rJ   r   r   )r{   rq   rP   
params_clss       rG   rn   z!UseParamsFields.customize_page_ns  sC    )*
 ,!
!
 $J<!
rH   N)r   r!   rw   r}   r|   rJ   ra   r`   r   rn   rh   rH   rG   r   r     s    
rH   r   c                      e Zd ZddZy)r   c                    |d   }t        |      }|j                         D ci c]  \  }}|t        |       }}}t        di |}|j	                  ||       t               }	|	j	                  ||       y c c}}w )Nrb   rh   )r   r   r   r   rn   r   )
r{   rq   rP   r  r   r   r   
new_fieldsru   optional_customizers
             rG   rn   z#UseOptionalParams.customize_page_ns  s{    )*
":.KQ<<>ZKD%d077Z
Z$2z2
$$Xr2/1--h; [s   A7Nr|   )rJ   ra   r`   rn   rh   rH   rG   r   r     s    
<rH   r   c                      e Zd ZddZddZy)r   c                    || _         y rL   )configr   s     rG   r   zUseModelConfig.__init__  r   rH   c                    t         r|d   j                  | j                         y | j                  j                         D ]  \  }}t	        |d   ||        y )Nre   ri   )r:   rN   r
  r   setattr)r{   rq   rP   keyr   s        rG   rn   z UseModelConfig.customize_page_ns  sL    ~%%dkk2 KK--/ 0S8c3/0rH   N)r   zUnpack[ConfigDict]rw   r}   r|   r  rh   rH   rG   r   r     s    0rH   r   c                   t        | d      si | _        |D ]  }| j                  j                  |i          | j                  S )Nr   )hasattrr   
setdefault)rD   r   fs      rG   _pydantic_v1_get_inited_fieldsr    sB    3!
 %

a$% ::rH   c                      e Zd ZddZddZy)r
   c                    || _         y rL   r   r{   r   s     rG   r   zUseExcludedFields.__init__  r   rH   c                    t         r|d   j                  | j                         y t        |d   g| j                   }| j                  D ]
  }d||   d<    y )Nrd   ri   Texclude)r:   rN   r   r  )r{   rq   rP   fields_configr  s        rG   rn   z#UseExcludedFields.customize_page_ns  sV    "#**4;;7:2h<V$++VM[[ 3.2a +3rH   N)r   r   rw   r}   r|   r  rh   rH   rG   r
   r
     s    3rH   r
   c                      e Zd ZddZddZy)r   c                    || _         y rL   )aliases)r{   r  s     rG   r   zUseFieldsAliases.__init__  s	    rH   c                   t         r|d   j                  | j                         y t        |d   g| j                   }| j                  j	                         D ]%  \  }}||j
                  v s
J d|       |||   d<   ' y )Nrc   ri   zUnknown field alias)r:   rN   r  r  r   r   )r{   rq   rP   r  r   r  s         rG   rn   z"UseFieldsAliases.customize_page_ns  s    "#**4<<8:2h<W$,,WM#||113 5ex222MnTH4MM2/4d#G,5rH   N)r  r   rw   r}   r|   r  rh   rH   rG   r   r     s    5rH   r   _RawFieldDefc                      e Zd ZddZddZy)r   c                    || _         y rL   r   r  s     rG   r   zUseAdditionalFields.__init__  r   rH   c                    |j                  di       }| j                  j                         D ]&  \  }}t        |t              r|\  ||<   ||<   "|||<   ( y Nr   )r  r   r   rk   rB   )r{   rq   rP   r   r   r   s         rG   rn   z%UseAdditionalFields.customize_page_ns  sX    }}.3;;,,. 	#KD%%'',$T
BtH"T
		#rH   N)r   r  rw   r}   r|   r  rh   rH   rG   r   r     s    #rH   r   c                      e Zd ZddZddZy)r   c                    || _         y rL   )r   )r{   r   s     rG   r   z UseFieldTypeAnnotations.__init__  s	    	rH   c                ^    |j                  di       }|j                  | j                         y r"  )r  rN   r   )r{   rq   rP   r   s       rG   rn   z)UseFieldTypeAnnotations.customize_page_ns  s#    }}.3DIIrH   N)r   r!   rw   r}   r|   r  rh   rH   rG   r   r     s    rH   r   N)rD   r<   rw   ztuple[type[Any], ...])rD   r<   rQ   r   rw   r<   )rD   r   rQ   r   rw   r   )rD   ztype[BaseModel]rw   r   )r   r!   rw   r!   )rD   r   r   r   rw   r   )rD   r!   r   r   rw   r   )Y
__future__r   __all__abcr   collections.abcr   r   dataclassesr   typesr   typingr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   fastapir+   fastapi.paramsr,   pydanticr-   r.   r/   typing_extensionsr0   r1   rF   r3   r4   r5   r   r6   r7   r8   typing_utilsr9   utilsr:   r;   dictr   r   r   r   r<   r   r   r\   r   r   r   r   r   r   r   r   r	   r   r   r   r   pydantic.fieldsr   r   r   r   r   r   r   r   r   r   r  r
   r   rB   r  r   r   rh   rH   rG   <module>r5     s{   "2  $  !        8 8 / > > 0  1 -sCx.i (. .w' / 2)2 )2X X   'n ' ' ' ' ' %3 %3 %3P 2   2   #7n #7 #7L 1 1 1> 1n 1 1 1> 1 1 
, 
, 
, ;		  =
_<
n 
< <	0^ 	03 35~ 5  U38_ 45i 5#. #n rH   