o
    >hz                     @   s  d dl Z d dlZd dlZd dlmZ d dlmZ d dlZzd dlm	Z
 d dlmZ W n ey5   dZY nw zd dlmZ d dlmZ W n eyO   dZY nw dd	lmZ ddlm	Z	 eeZd
d Zdd Zermendd ertendd dZG dd dZG dd deZdZe edej!Z"e edej#Z$G dd de"Z%e%&e'e%j( e%&e)e%j( e%&ee%j* e%+ee%j* dd Z,G dd de$Z-e-.ee-j/ dd  Z0G d!d" d"eZ1dS )#    N)OrderedDict)force_bytes)SwaggerValidationError)validate_spec)parse)ValidationError   )openapic              
   C   6   zt |  W d S  ty } ztt||d }~ww N)validate_flexr   r   strspecex r   o/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/drf_yasg/codecs.py_validate_flex   s   r   c              
   C   r
   r   )validate_ssvSSVErrr   r   r   r   r   r    _validate_swagger_spec_validator#   s   r   c                 C      d S r   r   sr   r   r   <lambda>,       r   c                 C   r   r   r   r   r   r   r   r   -   r   )flexssvc                   @   sD   e Zd ZdZdd Zedd Zdd Zdd	 Zd
d Z	dd Z
dS )_OpenAPICodecNc                 C   s
   || _ d S r   _validators)self
validatorsr   r   r   __init__4   s   
z_OpenAPICodec.__init__c                 C   s   | j S )z List of validator names to applyr   )r!   r   r   r   r"   7   s   z_OpenAPICodec.validatorsc                 C   s   t |tjs
td| |}i }| jD ]%}zt| t| W q t	y9 } zt
|||< W Y d}~qd}~ww |rOt	d|||| }tt
| |t| |S )a4  Transform an :class:`.Swagger` object to a sequence of bytes.

        Also performs validation and applies settings.

        :param openapi.Swagger document: Swagger spec object as generated by :class:`.OpenAPISchemaGenerator`
        :return: binary encoding of ``document``
        :rtype: bytes
        z%Expected a `openapi.Swagger` instanceNzspec validation failed: {})
isinstancer	   Swagger	TypeErrorgenerate_swagger_objectr"   
VALIDATORScopydeepcopyr   r   formatloggerwarningr   
_dump_dict)r!   documentr   errors	validatoreexcr   r   r   encode<   s    	

z_OpenAPICodec.encodec                 C   s   t | |S )zDDump an error message into an encoding-appropriate sequence of bytes)r   r.   )r!   errr   r   r   encode_errorY   s   z_OpenAPICodec.encode_errorc                 C   s   t d)zDump the given dictionary into its string representation.

        :param dict spec: a python dict
        :return: string representation of ``spec``
        :rtype: str or bytes
        zoverride this method)NotImplementedErrorr!   r   r   r   r   r.   ]      z_OpenAPICodec._dump_dictc                 C   s   |  S )zGenerates the root Swagger object.

        :param openapi.Swagger swagger: Swagger spec object as generated by :class:`.OpenAPISchemaGenerator`
        :return: swagger spec as dict
        :rtype: OrderedDict
        )as_odict)r!   swaggerr   r   r   r'   f   r9   z%_OpenAPICodec.generate_swagger_object)__name__
__module____qualname__
media_typer#   propertyr"   r4   r6   r.   r'   r   r   r   r   r   1   s    
	r   c                       s*   e Zd ZdZd fdd	Zdd Z  ZS )OpenAPICodecJsonapplication/jsonFc                    s    t t| | || _|| _d S r   )superrA   r#   prettyr?   )r!   r"   rD   r?   	__class__r   r   r#   s   s   
zOpenAPICodecJson.__init__c                 C   s,   | j rtj|dddd dS tj|ddS )z-Dump ``spec`` into JSON.

        :rtype: str   ),z: F)indent
separatorsensure_ascii
)rK   )rD   jsondumpsr8   r   r   r   r.   x   s   zOpenAPICodecJson._dump_dict)FrB   r<   r=   r>   r?   r#   r.   __classcell__r   r   rE   r   rA   p   s    rA   ztag:yaml.org,2002:mapCSafeDumperCSafeLoaderc                   @   s*   e Zd ZdZdd Zd	ddZdd ZdS )
SaneYamlDumperzYYamlDumper class usable for dumping ``OrderedDict`` and list instances in a standard way.c                 C   s   dS )zDisable YAML references.Tr   )r!   datar   r   r   ignore_aliases   s   zSaneYamlDumper.ignore_aliasesNc                 C   s   t }g }tj|||d}| jdur|| j| j< d}t|dr"| }|D ]+\}}| |}	| |}
t|	tj	r;|	j
r=d}t|
tj	rF|
j
rHd}||	|
f q$|du rb| jdur_| j|_|S ||_|S )zhttps://gist.github.com/miracle2k/3184458

        Make PyYAML output an OrderedDict.

        It will do so fine if you use yaml.dump(), but that generates ugly, non-standard YAML code.

        To use yaml.safe_dump(), you need the following.
        )
flow_styleNTitemsF)YAML_MAP_TAGyamlMappingNode	alias_keyrepresented_objectshasattrrW   represent_datar$   
ScalarNodestyleappenddefault_flow_stylerV   )r!   mappingrV   tagvaluenode
best_styleitem_key
item_valuenode_key
node_valuer   r   r   represent_odict   s,   	




zSaneYamlDumper.represent_odictc                 C   s$   d|v r| j d|ddS |  d|S )NrL   ztag:yaml.org,2002:str|)r`   )represent_scalar)r!   textr   r   r   represent_text   s   zSaneYamlDumper.represent_textr   )r<   r=   r>   __doc__rU   rl   rp   r   r   r   r   rS      s
    
 rS   c                 C   s   t j| td|r	dnd|ddS )a   Dump the given data dictionary into a sane format:

        * OrderedDicts are dumped as regular mappings instead of non-standard !!odict
        * multi-line mapping style instead of json-like inline style
        * list elements are indented into their parents
        * YAML references/aliases are disabled

    :param dict data: the data to be dumped
    :param bool binary: True to return a utf-8 encoded binary object, False to return a string
    :return: the serialized YAML
    :rtype: str or bytes
    Fzutf-8N)Dumperrb   encodingallow_unicode	sort_keys)rY   dumprS   )rT   binaryr   r   r   yaml_sane_dump   s   
rx   c                   @   s   e Zd ZdddZdS )SaneYamlLoaderFc                 C   s   |  | t| |S r   )flatten_mappingr   construct_pairs)r!   rf   deepr   r   r   construct_odict   s   
zSaneYamlLoader.construct_odictN)F)r<   r=   r>   r}   r   r   r   r   ry      s    ry   c                 C   s   t j| tdS )zLoad the given YAML stream while preserving the input order for mapping items.

    :param stream: YAML stream (can be a string or a file-like object)
    :rtype: OrderedDict
    )Loader)rY   loadry   )streamr   r   r   yaml_sane_load   s   r   c                       s*   e Zd ZdZd fdd	Zdd Z  ZS )OpenAPICodecYamlapplication/yamlc                    s   t t| | || _d S r   )rC   r   r#   r?   )r!   r"   r?   rE   r   r   r#      s   
zOpenAPICodecYaml.__init__c                 C   s   t |ddS )z/Dump ``spec`` into YAML.

        :rtype: bytesT)rw   )rx   r8   r   r   r   r.      s   zOpenAPICodecYaml._dump_dict)r   rO   r   r   rE   r   r      s    r   )2r)   rM   loggingcollectionsr   django.utils.encodingr   rY   swagger_spec_validator.commonr   r   "swagger_spec_validator.validator20r   r   ImportError	flex.corer   r   flex.exceptionsr    r	   r0   	getLoggerr<   r,   r   r   r(   r   rA   rX   getattr
SafeDumper
YamlDumper
SafeLoader
YamlLoaderrS   add_representerbytesrp   r   rl   add_multi_representerrx   ry   add_constructorr}   r   r   r   r   r   r   <module>   sR    
	?-	