
    Nwg                        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.y)%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                 d    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       P/var/www/horilla/myenv/lib/python3.12/site-packages/rest_framework/pagination.py_positive_intr      s:     n
C
Qw3!8l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"|j                  d       |j                  d       | |dz
  k\  r(|j                  |dz
         |j                  |dz
         t        |      D cg c]  }d|cxk  r|k  rn n| }}| dkD  r|j	                  dd       | |dz
  k  r|j	                  t        |      dz
  d       |S c c}w )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<<GzE!UQY'(( 7Q;1e<H !|QQ%!)UQYUQY h'se 	H  {4 H)40Os   C5c                 |    g }| D ]4  }|t         }nt         ||      |||k(  d      }|j                  |       6 |S )zg
    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   s[    
 J# 
%"I [)"&'1	I 	)$
% r   c                 P    d }t        | D cg c]
  } ||       c}      S c c}w )z
    Given an order_by tuple such as `('-created', 'uuid')` reverse the
    ordering and return a new tuple, eg. `('created', '-uuid')`.
    c                 8    | j                  d      r| dd  S d| z   S )N-r    )
startswith)xs    r   invertz!_reverse_ordering.<locals>.invert|   s"    S)qu6sQw6r   )tuple)ordering_tuplerI   items      r   _reverse_orderingrM   w   s&    
7 >:4&,:;;:s   #Cursoroffsetreversepositionr<   r6   Tc                   <    e Zd ZdZd
dZd Zd Zd Zd Zd Z	d	 Z
y)BasePaginationFNc                     t        d      )Nz(paginate_queryset() must be implemented.NotImplementedErrorselfquerysetrequestviews       r   paginate_querysetz BasePagination.paginate_queryset   s    !"LMMr   c                     t        d      )Nz-get_paginated_response() must be implemented.rV   rY   datas     r   get_paginated_responsez%BasePagination.get_paginated_response   s    !"QRRr   c                     |S Nr!   rY   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.rV   rY   s    r   to_htmlzBasePagination.to_html   s    !"[\\r   c                     |d   S )Nresultsr!   r_   s     r   get_resultszBasePagination.get_results   s    Ir   c                 `    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   rY   r\   s     r   get_schema_fieldsz BasePagination.get_schema_fields   s/    "\$\\"MM_awx	r   c                     g S rc   r!   rr   s     r   get_schema_operation_parametersz.BasePagination.get_schema_operation_parameters   s    	r   rc   )__name__
__module____qualname__display_page_controlsr]   ra   rf   ri   rl   rs   ru   r!   r   r   rT   rT      s.    !NS]r   rT   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y)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                    || _         | j                  |      }|sy| j                  ||      }| j                  ||      }	 |j	                  |      | _        |j                  dkD  r| j                  d| _        t        | j                        S # t
        $ r6}| j                  j                  |t        |            }t        |      d}~ww xY w)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templatery   r*   )	rY   rZ   r[   r\   	page_size	paginatorrA   excmsgs	            r   r]   z&PageNumberPagination.paginate_queryset   s    
 &&w/	//)D	**7I>	 !{3DI "t}}'@)-D&DII  	 ++22'S 3 C 3-		 s   B 	C1CCc                     |j                   j                  | j                        xs d}|| j                  v r|j                  }|S Nr    )query_paramsgetpage_query_paramlast_page_stringsr   )rY   r[   r   rA   s       r   r   z$PageNumberPagination.get_page_number   sB    **..t/D/DEJ$000#--Kr   c                     t        | j                  j                  j                  | j	                         | j                         |d      S Ncountnextpreviousrk   )r   r|   r   r   get_next_linkget_previous_linkr_   s     r   ra   z+PageNumberPagination.get_paginated_response   sB    YY((..&&(..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 )Nobjectr   rk   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   rd   s     r   rf   z2PageNumberPagination.get_paginated_response_schema   s     ), &"
 % $#V]])-)>)>  ^  @	 % $#V]])-)>)>  ^  @	 "'
 	
r   c                    | j                   rWt        j                  t        t              5  t        |j                  | j                      d| j                        cd d d        S | j                  S # 1 sw Y   | j                  S xY wNT)r   r   	page_size_query_param
contextlibsuppressKeyErrorr   r   r   max_page_sizer   rY   r[   s     r   r   z"PageNumberPagination.get_page_size	  p    %%$$Xz: $(()C)CD--  ~~ ~~   /A00Bc                     | j                   j                         sy | j                  j                         }| j                   j	                         }t        || j                  |      S rc   )r|   has_nextr[   build_absolute_urinext_page_numberr   r   rY   r7   rA   s      r   r   z"PageNumberPagination.get_next_link  sN    yy!!#ll--/ii002"3(=(={KKr   c                    | j                   j                         sy | j                  j                         }| 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  si    yy%%'ll--/ii446!%c4+@+@AA"3(=(={KKr   c                 (     j                   j                          fd} j                  j                  } j                  j                  j
                  }t        ||      }t        |||      } j                          j                         |dS )Nc                 h    | dk(  rt        j                        S t        j                  |       S r   )r   r   r   )rA   base_urlrY   s    r   page_number_to_urlzAPageNumberPagination.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   )rY   r   r0   r1   r>   r@   r   s   `     @r   get_html_contextz%PageNumberPagination.get_html_context#  s    <<224	Y ))""		##--27EB$\7<NO
 !224**,$
 	
r   c                     t        j                  | j                        }| j                         }|j	                  |      S rc   r	   get_templater   r   renderrY   r   contexts      r   ri   zPageNumberPagination.to_html7  3    &&t}}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                  Z|j                  t        j
                  | j                  ddt	        j                  d	t        | j                                           |S )
Nrn   ro   9coreschema must be installed to use `get_schema_fields()`FqueryPagetitledescriptionnamer   locationre   	Page size)r   rp   rq   r   r   Fieldr   Integerr
   page_query_descriptionr   r=   page_size_query_descriptionrY   r\   fieldss      r   rs   z&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                     | j                   ddt        | j                        ddidg}| j                  6|j	                  | j                  ddt        | j
                        ddid       |S NFr   r   r   r   r   inr   re   )r   r
   r   r   r=   r   rY   r\   
parameterss      r   ru   z4PageNumberPagination.get_schema_operation_parametersZ  s     --!()D)DEI


 %%1 66 %!#,T-M-M#N	
 r   rc   )rv   rw   rx   __doc__r   	PAGE_SIZEr   DjangoPaginatorr   r   _r   r   r   r   r   r   r   r]   r   ra   rf   r   r   r   r   ri   rs   ru   r!   r   r   r{   r{      s     &&I, OP !"#$K"L M!7H_-6
6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y)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}   rP   z3The initial index from which to return the results.Nr   c                    || _         | j                  |      | _        | j                  y | j                  |      | _        | j                  |      | _        | j                  | j                  kD  r| j                  d| _        | j                  dk(  s| j                  | j                  kD  rg S t        || j                  | j                  | j                  z          S )NTr   )
r[   	get_limitr   	get_countr   
get_offsetrP   r   ry   r*   rX   s       r   r]   z'LimitOffsetPagination.paginate_queryset  s    ^^G,
::^^H-
oog.::

"t}}'@)-D&::?dkkDJJ6IHT[[tzz)ABCCr   c                 n    t        | j                  | j                         | j                         |d      S r   )r   r   r   r   r_   s     r   ra   z,LimitOffsetPagination.get_paginated_response  s6    ZZ&&(..0	
  	r   c                     dddgdddddd	d
j                  | j                  | j                        dddd	dj                  | j                  | j                        d|ddS )Nr   r   rk   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_paramrd   s     r   rf   z3LimitOffsetPagination.get_paginated_response_schema  s     ), &"
 % $#fmm%)%<%<$J`J`  n  b	 % $#fmm%)%<%<$J`J`  n  b	 "'
 	
r   c                    | j                   rWt        j                  t        t              5  t        |j                  | j                      d| j                        cd d d        S | j                  S # 1 sw Y   | j                  S xY wr   )	r   r   r   r   r   r   r   	max_limitdefault_limitr   s     r   r   zLimitOffsetPagination.get_limit  sr    !!$$Xz: $(()?)?@>>  !!! !!!r   c                 r    	 t        |j                  | j                           S # t        t        f$ r Y yw xY wNr   )r   r   r   r   r   r   s     r   r   z LimitOffsetPagination.get_offset  sA    	 $$T%<%<=  *% 		s   !$ 66c                 &   | j                   | j                  z   | j                  k\  ry | j                  j	                         }t        || j                  | j                        }| j                   | j                  z   }t        || j                  |      S rc   )rP   r   r   r[   r   r   r   r   rY   r7   rP   s      r   r   z#LimitOffsetPagination.get_next_link  so    ;;#tzz1ll--/!#t'='=tzzJtzz)"3(?(?HHr   c                 \   | j                   dk  ry | j                  j                         }t        || j                  | j
                        }| j                   | j
                  z
  dk  rt        || j                        S | j                   | j
                  z
  }t        || j                  |      S r   )rP   r[   r   r   r   r   r   r   r   s      r   r   z'LimitOffsetPagination.get_previous_link  s    ;;!ll--/!#t'='=tzzJ;;#q(%c4+B+BCCtzz)"3(?(?HHr   c                      j                   j                          j                  r~t         j                   j                        dz   t         j
                   j                  z
   j                        t         j                   j                        z   }t        |d      }ndd}|kD  r| fd}t        |      }t        ||      } j                          j                         |dS )Nr    c                     | dk(  rt        j                        S j                  | z
  j                  z  z   }t	        j                  |      S r   )r   r   rP   r   r   )rA   rP   r   r0   rY   s     r   r   zBLimitOffsetPagination.get_html_context.<locals>.page_number_to_url  sO    a)(D4K4KLLw)>$**(LM*8T5L5LfUUr   r   )r[   r   r   r$   rP   r   maxr4   rC   r   r   )rY   r1   r   r>   r@   r   r0   s   `    @@r   r   z&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                     t        j                  | j                        }| j                         }|j	                  |      S rc   r   r   s      r   ri   zLimitOffsetPagination.to_html  r   r   c                 d    	 |j                         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	TypeErrorr/   )rY   rZ   s     r   r   zLimitOffsetPagination.get_count  s2    	!>>##	* 	!x= 	!s    //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 )
Nrn   ro   r   Fr   Limitr   r   Offset)r   rp   rq   r   r   r   r   r   r
   limit_query_descriptionr   offset_query_descriptionrr   s     r   rs   z'LimitOffsetPagination.get_schema_fields  s    "\$\\"MM_awx%b'bb%MM++ !))! )$*F*F G	 MM,, !))" )$*G*G 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   ru   z5LimitOffsetPagination.get_schema_operation_parameters/  sm     ..!()E)EFI //!()F)FGI

( r   rc   )rv   rw   rx   r   r   r   r   r   r   r  r   r  r   r   r]   ra   rf   r   r   r   r   r   ri   r   rs   ru   r!   r   r   r   r   u  s     !**M GH! !VWI7HD
6"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y)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                  |      | _        | j                  sy |j                         | _        | j                  |||      | _        | j                  |      | _        | j                  d\  }}}n| j                  \  }}}|r# |j                  t        | j                         }n |j                  | j                   }|k| j                  d   }|j                  d      }|j                  d      }	| j                  j                  |k7  r|	dz   |i}
n|	dz   |i}
 |j                  d
i |
}t        |||| j                  z   dz          }t        |d | j                         | _        t#        |      t#        | j                         kD  r"d}| j%                  |d   | j                        }nd	}d }|rat        t'        | j                               | _        |d uxs |dkD  | _        || _        | j(                  r|| _        | j*                  rE|| _        n=|| _        |d uxs |dkD  | _        | j(                  r|| _        | j*                  r|| _        | j*                  s| j(                  r| j0                  d| _        | j                   S )N)r   FNr   rF   __lt__gtr    TFr!   )r[   r   r   r   r   get_orderingorderingdecode_cursorr  order_byrM   rG   lstriprQ   filterr*   r|   r/   _get_position_from_instancereversedr   r   next_positionprevious_positionr   ry   )rY   rZ   r[   r\   rP   rQ   current_positionorderis_reversed
order_attrkwargsrk   has_following_positionfollowing_positions                 r   r]   z"CursorPagination.paginate_querysetc  sv   ++G4~~224))'8TB((1;;2B/VW.26++/VW. (x((*;DMM*JKH(x(($--8H 'MM!$E**3/Kc*J {{""k1$v-/?@$v-/?@&x00H
 xv'>'BCD$..12	 w<#dii.(%)"!%!A!A'"+t}}!]%*"!% Xdii01DI .T9JvzDM 6D}}%5"  );& 3DM!1!= N6A:D}}%7"  )9& DMM4M)-D&yyr   c                    | j                   rWt        j                  t        t              5  t        |j                  | j                      d| j                        cd d d        S | j                  S # 1 sw Y   | j                  S xY wr   r   r   s     r   r   zCursorPagination.get_page_size  r   r   c                    | j                   sy | j                  re| j                  rY| j                  j                  rC| j                  j                  dk7  r*| j                  | j                  d   | j                        }n| j                  }d}d}t        | j                        D ].  }| j                  || j                        }||k7  rd} n	|}|dz  }0 | j                  rq|so| j                  s| j                  }d }nT| j                  j                  rd}| j                  }n/| j                  j                  | j                  z   }| j                  }| j                  s| j                  }t        |d      }| j                  |      S )Nr   r  FTr    rO   )r   r|   r  rQ   rP   r  r  r  r  r   r   r  rN   encode_cursorrY   comparerP   has_item_with_unique_positionrL   rR   r  s          r   r   zCursorPagination.get_next_link  sX   }}99)<)<ASASWXAX 66tyy}dmmTG((G(-%TYY' 	D77dmmLH7" 15-
 GaKF	 99:$$ $$ 11 ++dnn<11yy))HvuxH!!&))r   c                     | j                   sy | j                  re| j                  rY| j                  j                  sC| j                  j                  dk7  r*| j                  | j                  d   | j                        }n| j                  }d}d}| j                  D ].  }| j                  || j                        }||k7  rd} n	|}|dz  }0 | j                  rq|so| j                  s| j                  }d }nT| j                  j                  r0| j                  j                  | j                  z   }| j                  }nd}| j                  }| j                  s| j                  }t        |d      }| j                  |      S )Nr   FTr    rO   )r   r|   r  rQ   rP   r  r  r  r   r   r  rN   r#  r$  s          r   r   z"CursorPagination.get_previous_link  sS     99T[[-@-@T[[EWEW[\E\ 66tyy|T]]SG,,G(-%II 	D77dmmLH7" 15-
 GaKF	 99:== $$ ++dnn<-- --yy--HvthG!!&))r   c                    | j                   }t        |dg       D cg c]  }t        |d      r| }}|r#|d   } |       }|j                  |||      }|r|}|J d       d|vsJ d       t	        |t
        t        t        f      s*J dj                  t        |      j                               t	        |t
              r|fS t        |      S c c}w )	zV
        Return a tuple of strings, that may be used in an `order_by` method.
        filter_backendsr  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   )r  getattrhasattrr  
isinstancer   r*   rJ   r   r   rv   )	rY   r[   rZ   r\   r  
filter_clsordering_filtersfilter_instanceordering_from_filters	            r   r  zCursorPagination.get_ordering$  s    == *17H")M
%z>2 
 

  *!,J(lO#2#?#?SW#X #/# 	
'	
# 8# 	
L	
# (S$$67 	
HOO(^,, P 	
7 h$;XA
s   Cc                    |j                   j                  | j                        }|y	 t        |j	                  d            j                  d      }t        j                  |d      }|j                  ddg      d   }t        || j                        }|j                  d	dg      d   }t        t        |            }|j                  d
dg      d   }t!        |||      S # t        t        f$ r t        | j                        w xY w)zL
        Given a request with a cursor, return a `Cursor` instance.
        NasciiT)keep_blank_valueso0r   )r   rprO   )r   r   cursor_query_paramr   encodedecoder   parse_qsr   offset_cutoffboolr   r  r   r   invalid_cursor_messagerN   )rY   r[   encodedquerystringtokensrP   rQ   rR   s           r   r  zCursorPagination.decode_cursorN  s    
 &&**4+B+BC?	8#GNN7$;<CCGLK^^K4HFZZcU+A.F"6$2D2DEFjjse,Q/G3w<(Gzz#v.q1H VWxHH :& 	846677	8s   B-C% %%D
c                 n   i }|j                   dk7  rt        |j                         |d<   |j                  rd|d<   |j                  |j                  |d<   t	        j
                  |d      }t        |j                  d            j                  d      }t        | j                  | j                  |      S )	zM
        Given a Cursor instance, return an url with encoded cursor.
        r   r5  1r7  r8  T)doseqr3  )rP   r   rQ   rR   r   	urlencoder   r:  r;  r   r   r9  )rY   r  rB  rA  r@  s        r   r#  zCursorPagination.encode_cursorg  s     ==Afmm,F3K>>F3K??& //F3KoofD9K..w78??H"4==$2I2I7SSr   c                     |d   j                  d      }t        |t              r||   }t	        |      S t        ||      }t	        |      S )Nr   rF   )r  r-  dictr+  r   )rY   instancer  
field_nameattrs        r   r  z,CursorPagination._get_position_from_instancew  sN    a['',
h%J'D 4y 8Z0D4yr   c                 X    t        | j                         | j                         |d      S )Nr   r   rk   )r   r   r   r_   s     r   ra   z'CursorPagination.get_paginated_response  s/    &&(..0
  	r   c           	          ddgddddj                  | j                        ddddd	j                  | j                        d|d
dS )Nr   rk   r   Tr   zAhttp://api.example.org/accounts/?{cursor_query_param}=cD00ODY%3D")r9  r   zBhttp://api.example.org/accounts/?{cursor_query_param}=cj0xJnA9NDg3rM  r   )r   r9  rd   s     r   rf   z.CursorPagination.get_paginated_response_schema  sz    " % $#bii+/+B+B  j  D	 % $#cjj+/+B+B  k  D	 "
 	
r   c                 D    | j                         | j                         dS )N)r   r   )r   r   rh   s    r   r   z!CursorPagination.get_html_context  s$     224**,
 	
r   c                     t        j                  | j                        }| j                         }|j	                  |      S rc   r   r   s      r   ri   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                  Z|j                  t        j
                  | j                  ddt	        j                  d	t        | j                                           |S )
Nrn   ro   r   Fr   rN   r   r   r   )r   rp   rq   r   r   r   r9  Stringr
   cursor_query_descriptionr   r=   r   r   r   s      r   rs   z"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                     | j                   ddt        | j                        ddidg}| j                  6|j	                  | j                  ddt        | j
                        ddid       |S )NFr   r   r   r   r   )r9  r
   rS  r   r=   r   r   s      r   ru   z0CursorPagination.get_schema_operation_parameters  s     //!()F)FGH


 %%1 66 %!#,T-M-M#N	
 r   rc   )rv   rw   rx   r   r9  r   rS  r   r   r   r?  r  r   r   r   r   r=  r]   r   r   r   r  r  r#  r  ra   rf   r   ri   rs   ru   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   rp   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   rM   rN   r<   r;   rT   r{   r   r
  r!   r   r   <module>rb     s   
   ' "  - > " + 6 1 5 . , 0 M	0f(< 
H?	@j"LM$tutL
 8N> NbON OdW~ Wr   