o
    h"                     @   s   d dl mZmZmZ d dlmZmZ d dlmZ d dl	Z	dddZ
dddZd d
dZdd Zdd Zdd Zd!ddZi dfddZg fddZd ddZdddZdd ZdS )"    )DocumentLinkField)string_typesurlparse)
ParseErrorNc           $   
      s  |}t | |}t| d}t|d}t|d}tt| d}t| d}i }| D ]}	||	d }
t||	}tt|d}| D ]}| }|dvrMqBt||}d	}d	}g  tt|d|| d
}|D ]m}t|d}t|d}t	|d|dkd}|dkrd}t|d| d
}t
|}|d ur fdd|D } |7  qdt|d}t|d|tj|dd} | qd|dkrd}d}t|d}t|||tj|dd} | qdtt|d|}d}|rt|}n|rt|dd}t|d}t|d}t|
|| ||d}tt|d} t|d}!| r4| d }"|"d  }#|!|#r$|!t|#d  }!|"|vr-i ||"< |||" |!< qB|||!< qBq(t||||d!d"S )#Ninfotitledescriptionconsumespaths/
parameters)getputpostdeleteoptionsheadpatchFdereference_usingnameinrequiredpathdefaultbodyTschemac              	      s@   g | ]\ }}t  fd dD st d|tj|ddqS )c                    s   g | ]}|j  kqS  )r   ).0field
field_namer    \/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/openapi_codec/decode.py
<listcomp>2   s    z._parse_document.<locals>.<listcomp>.<listcomp>formr
   r   locationr   r   )anyr   
coreschemaString)r!   Zis_requiredfield_descriptionfieldsr#   r%   r&   *   s    
z#_parse_document.<locals>.<listcomp>r(   r)   ZformDatar'    )r'   summary)urlactionencodingr0   r	   r
   tagsZoperationIdr   _zapplication/openapi+json)r3   r	   r
   content
media_type)_get_document_base_url	_get_dict_get_stringget_strings	_get_listkeyslstrip	get_dictslower	_get_bool_expand_schemar   r,   r-   append_select_encodingr   
startswithlenr   )$database_urlZ
schema_urlr   r	   r
   r   r   r8   r   r3   specZdefault_parametersr4   Z	operationZhas_bodyZhas_formr   Z	parameterr   r*   r   r   expandedZexpanded_fieldsr.   r"   Zlink_consumesr5   Z
link_titleZlink_descriptionlinkr6   Zoperation_idtagprefixr    r/   r%   _parse_document   s   





















RrP   c           
      C   s   ddg}|rt  |}|j}|j}nd}d}t| d|d}t| ddd}d|d }|dd }|s6|S t| d	}|sD|pB|d
 }	n||v rK|}	n|D ]}	|	|v rU nqMtd| d|	||f S )z
    Get the base url to use when constructing absolute paths from the
    relative ones provided in the schema defination.
    httpshttpr1   Nhostr   ZbasePathr   schemesr   z"Unsupported transport schemes "%s"z	%s://%s%s)r   netlocschemer<   r@   rstripr>   r   )
rI   rJ   Zprefered_schemesZurl_componentsZdefault_hostZdefault_schemerS   r   rT   rV   r    r    r%   r:   o   s0   

r:   Fc                 C   sD   |rg d}ng d}| s|d S |D ]
}|| v r|  S q| d S )zS
    Given an OpenAPI 'consumes' list, return a single 'encoding' for CoreAPI.
    )multipart/form-data!application/x-www-form-urlencodedapplication/json)rZ   rX   rY   zapplication/octet-streamr   r    )r   r'   Z
preferencer9   r    r    r%   rF      s   
rF   c                    sP   |  d}t| d t| d|dgks|dkr& r& fdd  D S dS )z
    When an OpenAPI parameter uses `in="body"`, and the schema type is "object",
    then we expand out the parameters of the object into individual fields.
    type
propertiesr   objectc                    s$   g | ]}||v  |  d fqS r(   )r   )r!   keyZschema_propertiesZschema_requiredr    r%   r&      s    z"_expand_schema.<locals>.<listcomp>N)r   r;   r>   r?   )r   Zschema_typer    r_   r%   rD      s   


rD   c                 C   s,   |  dd}|}|D ]}t||}q|S )zL
    Dereference a JSON pointer.
    http://tools.ietf.org/html/rfc6901
    z#/r   )stripsplitr;   )Zlookup_stringstructr?   noder^   r    r    r%   dereference   s
   rd   c                 C   s   t | tod| v ot| dkS )N$ref   )
isinstancedictrH   )valuer    r    r%   is_json_pointer   s   rj   r1   c                 C      |  |}t|tr|S |S N)r   rg   r   itemr^   r   ri   r    r    r%   r<         
r<   c                 C   s:   |  |}t|tr|rt|rt|d |S |S | S )Nre   )r   rg   rh   rj   rd   copy)rn   r^   r   r   ri   r    r    r%   r;      s   

r;   c                 C   s    |  |}t|tr|S t|S rl   )r   rg   listrm   r    r    r%   r>      s   
r>   c                 C   rk   rl   )r   rg   boolrm   r    r    r%   rC      ro   rC   c                    s(   dd | D } r fdd|D S |S )Nc                 S      g | ]	}t |tr|qS r    )rg   rh   r!   ri   r    r    r%   r&          zget_dicts.<locals>.<listcomp>c                    s&   g | ]}t |rt|d   n|qS )re   )rj   rd   rt   r   r    r%   r&      s    r    )rn   r   retr    r   r%   rA      s   
rA   c                 C   s   dd | D S )Nc                 S   rs   r    )rg   r   rt   r    r    r%   r&      ru   zget_strings.<locals>.<listcomp>r    )rn   r    r    r%   r=      s   r=   rl   )F)r1   )Zcoreapir   r   r   Zcoreapi.compatr   r   Zcoreapi.exceptionsr   r,   rP   r:   rF   rD   rd   rj   r<   r;   r>   rC   rA   r=   r    r    r    r%   <module>   s     

h
*
	


