
    Ѯh                     8   g d 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 ddlmZ  ed      Zdedee   fd	Zd
ddeee      dedeee   eee      f   fdZdee   deee      fdZ G d de      Z ede      ZdededefdZdeeeef      defdZy))generic_query_apply_paramsget_mongo_pipeline_filter_endlen_or_noneunwrap_scalarswrap_scalars    )Sequence)AnyOptionalProtocolTypeVarUnioncast)Self)	RawParamsTobjreturnc                 8    	 t        |       S # t        $ r Y y w xY wN)len	TypeError)r   s    n/home/www/academy-backend.kofcorporation.com/venv/lib/python3.12/site-packages/fastapi_pagination/ext/utils.pyr   r      s"    3x s   
 	F)force_unwrapitemsr   c          	          t        t        t        t           t        t        t              f   | D cg c]  }|st	        |      dk(  r|d   n| c}      S c c}w )N   r   )r   r   r   r   r   )r   r   items      r   r   r      sS    
 hqk8HQK001QVWLK$5$:a	DW Ws   A
c                 H    | D cg c]  }t        |      |n|g c}S c c}w r   )r   )r   r   s     r   r   r   %   s'    JOP$K%1Dv=PPPs   c                   4    e Zd ZdededefdZdededefdZy)AbstractQuery___r   c                      y r    selfr!   r"   s      r   limitzAbstractQuery.limit*           c                      y r   r$   r%   s      r   offsetzAbstractQuery.offset-   r(   r)   N)__name__
__module____qualname__r	   r   r'   r+   r$   r)   r   r    r    )   s6     3 4  C D r)   r    TAbstractQuery)boundqparamsc                     |j                   | j                  |j                         } |j                  | j                  |j                        } | S r   )r'   r+   )r1   r2   s     r   r   r   4   s?    ||GGFLL!}} HHV]]#Hr)   aggregate_pipelinec                     g dt        t        |             D ])  \  }}t        fd|D              st        |       |z
  c S  y)z
    Get the index of the stage in the aggregation pipeline where the number or order
    of documents in the pipeline no longer changes.
    )z
$addFieldsz$graphLookupz$lookupz$projectz$replaceRootz$replaceWithz$setz$unsetc              3   &   K   | ]  }|v 
 y wr   r$   ).0
stage_nametransform_stagess     r   	<genexpr>z0get_mongo_pipeline_filter_end.<locals>.<genexpr>R   s     Jjz!11Js   r   )	enumeratereversedanyr   )r4   istager9   s      @r   r   r   =   sO    	 h'9:; /5JEJJ)*Q../ r)   N)__all__collections.abcr   typingr	   r
   r   r   r   r   typing_extensionsr   fastapi_pagination.basesr   r   intr   boolr   r   r    r/   r   listdictstrr   r$   r)   r   <module>rJ      s    % @ @ " .CLS Xc]  HQK   8A;!--.	Q Q(8C=*A QH  )?. )  T#s(^,r)   