
    h                         S SK rS SKrS SKrS SKJr  S SKJr  S SKJ	r	  S SK
Jr   " S S\5      r " S S	\5      r " S
 S\5      r " S S\5      r " S S5      r " S S\R(                  R*                  5      rg)    N)ceil)cached_property)method_has_no_args)gettext_lazyc                       \ rS rSrSrg)UnorderedObjectListWarning    N__name__
__module____qualname____firstlineno____static_attributes__r
       G/var/www/html/env/lib/python3.13/site-packages/django/core/paginator.pyr   r          r   r   c                       \ rS rSrSrg)InvalidPage   r
   Nr   r
   r   r   r   r      r   r   r   c                       \ rS rSrSrg)PageNotAnInteger   r
   Nr   r
   r   r   r   r      r   r   r   c                       \ rS rSrSrg)	EmptyPage   r
   Nr   r
   r   r   r   r      r   r   r   c                       \ rS rSr\" S5      r\" S5      \" S5      \" S5      S.r   SS jrS	 rS
 r	S r
S rS r\S 5       r\S 5       r\S 5       rS rSSSS.S jjrSrg)	Paginator   u   …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                     Xl         U R                  5         [        U5      U l        [        U5      U l        X@l        Uc  U R                  U l        g U R                  U-  U l        g N)object_list_check_object_list_is_orderedintper_pageorphansallow_empty_first_pagedefault_error_messageserror_messages)selfr%   r(   r)   r*   r,   s         r   __init__Paginator.__init__%   se     '**,H7|&<# % '' 	 ,,~= 	r   c              #   X   #    U R                    H  nU R                  U5      v   M     g 7fr$   )
page_rangepage)r-   page_numbers     r   __iter__Paginator.__iter__8   s"     ??K))K(( +s   (*c                 `    [        U[        5      (       a  UR                  5       (       d  [        e[	        U5      nUS:  a  [        U R                  S   5      eXR                  :  a  [        U R                  S   5      eU$ ! [
        [        4 a    [        U R                  S   5      ef = f)z'Validate the given 1-based page number.r       r!   r"   )

isinstancefloat
is_integer
ValueErrorr'   	TypeErrorr   r,   r   	num_pagesr-   numbers     r   validate_numberPaginator.validate_number<   s    	H&%((1B1B1D1D  [F A:D//
;<<NN"D//=>> :& 	H"4#6#6~#FGG	Hs   ;B )B-c                      U R                  U5      nU R	                  U5      $ ! [         a    Sn N[         a    U R                  n N6f = f)zR
Return a valid page, even if the page argument isn't a number or isn't
in range.
r7   )r@   r   r   r=   r2   r>   s     r   get_pagePaginator.get_pageJ   sO    
	$))&1F
 yy  	   	F 	$^^F	$s   $ A
A
	A
c                     U R                  U5      nUS-
  U R                  -  nX R                  -   nX0R                  -   U R                  :  a  U R                  nU R	                  U R
                  X# X5      $ )z7Return a Page object for the given 1-based page number.r7   )r@   r(   r)   count	_get_pager%   )r-   r?   bottomtops       r   r2   Paginator.pageW   sh    %%f-1*-}}$+**C~~d..v:FIIr   c                     [        U0 UD6$ )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   rG   Paginator._get_page`   s     T$V$$r   c                     [        U R                  SS5      n[        U5      (       a2  [        R                  " U5      (       d  [        U5      (       a  U" 5       $ [        U R                  5      $ )z5Return the total number of objects, across all pages.rF   N)getattrr%   callableinspect	isbuiltinr   len)r-   cs     r   rF   Paginator.counti   sT     D$$gt4A;;w00338J18M8M3J4##$$r   c                     U R                   S:X  a  U R                  (       d  g[        SU R                   U R                  -
  5      n[	        XR
                  -  5      $ )z!Return the total number of pages.r   r7   )rF   r*   maxr)   r   r(   )r-   hitss     r   r=   Paginator.num_pagesq   sE     ::?4#>#>1djj4<</0D==())r   c                 4    [        SU R                  S-   5      $ )zS
Return a 1-based range of pages for iterating through within
a template for loop.
r7   )ranger=   r-   s    r   r1   Paginator.page_rangey   s     Q*++r   c                    [        U R                  SS5      nUb  U(       d  [        U R                  S5      (       aD  SR                  U R                  R                  U R                  R
                  R                  5      OSR                  U R                  5      n[        R                  " SR                  U5      [        SS9  ggg)	z?
Warn if self.object_list is unordered (typically a QuerySet).
orderedNmodelz{} {}z{!r}zLPagination may yield inconsistent results with an unordered object_list: {}.   )
stacklevel)
rQ   r%   hasattrformatrb   	__class__r   warningswarnr   )r-   ra   obj_list_reprs      r   r&   'Paginator._check_object_list_is_ordered   s     $**It<w
 4++W55 $$**D,<,<,F,F,O,O ]]4#3#34  MM##)6-#8*	 (/r   rc      )on_each_sideon_endsc             #     #    U R                  U5      nU R                  X#-   S-  ::  a  U R                   Sh  vN   gUSU-   U-   S-   :  a?  [        SUS-   5       Sh  vN   U R                  v   [        X-
  US-   5       Sh  vN   O[        SUS-   5       Sh  vN   XR                  U-
  U-
  S-
  :  a\  [        US-   X-   S-   5       Sh  vN   U R                  v   [        U R                  U-
  S-   U R                  S-   5       Sh  vN   g[        US-   U R                  S-   5       Sh  vN   g GN N N N Nr N5 N7f)uc  
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.
rl   Nr7   )r@   r=   r1   r]   ELLIPSIS)r-   r?   rm   rn   s       r   get_elided_page_rangePaginator.get_elided_page_range   s:     %%f->>l499&&Q%/144Q!,,,--V2FQJ???Q
+++^^l2W<AAVaZ)>)BCCC--T^^g594>>A;MNNNVaZ!);<<< ' -?+ DN<s{   6ED<&ED? &EEEE3EE>EE$E6E	7E?EEEEE	E)r*   r,   r%   r)   r(   )r   TN)r7   )r   r   r   r   _rp   r+   r.   r4   r@   rC   r2   rG   r   rF   r=   propertyr1   r&   rq   r   r
   r   r   r   r      s     xH>?7878 #
&)!J% % % * * , ,(=a = =r   r   c                   V    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)rL      c                 (    Xl         X l        X0l        g r$   )r%   r?   	paginator)r-   r%   r?   rx   s       r   r.   Page.__init__   s    &"r   c                 T    SU R                   < SU R                  R                  < S3$ )Nz<Page z of >r?   rx   r=   r^   s    r   __repr__Page.__repr__   s    $(KK1I1IJJr   c                 ,    [        U R                  5      $ r$   )rU   r%   r^   s    r   __len__Page.__len__   s    4##$$r   c                 
   [        U[        [        45      (       d!  [        S[	        U5      R
                  -  5      e[        U R                  [        5      (       d  [        U R                  5      U l        U R                  U   $ )Nz0Page indices must be integers or slices, not %s.)r8   r'   slicer<   typer   r%   list)r-   indexs     r   __getitem__Page.__getitem__   sn    %#u..Bu+&&'  $**D11#D$4$45D&&r   c                 H    U R                   U R                  R                  :  $ r$   r|   r^   s    r   has_nextPage.has_next   s    {{T^^5555r   c                      U R                   S:  $ Nr7   )r?   r^   s    r   has_previousPage.has_previous   s    {{Qr   c                 P    U R                  5       =(       d    U R                  5       $ r$   )r   r   r^   s    r   has_other_pagesPage.has_other_pages   s      "5dmmo5r   c                 R    U R                   R                  U R                  S-   5      $ r   rx   r@   r?   r^   s    r   next_page_numberPage.next_page_number       ~~--dkkAo>>r   c                 R    U R                   R                  U R                  S-
  5      $ r   r   r^   s    r   previous_page_numberPage.previous_page_number   r   r   c                     U R                   R                  S:X  a  gU R                   R                  U R                  S-
  -  S-   $ )zh
Return the 1-based index of the first object on this page,
relative to total objects in the paginator.
r   r7   )rx   rF   r(   r?   r^   s    r   start_indexPage.start_index   s;     >>1$''4;;?;q@@r   c                     U R                   U R                  R                  :X  a  U R                  R                  $ U R                   U R                  R                  -  $ )zc
Return the 1-based index of the last object on this page,
relative to total objects found (hits).
)r?   rx   r=   rF   r(   r^   s    r   	end_indexPage.end_index   sC     ;;$..222>>'''{{T^^4444r   )r?   r%   rx   N)r   r   r   r   r.   r}   r   r   r   r   r   r   r   r   r   r   r
   r   r   rL   rL      s;    #
K%
'66??A5r   rL   )collections.abccollectionsrS   rh   mathr   django.utils.functionalr   django.utils.inspectr   django.utils.translationr   rs   RuntimeWarningr   	Exceptionr   r   r   r   abcSequencerL   r
   r   r   <module>r      sm        3 3 6	 		) 		{ 		 	W= W=t95;??## 95r   