
    _}dg                        d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZ ddlmZ ddlmZ ddlmZ ddl m!Z!m"Z" d$dZ#d Z$d Z%d Z&d Z' edg d          Z( edg d          Z) e)dddd          Z* G d d          Z+ G d de+          Z, G d  d!e+          Z- G d" d#e+          Z.dS )%zk
Pagination serializers determine the structure of the output that should
be used for paginated responses.
    N)	b64decode	b64encode)
namedtuple)parse)InvalidPage)	Paginator)loader)	force_str)gettext_lazy)RemovedInDRF317Warning)coreapi
coreschema)NotFound)Response)api_settings)remove_query_paramreplace_query_paramFc                     t          |           }|dk     s|dk    r|rt                      |rt          ||          S |S )z7
    Cast a string to a strictly positive integer.
    r   )int
ValueErrormin)integer_stringstrictcutoffrets       X/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/rest_framework/pagination.py_positive_intr      sM     n

C
Qww3!888ll  3J    c                 &    | |z  r| |z  dz   S | |z  S )zD
    Returns 'a' divided by 'b', with any remainder rounded up.
        )abs     r   _divide_with_ceilr$   &   s'     	1u Q!|6Mr   c                 ,   | dk    sJ | k    sJ dk    r t          t          ddz                       S d| dz
  | | dz   h}| dk    r*|                    d           |                    d           | dz
  k    r0|                    dz
             |                    dz
             fdt          |          D             }| dk    r|                    dd           | dz
  k     r&|                    t          |          dz
  d           |S )a  
    This utility function determines a list of page numbers to display.
    This gives us a nice contextually relevant set of page numbers.

    For example:
    current=14, final=16 -> [1, None, 13, 14, 15, 16]

    This implementation gives one page to each side of the cursor,
    or two pages to the side when the cursor is at the edge, then
    ensures that any breaks between non-continuous page numbers never
    remove only a single page.

    For an alternative implementation which gives two pages to each side of
    the cursor, eg. as in GitHub issue list pagination, see:

    https://gist.github.com/tomchristie/321140cebb1c4a558b15
    r                c                 4    g | ]}d |cxk     rk    n n|S )r   r!   ).0idxfinals     r   
<listcomp>z/_get_displayed_page_numbers.<locals>.<listcomp>V   sE       se 	r   N)listrangeaddsortedinsertlen)currentr-   includeds    ` r   _get_displayed_page_numbersr7   0   sH   $ a<<<<GzzE!UQY''((( 7Q;1e<H !||QQ%!)UQYUQY   h''  H {{4   H)4000Or   c                     g }| D ]A}|t           }n t           ||          |||k    d          }|                    |           B|S )zg
    Given a list of page numbers and `None` page breaks,
    return a list of `PageLink` objects.
    NFurlnumber	is_activeis_break)
PAGE_BREAKPageLinkappend)page_numbersr5   url_func
page_linkspage_number	page_links         r   _get_page_linksrF   c   ss    
 J# 
% 
%"II H[))"&'1	  I 	)$$$$r   c                 @    d t          fd| D                       S )z
    Given an order_by tuple such as `('-created', 'uuid')` reverse the
    ordering and return a new tuple, eg. `('created', '-uuid')`.
    c                 J    |                      d          r
| dd          nd| z   S )N-r    )
startswith)xs    r   invertz!_reverse_ordering.<locals>.invert|   s)    S))6quusQw6r   c                 &    g | ]} |          S r!   r!   )r+   itemrL   s     r   r.   z%_reverse_ordering.<locals>.<listcomp>   s!    :::4&&,,:::r   )tuple)ordering_tuplerL   s    @r   _reverse_orderingrQ   w   s7    
7 7 7 ::::>:::;;;r   Cursoroffsetreversepositionr?   r9   Tc                   >    e Zd ZdZd
dZd Zd Zd Zd Zd Z	d	 Z
dS )BasePaginationFNc                      t          d          )Nz(paginate_queryset() must be implemented.NotImplementedErrorselfquerysetrequestviews       r   paginate_querysetz BasePagination.paginate_queryset   s    !"LMMMr   c                      t          d          )Nz-get_paginated_response() must be implemented.rZ   r]   datas     r   get_paginated_responsez%BasePagination.get_paginated_response   s    !"QRRRr   c                     |S Nr!   r]   schemas     r   get_paginated_response_schemaz,BasePagination.get_paginated_response_schema   s    r   c                      t          d          )Nz7to_html() must be implemented to display page controls.rZ   r]   s    r   to_htmlzBasePagination.to_html   s    !"[\\\r   c                     |d         S )Nresultsr!   rc   s     r   get_resultszBasePagination.get_results   s    Ir   c                 j    t           
J d            t           t          j        dt                     g S )N6coreapi must be installed to use `get_schema_fields()`CCoreAPI compatibility is deprecated and will be removed in DRF 3.17)r   warningswarnr   r]   r`   s     r   get_schema_fieldsz BasePagination.get_schema_fields   s6    ""$\"""M_awxxx	r   c                     g S rg   r!   rv   s     r   get_schema_operation_parametersz.BasePagination.get_schema_operation_parameters   s    	r   rg   )__name__
__module____qualname__display_page_controlsra   re   rj   rm   rp   rw   ry   r!   r   r   rX   rX      s        !N N N NS S S  ] ] ]        r   rX   c                       e Zd ZdZej        ZeZdZ	 e
d          ZdZ e
d          ZdZdZdZ e
d          Zdd	Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )PageNumberPaginationz
    A simple page number based style that supports page numbers as
    query parameters. For example:

    http://api.example.org/accounts/?page=4
    http://api.example.org/accounts/?page=4&page_size=100
    pagez.A page number within the paginated result set.N%Number of results to return per page.)last&rest_framework/pagination/numbers.htmlzInvalid page.c                    || _         |                     |          }|sdS |                     ||          }|                     ||          }	 |                    |          | _        nJ# t
          $ r=}| j                            |t          |                    }t          |          d}~ww xY w|j
        dk    r| j        d| _        t          | j                  S )z
        Paginate a queryset if required, either returning a
        page object, or `None` if pagination is not configured for this view.
        N)rD   messager    T)r_   get_page_sizedjango_paginator_classget_page_numberr   r   invalid_page_messageformatstrr   	num_pagestemplater}   r/   )	r]   r^   r_   r`   	page_size	paginatorrD   excmsgs	            r   ra   z&PageNumberPagination.paginate_queryset   s    
 &&w//	 	4//)DD	**7I>>	 !{33DII 	  	  	 +22'S 3  C 3--		  ""t}'@)-D&DIs   A) )
B038B++B0c                 h    |j                             | j                  pd}|| j        v r|j        }|S Nr    )query_paramsgetpage_query_paramlast_page_stringsr   )r]   r_   r   rD   s       r   r   z$PageNumberPagination.get_page_number   s<    *..t/DEEJ$000#-Kr   c                     t          | j        j        j        |                                 |                                 |d          S Ncountnextpreviousro   )r   r   r   r   get_next_linkget_previous_linkrc   s     r   re   z+PageNumberPagination.get_paginated_response   sJ    Y(.&&((..00	
 
   	r   c           
          dddgdddddd	d
                     | j                  dddd	d                     | j                  d|ddS )Nobjectr   ro   integer{   typeexamplestringTuriz5http://api.example.org/accounts/?{page_query_param}=4)r   r   nullabler   r   z5http://api.example.org/accounts/?{page_query_param}=2r   r   required
properties)r   r   rh   s     r   rj   z2PageNumberPagination.get_paginated_response_schema   s     ), &" 
 % $#V]])-)>  ^  @  @	  % $#V]])-)>  ^  @  @	  "' 
 
 	
r   c                     | j         r^t          j        t          t                    5  t          |j        | j                  d| j                  cd d d            S # 1 swxY w Y   | j        S NT)r   r   	page_size_query_param
contextlibsuppressKeyErrorr   r   r   max_page_sizer   r]   r_   s     r   r   z"PageNumberPagination.get_page_size	      % 	$Xz::  $()CD-                  ~   'AA"Ac                     | j                                         sd S | j                                        }| j                                         }t          || j        |          S rg   )r   has_nextr_   build_absolute_urinext_page_numberr   r   r]   r:   rD   s      r   r   z"PageNumberPagination.get_next_link  sX    y!!## 	4l--//i0022"3(={KKKr   c                     | j                                         sd S | j                                        }| j                                         }|dk    rt          || j                  S t          || j        |          S r   )r   has_previousr_   r   previous_page_numberr   r   r   r   s      r   r   z&PageNumberPagination.get_previous_link  sv    y%%'' 	4l--//i4466!%c4+@AAA"3(={KKKr   c                      j                                          fd} j        j        } j        j        j        }t          ||          }t          |||          }                                  	                                |dS )Nc                 f    | dk    rt          j                  S t          j        |           S r   )r   r   r   )rD   base_urlr]   s    r   page_number_to_urlzAPageNumberPagination.get_html_context.<locals>.page_number_to_url&  s6    a)(D4IJJJ*8T5JKXXXr   previous_urlnext_urlrC   )
r_   r   r   r;   r   r   r7   rF   r   r   )r]   r   r5   r-   rA   rC   r   s   `     @r   get_html_contextz%PageNumberPagination.get_html_context#  s    <2244	Y 	Y 	Y 	Y 	Y 	Y )"	#-27EBB$\7<NOO
 !2244**,,$
 
 	
r   c                     t          j        | j                  }|                                 }|                    |          S rg   r	   get_templater   r   renderr]   r   contexts      r   rm   zPageNumberPagination.to_html7  7    &t}55''))w'''r   c                    t           
J d            t           t          j        dt                     t          
J d            t          j        | j        ddt	          j        dt          | j	                                      g}| j
        V|                    t          j        | j
        ddt	          j        d	t          | j                                                 |S )
Nrr   rs   9coreschema must be installed to use `get_schema_fields()`FqueryPagetitledescriptionnamer   locationri   	Page size)r   rt   ru   r   r   Fieldr   Integerr
   page_query_descriptionr   r@   page_size_query_descriptionr]   r`   fieldss      r   rw   z&PageNumberPagination.get_schema_fields<  s   ""$\"""M_awxxx%%'b%%%M* !)  )$*E F F  	  

 %1MM3"$%-)$-d.N$O$O  	  
 
 
 r   c                     | j         ddt          | j                  ddidg}| j        4|                    | j        ddt          | j                  ddid           |S NFr   r   r   r   r   inr   ri   )r   r
   r   r   r@   r   r]   r`   
parameterss      r   ry   z4PageNumberPagination.get_schema_operation_parametersZ  s     -!()DEEI 


 %1 6 %!#,T-M#N#N	 
 
 
 r   rg   )rz   r{   r|   __doc__r   	PAGE_SIZEr   DjangoPaginatorr   r   _r   r   r   r   r   r   r   ra   r   re   rj   r   r   r   r   rm   rw   ry   r!   r   r   r   r      s2         &I, QOPP !"#!$K"L"L M!7H1_--   6    
 
 
6  L L LL L L
 
 
(( ( (
  <    r   r   c                       e Zd ZdZej        ZdZ ed          Z	dZ
 ed          ZdZdZd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 )LimitOffsetPaginationz
    A limit/offset based style. For example:

    http://api.example.org/accounts/?limit=100
    http://api.example.org/accounts/?offset=400&limit=100
    limitr   rT   z3The initial index from which to return the results.Nr   c                    || _         |                     |          | _        | j        d S |                     |          | _        |                     |          | _        | j        | j        k    r| j        d| _        | j        dk    s| j        | j        k    rg S t          || j        | j        | j        z                      S )NTr   )
r_   	get_limitr   	get_countr   
get_offsetrT   r   r}   r/   r\   s       r   ra   z'LimitOffsetPagination.paginate_queryset  s    ^^G,,
:4^^H--
oog..:
""t}'@)-D&:??dkDJ66IHT[tz)AABCCCr   c                 |    t          | j        |                                 |                                 |d          S r   )r   r   r   r   rc   s     r   re   z,LimitOffsetPagination.get_paginated_response  sD    Z&&((..00	
 
   	r   c                     dddgdddddd	d
                     | j        | j                  dddd	d                     | j        | j                  d|ddS )Nr   r   ro   r   r   r   r   Tr   zEhttp://api.example.org/accounts/?{offset_param}=400&{limit_param}=100)offset_paramlimit_paramr   zEhttp://api.example.org/accounts/?{offset_param}=200&{limit_param}=100r   r   )r   offset_query_paramlimit_query_paramrh   s     r   rj   z3LimitOffsetPagination.get_paginated_response_schema  s     ), &" 
 % $#fmm%)%<$J`  n  b  b	  % $#fmm%)%<$J`  n  b  b	  "' 
 
 	
r   c                     | j         r^t          j        t          t                    5  t          |j        | j                  d| j                  cd d d            S # 1 swxY w Y   | j        S r   )	r   r   r   r   r   r   r   	max_limitdefault_limitr   s     r   r   zLimitOffsetPagination.get_limit  s    ! 	$Xz::  $()?@>                  !!r   c                 r    	 t          |j        | j                           S # t          t          f$ r Y dS w xY wNr   )r   r   r   r   r   r   s     r   r   z LimitOffsetPagination.get_offset  sP    	 $T%<=   *% 	 	 	11	s   ! 66c                     | j         | j        z   | j        k    rd S | j                                        }t          || j        | j                  }| j         | j        z   }t          || j        |          S rg   )rT   r   r   r_   r   r   r   r   r]   r:   rT   s      r   r   z#LimitOffsetPagination.get_next_link  si    ;#tz114l--//!#t'=tzJJtz)"3(?HHHr   c                    | j         dk    rd S | j                                        }t          || j        | j                  }| j         | j        z
  dk    rt          || j                  S | j         | j        z
  }t          || j        |          S r   )rT   r_   r   r   r   r   r   r   r   s      r   r   z'LimitOffsetPagination.get_previous_link  s    ;!4l--//!#t'=tzJJ;#q((%c4+BCCCtz)"3(?HHHr   c                      j                                          j        rkt           j         j                  dz   t           j         j        z
   j                  t           j         j                  z   }t          |d          }ndd}|k    r| fd}t          |          }t          ||          } 	                                 
                                |dS )Nr    c                     | dk    rt          j                  S j        | z
  j        z  z   }t	          j        |          S r   )r   r   rT   r   r   )rD   rT   r   r5   r]   s     r   r   zBLimitOffsetPagination.get_html_context.<locals>.page_number_to_url  sN    a)(D4KLLLw)>$*(LM*8T5LfUUUr   r   )r_   r   r   r$   rT   r   maxr7   rF   r   r   )r]   r-   r   rA   rC   r   r5   s   `    @@r   r   z&LimitOffsetPagination.get_html_context  s   <2244: 	'TZ@@1DG "$*t{":DJGG!$+tz::; 
 qMMEEGEU??G	V 	V 	V 	V 	V 	V 	V 37EBB$\7<NOO
 !2244**,,$
 
 	
r   c                     t          j        | j                  }|                                 }|                    |          S rg   r   r   s      r   rm   zLimitOffsetPagination.to_html  r   r   c                 x    	 |                                 S # t          t          f$ r t          |          cY S w xY w)zZ
        Determine an object count, supporting either querysets or regular lists.
        )r   AttributeError	TypeErrorr4   )r]   r^   s     r   r   zLimitOffsetPagination.get_count  sI    	!>>###	* 	! 	! 	!x==   	!s     99c                    t           
J d            t           t          j        dt                     t          
J d            t          j        | j        ddt	          j        dt          | j	                                      t          j        | j
        ddt	          j        d	t          | j                                      gS )
Nrr   rs   r   Fr   Limitr   r   Offset)r   rt   ru   r   r   r   r   r   r
   limit_query_descriptionr   offset_query_descriptionrv   s     r   rw   z'LimitOffsetPagination.get_schema_fields  s    ""$\"""M_awxxx%%'b%%%M+ !)! )$*F G G  	   M, !)" )$*G H H  	  
 	
r   c                     | j         ddt          | j                  ddid| j        ddt          | j                  ddidg}|S r   )r   r
   r
  r   r  r   s      r   ry   z5LimitOffsetPagination.get_schema_operation_parameters/  sq     .!()EFFI  /!()FGGI 

( r   rg   )rz   r{   r|   r   r   r   r   r   r   r
  r   r  r   r   ra   re   rj   r   r   r   r   r   rm   r   rw   ry   r!   r   r   r   r   u  s$         !*Ma GHH! q!VWWI7HD D D D  
 
 
6" " "  I I II I I&
 &
 &
P( ( (
! ! !
 
 
4    r   r   c                       e Zd ZdZdZ ed          Zej        Z	 ed          Z
dZdZdZ ed          ZdZd	Zd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 Zd ZdS )CursorPaginationz
    The cursor pagination implementation is necessarily complex.
    For an overview of the position/offset style we use, see this post:
    https://cra.mr/2011/03/08/building-cursors-for-the-disqus-api
    cursorzThe pagination cursor value.zInvalid cursorz-createdz0rest_framework/pagination/previous_and_next.htmlNr   i  c                    || _         |                     |          | _        | j        sd S |                                | _        |                     |||          | _        |                     |          | _        | j        d\  }}}n| j        \  }}}|r |j	        t          | j                   }n |j	        | j         }|c| j        d         }|                    d          }|                    d          }	| j        j        |k    r|	dz   |i}
n|	dz   |i}
 |j        d
i |
}t          |||| j        z   dz                      }t          |d | j                           | _        t#          |          t#          | j                  k    r$d}|                     |d         | j                  }nd	}d }|rYt          t'          | j                            | _        |d up|dk    | _        || _        | j        r|| _        | j        r|| _        n2|| _        |d up|dk    | _        | j        r|| _        | j        r|| _        | j        s| j        r| j        d| _        | j        S )N)r   FNr   rI   __lt__gtr    TFr!   )r_   r   r   r   r   get_orderingorderingdecode_cursorr  order_byrQ   rJ   lstriprU   filterr/   r   r4   _get_position_from_instancereversedr   r   next_positionprevious_positionr   r}   )r]   r^   r_   r`   rT   rU   current_positionorderis_reversed
order_attrkwargsro   has_following_positionfollowing_positions                 r   ra   z"CursorPagination.paginate_querysetc  s   ++G44~ 	42244))'8TBB((11;2B/VW..26+/VW.  	9(x(*;DM*J*JKHH(x($-8H 'M!$E**3//Kc**J {"k11$v-/?@$v-/?@&x0000H
 xv'>'B BCDD$.122	 w<<#di..((%)"!%!A!A'"+t}!]!]%*"!% 	: Xdi0011DI .T9JvzDM 6D} 6%5"  <);& 3DM!1!= N6A:D} 8%7"  :)9&  	. 	.DM4M)-D&yr   c                     | j         r^t          j        t          t                    5  t          |j        | j                  d| j                  cd d d            S # 1 swxY w Y   | j        S r   r   r   s     r   r   zCursorPagination.get_page_size  r   r   c                 R   | j         sd S | j        rJ| j        rC| j        j        r7| j        j        dk    r'|                     | j        d         | j                  }n| j        }d}d}t          | j                  D ].}|                     || j                  }||k    rd} n|}|dz  }/| j        rD|sB| j	        s
| j
        }d }n1| j        j        r
d}| j        }n| j        j        | j
        z   }| j        }| j        s| j        }t          |d|          }|                     |          S )Nr   r  FTr    rS   )r   r   r  rU   rT   r  r  r  r  r   r   r  rR   encode_cursorr]   comparerT   has_item_with_unique_positionrN   rV   r  s          r   r   zCursorPagination.get_next_link  sn   } 	49 	) 	))< 	)ASWXAXAX 66ty}dmTTGG(G(-%TY'' 	 	D77dmLLH7"" 15-
 GaKFF9 	2: 	2$ 2 $ 	2 1 +dn<1y 	*)HvuxHHH!!&)))r   c                 8   | j         sd S | j        rJ| j        rC| j        j        s7| j        j        dk    r'|                     | j        d         | j                  }n| j        }d}d}| j        D ].}|                     || j                  }||k    rd} n|}|dz  }/| j        rD|sB| j        s
| j	        }d }n1| j        j        r| j        j        | j	        z   }| j
        }n	d}| j
        }| j        s| j        }t          |d|          }|                     |          S )Nr   FTr    rS   )r   r   r  rU   rT   r  r  r  r   r   r  rR   r'  r(  s          r   r   z"CursorPagination.get_previous_link  sf     	49 	- 	-T[-@ 	-T[EW[\E\E\ 66ty|T]SSGG,G(-%I 	 	D77dmLLH7"" 15-
 GaKFF9 	.: 	.= . $ 	. +dn<- -y 	.-HvthGGG!!&)))r   c                    | j         }d t          |dg           D             }|r-|d         } |            }|                    |||          }|r|}|
J d            d|vs
J d            t          |t          t
          t          f          s0J d                    t          |          j	        	                      t          |t                    r|fS t          |          S )
zV
        Return a tuple of strings, that may be used in an `order_by` method.
        c                 2    g | ]}t          |d           |S )r  )hasattr)r+   
filter_clss     r   r.   z1CursorPagination.get_ordering.<locals>.<listcomp>,  s8     
 
 
%z>22

 
 
r   filter_backendsr   NzXUsing cursor pagination, but no ordering attribute was declared on the pagination class.__zCursor pagination does not support double underscore lookups for orderings. Orderings should be an unchanging, unique or nearly-unique field on the model, such as "-created" or "pk".z:Invalid ordering. Expected string or tuple, but got {type})r   )
r  getattrr  
isinstancer   r/   rO   r   r   rz   )	r]   r_   r^   r`   r  ordering_filtersr/  filter_instanceordering_from_filters	            r   r  zCursorPagination.get_ordering$  s4    =
 
)07H")M)M
 
 

  	0 *!,J(jllO#2#?#?SW#X#X # 0/##' $## 8###L $## (S$$677 	
 	
HOO(^^, P  	
 	
 	
 h$$ 	;Xr   c                 j   |j                             | j                  }|dS 	 t          |                    d                                        d          }t          j        |d          }|                    ddg          d         }t          || j	                  }|                    d	dg          d         }t          t          |                    }|                    d
dg          d         }n)# t          t          f$ r t          | j                  w xY wt!          |||          S )zL
        Given a request with a cursor, return a `Cursor` instance.
        NasciiT)keep_blank_valueso0r   )r   rprS   )r   r   cursor_query_paramr   encodedecoder   parse_qsr   offset_cutoffboolr   r  r   r   invalid_cursor_messagerR   )r]   r_   encodedquerystringtokensrT   rU   rV   s           r   r  zCursorPagination.decode_cursorN  s'   
 &**4+BCC?4	8#GNN7$;$;<<CCGLLK^K4HHHFZZcU++A.F"6$2DEEEFjjse,,Q/G3w<<((Gzz#v..q1HH:& 	8 	8 	846777	8 VWxHHHHs   CC: :&D c                 P   i }|j         dk    rt          |j                   |d<   |j        rd|d<   |j        
|j        |d<   t	          j        |d          }t          |                    d	                                        d	          }t          | j
        | j        |          S )
zM
        Given a Cursor instance, return an url with encoded cursor.
        r   r:  1r<  Nr=  T)doseqr8  )rT   r   rU   rV   r   	urlencoder   r?  r@  r   r   r>  )r]   r  rG  rF  rE  s        r   r'  zCursorPagination.encode_cursorg  s     =Afm,,F3K> 	F3K?& /F3KofD999K..w7788??HH"4=$2I7SSSr   c                     |d                              d          }t          |t                    r	||         }nt          ||          }t	          |          S )Nr   rI   )r  r3  dictr2  r   )r]   instancer  
field_nameattrs        r   r  z,CursorPagination._get_position_from_instancew  sR    a['',,
h%% 	1J'DD8Z00D4yyr   c                 p    t          |                                 |                                 |d          S )Nr   r   ro   )r   r   r   rc   s     r   re   z'CursorPagination.get_paginated_response  s?    &&((..00
 
   	r   c           	          ddgdddd                     | j                  ddddd	                     | j                  d|d
dS )Nr   ro   r   Tr   zAhttp://api.example.org/accounts/?{cursor_query_param}=cD00ODY%3D")r>  r   zBhttp://api.example.org/accounts/?{cursor_query_param}=cj0xJnA9NDg3rR  r   )r   r>  rh   s     r   rj   z.CursorPagination.get_paginated_response_schema  s    " % $#bii+/+B  j  D  D	  % $#cjj+/+B  k  D  D	  " 
 
 	
r   c                 T    |                                  |                                 dS )N)r   r   )r   r   rl   s    r   r   z!CursorPagination.get_html_context  s/     2244**,,
 
 	
r   c                     t          j        | j                  }|                                 }|                    |          S rg   r   r   s      r   rm   zCursorPagination.to_html  r   r   c                    t           
J d            t           t          j        dt                     t          
J d            t          j        | j        ddt	          j        dt          | j	                                      g}| j
        V|                    t          j        | j
        ddt	          j        d	t          | j                                                 |S )
Nrr   rs   r   Fr   rR   r   r   r   )r   rt   ru   r   r   r   r>  Stringr
   cursor_query_descriptionr   r@   r   r   r   s      r   rw   z"CursorPagination.get_schema_fields  s   ""$\"""M_awxxx%%'b%%%M, !(" )$*G H H  	  

 %1MM3"$%-)$-d.N$O$O  	  
 
 
 r   c                     | j         ddt          | j                  ddidg}| j        4|                    | j        ddt          | j                  ddid           |S )NFr   r   r   r   r   )r>  r
   rX  r   r@   r   r   s      r   ry   z0CursorPagination.get_schema_operation_parameters  s     /!()FGGH 


 %1 6 %!#,T-M#N#N	 
 
 
 r   rg   )rz   r{   r|   r   r>  r   rX  r   r   r   rD  r  r   r   r   r   rB  ra   r   r   r   r  r  r'  r  re   rj   r   rm   rw   ry   r!   r   r   r  r  G  sf        
 " q!?@@&IQ/00HAH !"#!$K"L"L M MK K K KZ  3* 3* 3*j3* 3* 3*j( ( (TI I I2T T T     
 
 
.
 
 
( ( (
  <    r   r  )FN)/r   r   rt   base64r   r   collectionsr   urllibr   django.core.paginatorr   r   r   django.templater	   django.utils.encodingr
   django.utils.translationr   r   rest_frameworkr   rest_framework.compatr   r   rest_framework.exceptionsr   rest_framework.responser   rest_framework.settingsr   rest_framework.utils.urlsr   r   r   r$   r7   rF   rQ   rR   r?   r>   rX   r   r   r  r!   r   r   <module>rg     s   
      ' ' ' ' ' ' ' ' " " " " " "       - - - - - - > > > > > > " " " " " " + + + + + + 6 6 6 6 6 6 1 1 1 1 1 1 5 5 5 5 5 5 5 5 . . . . . . , , , , , , 0 0 0 0 0 0 M M M M M M M M	 	 	 	  0 0 0f  (< < < 
H???	@	@:j"L"L"LMMX$tutLLL
       8N N N N N> N N NbO O O O ON O O OdW W W W W~ W W W W Wr   