3
ga                 @   s   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 deZG dd	 d	eZG d
d deZG dd deZG dd dZG dd dejjZdS )    N)ceil)cached_property)method_has_no_args)gettext_lazyc               @   s   e Zd ZdS )UnorderedObjectListWarningN)__name__
__module____qualname__ r
   r
   S/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/core/paginator.pyr      s   r   c               @   s   e Zd ZdS )InvalidPageN)r   r   r	   r
   r
   r
   r   r      s   r   c               @   s   e Zd ZdS )PageNotAnIntegerN)r   r   r	   r
   r
   r
   r   r      s   r   c               @   s   e Zd ZdS )	EmptyPageN)r   r   r	   r
   r
   r
   r   r      s   r   c               @   s   e Zd ZedZdddZdd Zdd	 Zd
d Zdd Z	dd Z
edd Zedd Zedd Zdd Zd dddddZdS )!	Paginatoru   …r   Tc             C   s,   || _ | j  t|| _t|| _|| _d S )N)object_list_check_object_list_is_orderedintper_pageorphansallow_empty_first_page)selfr   r   r   r   r
   r
   r   __init__    s
    

zPaginator.__init__c             c   s    x| j D ]}| j|V  qW d S )N)
page_rangepage)r   Zpage_numberr
   r
   r   __iter__(   s    zPaginator.__iter__c             C   s   y$t |tr|j  rtt|}W n$ ttfk
rH   ttdY nX |dk r^ttd|| j	kr|dkrx| j
rxnttd|S )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_pagesr   )r   numberr
   r
   r   validate_number,   s    
zPaginator.validate_numberc             C   sJ   y| j |}W n0 tk
r&   d}Y n tk
r>   | j}Y nX | j|S )zj
        Return a valid page, even if the page argument isn't a number or isn't
        in range.
        r   )r$   r   r   r"   r   )r   r#   r
   r
   r   get_page=   s    zPaginator.get_pagec             C   sP   | j |}|d | j }|| j }|| j | jkr8| j}| j| j|| || S )z7Return a Page object for the given 1-based page number.r   )r$   r   r   count	_get_pager   )r   r#   Zbottomtopr
   r
   r   r   J   s    

zPaginator.pagec             O   s
   t ||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kwargsr
   r
   r   r'   S   s    zPaginator._get_pagec             C   s:   t | jdd}t|r0tj| r0t|r0| S t| jS )z5Return the total number of objects, across all pages.r&   N)getattrr   callableinspect	isbuiltinr   len)r   cr
   r
   r   r&   \   s    zPaginator.countc             C   s6   | j dkr| j rdS td| j | j }t|| j S )z!Return the total number of pages.r   r   )r&   r   maxr   r   r   )r   hitsr
   r
   r   r"   d   s    zPaginator.num_pagesc             C   s   t d| jd S )zk
        Return a 1-based range of pages for iterating through within
        a template for loop.
        r   )ranger"   )r   r
   r
   r   r   l   s    zPaginator.page_rangec             C   sd   t | jdd}|dk	r`| r`t| jdr>dj| jj| jjjn
dj| j}tjdj|t	dd 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)
r,   r   hasattrformatr6   	__class__r   warningswarnr   )r   r5   Zobj_list_reprr
   r
   r   r   t   s    "z'Paginator._check_object_list_is_orderedr   r7      )on_each_sideon_endsc            c   s  | j |}| j|| d kr,| jE dH  dS |d| | d krvtd|d E dH  | jV  t|| |d E dH  ntd|d E dH  || j| | d k rt|d || d E dH  | jV  t| j| d | jd E dH  nt|d | jd E dH  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   )r$   r"   r   r4   ELLIPSIS)r   r#   r?   r@   r
   r
   r   get_elided_page_range   s    
"zPaginator.get_elided_page_rangeN)r   T)r   )r   r   r	   r!   rA   r   r   r$   r%   r   r'   r   r&   r"   propertyr   r   rB   r
   r
   r
   r   r      s    
		r   c               @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )r)   c             C   s   || _ || _|| _d S )N)r   r#   	paginator)r   r   r#   rD   r
   r
   r   r      s    zPage.__init__c             C   s   d| j | jjf S )Nz<Page %s of %s>)r#   rD   r"   )r   r
   r
   r   __repr__   s    zPage.__repr__c             C   s
   t | jS )N)r0   r   )r   r
   r
   r   __len__   s    zPage.__len__c             C   sB   t |ttfs tdt|j t | jts8t| j| _| j| S )Nz0Page indices must be integers or slices, not %s.)r   r   slicer    typer   r   list)r   indexr
   r
   r   __getitem__   s    zPage.__getitem__c             C   s   | j | jjk S )N)r#   rD   r"   )r   r
   r
   r   has_next   s    zPage.has_nextc             C   s
   | j dkS )Nr   )r#   )r   r
   r
   r   has_previous   s    zPage.has_previousc             C   s   | j  p| j S )N)rM   rL   )r   r
   r
   r   has_other_pages   s    zPage.has_other_pagesc             C   s   | j j| jd S )Nr   )rD   r$   r#   )r   r
   r
   r   next_page_number   s    zPage.next_page_numberc             C   s   | j j| jd S )Nr   )rD   r$   r#   )r   r
   r
   r   previous_page_number   s    zPage.previous_page_numberc             C   s&   | j jdkrdS | j j| jd  d S )z
        Return the 1-based index of the first object on this page,
        relative to total objects in the paginator.
        r   r   )rD   r&   r   r#   )r   r
   r
   r   start_index   s    zPage.start_indexc             C   s$   | j | jjkr| jjS | j | jj S )z{
        Return the 1-based index of the last object on this page,
        relative to total objects found (hits).
        )r#   rD   r"   r&   r   )r   r
   r
   r   	end_index   s    zPage.end_indexN)r   r   r	   r   rE   rF   rK   rL   rM   rN   rO   rP   rQ   rR   r
   r
   r
   r   r)      s   
r)   )collections.abccollectionsr.   r<   mathr   Zdjango.utils.functionalr   Zdjango.utils.inspectr   Zdjango.utils.translationr   r!   RuntimeWarningr   	Exceptionr   r   r   r   abcSequencer)   r
   r
   r
   r   <module>   s    