o
    <,Ud                     @   s   d dl Z d dlmZ d dlZz1d dlZd dlmZ d dlmZ d dlm	Z
 ejddd dd	ZejZejZG d
d dejZW n eyV   dZdZdd Zdd ZeZ
Y nw G dd de
Z	G dd deZdddZdS )    N)
MethodView)fields)openapi)APISpecz2.0c                 C   s   d S N schemar   r   a/var/www/html/crm_dreinet/venv_linux/lib/python3.10/site-packages/flasgger/marshmallow_apispec.py<lambda>       r   )openapi_versionschema_name_resolverspecc                   @   s(   e Zd ZdZdZdZdZdZdd ZdS )SchemabodyTNc                 C   s*   d| j i}i }|t|| ||d< |S )N
parametersdefinitions)	__class__updateconvert_schemas)selfspecsr   r   r   r
   to_specs_dict!   s
   
zSchema.to_specs_dict)	__name__
__module____qualname__swag_inswag_validateswag_validation_functionswag_validation_error_handlerswag_require_datar   r   r   r   r
   r      s    r   c                 C   s   i S r   r   r   r   r   r
   r   +   r   c                 C   s   g S r   r   )r	   locationr   r   r
   r   ,   r   c                   @   s   e Zd ZdZdddZdS )r   z<
    Wrapper around APISpec to add `to_flasgger` method
    Nc                 C   s$   t du rtdtjj|| ||dS )zt
        Converts APISpec dict to flasgger suitable dict
        also adds definitions and paths (optional)
        N&Please install marshmallow and apispec)r   paths)r   RuntimeErrorflasggerutilsapispec_to_template)r   appr   r$   r   r   r
   to_flasgger5   s   zAPISpec.to_flasgger)NNN)r   r   r   __doc__r*   r   r   r   r
   r   0   s    r   c                       sd   e Zd ZdZg Zi Zi Zg ZdgZdgZ	g Z
g ZdZdZi ZdZdZdZdZdZ fddZ  ZS )SwaggerViewz
    A Swagger view
    zapplication/jsonFNc                    sz   | j r2i }tjjg d }|D ]	}t| |||< qi }|t|| ||d< tjj|| j	| j
d tt| j|i |S )z7
        If validation=True perform validation
        )r   r   	responsessummarydescriptionr   )r   validation_functionvalidation_error_handler)
validationr&   	constantsOPTIONAL_FIELDSgetattrr   r   r'   validater0   r1   superr,   dispatch_request)r   argskwargsr   attrsattrr   r   r   r
   r8   Z   s   zSwaggerView.dispatch_request)r   r   r   r+   r   r-   r   tagsconsumesproducesschemessecurity
deprecatedoperationIdexternalDocsr.   r/   r2   r0   r1   r8   __classcell__r   r   r=   r
   r,   E   s&    r,   c                 C   sF  |du ri }| | di  i }|  D ]\}}t|tr#t||}t|ttfrFg }|D ]}t|tr>|t|| q.|| q.|}t	
|rt|trtdu rXtdt|||j< dd|ji}|dkrt||jd||< ||| d d	< t||j d
 dkrd|| d d
< q|||< q|||< qd|v r|d= |S )z
    Convert Marshmallow schemas to dict definitions

    Also updates the optional definitions argument with any definitions
    entries contained within the schema.
    Nr   r#   z$refz#/definitions/{0}r   )r"   r   r	   requiredT)r   getitems
isinstancedictr   listtupleappendinspectisclass
issubclassr   r%   schema2jsonschemar   formatschema2parametersr   len)dr   newkvnew_vitemrefr   r   r
   r   p   s>   




r   r   )rO   flask.viewsr   r&   marshmallowr   apispec.ext.marshmallowr   apispecr   BaseAPISpecOpenAPIConverteropenapi_converterrR   rT   r   ImportErrorobjectr,   r   r   r   r   r
   <module>   s4   +