
    ѮhbD              
         U d dl mZ g dZd dl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 d dl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! 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-m.Z. d dl/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z< ddl=m>Z>m?Z? erd dl@mAZAmBZB 	 d dlmCZC 	 d dlEmFZFmGZG 	 d dl@mHZH 	 d d!lImJZJ d"ZKd#eLd$<   d%ZMd#eLd&<   d'ZNd#eLd(<   e%d)   ZOd#eLd*<   d+ZPd#eLd,<   d-ZQd#eLd.<   d/ZRd#eLd0<   edVd1       ZSedWd2       ZSdWd3ZSe!e#eCe fZTdXd4ZUdXd5ZVee*e,f   ZWd#eLd6<   dYd7ZXdZd8ZYd[d9ZZd\d:Z[d]d;Z\d<d=d^d>Z] G d? d@e^      Z_d_dAZ` edBee   C      Za	 d`	 	 	 	 	 	 	 dadDZbe0	 	 	 	 	 	 	 	 	 	 dbdE       Zce0dcdF       Zde0dddG       Zee0	 d`d<ddddd<ddH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dedI       Zf	 	 	 	 	 	 	 	 	 	 dfdJZgdgdKZhe	 d`d<dddd<ddL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dhdM       Zie	 d`dd<dddd<ddN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 didO       Zie	 d`dd<dddd<ddN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 djdP       ZidkdQZi	 d`d<dddd<ddL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dldRZj	 d`d<ddddd<ddH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dmdSZk	 d`dd<dddd<ddN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 djdTZly# eD$ r  G d d      ZCY w xY w# eD$ r dUdZGdUdZFY  w xY w# eD$ r  G d d       ZHY /w xY w# eD$ r dZJY 6w xY w)n    )annotations)
Selectable	apaginatecreate_count_querycreate_count_query_from_textcreate_paginate_querycreate_paginate_query_from_textpaginateN)Sequence)suppress)partial)TYPE_CHECKINGAnyOptionalTypeVarUnioncastoverload)funcselecttext)
Connection)InvalidRequestError)QuerySessionnoloadscoped_session)CompoundSelectSelect)
TextClause)Literal	TypeAlias)create_page)AbstractParamsCursorRawParams	RawParams)Config)flowrun_async_flowrun_sync_flow)
CursorFlowLimitOffsetFlow	TotalFlowgeneric_flow)AdditionalDataAsyncItemsTransformerItemsTransformerSyncItemsTransformer   )generic_query_apply_paramsunwrap_scalars)AsyncConnectionAsyncSession)FromStatementc                      e Zd ZddZy)r8   c                    t        d      )Nz-sqlalchemy.orm.FromStatement is not availableImportError)selfargskwargss      s/home/www/academy-backend.kofcorporation.com/venv/lib/python3.12/site-packages/fastapi_pagination/ext/sqlalchemy.py__init__zFromStatement.__init__-   s    MNN    N)r>   r   r?   r   returnNone__name__
__module____qualname__rA    rB   r@   r8   r8   ,   s    	OrB   r8   )
await_onlygreenlet_spawnc                     K   t        d      w)Nz/sqlalchemy.util.greenlet_spawn is not availabler;   ___s     r@   rK   rK   5   s     KLLs   c                     t        d      )Nz+sqlalchemy.util.await_only is not availabler;   rM   s     r@   rJ   rJ   8   s    GHHrB   )async_scoped_sessionc                      e Zd ZddZy)rQ   c                    t        d      )Nz'sqlalchemy.ext.asyncio is not availabler;   )r=   rN   rO   s      r@   rA   zasync_scoped_session.__init__A   s    GHHrB   N)rN   r   rO   r   rC   rD   rE   rI   rB   r@   rQ   rQ   @   s    	IrB   rQ   )pagingz?Union[AsyncSession, AsyncConnection, async_scoped_session[Any]]r"   	AsyncConnz/Union[Session, Connection, scoped_session[Any]]SyncConnzUnion[AsyncConn, SyncConn]AnyConn)autolegacy	no-unwrapunwrap
UnwrapModeztuple[Any, ...]TupleAnyzVUnion[Select[TupleAny], TextClause, FromStatement[TupleAny], CompoundSelect[TupleAny]]r   zUnion[Selectable, Query[Any]]SelectableOrQueryc                     y NrI   querys    r@   _prepare_queryrc   [       rB   c                     y r`   rI   ra   s    r@   rc   rc   `   rd   rB   c                v    | y t        t              5  | j                         } d d d        | S # 1 sw Y   | S xY wr`   )r   AttributeError_statement_20ra   s    r@   rc   rc   e   s>    }	.	! &##%& L& Ls   .8c                    | j                   }g | j                  }t        |      dk7  ryt        |      dkD  ryt        |      dk(  r0|\  }dD cg c]  }|j                  |       c}\  }}|d uxr ||u S yc c}w )Nr3   FT)exprentity)column_descriptions_all_selected_columnslenget)rb   	cols_descall_colsdesckeyrj   rk   s          r@    _should_unwrap_scalars_for_queryrt   r   s    ))I-,,-H 9~ 8}q 8}1CD#Df42DFN2	 Es   A8c                    t        | t              syt        | t              ry	 t        |       S # t        t
        f$ r Y yw xY w)NFT)
isinstance_selectable_classesr   rt   rg   NotImplementedErrorra   s    r@   _should_unwrap_scalarsry      sE    e01%(/66/0 s   
/ A A	AnyParamsc                b    t        | t              r| S | j                         j                         S r`   )rv   r&   to_raw_paramsas_limit_offset)paramss    r@   _unwrap_paramsr      s)    &)$!1133rB   c                    t        |      }d}|j                  |d|j                   z  }|j                  |d|j                   z  }|  d| j                         S )N z LIMIT z OFFSET  )r   limitoffsetstrip)rb   r~   
raw_paramssuffixs       r@   r	   r	      ss    'JF#GJ,,-..$HZ../00WAfX$$&&rB   c                    d|  dS )NzSELECT count(*) FROM (z) AS __count_query__rI   ra   s    r@   r   r      s    #E7*>??rB   c                \    | j                         } t        | j                  |      | _        | S r`   )	_generater   elementrb   r~   s     r@   _paginate_from_statementr      s%    OOE)%--@EMLrB   c                    t        | t              rt        t        | j                  |            S t        | t              rt        | |      S t        | t        |            S r`   )rv   r    r   r	   r8   r   r4   r   r   s     r@   r   r      sL    %$3EJJGHH%''v66%e^F-CDDrB   Tuse_subqueryc                  t        | t              rt        t        | j                              S t        | t              rt        | j                        S | j                  d       j                  t        d            } |r:t        t        j                               j                  | j                               S | j                  t        j                         d      S )N*T)maintain_column_froms)rv   r    r   r   r8   r   r   order_byoptionsr   r   r   countselect_fromsubquerywith_only_columns)rb   r   s     r@   r   r      s    %$0<==%'!%--00NN4 ((5Edjjl#//0@AA""

" #  rB   c                      e Zd Zy)NonHashableRowsExceptionN)rF   rG   rH   rI   rB   r@   r   r      s    rB   r   c                    	 |r| j                         j                         S | j                         S # t        $ r}dt        |      v rt	        d      | d }~ww xY w)Nznon-hashablez4The rows are not hashable, please use `unique=False`)uniqueallr   strr   )resultr   es      r@   _maybe_uniquer      sZ    #)::<<v::<< SV#*+abhii	s   2 2 	AAA_TSeq)boundc                    t        |t        t        f      r|xs d}n|xs d}|dk(  rt        |       } | S |dk(  r	 | S |dk(  rt        | d      } | S |dk(  rt	        |      rt        | d      } | S )NrY   rX   rZ   r[   T)force_unwrap)rv   r    r8   r5   ry   )itemsrb   unwrap_modes      r@   _unwrap_itemsr      s     %*m45!-X!+Vhu% L 
	# L 
	 u48 L 
	#9%#@u48LrB   c              #  |   K   |t        | |      }|j                  |      }t        t        t           |      S w)Nr   )r   scalarr   r   int)rb   conncount_querysubquery_counttotals        r@   _total_flowr      s<      (^L++k**Eu%%s   :<c              #  L   K   t        | |      } |j                  |       }|S wr`   )r   execute)rb   r   r   r   s       r@   _limit_offset_flowr     s(     !%4E,,u%%ELs   "$c              #  N  K   t        | t              rt        d      t        t	        d      t        | dd      st        d      t        j                  }|rt        |      }t        t        |      } ||| |j                  |j                        }g |}|j                  j                  |j                  j                  |j                  j                  r|j                  j                  nd |j                  j                   r|j                  j"                  nd d}||fS w)Nz5Cursor pagination cannot be used with raw SQL querieszsqlakeyset is not installed_order_by_clausesTz#Cursor pagination requires ordering)
selectableper_pagepage)currentcurrent_backwardspreviousnext_)rv   r    
ValueErrorrT   r<   getattrselect_page_get_sync_conn_from_asyncr   rK   sizecursorbookmark_currentbookmark_current_backwardshas_previousbookmark_previoushas_nextbookmark_next)rb   r   is_asyncr   _callr   r   datas           r@   _cursor_flowr     s     %$PQQ~7885-t4>??E(..	 D dGE ;;//![[CC59[[5M5MDKK11SW.2kk.B.B**	D $;s   D#D%)r   r   r   transformeradditional_datar   configc             #     K   t         }| rt        t        |      }t        | t        t        ||||      t        t
        ||      t        t        |||       |t        t        |||	      |||
|
      E d {   }|S 7 w)N)rb   r   r   )
async_
total_flowlimit_offset_flowcursor_flowr~   inner_transformerr   r   r   create_page_factory)r#   r   rK   r.   r   r   r   _inner_transformer)r   r   rb   r~   r   r   r   r   r   r   r   r   r   s                r@   _sqlalchemy_flowr   0  s      &%n6IJ";t[.Q!"4eTBL%x@!"4E{cij'/ D Ks   A2A=4A;5A=c               |    t        t              5  t        | |      } d d d        t        | ||      S # 1 sw Y   xY wr`   )r   rg   r   r   )r   rb   r   r   s       r@   r   r   S  s>     
.	! -eV,- {33- -s   2;c                @   t        | t              r |        } t        t              5  t	        t
        | j                        cd d d        S # 1 sw Y   nxY wt        t              5  t	        t        | j                        cd d d        S # 1 sw Y   t        d      xY w)Nz/conn must be an AsyncConnection or AsyncSession)
rv   rQ   r   rg   r   r   sync_sessionr   sync_connection	TypeError)r   s    r@   r   r   `  s~    $,-v	.	! 0GT../0 0 0 
.	! 6J 4 456 6 6 E
FFs   AA&B

B)r   r   r   r   r   r   c                    y r`   rI   )rb   r~   r   r   r   r   r   r   s           r@   r
   r
   n  s     	rB   )r   r   r   r   r   r   r   c                    y r`   rI   
r   rb   r~   r   r   r   r   r   r   r   s
             r@   r
   r
   }  s     	rB   c                  K   y wr`   rI   r   s
             r@   r
   r
     s      	s   c                    	 | sJ t        | d   t              sJ t        | i |\
  }}}}}}}}	}
}	 t        |       t        j                  dt        d       t        |||||	|
||||
      S # t        t        f$ r t        | i |\
  }}}}}}}}	}
}Y dw xY w# t        $ r Y nw xY wt        t        d||||	|
|||||            S )Nr   zJUse `apaginate` instead. This function overload will be removed in v0.15.0   
stacklevelr   Fr   r   rb   r~   r   r   r   r   r   r   r   )rv   r   _old_paginate_signr   AssertionError_new_paginate_signr   warningswarnDeprecationWarningr   r*   r   )r>   r?   rb   r   r   r~   r   r   r   r   r   r   s               r@   r
   r
     s(   	
t$q'5)))// 	t{D&+P^`kms
!$' 	X	
 #)##+
 	
! ~& 
// 	t{D&+P^`kms
  , )###+	
 s"   /A. B .%BB	B%$B%c          
         | j                   t        d      t        j                  dt        d       | j                   }t        |       } | d ||||||||f
S )Nzquery.session is Nonezsqlalchemy.orm.Query is deprecated, use sqlalchemy.sql.Select instead sqlalchemy.orm.Query support will be removed in the next major release (0.13.0).   r   )sessionr   r   r   r   rc   )	rb   r~   r   r   r   r   r   r   r   s	            r@   r   r     sd    , }}011MM	[	 mmG5!E$ov~_jlrrrrB   c          
     F    t        |      }t        |      }||| |||||||	f
S r`   )rc   )
r   rb   r~   r   r   r   r   r   r   r   s
             r@   r   r     s6    0 5!E -K+tV[/6SacnpvvvrB   c                  K   t        |      }t        |      }t        t        d| |||||||||	             d {   S 7 w)NTr   )rc   r)   r   r   s
             r@   r   r     s\      5!E -K)###+	
   s   9AA A)rN   r   rO   r   rC   r   )rb   Select[TupleAny]rC   r   )rb   Optional[Select[TupleAny]]rC   r   )rb   r   rC   bool)r~   rz   rC   r&   )rb   r   r~   rz   rC   r   )rb   r   rC   r   )rb   FromStatement[TupleAny]r~   rz   rC   r   )rb   r   r~   rz   rC   r   )rb   r   r   r   rC   r   )r   r   r   r   rC   r   r`   )r   r   rb   r   r   Optional[UnwrapMode]rC   r   )
rb   r   r   rW   r   Optional[Selectable]r   r   rC   r-   )rb   r   r   rW   r   r&   rC   r,   )
rb   r   r   rW   r   r   r   r%   rC   r+   )r   r   r   zUnion[SyncConn, AsyncConn]rb   r   r~   Optional[AbstractParams]r   r   r   r   r   r   r   Optional[ItemsTransformer]r   Optional[AdditionalData]r   r   r   Optional[Config]rC   r   )
rb   r   r   r   r   r   r   Sequence[Any]rC   r   )r   r   rC   rV   )rb   
Query[Any]r~   r   r   r   r   r   r   Optional[SyncItemsTransformer]r   r   r   r   r   r   rC   r   )r   rV   rb   r^   r~   r   r   zOptional[SelectableOrQuery]r   r   r   r   r   r   r   r   r   r   r   r   rC   r   )r   rU   rb   r   r~   r   r   r   r   r   r   r   r   zOptional[AsyncItemsTransformer]r   r   r   r   r   r   rC   r   )r>   r   r?   r   rC   r   )rb   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   rC   tuple[Select[TupleAny], Optional[Selectable], SyncConn, Optional[AbstractParams], Optional[ItemsTransformer], Optional[AdditionalData], bool, bool, Optional[UnwrapMode], Optional[Config]])r   rV   rb   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rC   r   )m
__future__r   __all__r   collections.abcr   
contextlibr   	functoolsr   typingr   r   r   r   r   r   r   
sqlalchemyr   r   r   sqlalchemy.enginer   sqlalchemy.excr   sqlalchemy.ormr   r   r   r   sqlalchemy.sqlr   r   sqlalchemy.sql.elementsr    typing_extensionsr!   r"   fastapi_pagination.apir#   fastapi_pagination.basesr$   r%   r&   fastapi_pagination.configr'   fastapi_pagination.flowr(   r)   r*   fastapi_pagination.flowsr+   r,   r-   r.   fastapi_pagination.typesr/   r0   r1   r2   utilsr4   r5   sqlalchemy.ext.asyncior6   r7   r8   r<   sqlalchemy.utilrJ   rK   rQ   
sqlakeysetrT   rU   __annotations__rV   rW   r\   r]   r   r^   rc   rw   rt   ry   rz   r   r	   r   r   r   r   	Exceptionr   r   r   r   r   r   r   r   r   r   r
   r   r   r   rI   rB   r@   <module>r     s   "  $   O O O ) ) ( . A A 1 . 0 . O O , G G Y Y r r =DO,I:I;!
 Y	9 XG) G1 1
I  () 'p
I p> 9 > 
	 
	 
	 
	 z=.I , ^Y67	9 74	'@E CG "	y 	 	x}- )- & 	0 
&
&

& &
& 	
&
 
& 
&    > 
 (,	  (,(,.204#
$  %	  & & , .   	 D
4 
4 &	
4
 
4
4 
4
G 
 (,	  (,2604#		$	 		
 &	 0	 .	 	 	 		 
	 
 (,	
 04(,2604#	
		 %	
 -	 	 &	 0	 .	 	 	 		 
	  
 (,	
 )-(,3704#	
		 %	
 &	 	 &	 1	 .	 	 	 		 
	 2n (,#s  (,.204##s#s$#s 	#s
 &#s ,#s .#s #s #s#sR (,w
  (,(,.204#w
ww %w
 w &w &w ,w .w w wwB (,
 )-(,3704#
 %
 &  & 1 .   	]  OO OO  IMII  II II  FsH   7K  >K K* L   KKK'&K'*K=<K= L
L