a
    ΝGd                     @   sv   d dl mZ d dlZd dlmZmZmZ ddlmZ ddl	m
Z
 ddlmZmZ G d	d
 d
eeZG dd deZdS )    )OrderedDictN)CursorPaginationLimitOffsetPaginationPageNumberPagination   )openapi)force_real_str   )FilterInspectorPaginatorInspectorc                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	CoreAPICompatInspectorzConverts ``coreapi.Field``\ s to :class:`.openapi.Parameter`\ s for filters and paginators that implement a
    ``get_schema_fields`` method.
    c                    s,   g }t |dr| j} fdd|D S )Nget_schema_fieldsc                    s   g | ]}  |qS  coreapi_field_to_parameter.0fieldselfr   U/var/www/html/django/DPS/env/lib/python3.9/site-packages/drf_yasg/inspectors/query.py
<listcomp>       zCCoreAPICompatInspector.get_paginator_parameters.<locals>.<listcomp>hasattrr   view)r   	paginatorfieldsr   r   r   get_paginator_parameters   s    
z/CoreAPICompatInspector.get_paginator_parametersc                    s,   g }t |dr| j} fdd|D S )Nr   c                    s   g | ]}  |qS r   r   r   r   r   r   r      r   z@CoreAPICompatInspector.get_filter_parameters.<locals>.<listcomp>r   )r   Zfilter_backendr   r   r   r   get_filter_parameters   s    
z,CoreAPICompatInspector.get_filter_parametersc              
      s   t jt jt jt jd}tjt jtjt jtj	t j
tjt ji}g d}|j t jf |j||j |j rlt jnd|t t j
dt fdd|D S )zConvert an instance of `coreapi.Field` to a swagger :class:`.Parameter` object.

        :param coreapi.Field field:
        :rtype: openapi.Parameter
        )querypathformbody)formatpatternenumZ
min_length
max_lengthN)nameZin_requireddescriptiontypec                 3   s   | ]}|t  |d fV  qd S )N)getattr)r   attrschemar   r   	<genexpr>8   r   zDCoreAPICompatInspector.coreapi_field_to_parameter.<locals>.<genexpr>)r   ZIN_QUERYZIN_PATHZIN_FORM
coreschemaIntegerTYPE_INTEGERNumberZTYPE_NUMBERStringTYPE_STRINGBooleanZTYPE_BOOLEANr/   	Parameterr(   locationr)   r   r*   getr+   r   )r   r   Zlocation_to_inZcoreapi_typesZcoreschema_attrsr   r.   r   r      s*    z1CoreAPICompatInspector.coreapi_field_to_parameterN)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdd ZdS )DjangoRestResponsePaginationzProvides response schema pagination wrapping for django-rest-framework's LimitOffsetPagination,
    PageNumberPagination and CursorPagination
    c                 C   s   |j tjksJ dd }t|tttfrt|t }tjtjt	d|rRtjtj
dnd fdtjtjtjddfdtjtjtjddfd|ffdgd	}|r|jd
d |S )Nz(array return expected for paged responsecount)r+   nextT)r+   r$   Z
x_nullablepreviousresults)r+   
propertiesr)   r   )r+   r   
TYPE_ARRAY
isinstancer   r   r   ZSchemaZTYPE_OBJECTr   r3   r6   Z
FORMAT_URIr)   insert)r   r   Zresponse_schemaZpaged_schemaZ	has_countr   r   r   get_paginated_responseA   s"    z3DjangoRestResponsePagination.get_paginated_responseN)r;   r<   r=   r>   rH   r   r   r   r   r?   <   s   r?   )collectionsr   r1   Zrest_framework.paginationr   r   r    r   utilsr   baser
   r   r   r?   r   r   r   r   <module>   s   1