
 Xz                 @   s   d  d l  Z  d  d l m Z d  d l m Z d  d l m Z Gd d   d e  Z Gd d   d e  Z	 Gd	 d
   d
 e  Z
 Gd d   d e  Z e Z Gd d   d e  j  Z d S)    N)ceil)six)cached_propertyc               @   s   e  Z d  Z d S)InvalidPageN)__name__
__module____qualname__ r	   r	   C/home/ubuntu/projects/ifolica/build/django/django/core/paginator.pyr      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 d d 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 S)	Paginatorr   Tc             C   s4   | |  _  t |  |  _ t |  |  _ | |  _ d  S)N)object_listintper_pageorphansallow_empty_first_page)selfr   r   r   r   r	   r	   r
   __init__   s    	zPaginator.__init__c             C   s   y t  |  } Wn$ t t f k
 r6 t d   Yn X| d k  rR t d   n  | |  j k r | d k ry |  j ry q t d   n  | S)z:
        Validates 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)r   	TypeError
ValueErrorr   r   	num_pagesr   )r   numberr	   r	   r
   validate_number   s    zPaginator.validate_numberc             C   so   |  j  |  } | d |  j } | |  j } | |  j |  j k rO |  j } n  |  j |  j | |  | |   S)zJ
        Returns a Page object for the given 1-based page number.
        r   )r   r   r   count	_get_pager   )r   r   Zbottomtopr	   r	   r
   page.   s    zPaginator.pagec             O   s   t  | |   S)z
        Returns 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   9   s    zPaginator._get_pagec             C   s=   y |  j  j   SWn% t t f k
 r8 t |  j   SYn Xd S)zH
        Returns the total number of objects, across all pages.
        N)r   r   AttributeErrorr   len)r   r	   r	   r
   r   B   s    zPaginator.countc             C   sS   |  j  d k r |  j r d St d |  j  |  j  } t t | t |  j    S)z4
        Returns the total number of pages.
        r   r   )r   r   maxr   r   r   floatr   )r   hitsr	   r	   r
   r   O   s    zPaginator.num_pagesc             C   s   t  j j d |  j d  S)zl
        Returns a 1-based range of pages for iterating through within
        a template for loop.
        r   )r   movesranger   )r   r	   r	   r
   
page_rangeY   s    zPaginator.page_rangeN)r   r   r   r   r   r   r   r   r   r   propertyr)   r	   r	   r	   r
   r      s   	
r   c               @   s   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   r+   r	   r	   r
   r   g   s    		zPage.__init__c             C   s   d |  j  |  j j f S)Nz<Page %s of %s>)r   r+   r   )r   r	   r	   r
   __repr__l   s    zPage.__repr__c             C   s   t  |  j  S)N)r#   r   )r   r	   r	   r
   __len__o   s    zPage.__len__c             C   sT   t  | t f t j  s" t  n  t  |  j t  sI t |  j  |  _ n  |  j | S)N)
isinstanceslicer   integer_typesr   r   list)r   indexr	   r	   r
   __getitem__r   s
    	zPage.__getitem__c             C   s   |  j  |  j j k  S)N)r   r+   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)r5   r4   )r   r	   r	   r
   has_other_pages   s    zPage.has_other_pagesc             C   s   |  j  j |  j d  S)Nr   )r+   r   r   )r   r	   r	   r
   next_page_number   s    zPage.next_page_numberc             C   s   |  j  j |  j d  S)Nr   )r+   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
        Returns the 1-based index of the first object on this page,
        relative to total objects in the paginator.
        r   r   )r+   r   r   r   )r   r	   r	   r
   start_index   s    zPage.start_indexc             C   s0   |  j  |  j j k r |  j j S|  j  |  j j S)z|
        Returns the 1-based index of the last object on this page,
        relative to total objects found (hits).
        )r   r+   r   r   r   )r   r	   r	   r
   	end_index   s    
zPage.end_indexN)r   r   r   r   r,   r-   r3   r4   r5   r6   r7   r8   r9   r:   r	   r	   r	   r
   r   e   s   	
r   )collectionsmathr   Zdjango.utilsr   Zdjango.utils.functionalr   	Exceptionr   r   r   objectr   ZQuerySetPaginatorSequencer   r	   r	   r	   r
   <module>   s   N