
    h                        S r SSKrSSKrSSKJrJr  SSKJr  SSKJ	r	  SSK
Jr  SSK
Jr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJrJr  SSKJr  SSKJr  SSKJr  SSK J!r!J"r"  S$S jr#S r$S r%S r&S r'\" S/ SQ5      r(\" S/ SQ5      r)\)" SSSSS9r* " S S5      r+ " S S\+5      r, " S  S!\+5      r- " S" S#\+5      r.g)%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                 z    [        U 5      nUS:  d  US:X  a  U(       a
  [        5       eU(       a  [        X25      $ U$ )z/
Cast a string to a strictly positive integer.
r   )int
ValueErrormin)integer_stringstrictcutoffrets       K/var/www/html/env/lib/python3.13/site-packages/rest_framework/pagination.py_positive_intr      s8     n
C
Qw3!8l3J    c                 *    X-  (       a  X-  S-   $ X-  $ )z<
Returns 'a' divided by 'b', with any remainder rounded up.
    )abs     r   _divide_with_ceilr$   &   s     	u!|6Mr   c                 
   U S:  d   eX:  d   eUS::  a  [        [        SUS-   5      5      $ SU S-
  X S-   U1nU S::  a"  UR                  S5        UR                  S5        XS-
  :  a(  UR                  US-
  5        UR                  US-
  5        [        U5       Vs/ s H  nSUs=:  a  U::  d  M  O  M  UPM     nnU S:  a  UR	                  SS5        XS-
  :  a  UR	                  [        U5      S-
  S5        U$ s  snf )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                r   N)listrangeaddsortedinsertlen)currentfinalincludedidxs       r   _get_displayed_page_numbersr4   0   s   $ a<<zE!UQY'(( 7Q;1e<H !|QQ!)UQYUQY h''se 	 	'   {4 H)40Os   D 4D 8D c                 z    / nU  H2  nUc  [         nO[        U" U5      UXA:H  SS9nUR                  U5        M4     U$ )z[
Given a list of page numbers and `None` page breaks,
return a list of `PageLink` objects.
Furlnumber	is_activeis_break)
PAGE_BREAKPageLinkappend)page_numbersr0   url_func
page_linkspage_number	page_links         r   _get_page_linksrC   c   sT    
 J#"I [)"&1	I 	)$ $ r   c                 T    S n[        U  Vs/ s H
  o!" U5      PM     sn5      $ s  snf )z
Given an order_by tuple such as `('-created', 'uuid')` reverse the
ordering and return a new tuple, eg. `('created', '-uuid')`.
c                 B    U R                  S5      (       a  U SS  $ SU -   $ )N-r    )
startswith)xs    r   invert!_reverse_ordering.<locals>.invert|   s%    S))qu6sQw6r   )tuple)ordering_tuplerI   items      r   _reverse_orderingrN   w   s*    
7 >:>4&,>:;;:s   %Cursoroffsetreversepositionr<   r6   Tc                   F    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rSrg)BasePagination   FNc                     [        S5      e)Nz(paginate_queryset() must be implemented.NotImplementedErrorselfquerysetrequestviews       r   paginate_queryset BasePagination.paginate_queryset   s    !"LMMr   c                     [        S5      e)Nz-get_paginated_response() must be implemented.rX   r[   datas     r   get_paginated_response%BasePagination.get_paginated_response   s    !"QRRr   c                     U$ Nr!   r[   schemas     r   get_paginated_response_schema,BasePagination.get_paginated_response_schema   s    r   c                     [        S5      e)Nz7to_html() must be implemented to display page controls.rX   r[   s    r   to_htmlBasePagination.to_html   s    !"[\\r   c                     US   $ )Nresultsr!   rb   s     r   get_resultsBasePagination.get_results   s    Ir   c                 f    [         c   S5       e[         b  [        R                  " S[        5        / $ )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_fields BasePagination.get_schema_fields   s/    "\$\\"MM_awx	r   c                     / $ rg   r!   ry   s     r   get_schema_operation_parameters.BasePagination.get_schema_operation_parameters   s    	r   r!   rg   )__name__
__module____qualname____firstlineno__display_page_controlsr_   rd   rj   rn   rr   rz   r}   __static_attributes__r!   r   r   rU   rU      s.    !NS]r   rU   c                       \ rS rSrSr\R                  r\r	Sr
\" S5      rSr\" S5      rSrSrSr\" S	5      rSS
 jrS rS rS rS rS rS rS rS rS rS rSrg)PageNumberPagination   z
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                    X l         U R                  U5      nU(       d  gU R                  X5      nU R                  X%5      n UR	                  U5      U l        UR                  S:  a  U R                  b  SU l        [        U R                  5      $ ! [
         a3  nU R                  R                  U[        U5      S9n[        U5      eSnAff = f)z{
Paginate a queryset if required, either returning a
page object, or `None` if pagination is not configured for this view.
N)rA   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	paginatorrA   excmsgs	            r   r_   &PageNumberPagination.paginate_queryset   s    
 &&w/	//D	**7>	 !{3DI "t}}'@)-D&DII  	 ++22'S 3 C 3-		 s   B 
C.C

Cc                     UR                   R                  U R                  5      =(       d    SnX0R                  ;   a  UR                  nU$ Nr    )query_paramsgetpage_query_paramlast_page_stringsr   )r[   r]   r   rA   s       r   r   $PageNumberPagination.get_page_number   s@    **..t/D/DEJ000#--Kr   c                     [        U R                  R                  R                  U R	                  5       U R                  5       US.5      $ Ncountnextpreviousrq   )r   r   r   r   get_next_linkget_previous_linkrb   s     r   rd   +PageNumberPagination.get_paginated_response   sB    YY((..&&(..0	
  	r   c                     SSS/SSS.SSS	S
R                  U R                  S9S.SSS	SR                  U R                  S9S.US.S.$ )Nobjectr   rq   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   2PageNumberPagination.get_paginated_response_schema   s     ), &"
 % $#V]])-)>)>  ^  @	 % $#V]])-)>)>  ^  @	 "'
 	
r   c                    U R                   (       aU  [        R                  " [        [        5         [        UR                  U R                      SU R                  S9sS S S 5        $ U R                  $ ! , (       d  f       U R                  $ = fNT)r   r   	page_size_query_param
contextlibsuppressKeyErrorr   r   r   max_page_sizer   r[   r]   s     r   r   "PageNumberPagination.get_page_size	  l    %%$$Xz:$(()C)CD-- ;: ~~ ;: ~~   ,A33
Bc                     U R                   R                  5       (       d  g U R                  R                  5       nU R                   R	                  5       n[        XR                  U5      $ rg   )r   has_nextr]   build_absolute_urinext_page_numberr   r   r[   r7   rA   s      r   r   "PageNumberPagination.get_next_link  sO    yy!!##ll--/ii002"3(=(={KKr   c                    U R                   R                  5       (       d  g U R                  R                  5       nU R                   R	                  5       nUS:X  a  [        XR                  5      $ [        XR                  U5      $ r   )r   has_previousr]   r   previous_page_numberr   r   r   r   s      r   r   &PageNumberPagination.get_previous_link  sh    yy%%''ll--/ii446!%c+@+@AA"3(=(={KKr   c                 &  ^ ^ T R                   R                  5       mUU 4S jnT R                  R                  nT R                  R                  R
                  n[        X#5      n[        XBU5      nT R                  5       T R                  5       US.$ )Nc                 j   > U S:X  a  [        TTR                  5      $ [        TTR                  U 5      $ r   )r   r   r   )rA   base_urlr[   s    r   page_number_to_urlAPageNumberPagination.get_html_context.<locals>.page_number_to_url&  s3    a)(D4I4IJJ*8T5J5JKXXr   previous_urlnext_urlr@   )
r]   r   r   r8   r   r   r4   rC   r   r   )r[   r   r0   r1   r>   r@   r   s   `     @r   get_html_context%PageNumberPagination.get_html_context#  s    <<224	Y ))""		##--27B$\<NO
 !224**,$
 	
r   c                     [         R                  " U R                  5      nU R                  5       nUR	                  U5      $ rg   r	   get_templater   r   renderr[   r   contexts      r   rn   PageNumberPagination.to_html7  3    &&t}}5'')w''r   c                    [         c   S5       e[         b  [        R                  " S[        5        [        c   S5       e[         R
                  " U R                  SS[        R                  " S[        U R                  5      S9S9/nU R                  bV  UR                  [         R
                  " U R                  SS[        R                  " S	[        U R                  5      S9S95        U$ )
Nru   rv   9coreschema must be installed to use `get_schema_fields()`FqueryPagetitledescriptionnamer   locationri   	Page size)r   rw   rx   r   r   Fieldr   Integerr
   page_query_descriptionr   r=   page_size_query_descriptionr[   r^   fieldss      r   rz   &PageNumberPagination.get_schema_fields<  s    "\$\\"MM_awx%b'bb%MM** !))  )$*E*E F	

 %%1MM33"$%--)$-d.N.N$O	
 r   c                     U R                   SS[        U R                  5      SS0S./nU R                  b6  UR	                  U R                  SS[        U R
                  5      SS0S.5        U$ NFr   r   r   r   r   inr   ri   )r   r
   r   r   r=   r   r[   r^   
parameterss      r   r}   4PageNumberPagination.get_schema_operation_parametersZ  s     --!()D)DEI


 %%1 66 %!#,T-M-M#N	
 r   )r   r   r]   rg   )r   r   r   r   __doc__r   	PAGE_SIZEr   DjangoPaginatorr   r   _r   r   r   r   r   r   r   r_   r   rd   rj   r   r   r   r   rn   rz   r}   r   r!   r   r   r   r      s     &&I, OP !"#$K"L M!7H_-6
6LL
((
<r   r   c                       \ rS rSrSr\R                  rSr\	" S5      r
Sr\	" S5      rSrSrSS	 jrS
 rS rS rS rS rS rS rS rS rS rS rSrg)LimitOffsetPaginationiu  z
A limit/offset based style. For example:

http://api.example.org/accounts/?limit=100
http://api.example.org/accounts/?offset=400&limit=100
limitr   rQ   z3The initial index from which to return the results.Nr   c                    X l         U R                  U5      U l        U R                  c  g U R                  U5      U l        U R                  U5      U l        U R                  U R                  :  a  U R                  b  SU l        U R                  S:X  d  U R                  U R                  :  a  / $ [        XR                  U R                  U R                  -    5      $ )NTr   )
r]   	get_limitr  	get_countr   
get_offsetrQ   r   r   r*   rZ   s       r   r_   'LimitOffsetPagination.paginate_queryset  s    ^^G,
::^^H-
oog.::

"t}}'@)-D&::?dkkDJJ6IH[[tzz)ABCCr   c                 n    [        U R                  U R                  5       U R                  5       US.5      $ r   )r   r   r   r   rb   s     r   rd   ,LimitOffsetPagination.get_paginated_response  s6    ZZ&&(..0	
  	r   c                     SSS/SSS.SSS	S
R                  U R                  U R                  S9S.SSS	SR                  U R                  U R                  S9S.US.S.$ )Nr   r   rq   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   3LimitOffsetPagination.get_paginated_response_schema  s     ), &"
 % $#fmm%)%<%<$J`J`  n  b	 % $#fmm%)%<%<$J`J`  n  b	 "'
 	
r   c                    U R                   (       aU  [        R                  " [        [        5         [        UR                  U R                      SU R                  S9sS S S 5        $ U R                  $ ! , (       d  f       U R                  $ = fr   )	r  r   r   r   r   r   r   	max_limitdefault_limitr   s     r   r  LimitOffsetPagination.get_limit  sn    !!$$Xz:$(()?)?@>> ;: !!! ;: !!!r   c                 t     [        UR                  U R                     5      $ ! [        [        4 a     gf = fNr   )r   r   r  r   r   r   s     r   r   LimitOffsetPagination.get_offset  sA    	 $$T%<%<=  *% 		s   !$ 77c                 $   U R                   U R                  -   U R                  :  a  g U R                  R	                  5       n[        XR                  U R                  5      nU R                   U R                  -   n[        XR                  U5      $ rg   )rQ   r  r   r]   r   r   r  r  r[   r7   rQ   s      r   r   #LimitOffsetPagination.get_next_link  sk    ;;#tzz1ll--/!#'='=tzzJtzz)"3(?(?HHr   c                 Z   U R                   S::  a  g U R                  R                  5       n[        XR                  U R
                  5      nU R                   U R
                  -
  S::  a  [        XR                  5      $ U R                   U R
                  -
  n[        XR                  U5      $ r  )rQ   r]   r   r   r  r  r   r  r  s      r   r   'LimitOffsetPagination.get_previous_link  s    ;;!ll--/!#'='=tzzJ;;#q(%c+B+BCCtzz)"3(?(?HHr   c                   ^ ^^ T R                   R                  5       mT R                  (       a~  [        T R                  T R                  5      S-   m[        T R
                  T R                  -
  T R                  5      [        T R                  T R                  5      -   n[        US5      nOSmSnTU:  a  UmUUU 4S jn[        TU5      n[        UTU5      nT R                  5       T R                  5       US.$ )Nr    c                    > U S:X  a  [        TTR                  5      $ TR                  U T-
  TR                  -  -   n[	        TTR                  U5      $ r   )r   r  rQ   r  r   )rA   rQ   r   r0   r[   s     r   r   BLimitOffsetPagination.get_html_context.<locals>.page_number_to_url  sO    a)(D4K4KLLw)>$**(LM*8T5L5LfUUr   r   )r]   r   r  r$   rQ   r   maxr4   rC   r   r   )r[   r1   r   r>   r@   r   r0   s   `    @@r   r   &LimitOffsetPagination.get_html_context  s    <<224::'TZZ@1DG "$**t{{":DJJG!$++tzz:; 
 qMEGEU?G	V 37EB$\7<NO
 !224**,$
 	
r   c                     [         R                  " U R                  5      nU R                  5       nUR	                  U5      $ rg   r   r   s      r   rn   LimitOffsetPagination.to_html  r   r   c                 f     UR                  5       $ ! [        [        4 a    [        U5      s $ f = f)zJ
Determine an object count, supporting either querysets or regular lists.
)r   AttributeError	TypeErrorr/   )r[   r\   s     r   r  LimitOffsetPagination.get_count  s2    	!>>##	* 	!x= 	!s    00c                    [         c   S5       e[         b  [        R                  " S[        5        [        c   S5       e[         R
                  " U R                  SS[        R                  " S[        U R                  5      S9S9[         R
                  " U R                  SS[        R                  " S	[        U R                  5      S9S9/$ )
Nru   rv   r   Fr   Limitr   r   Offset)r   rw   rx   r   r   r   r  r   r
   limit_query_descriptionr  offset_query_descriptionry   s     r   rz   'LimitOffsetPagination.get_schema_fields  s    "\$\\"MM_awx%b'bb%MM++ !))! )$*F*F G	 MM,, !))" )$*G*G H	
 	
r   c                     U R                   SS[        U R                  5      SS0S.U R                  SS[        U R                  5      SS0S./nU$ r   )r  r
   r)  r  r*  r   s      r   r}   5LimitOffsetPagination.get_schema_operation_parameters/  sm     ..!()E)EFI //!()F)FGI

( r   )r   r   r  rQ   r]   rg   )r   r   r   r   r   r   r   r  r  r   r)  r  r*  r  r   r_   rd   rj   r  r  r   r   r   rn   r  rz   r}   r   r!   r   r   r   r   u  s     !**M GH! !VWI7HD
6"II&
P(
!
4r   r   c                       \ rS rSrSrSr\" S5      r\R                  r
\" S5      rSrSrSr\" S	5      rSrS
rSS jrS rS rS rS rS rS rS rS rS rS rS rS rS rSr g)CursorPaginationiG  z
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                    X l         U R                  U5      U l        U R                  (       d  g UR                  5       U l        U R                  X!U5      U l        U R                  U5      U l        U R                  c  Su  pEnOU R                  u  pEnU(       a#  UR                  " [        U R                  5      6 nOUR                  " U R                  6 nUbl  U R                  S   nUR                  S5      nUR                  S5      n	U R                  R                  U:w  a  U	S-   U0n
OU	S-   U0n
UR                  " S
0 U
D6n[        XX@R                  -   S-    5      n[        US U R                   5      U l        [#        U5      [#        U R                   5      :  a"  SnU R%                  US   U R                  5      nOS	nS nU(       am  [        ['        U R                   5      5      U l        US L=(       d    US:  U l        Xl        U R(                  (       a  X`l        U R*                  (       a  Xl        OIXl        US L=(       d    US:  U l        U R(                  (       a  Xl        U R*                  (       a  X`l        U R*                  (       d  U R(                  (       a  U R0                  b  SU l        U R                   $ )N)r   FNr   rF   __lt__gtr    TFr!   )r]   r   r   r   r   get_orderingorderingdecode_cursorr0  order_byrN   rG   lstriprR   filterr*   r   r/   _get_position_from_instancereversedr   r   next_positionprevious_positionr   r   )r[   r\   r]   r^   rQ   rR   current_positionorderis_reversed
order_attrkwargsrq   has_following_positionfollowing_positions                 r   r_   "CursorPagination.paginate_querysetc  sY   ++G4~~224))'TB((1;;2B/V.26++/V. ((*;DMM*JKH(($--8H 'MM!$E**3/Kc*J {{""k1$v-/?@$v-/?@00H
 xv'>'BCD$..12	 w<#dii.(%)"!%!A!A'"+t}}!]%*"!% Xdii01DI .T9JvzDM 6}}%5"  );& 3M!1!= N6A:D}}%7"  )9& DMM4M)-D&yyr   c                    U R                   (       aU  [        R                  " [        [        5         [        UR                  U R                      SU R                  S9sS S S 5        $ U R                  $ ! , (       d  f       U R                  $ = fr   r   r   s     r   r   CursorPagination.get_page_size  r   r   c                 j   U R                   (       d  g U R                  (       ap  U R                  (       a_  U R                  R                  (       aD  U R                  R                  S:w  a*  U R                  U R                  S   U R                  5      nOU R                  nSnSn[        U R                  5       H.  nU R                  X@R                  5      nXQ:w  a  Sn  OUnUS-  nM0     U R                  (       a  U(       dy  U R                  (       d  U R                  nS nOYU R                  R                  (       a  SnU R                  nO/U R                  R                  U R                  -   nU R                  nU R                  (       d  U R                  n[        USWS9nU R                  U5      $ )Nr   r4  FTr    rP   )r   r   r0  rR   rQ   r;  r6  r=  r<  r   r   r>  rO   encode_cursorr[   comparerQ   has_item_with_unique_positionrM   rS   r0  s          r   r   CursorPagination.get_next_link  sO   }}99)<)<ASASWXAX 66tyy}dmmTG((G(-%TYY'D77mmLH" 15-
 GaKF ( 99:$$ $$ 11 ++dnn<11yy))HvuxH!!&))r   c                 X   U R                   (       d  g U R                  (       ap  U R                  (       a_  U R                  R                  (       dD  U R                  R                  S:w  a*  U R                  U R                  S   U R                  5      nOU R                  nSnSnU R                   H.  nU R                  X@R                  5      nXQ:w  a  Sn  OUnUS-  nM0     U R                  (       a  U(       dy  U R                  (       d  U R                  nS nOYU R                  R                  (       a0  U R                  R                  U R                  -   nU R                  nOSnU R                  nU R                  (       d  U R                  n[        USWS9nU R                  U5      $ )Nr   FTr    rP   )r   r   r0  rR   rQ   r;  r6  r>  r   r   r=  rO   rJ  rK  s          r   r   "CursorPagination.get_previous_link  sJ     99T[[-@-@T[[EWEW[\E\ 66tyy|T]]SG,,G(-%IID77mmLH" 15-
 GaKF  99:== $$ ++dnn<-- --yy--HvthG!!&))r   c                    U R                   n[        US/ 5       Vs/ s H  n[        US5      (       d  M  UPM     nnU(       a'  US   nU" 5       nUR                  XU5      nU(       a  UnUc   S5       eSU;  d   S5       e[	        U[
        [        [        45      (       d'   SR                  [        U5      R                  S95       e[	        U[
        5      (       a  U4$ [        U5      $ s  snf )	zF
Return a tuple of strings, that may be used in an `order_by` method.
filter_backendsr5  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   )r6  getattrhasattrr5  
isinstancer   r*   rK   r   r   r   )	r[   r]   r\   r^   r6  
filter_clsordering_filtersfilter_instanceordering_from_filters	            r   r5  CursorPagination.get_ordering$  s    == *17H")M
)M:z>2 )M 	 

  *!,J(lO#2#?#?SW#X #/# 	
'	
# 8# 	
L	
# (S$$677 	
HOO(^,, P 	
7 h$$;XA
s
   C,C,c                 
   UR                   R                  U R                  5      nUc  g [        UR	                  S5      5      R                  S5      n[        R                  " USS9nUR                  SS/5      S   n[        XPR                  S9nUR                  S	S/5      S   n[        [        U5      5      nUR                  S
S/5      S   n[!        XVUS9$ ! [        [        4 a    [        U R                  5      ef = f)z<
Given a request with a cursor, return a `Cursor` instance.
NasciiT)keep_blank_valueso0r   )r   rprP   )r   r   cursor_query_paramr   encodedecoder   parse_qsr   offset_cutoffboolr   r$  r   r   invalid_cursor_messagerO   )r[   r]   encodedquerystringtokensrQ   rR   rS   s           r   r7  CursorPagination.decode_cursorN  s    
 &&**4+B+BC?	8#GNN7$;<CCGLK^^K4HFZZcU+A.F"62D2DEFjjse,Q/G3w<(Gzz#v.q1H VxHH :& 	846677	8s   B'C &Dc                 x   0 nUR                   S:w  a  [        UR                   5      US'   UR                  (       a  SUS'   UR                  b  UR                  US'   [        R
                  " USS9n[        UR                  S5      5      R                  S5      n[        U R                  U R                  U5      $ )	z=
Given a Cursor instance, return an url with encoded cursor.
r   r_  1ra  rb  T)doseqr]  )rQ   r   rR   rS   r   	urlencoder   rd  re  r   r   rc  )r[   r0  rl  rk  rj  s        r   rJ  CursorPagination.encode_cursorg  s     ==Afmm,F3K>>F3K??& //F3KoofD9K..w78??H"4==$2I2I7SSr   c                     US   R                  S5      n[        U[        5      (       a  X   nO[        X5      n[	        U5      $ )Nr   rF   )r9  rV  dictrT  r   )r[   instancer6  
field_nameattrs        r   r;  ,CursorPagination._get_position_from_instancew  s?    a['',
h%%'D80D4yr   c                 X    [        U R                  5       U R                  5       US.5      $ )Nr   r   rq   )r   r   r   rb   s     r   rd   'CursorPagination.get_paginated_response  s/    &&(..0
  	r   c           
          SS/SSSSR                  U R                  S9S.SSSS	R                  U R                  S9S.US
.S.$ )Nr   rq   r   Tr   zAhttp://api.example.org/accounts/?{cursor_query_param}=cD00ODY%3D")rc  r   zBhttp://api.example.org/accounts/?{cursor_query_param}=cj0xJnA9NDg3rz  r   )r   rc  rh   s     r   rj   .CursorPagination.get_paginated_response_schema  sz    " % $#bii+/+B+B  j  D	 % $#cjj+/+B+B  k  D	 "
 	
r   c                 D    U R                  5       U R                  5       S.$ )N)r   r   )r   r   rm   s    r   r   !CursorPagination.get_html_context  s$     224**,
 	
r   c                     [         R                  " U R                  5      nU R                  5       nUR	                  U5      $ rg   r   r   s      r   rn   CursorPagination.to_html  r   r   c                    [         c   S5       e[         b  [        R                  " S[        5        [        c   S5       e[         R
                  " U R                  SS[        R                  " S[        U R                  5      S9S9/nU R                  bV  UR                  [         R
                  " U R                  SS[        R                  " S	[        U R                  5      S9S95        U$ )
Nru   rv   r   Fr   rO   r   r   r   )r   rw   rx   r   r   r   rc  Stringr
   cursor_query_descriptionr   r=   r   r   r   s      r   rz   "CursorPagination.get_schema_fields  s    "\$\\"MM_awx%b'bb%MM,, !((" )$*G*G H	

 %%1MM33"$%--)$-d.N.N$O	
 r   c                     U R                   SS[        U R                  5      SS0S./nU R                  b6  UR	                  U R                  SS[        U R
                  5      SS0S.5        U$ )NFr   r   r   r   r   )rc  r
   r  r   r=   r   r   s      r   r}   0CursorPagination.get_schema_operation_parameters  s     //!()F)FGH


 %%1 66 %!#,T-M-M#N	
 r   )r   r0  r   r   r   r=  r6  r   r   r>  r]   rg   )!r   r   r   r   r   rc  r   r  r   r   r   ri  r6  r   r   r   r   rg  r_   r   r   r   r5  r7  rJ  r;  rd   rj   r   rn   rz   r}   r   r!   r   r   r/  r/  G  s    
 " !?@&&I/0HAH !"#$K"L M MKZ3*j3*j(TI2T 
.
(
<r   r/  )FN)/r   r   rw   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$   r4   rC   rN   rO   r<   r;   rU   r   r   r/  r!   r   r   <module>r     s   
   ' "  - > " + 6 1 5 . , 0 M	0f(< 
H?	@j"LM$tutL
 8N> NbON OdW~ Wr   