U
    >i                     @   s"  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 d d	lmZmZ ed
ddZeddddZeddddZeddddZeedddZeeddddZeeddddZeddddZeddddZeddd d!Z dS )"    )Path)Optional)reverse)Resolver404)app_settings)base_signup_form_class)script_aware_resolve)get_adapter)spec_for_dataclassspec_for_field)returnc               	   C   s   dd l } ttjjd }t|d}| |}W 5 Q R X ttjjd }t|d}| d}W 5 Q R X ||d d< t| t	| t
| t| t|}t|| t|| t| t| |S )Nr   zdoc/openapi.yamlrbzdoc/description.mdutf8infodescription)yamlr   __file__parentopenZ	safe_loadreaddecodespecify_userchroot
pin_clientdrop_unused_client_parameterdrop_unused_pathsdrop_unused_tagsdrop_unused_tag_groupsspecify_signup_fieldsspecify_custom_signup_form)r   pathfspecr   	used_tags r$   I/tmp/pip-unpacked-wheel-upujnpc2/allauth/headless/spec/internal/schema.py
get_schema   s$    

r&   N)r"   r   c                 C   sT   t d}|dd }| d  }i | d< |D ] \}}|d|}|| d |< q.d S )Nzheadless:openapi_yaml/r   pathsz	/_allauth)r   
rpartitionitemsreplace)r"   urlrootr(   r    	path_specnew_pathr$   r$   r%   r   (   s    r   c                 C   s  t tjdkrd S i }tjd }ddddddd	d
g}ttt ddd}| d  D ]\}}t|}|d|}d|kr||d }	|	r|	|d< n
|d |D ]J}
|
|kr||
 }t	|trd|kr||d }	|	r|	|d< q|d q|||< qT|| d< d S )N   r   getpostputdeleteoptionsheadpatchtrace)
parametersr   c                 S   s   dd | D }|pd S )Nc                 S   s(   g | ] }t |tr |d dks|qS )z$refz#/components/parameters/Client)
isinstancedictr1   ).0pr$   r$   r%   
<listcomp>D   s   
z;pin_client.<locals>.remove_client_param.<locals>.<listcomp>r$   )r9   filteredr$   r$   r%   remove_client_paramC   s    z'pin_client.<locals>.remove_client_paramr(   {client}r9   )
lenr   CLIENTSlistr   r*   r;   r+   popr:   )r"   Zprocessed_pathsZclient_valueZhttp_methodsr@   Zpath_key	path_itemZcurrent_path_itemZprocessed_path_key
new_paramsmethod_nameZoperation_itemr$   r$   r%   r   2   s@    




r   c                 C   s>   t tjdkrd S | d }r:|d }r:|dd  d S )Nr0   
componentsr9   ZClient)rB   r   rC   r1   rE   )r"   rI   r9   r$   r$   r%   r   h   s
    r   c           	   
   C   s   | d }t  }t| D ]|\}}d}tjD ]8}zt|d| d}W  qfW q, tk
rb   Y q,X q,|r| D ]\}}||d  qrq|	| q|S )Nr(   FrA   Ttags)
setrD   r*   r   rC   r   r+   r   updaterE   )	r"   r(   r#   r    r.   Z
found_pathclientmethodZmethod_specr$   r$   r%   r   q   s     

r   )r"   r#   r   c                 C   s:   | d }g | d< |D ] }|d |kr&q| d  | qd S )NrJ   name)append)r"   r#   rJ   tagr$   r$   r%   r      s    r   c                    sF   | d }g | d< |D ],}t  fdd|d D r| d | qd S )Nzx-tagGroupsc                    s   g | ]}| kqS r$   r$   )r<   tr#   r$   r%   r>      s     z*drop_unused_tag_groups.<locals>.<listcomp>rJ   )anyrP   )r"   r#   Z
tag_groupsZ	tag_groupr$   rS   r%   r      s
    r   c                 C   s   | d d d }| d d d }|d }g }dD ]2}t j|}|sP|| q0|d r0|| q0||d< t jd}|s|d	 d d
 |d	< n|d s|d	 d
 d d d S )NrI   schemas
BaseSignupZSignup
properties)emailZphoneusernamerequiredZ	password1ZallOfr0   password)account_settingsZSIGNUP_FIELDSr1   rE   rP   remove)r"   base_signupZsignuprW   Zrequired_fields
field_namefieldZpassword_fieldr$   r$   r%   r      s     r   c                 C   sd   t  }| d d d }|j D ]>\}}t|do6|j}t|}|rR|d | ||d |< q d S )NrI   rU   rV   rZ   rW   )r   Zbase_fieldsr*   hasattrrZ   r   rP   )r"   Z
form_classr^   r_   r`   Zis_required
field_specr$   r$   r%   r      s    r   c                 C   sP   t   }t|\}}|| d d d< | d d d d }|  || d S )NrI   rU   ZUserZexamplesvalue)r	   Zget_user_dataclassr
   clearrL   )r"   dcZschemaZexampleZexample_valuer$   r$   r%   r      s    
r   )!pathlibr   typingr   Zdjango.urlsr   Zdjango.urls.exceptionsr   Zallauth.accountr   r\   Z%allauth.account.internal.flows.signupr   Zallauth.core.internal.urlkitr   Zallauth.headlessZallauth.headless.adapterr	   Z)allauth.headless.spec.internal.openapikitr
   r   r;   r&   r   r   r   rK   r   r   r   r   r   r   r$   r$   r$   r%   <module>   s&   
6		