
    +{Bi;                     R   d dl Zd dlZd dlZd dl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  G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d d      Z G d de      Z G d de      Z G d dej6                  j8                        Z G d d      Zy)    N)ceil)iscoroutinefunctionsync_to_async)RemovedInDjango70Warning)cached_property)method_has_no_args)gettext_lazyc                       e Zd Zy)UnorderedObjectListWarningN__name__
__module____qualname__     J/var/www/python/venv/lib/python3.12/site-packages/django/core/paginator.pyr   r          r   r   c                       e Zd Zy)InvalidPageNr   r   r   r   r   r      r   r   r   c                       e Zd Zy)PageNotAnIntegerNr   r   r   r   r   r      r   r   r   c                       e Zd Zy)	EmptyPageNr   r   r   r   r   r      r   r   r   c                   v    e Zd Z ed      Z ed       ed       ed      dZ	 	 	 ddZd Z	 dd	Zd
 Z	d Z
y)BasePaginatoru   …z"That page number is not an integerzThat page number is less than 1zThat page contains no results)invalid_pagemin_page
no_resultsNc                 4   || _         | j                          t        |      | _        t        |      | _        || _        || j                  n| j                  |z  | _        | j                  | j                  k  rd}t        j                  |t        d       y y )NzSupport for the orphans argument being larger than or equal to the per_page argument is deprecated. This will raise a ValueError in Django 7.0.   )category
stacklevel)object_list_check_object_list_is_orderedintper_pageorphansallow_empty_first_pagedefault_error_messageserror_messageswarningswarnr   )selfr#   r&   r'   r(   r*   msgs          r   __init__zBasePaginator.__init__(   s     '**,H7|&<# % '',,~= 	
 ==DLL( 
 MM#(@QO )r   c                 ~   t        | j                  dd      }||st        | j                  d      rDdj                  | j                  j                  | j                  j
                  j                        ndj                  | j                        }t        j                  dj                  |      t        d       yyy)	zO
        Warn if self.object_list is unordered (typically a QuerySet).
        orderedNmodelz{} {}z{!r}zLPagination may yield inconsistent results with an unordered object_list: {}.   )r"   )
getattrr#   hasattrformatr2   	__class__r   r+   r,   r   )r-   r1   obj_list_reprs      r   r$   z+BasePaginator._check_object_list_is_orderedH   s     $**It<w
 4++W5 $$**D,<,<,F,F,O,O ]]4#3#34  MM##)6-#8*	 (/r   c              #     K   |||z   dz  k  r|D ]  }|  y|d|z   |z   dz   kD  rBt        d|dz         D ]  }|  | j                   t        ||z
  |dz         D ]  }|  nt        d|dz         D ]  }|  |||z
  |z
  dz
  k  rKt        |dz   ||z   dz         D ]  }|  | j                   t        ||z
  dz   |dz         D ]  }|  yt        |dz   |dz         D ]  }|  yw)u  
        Return a 1-based range of pages with some values elided.

        If the page range is larger than a given size, the whole range is not
        provided and a compact form is returned instead, e.g. for a paginator
        with 50 pages, if page 43 were the current page, the output, with the
        default arguments, would be:

            1, 2, …, 40, 41, 42, 43, 44, 45, 46, …, 49, 50.
        r    N   )rangeELLIPSIS)r-   number	num_pages
page_rangeon_each_sideon_endspages          r   _get_elided_page_rangez$BasePaginator._get_elided_page_range\   sP     /144" 
Q%/144a1- 
--f|3VaZ@ 
 a!, 
 Y-71<<fqj&<*?!*CD 
--i'1A5y1}E 
 fqj)a-8 
s   C5C7c                     t        |i |S )z
        Return an instance of a single page.

        This hook can be used by subclasses to use an alternative to the
        standard :cls:`Page` object.
        )Pager-   argskwargss      r   	_get_pagezBasePaginator._get_page   s     T$V$$r   c                 4   	 t        |t              r|j                         st        t	        |      }|dk  rt        | j                  d         ||kD  rt        | j                  d         |S # t
        t        f$ r t        | j                  d         w xY w)z'Validate the given 1-based page number.r   r:   r   r   )	
isinstancefloat
is_integer
ValueErrorr%   	TypeErrorr   r*   r   r-   r=   r>   s      r   _validate_numberzBasePaginator._validate_number   s    	H&%(1B1B1D  [F A:D//
;<<ID//=>> :& 	H"4#6#6~#FGG	Hs   1A/ /(Br   TN)r3   r    )r   r   r   _r<   r)   r/   r$   rC   rI   rQ   r   r   r   r   r      s^     xH>?7878 #P@* FG$L%r   r   c                   d    e Zd Zd Zd Zd Zd Zed        Zed        Z	e
d        Zddd	d
dZy)	Paginatorc              #   T   K   | j                   D ]  }| j                  |        y wN)r?   rB   )r-   page_numbers     r   __iter__zPaginator.__iter__   s(     ?? 	)K))K((	)s   &(c                 :    | j                  || j                        S rW   )rQ   r>   r-   r=   s     r   validate_numberzPaginator.validate_number   s    $$VT^^<<r   c                     	 | j                  |      }| j	                  |      S # t        $ r d}Y t        $ r | j                  }Y 4w xY w)zj
        Return a valid page, even if the page argument isn't a number or isn't
        in range.
        r:   )r\   r   r   r>   rB   r[   s     r   get_pagezPaginator.get_page   sO    
	$))&1F
 yy  	   	F 	$^^F	$s   $ AAAc                     | j                  |      }|dz
  | j                  z  }|| j                  z   }|| j                  z   | j                  k\  r| j                  }| j	                  | j
                  || ||       S )z7Return a Page object for the given 1-based page number.r:   )r\   r&   r'   countrI   r#   )r-   r=   bottomtops       r   rB   zPaginator.page   sp    %%f-1*-t}}$+**C~~d..vc:FDIIr   c                     t        | j                  dd      }t        |      r't        j                  |      st        |      r |       S t        | j                        S )z5Return the total number of objects, across all pages.r`   N)r4   r#   callableinspect	isbuiltinr   len)r-   cs     r   r`   zPaginator.count   sL     D$$gt4A;w0038J18M3J4##$$r   c                     | j                   dk(  r| j                  syt        d| j                   | j                  z
        }t	        || j
                  z        S )z!Return the total number of pages.r   r:   )r`   r(   maxr'   r   r&   )r-   hitss     r   r>   zPaginator.num_pages   sG     ::?4#>#>1djj4<</0D4==())r   c                 4    t        d| j                  dz         S )zk
        Return a 1-based range of pages for iterating through within
        a template for loop.
        r:   )r;   r>   r-   s    r   r?   zPaginator.page_range   s     Q*++r   r3   r    r@   rA   c             #      K   | j                  |      }| j                  || j                  | j                  ||      E d {    y 7 wrW   )r\   rC   r>   r?   )r-   r=   r@   rA   s       r   get_elided_page_rangezPaginator.get_elided_page_range   sA     %%f-..DNNDOO\7
 	
 	
s   >A AANr:   )r   r   r   rY   r\   r^   rB   r   r`   r>   propertyr?   rp   r   r   r   rU   rU      sa    )=!J % % * * , ,
a 
r   rU   c                   f     e Zd Z	 	 	 d fd	Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zdd
dddZ xZS )AsyncPaginatorc                 H    t         |   |||||       d | _        d | _        y rW   )superr/   _cache_acount_cache_anum_pages)r-   r#   r&   r'   r(   r*   r7   s         r   r/   zAsyncPaginator.__init__   s0     	7,BN	
 "!%r   c                   K   | j                          d {   }|D ]  }| j                  |       d {      y 7 (7 wrW   )apage_rangeapage)r-   r?   rX   s      r   	__aiter__zAsyncPaginator.__aiter__   sA     ++--
% 	0K

;///	0 ./s   A?AAAAc                 b   K   | j                          d {   }| j                  ||      S 7 wrW   )
anum_pagesrQ   rP   s      r   avalidate_numberzAsyncPaginator.avalidate_number   s-     //++	$$VY77 ,s   /-/c                    K   	 | j                  |       d{   }| j	                  |       d{   S 7 # t        $ r d}Y (t        $ r | j                          d{  7  }Y Kw xY w7 :w)zSee Paginator.get_page().Nr:   )r   r   r   r~   r{   r[   s     r   	aget_pagezAsyncPaginator.aget_page   sh     	-0088F
 ZZ''' 9 	F 	-??,,,F	-'sS   A.8 68 A.A,A.8 A)A.A) A#!A)&A.(A))A.c                   K   | j                  |       d{   }|dz
  | j                  z  }|| j                  z   }| j                          d{   }|| j                  z   |k\  r|}| j	                  | j
                  || ||       S 7 q7 :w)zSee Paginator.page().Nr:   )r   r&   acountr'   rI   r#   )r-   r=   ra   rb   r`   s        r   r{   zAsyncPaginator.apage   s     ,,V441*-t}}$kkm#&C~~d..vc:FDII 5 $s!   BB	8BB9BBc                     t        |i |S rW   )	AsyncPagerF   s      r   rI   zAsyncPaginator._get_page  s    $)&))r   c                   K   | j                   | j                   S t        | j                  dd      }t        |      r0t	        j
                  |      st        |      r |        d{   }nt        | j                        }|| _         |S 7 #w)zSee Paginator.count().Nr   )rw   r4   r#   r   re   rf   r   rg   )r-   rh   r`   s      r   r   zAsyncPaginator.acount  s{     )%%%D$$h5"%%a("1%#IE(()E" s   A%B'B($Bc                 *  K   | j                   | j                   S | j                          d{   }|dk(  r| j                  sd| _         | j                   S t        d|| j                  z
        }t        || j                  z        }|| _         |S 7 bw)zSee Paginator.num_pages().Nr   r:   )rx   r   r(   rj   r'   r   r&   )r-   r`   rk   r>   s       r   r~   zAsyncPaginator.anum_pages  s     !!-)))kkm#A:d99%&D")))1edll*+-.	!* $s   ,BBA#Bc                 \   K   | j                          d{   }t        d|dz         S 7 w)zSee Paginator.page_range()Nr:   )r~   r;   r-   r>   s     r   rz   zAsyncPaginator.apage_range&  s+     //++	Q	A&& ,s   ,*,r3   r    rn   c                  K   | j                  |       d {   }| j                          d {   }| j                          d {   }| j                  |||||      D ]  }| 	 y 7 T7 >7 (wrW   )r   r~   rz   rC   )r-   r=   r@   rA   r>   r?   rB   s          r   aget_elided_page_rangez%AsyncPaginator.aget_elided_page_range+  sr     ,,V44//++	++--
//Iz<
 	D J	 5+-s1   A2A,A2A.A2A0%A2.A20A2rR   rq   )r   r   r   r/   r|   r   r   r{   rI   r   r~   rz   r   __classcell__)r7   s   @r   rt   rt      sP    
 #&0
8(	J*"'
QPQ  r   rt   c                   N    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)rE   c                 .    || _         || _        || _        y rW   r#   r=   	paginatorr-   r#   r=   r   s       r   r/   zPage.__init__6      &"r   c                 P    d| j                   d| j                  j                  dS )Nz<Page z of >r=   r   r>   rm   s    r   __repr__zPage.__repr__;  s    $(KK1I1IJJr   c                 ,    t        | j                        S rW   )rg   r#   rm   s    r   __len__zPage.__len__>  s    4##$$r   c                     t        |t        t        f      s!t        dt	        |      j
                  z        t        | j                  t              st        | j                        | _        | j                  |   S )Nz0Page indices must be integers or slices, not %s.rK   r%   slicerO   typer   r#   listr-   indexs     r   __getitem__zPage.__getitem__A  sh    %#u.Bu+&&'  $**D1#D$4$45D&&r   c                 H    | j                   | j                  j                  k  S rW   r   rm   s    r   has_nextzPage.has_nextM  s    {{T^^5555r   c                      | j                   dkD  S Nr:   r=   rm   s    r   has_previouszPage.has_previousP  s    {{Qr   c                 F    | j                         xs | j                         S rW   )r   r   rm   s    r   has_other_pageszPage.has_other_pagesS  s      "5dmmo5r   c                 R    | j                   j                  | j                  dz         S r   r   r\   r=   rm   s    r   next_page_numberzPage.next_page_numberV      ~~--dkkAo>>r   c                 R    | j                   j                  | j                  dz
        S r   r   rm   s    r   previous_page_numberzPage.previous_page_numberY  r   r   c                     | j                   j                  dk(  ry| j                   j                  | j                  dz
  z  dz   S )z
        Return the 1-based index of the first object on this page,
        relative to total objects in the paginator.
        r   r:   )r   r`   r&   r=   rm   s    r   start_indexzPage.start_index\  s;     >>1$''4;;?;q@@r   c                     | j                   | j                  j                  k(  r| j                  j                  S | j                   | j                  j                  z  S )z{
        Return the 1-based index of the last object on this page,
        relative to total objects found (hits).
        )r=   r   r>   r`   r&   rm   s    r   	end_indexzPage.end_indexf  sC     ;;$..222>>'''{{T^^4444r   N)r   r   r   r/   r   r   r   r   r   r   r   r   r   r   r   r   r   rE   rE   5  s;    #
K%
'66??A5r   rE   c                   `    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)r   c                 .    || _         || _        || _        y rW   r   r   s       r   r/   zAsyncPage.__init__r  r   r   c                      d| j                   z  S )Nz<Async Page %s>r   rm   s    r   r   zAsyncPage.__repr__w  s     4;;..r   c                   K   t        | j                  d      r| j                  2 3 d {   }| | j                  D ]  }| 	 y 7 !6 y w)Nr|   )r5   r#   r-   objs     r   r|   zAsyncPage.__aiter__z  sS     4##[1!--  c	'' 	-s%   #AAAAAAAc                 v    t        | j                  t              st        d      t	        | j                        S )NzBAsyncPage.aget_object_list() must be awaited before calling len().)rK   r#   r   rO   rg   rm   s    r   r   zAsyncPage.__len__  s5    $**D1T  4##$$r   c                 v    t        | j                  t              st        d      t	        | j                        S )NzGAsyncPage.aget_object_list() must be awaited before calling reversed().)rK   r#   r   rO   reversedrm   s    r   __reversed__zAsyncPage.__reversed__  s7    $**D1= 
 (())r   c                     t        |t        t        f      s!t        dt	        |      j
                  z        t        | j                  t              st        d      | j                  |   S )Nz5AsyncPage indices must be integers or slices, not %s.zCAsyncPage.aget_object_list() must be awaited before using indexing.r   r   s     r   r   zAsyncPage.__getitem__  sg    %#u.Gu+&&' 
 $**D1U  &&r   c                 P  K   t        | j                  t              s^t        | j                  d      r| j                  2 cg c3 d{   }| t	        t              | j                         d{   | _        | j                  S 7 ?6 nc c}w c}| _        | j                  S 7 2w)z
        Returns self.object_list as a list.

        This method must be awaited before AsyncPage can be
        treated as a sequence of self.object_list.
        r|   N)rK   r#   r   r5   r   r   s     r   aget_object_listzAsyncPage.aget_object_list  s      $**D1t''59=9I9I#J#J#C)<t)<T=M=M)N#N  $K#J#J   $OsG   ?B&BB	B
B	B"B&1B$2B&B		B
B&c                 p   K   | j                   j                          d {   }| j                  |k  S 7 wrW   )r   r~   r=   r   s     r   	ahas_nextzAsyncPage.ahas_next  s/     ..3355	{{Y&& 6s   646c                 (   K   | j                   dkD  S wr   r   rm   s    r   ahas_previouszAsyncPage.ahas_previous  s     {{Qs   c                 ~   K   | j                          d {   }| j                          d {   }|xs |S 7 "7 wrW   )r   r   )r-   r   r   s      r   ahas_other_pageszAsyncPage.ahas_other_pages  s:     !//11))'x' 2)s   =9=;==c                 n   K   | j                   j                  | j                  dz          d {   S 7 wr   r   r   r=   rm   s    r   anext_page_numberzAsyncPage.anext_page_number  )     ^^44T[[1_EEEE   ,535c                 n   K   | j                   j                  | j                  dz
         d {   S 7 wr   r   rm   s    r   aprevious_page_numberzAsyncPage.aprevious_page_number  r   r   c                    K   | j                   j                          d{   }|dk(  ry| j                   j                  | j                  dz
  z  dz   S 7 3w)zSee Page.start_index().Nr   r:   )r   r   r&   r=   )r-   r`   s     r   astart_indexzAsyncPage.astart_index  sL     nn++--A:''4;;?;q@@ .s   AA4Ac                    K   | j                   j                          d{   }| j                  |k(  r"| j                   j                          d{   S | j                  | j                   j                  z  S 7 X7 )w)zSee Page.end_index().N)r   r~   r=   r   r&   r   s     r   
aend_indexzAsyncPage.aend_index  s_     ..3355	;;)#..000{{T^^4444 60s!   A=A90A=A;(A=;A=N)r   r   r   r/   r   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   q  sK    #
/%*' '(
FFA5r   r   )collections.abccollectionsre   r+   mathr   asgiref.syncr   r   django.utils.deprecationr   django.utils.functionalr   django.utils.inspectr   django.utils.translationr	   rS   RuntimeWarningr   	Exceptionr   r   r   r   rU   rt   abcSequencerE   r   r   r   r   <module>r      s        ; = 3 3 6	 		) 		{ 		 	y yx:
 :
z[] [|95;??## 95xZ5 Z5r   