
    Hwg                         d dl Zd dl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  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j(                  j*                        Zy)    N)ceil)cached_property)method_has_no_args)gettext_lazyc                       e Zd Zy)UnorderedObjectListWarningN__name__
__module____qualname__     L/var/www/horilla/myenv/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                       e Zd Z ed      ZddZd Zd Zd Zd Z	d Z
ed        Zed	        Zed
        Zd ZdddddZy)	Paginatoru   …c                     || _         | j                          t        |      | _        t        |      | _        || _        y N)object_list_check_object_list_is_orderedintper_pageorphansallow_empty_first_page)selfr   r   r   r    s        r   __init__zPaginator.__init__    s4    &**,H7|&<#r   c              #   T   K   | j                   D ]  }| j                  |        y wr   )
page_rangepage)r!   page_numbers     r   __iter__zPaginator.__iter__'   s(     ?? 	)K))K((	)s   &(c                 0   	 t        |t              r|j                         st        t	        |      }|dk  rt        t        d            || j                  kD  rt        t        d            |S # t
        t        f$ r t        t        d            w xY w)z'Validate the given 1-based page number.z"That page number is not an integer   zThat page number is less than 1zThat page contains no results)

isinstancefloat
is_integer
ValueErrorr   	TypeErrorr   _r   	num_pagesr!   numbers     r   validate_numberzPaginator.validate_number+   s    	L&%(1B1B1D  [F A:A?@AADNN"A=>?? :& 	L"1%I#JKK	Ls   1A1 1$B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)   )r3   r   r   r0   r%   r1   s     r   get_pagezPaginator.get_page9   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)   )r3   r   r   count	_get_pager   )r!   r2   bottomtops       r   r%   zPaginator.pageF   sp    %%f-1*-t}}$+**C~~d..vc:FDIIr   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   r8   zPaginator._get_pageO   s     T$V$$r   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.r7   N)getattrr   callableinspect	isbuiltinr   len)r!   cs     r   r7   zPaginator.countX   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)   )r7   r    maxr   r   r   )r!   hitss     r   r0   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)   )ranger0   r!   s    r   r$   zPaginator.page_rangeh   s     Q*++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: {}.   )
stacklevel)
r@   r   hasattrformatrN   	__class__r
   warningswarnr   )r!   rM   obj_list_reprs      r   r   z'Paginator._check_object_list_is_orderedp   s     $**It<w
 4++W5 $$**D,<,<,F,F,O,O ]]4#3#34  MM##)6-#8*	 (/r   rO      )on_each_sideon_endsc             #     K   | j                  |      }| j                  ||z   dz  k  r| j                  E d{    y|d|z   |z   dz   kD  r@t        d|dz         E d{    | j                   t        ||z
  |dz         E d{    nt        d|dz         E d{    || j                  |z
  |z
  dz
  k  r]t        |dz   ||z   dz         E d{    | j                   t        | j                  |z
  dz   | j                  dz         E d{    yt        |dz   | j                  dz         E d{    y7 7 7 7 7 r7 57 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.
        rW   Nr)   )r3   r0   r$   rJ   ELLIPSIS)r!   r2   rX   rY   s       r   get_elided_page_rangezPaginator.get_elided_page_range   sI     %%f->>lW499&&Q%/144Q!,,,--Vl2FQJ???Q
+++T^^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E 'EEEE4EE>EE$E7E
8E EEEEE
EN)r   T)r)   )r
   r   r   r/   r[   r"   r'   r3   r5   r%   r8   r   r7   r0   propertyr$   r   r\   r   r   r   r   r      s{     xH=)!J% % % * * , ,(=a =r   r   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)r<   c                 .    || _         || _        || _        y r   )r   r2   	paginator)r!   r   r2   r`   s       r   r"   zPage.__init__   s    &"r   c                 P    d| j                   d| j                  j                  dS )Nz<Page z of >r2   r`   r0   rK   s    r   __repr__zPage.__repr__   s    $(KK1I1IJJr   c                 ,    t        | j                        S r   )rD   r   rK   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.)r*   r   slicer.   typer
   r   list)r!   indexs     r   __getitem__zPage.__getitem__   sh    %#u.Bu+&&'  $**D1#D$4$45D&&r   c                 H    | j                   | j                  j                  k  S r   rc   rK   s    r   has_nextzPage.has_next   s    {{T^^5555r   c                      | j                   dkD  S Nr)   )r2   rK   s    r   has_previouszPage.has_previous   s    {{Qr   c                 F    | j                         xs | j                         S r   )rq   rn   rK   s    r   has_other_pageszPage.has_other_pages   s      "5dmmo5r   c                 R    | j                   j                  | j                  dz         S rp   r`   r3   r2   rK   s    r   next_page_numberzPage.next_page_number       ~~--dkkAo>>r   c                 R    | j                   j                  | j                  dz
        S rp   ru   rK   s    r   previous_page_numberzPage.previous_page_number   rw   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`   r7   r   r2   rK   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).
        )r2   r`   r0   r7   r   rK   s    r   	end_indexzPage.end_index   sC     ;;$..222>>'''{{T^^4444r   N)r
   r   r   r"   rd   rf   rl   rn   rq   rs   rv   ry   r{   r}   r   r   r   r<   r<      s;    #
K%
'66??A5r   r<   )collections.abccollectionsrB   rT   mathr   django.utils.functionalr   django.utils.inspectr   django.utils.translationr   r/   RuntimeWarningr   	Exceptionr   r   r   r   abcSequencer<   r   r   r   <module>r      sm        3 3 6	 		) 		{ 		 	F= F=R95;??## 95r   