
    Evg                        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dS )    N)ceil)cached_property)method_has_no_args)gettext_lazyc                       e Zd ZdS )UnorderedObjectListWarningN__name__
__module____qualname__     R/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/core/paginator.pyr   r              Dr   r   c                       e Zd ZdS )InvalidPageNr	   r   r   r   r   r      r   r   r   c                       e Zd ZdS )PageNotAnIntegerNr	   r   r   r   r   r      r   r   r   c                       e Zd ZdS )	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dS )	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_resultsr   TNc                     || _         |                                  t          |          | _        t          |          | _        || _        || j        n	| j        |z  | _        d S 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__%   sl     '**,,,H7||&<# % '',~= 	r   c              #   L   K   | j         D ]}|                     |          V  d S r   )
page_rangepage)r&   page_numbers     r   __iter__zPaginator.__iter__8   s<      ? 	) 	)K))K((((((	) 	)r   c                 p   	 t          |t                    r|                                st          t	          |          }n/# t
          t          f$ r t          | j        d                   w xY w|dk     rt          | j        d                   || j	        k    rt          | j        d                   |S )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&%(( !1B1B1D1D !  [[FF:& 	H 	H 	H"4#6~#FGGG	HA::D/
;<<<DN""D/=>>>s   ?A ,A.c                     	 |                      |          }n$# t          $ r d}Y nt          $ r
 | j        }Y nw xY w|                     |          S )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    
	$))&11FF 	 	 	FFF 	$ 	$ 	$^FFF	$yy   s    999c                     |                      |          }|dz
  | j        z  }|| j        z   }|| j        z   | j        k    r| 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   sn    %%f--1*-t}$++*C~~d.vcz:FDI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   sd     D$gt44A;; 	w033 	8J18M8M 	133J4#$$$r   c                     | j         dk    r	| j        sdS 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   sH     :??4#>?11dj4</00D4=()))r   c                 2    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          r/d                    | j        j        | j        j        j                  nd                    | j                  }t          j        d                    |          t          d           dS dS dS )	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55$*D,<,F,O   ]]4#344  M##)6-#8#8*	      r   r.   rS      )on_each_sideon_endsc             #   R  K   |                      |          }| j        ||z   dz  k    r| j        E d{V  dS |d|z   |z   dz   k    r?t          d|dz             E d{V  | j        V  t          ||z
  |dz             E d{V  nt          d|dz             E d{V  || j        |z
  |z
  dz
  k     rSt          |dz   ||z   dz             E d{V  | j        V  t          | j        |z
  dz   | j        dz             E d{V  dS t          |dz   | j        dz             E d{V  dS )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   s      %%f-->lW4999&&&&&&&FQ%/1444Q!,,,,,,,,,-Vl2FQJ??????????Q
+++++++++T^l2W<AAAVaZ,)>)BCCCCCCCCC-T^g594>A;MNNNNNNNNNNNVaZ!);<<<<<<<<<<<r   )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      sI        qxxH>??A788a788  #
 
 
 
&) ) )  ! ! !J J J% % % % % _% * * _* , , X,  (=a = = = = = = =r   r   c                   P    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S )r@   c                 0    || _         || _        || _        d S r   )r   r6   	paginator)r&   r   r6   re   s       r   r'   zPage.__init__   s    &"r   c                 2    d| j         d| j        j        dS )Nz<Page z of >r6   re   r4   rO   s    r   __repr__zPage.__repr__   s      $(KKK1I1I1I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__   sv    %#u.. 	Bu++&'   $*D11 	6#D$455D&&r   c                 ,    | j         | j        j        k     S r   rh   rO   s    r   has_nextzPage.has_next   s    {T^555r   c                     | j         dk    S Nr.   )r6   rO   s    r   has_previouszPage.has_previous   s    {Qr   c                 R    |                                  p|                                 S r   )rv   rs   rO   s    r   has_other_pageszPage.has_other_pages   s!      ""5dmmoo5r   c                 F    | j                             | j        dz             S ru   re   r7   r6   rO   s    r   next_page_numberzPage.next_page_number       ~--dkAo>>>r   c                 F    | j                             | j        dz
            S ru   rz   rO   s    r   previous_page_numberzPage.previous_page_number   r|   r   c                 Z    | j         j        dk    rdS | 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   s4     >1$$1'4;?;q@@r   c                 l    | 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   s3     ;$.222>''{T^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 K K% % %
' 
' 
'6 6 6  6 6 6? ? ?? ? ?A A A5 5 5 5 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      s}               3 3 3 3 3 3 3 3 3 3 3 3 6 6 6 6 6 6	 	 	 	 	 	 	 		 	 	 	 	) 	 	 		 	 	 	 	{ 	 	 		 	 	 	 	 	 	 	W= W= W= W= W= W= W= W=t95 95 95 95 95;?# 95 95 95 95 95r   