
    ^f\                        d Z ddlmZ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 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.
    )	b64decode	b64encode)OrderedDict
namedtuple)parse)InvalidPage)	Paginator)loader)	force_str)gettext_lazy)coreapi
coreschema)NotFound)Response)api_settings)remove_query_paramreplace_query_paramFNc                     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       K/var/www/html/env/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>R   sE       se 	r   N)listrangeaddsortedinsertlen)currentr-   includeds    ` r   _get_displayed_page_numbersr7   ,   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   _   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>.invertx   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   s   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                 (    t           
J d            g S )N6coreapi must be installed to use `get_schema_fields()`)r   r]   r`   s     r   get_schema_fieldsz BasePagination.get_schema_fields   s    ""$\"""	r   c                     g S rg   r!   rs   s     r   get_schema_operation_parametersz.BasePagination.get_schema_operation_parameters   s    	r   rg   )__name__
__module____qualname__display_page_controlsra   re   rj   rm   rp   rt   rv   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)get_page_sizedjango_paginator_classget_page_numberr}   r   invalid_page_messageformatstrr   	num_pagestemplaterz   r_   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" "
B),8B$$B)c                 f    |j                             | j        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   s9    *..t/DaHH$000#-Kr   c           	          t          t          d| j        j        j        fd|                                 fd|                                 fd|fg                    S Ncountnextpreviousro   )r   r   r}   r   r   get_next_linkget_previous_linkrc   s     r   re   z+PageNumberPagination.get_paginated_response   se    di)/0T''))*//112	%
     	r   c           	          dddddddd                     | j        	          d
dddd                     | j        	          d
|ddS )Nobject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}=2r   r   r   ro   r   
properties)r   r   rh   s     r   rj   z2PageNumberPagination.get_paginated_response_schema   s     &" 
 % $#V]])-)>  ^  @  @	  % $#V]])-)>  ^  @  @	  "' 
 
 	
r   c                     | j         r?	 t          |j        | j                  d| j                  S # t          t
          f$ r Y nw xY w| j        S NT)r   r   page_size_query_paramr   r   max_page_sizeKeyErrorr   r   r]   r_   s     r   r   z"PageNumberPagination.get_page_size  q    % 	$()CD-   
 j)    ~   &0 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_html3  7    &t}55''))w'''r   c                    t           
J d            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   9coreschema must be installed to use `get_schema_fields()`FqueryPagetitledescriptionnamerequiredlocationri   	Page size)
r   r   Fieldr   Integerr   page_query_descriptionr   r@   page_size_query_descriptionr]   r`   fieldss      r   rt   z&PageNumberPagination.get_schema_fields8  s    ""$\"""%%'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   rv   z4PageNumberPagination.get_schema_operation_parametersT  s     -!()DEEI 


 %1 6 %!#,T-M#N#N	 
 
 
 r   rg   )rw   rx   ry   __doc__r   	PAGE_SIZEr   DjangoPaginatorr   r   _r   r   r   r   r   r   r   ra   r   re   rj   r   r   r   r   rm   rt   rv   r!   r   r   r|   r|      s2         &I, QOPP !"#!$K"L"L M!7H1_--   6    
 
 
4  L L LL L L
 
 
(( ( (
  8    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   )
	get_limitr   	get_countr   
get_offsetrT   r_   r   rz   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          t          d| j        fd|                                 fd|                                 fd|fg                    S r   )r   r   r   r   r   rc   s     r   re   z,LimitOffsetPagination.get_paginated_response  s_    dj!T''))*//112	%
     	r   c           
          dddddddd                     | j        | j        	          d
dddd                     | j        | j        	          d
|ddS )Nr   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        | j                  d| j                  S # t          t
          f$ r Y nw xY w| j        S r   )r   r   r   	max_limitr   r   default_limitr   s     r   r   zLimitOffsetPagination.get_limit  sq    ! 	$()?@>   
 j)    !!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                 R   t           
J d            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   r   Fr   Limitr   r   Offset)	r   r   r   r   r   r   limit_query_descriptionr   offset_query_descriptionrs   s     r   rt   z'LimitOffsetPagination.get_schema_fields  s    ""$\"""%%'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   rv   z5LimitOffsetPagination.get_schema_operation_parameters)  sq     .!()EFFI  /!()FGGI 

( r   rg   )rw   rx   ry   r   r   r   r   r   r   r  r   r  r   r   ra   re   rj   r   r   r   r   r   rm   r   rt   rv   r!   r   r   r   r   o  s$         !*Ma GHH! q!VWWI7HD D D D  
 
 
4" " "  I I II I I&
 &
 &
P( ( (
! ! !
 
 
0    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   get_orderingorderingdecode_cursorr
  order_byrQ   rJ   lstriprU   filterr/   r}   r4   _get_position_from_instancereversedr   r   next_positionprevious_positionr   rz   )r]   r^   r_   r`   rT   rU   current_positionorderis_reversed
order_attrkwargsro   has_following_positionfollowing_positions                 r   ra   z"CursorPagination.paginate_queryset]  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        | j                  d| j                  S # t          t
          f$ r Y nw xY w| 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                    d t          |dg           D             }|rO|d         } |            }|                    |||          }|#J d                    |j                              n!| j        }|
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   NzRUsing cursor pagination, but filter class {filter_cls} returned a `None` ordering.)r*  zXUsing 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   )
getattrr  r   rw   r  
isinstancer   r/   rO   r   )r]   r_   r^   r`   ordering_filtersr*  filter_instancer  s           r   r  zCursorPagination.get_ordering   sY   
 
)07H")M)M
 
 

  	 *!,J(jllO&33GXtLLH''..4f)2 /5 / / (''' }H''+ ('' x'''P ('' (S$$677 	
 	
HOO(^^, P  	
 	
7 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_cursorM  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   r4  1r6  Nr7  T)doseqr2  )rT   r   rU   rV   r   	urlencoder   r9  r:  r   r   r8  )r]   r
  rA  r@  r?  s        r   r"  zCursorPagination.encode_cursorf  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  r.  dictr-  r   )r]   instancer  
field_nameattrs        r   r  z,CursorPagination._get_position_from_instancev  sR    a['',,
h%% 	1J'DD8Z00D4yyr   c                     t          t          d|                                 fd|                                 fd|fg                    S )Nr   r   ro   )r   r   r   r   rc   s     r   re   z'CursorPagination.get_paginated_response~  sU    T''))*//112%
     	r   c                      ddddddd|ddS )Nr   r   T)r   r   )r   r   ro   r   r!   rh   s     r   rj   z.CursorPagination.get_paginated_response_schema  sG     % $ 
 % $  "
 

 
 	
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          
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   r   Fr   rR   r   r   r   )r   r   r   r8  Stringr   cursor_query_descriptionr   r@   r   r   r   s      r   rt   z"CursorPagination.get_schema_fields  s    ""$\"""%%'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   )r8  r   rQ  r   r@   r   r   s      r   rv   z0CursorPagination.get_schema_operation_parameters  s     /!()FGGH 


 %1 6 %!#,T-M#N#N	 
 
 
 r   rg   )rw   rx   ry   r   r8  r   rQ  r   r   r   r>  r  r   r   r   r   r<  ra   r   r   r   r  r  r"  r  re   rj   r   rm   rt   rv   r!   r   r   r	  r	  A  sf        
 " q!?@@&IQ/00HAH !"#!$K"L"L M MJ J J JX  3* 3* 3*j3* 3* 3*j+ + +ZI I I2T T T     
 
 
 
 
 
( ( (
  8    r   r	  )FN),r   base64r   r   collectionsr   r   urllibr   django.core.paginatorr   r	   r   django.templater
   django.utils.encodingr   django.utils.translationr   r   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>r_     sz    ( ' ' ' ' ' ' ' / / / / / / / /       - - - - - - > > > > > > " " " " " " + + + + + + 6 6 6 6 6 6 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
       4N N N N N> N N NbO O O O ON O O OdS S S S S~ S S S S Sr   