
    g                         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__     m/var/www/python.vincentserveurtest.ovh/public_html/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                       e Zd Z ed      Z ed       ed       ed      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   …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                     || _         | j                          t        |      | _        t        |      | _        || _        || j                  | _        y | j                  |z  | _        y 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__zPaginator.__init__%   si     '**,H7|&<# % '' 	 ,,~= 	r   c              #   T   K   | j                   D ]  }| j                  |        y wr   )
page_rangepage)r&   page_numbers     r   __iter__zPaginator.__iter__8   s#     ??K))K(( +s   &(c                 H   	 t        |t              r|j                         st        t	        |      }|dk  rt        | j                  d         || j                  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   )

isinstancefloat
is_integer
ValueErrorr    	TypeErrorr   r%   r   	num_pagesr&   numbers     r   validate_numberzPaginator.validate_number<   s    	H&%(1B1B1D  [F A:D//
;<<DNN"D//=>> :& 	H"4#6#6~#FGG	Hs   1A9 9(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.   )r7   r   r   r4   r*   r5   s     r   get_pagezPaginator.get_pageJ   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.   )r7   r!   r"   count	_get_pager   )r&   r6   bottomtops       r   r*   zPaginator.pageW   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   r<   zPaginator._get_page`   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.r;   N)getattrr   callableinspect	isbuiltinr   len)r&   cs     r   r;   zPaginator.counti   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   r4   zPaginator.num_pagesq   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.   )ranger4   r&   s    r   r)   zPaginator.page_rangey   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)
rD   r   hasattrformatrR   	__class__r
   warningswarnr   )r&   rQ   obj_list_reprs      r   r   z'Paginator._check_object_list_is_ordered   s     $**It<w
 4++W5 $$**D,<,<,F,F,O,O ]]4#3#34  MM##)6-#8*	 (/r   rS      )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.
        r[   Nr.   )r7   r4   r)   rN   ELLIPSIS)r&   r6   r\   r]   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)r   TN)r.   )r
   r   r   _r_   r$   r'   r,   r7   r9   r*   r<   r   r;   r4   propertyr)   r   r`   r   r   r   r   r      s     xH>?7878 #
&)!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   r6   	paginator)r&   r   r6   re   s       r   r'   zPage.__init__   s    &"r   c                 P    d| j                   d| j                  j                  dS )Nz<Page z of >r6   re   r4   rO   s    r   __repr__zPage.__repr__   s    $(KK1I1IJJr   c                 ,    t        | j                        S r   )rH   r   rO   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    slicer3   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   rh   rO   s    r   has_nextzPage.has_next   s    {{T^^5555r   c                      | j                   dkD  S Nr.   )r6   rO   s    r   has_previouszPage.has_previous   s    {{Qr   c                 F    | j                         xs | j                         S r   )rv   rs   rO   s    r   has_other_pageszPage.has_other_pages   s      "5dmmo5r   c                 R    | j                   j                  | j                  dz         S ru   re   r7   r6   rO   s    r   next_page_numberzPage.next_page_number       ~~--dkkAo>>r   c                 R    | j                   j                  | j                  dz
        S ru   rz   rO   s    r   previous_page_numberzPage.previous_page_number   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.   )re   r;   r!   r6   rO   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).
        )r6   re   r4   r;   r!   rO   s    r   	end_indexzPage.end_index   sC     ;;$..222>>'''{{T^^4444r   N)r
   r   r   r'   ri   rk   rq   rs   rv   rx   r{   r~   r   r   r   r   r   r@   r@      s;    #
K%
'66??A5r   r@   )collections.abccollectionsrF   rX   mathr   django.utils.functionalr   django.utils.inspectr   django.utils.translationr   ra   RuntimeWarningr   	Exceptionr   r   r   r   abcSequencer@   r   r   r   <module>r      sm        3 3 6	 		) 		{ 		 	W= W=t95;??## 95r   