
    >Tf
                     d    d dl mZmZ d dlmZ dZ G d de          Z G d de          Zd Zd	S )
    )	PaginatorPage)
get_config)EnhancedPageEnhancedPaginatorget_paginate_countc                   0     e Zd ZdZd fd	Zd Zd Z xZS )r   )   2   d      i  i  Nc                     	 t          |          }|dk     rt                      j        }n## t          $ r t                      j        }Y nw xY w|	|dk    rd}n|d} t	                      j        ||fd|i| d S )N   r      
   orphans)intr   PAGINATE_COUNT
ValueErrorsuper__init__)selfobject_listper_pager   kwargs	__class__s        8/var/www/html/netbox-4.1.3/netbox/utilities/paginator.pyr   zEnhancedPaginator.__init__   s    	38}}H!||%<<6 	3 	3 	3!||2HHH	3 ?x2~~GG_GhJJJ6JJJJJs   (, AAc                     t          |i |S N)r   )r   argsr   s      r   	_get_pagezEnhancedPaginator._get_page#   s    T,V,,,    c                 f    | j         | j        vrt          g | j        | j                   S | j        S r   )r   default_page_lengthssorted)r   s    r   get_page_lengthsz"EnhancedPaginator.get_page_lengths&   s9    = 999ED5Et}EFFF((r"   r   )__name__
__module____qualname__r$   r   r!   r&   __classcell__)r   s   @r   r   r      si        K K K K K K$- - -) ) ) ) ) ) )r"   r   c                       e Zd Zd ZdS )r   c                    | j         j        dk    r| j         j        S | j        }d|dz
  |dz
  ||dz   |dz   | j         j        g}t	          t          | j         j                                      |                    }d t          |d d         |dd                    D             }|D ]+}|                    |	                    |          d           ,|S )Nr   r      c                 H    g | ]}|d          |d         z
  d k    |d           S )r   r    ).0xs     r   
<listcomp>z,EnhancedPage.smart_pages.<locals>.<listcomp>:   s6    ]]]q1Q4RSTURV;Z[K[K[adK[K[K[r"   F)
	paginator	num_pages
page_rangenumberr%   setintersectionzipinsertindex)r   npages_wanted	page_list
skip_pagesis         r   smart_pageszEnhancedPage.smart_pages.   s     >#q((>,, K1q5!a%AE1q5$.:RS3t~899FF|TTUU	 ^]C	#2#	!""$F$F]]]
 	8 	8AY__Q//7777r"   N)r'   r(   r)   rB   r/   r"   r   r   r   ,   s#            r"   r   c                 \   t                      fd}d| j        v rC	 t          | j                            d                    } ||          S # t          $ r Y nw xY w| j        j        r1| j        j                            d          pj        } ||          S  |j                  S )a  
    Determine the desired length of a page, using the following in order:

        1. per_page URL query parameter
        2. Saved user preference
        3. PAGINATE_COUNT global setting.

    Return the lesser of the calculated value and MAX_PAGE_SIZE.
    c                 @    j         rt          | j                   S | S r   )MAX_PAGE_SIZEmin)	page_sizeconfigs    r   _max_allowedz(get_paginate_count.<locals>._max_allowedM   s'     	8y&"6777r"   r   zpagination.per_page)	r   GETr   getr   useris_authenticatedrH   r   )requestrI   r   rH   s      @r   r   r   A   s     \\F    
 W[  	7;??:6677H<))) 	 	 	D	 |$ &<&**+@AAZVEZ|H%%%<-...s   1A 
AAN)	django.core.paginatorr   r   netbox.configr   __all__r   r   r   r/   r"   r   <module>rR      s    1 1 1 1 1 1 1 1 $ $ $ $ $ $) ) ) ) )	 ) ) )@    4   */ / / / /r"   