a
    mJh                     @   s@  d dl mZmZ d dlZd dlmZmZmZmZ ddl	m
Z
 ddlmZmZ ddlmZmZ ddlmZmZmZmZmZmZmZmZmZmZ ed	d
dZee d	ddZe
eeeef dddZ e
eeeeef dddZ!e
eeeeeef dddZ"e
eeeeeef dddZ#e
eeeeeef dddZ$dS )    )is_dataclassMISSINGN)AnyDictOptionalType   )AbstractFactory)get_dataclass_fieldsget_typeddict_fields)SchemaUnknown)
hasargsis_iterableis_dictis_enumis_generic_concreteis_noneis_tupleis_typeddictis_union
is_literal)returnc                 C   sP   | t ttttjfv rdS t| r$dS t| r0dS t| r<dS t	| rLt
| S dS )NFT)intstrboolfloatdecimalDecimalr   r   r   r   r   cls r!   N/var/www/shaz/venv/lib/python3.9/site-packages/dataclass_factory/jsonschema.pyneed_ref   s    r#   c                 C   s   t | rdS | tfv rdS | ttjfv r,dS | tfv r:dS | tfv rHdS t| rTdS t| sdt	| rhdS t
| sxt| r|d S dS )Nnullintegernumberstringbooleanobjectarray)r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r!   r"   get_type   s"    


r+   )factoryjson_schema_definitions_pathr   c                 C   s0   t | r&|| }dd| d| iS || S )Nz$ref#/)r#   Zjson_schema_ref_nameZjson_schema)class_r,   r-   refr!   r!   r"   type_or_ref1   s    
r2   )r,   schemar    r   c                 C   sB   i }|j tjkrd|d< n$|j tjtjfv r.ntd|j  |S )NFadditionalPropertiesz$Cannot generate schema with unknown=)unknownr   ZFORBIDZSKIPZSTORENotImplementedError)r,   r3   r    resr!   r!   r"   r5   :   s    
r5   )r,   r3   r    r-   r   c                 C   s   i }t ||}|jr4tdd |j D r4tdi |d< |t| || |D ]:}t|j| ||d |j	< |j
turR|j
|d |j	 d< qR|jrdd |D |d< |S )	Nc                 s   s   | ]}t |tV  qd S N
isinstancetuple.0keyr!   r!   r"   	<genexpr>M       z$typed_dict_schema.<locals>.<genexpr>&Schema flattening is not yet supported
propertiesdefaultc                 S   s   g | ]
}|j qS r!   )	data_namer=   fr!   r!   r"   
<listcomp>X   s   z%typed_dict_schema.<locals>.<listcomp>required)r   name_mappinganyvaluesr6   updater5   r2   typerD   rC   r   	__total__r,   r3   r    r-   r7   fieldsrF   r!   r!   r"   typed_dict_schemaG   s"    


rQ   c                 C   s   i }t ||}|jr4tdd |j D r4tdi |d< |t| || |D ]L}t|j| ||d |j	< |j
turR|jrR| |j|j
|d |j	 d< qRdd |D |d< |S )	Nc                 s   s   | ]}t |tV  qd S r8   r9   r<   r!   r!   r"   r?   d   r@   z#dataclass_schema.<locals>.<genexpr>rA   rB   rC   c                 S   s   g | ]}|j tu r|jqS r!   )rC   r   rD   rE   r!   r!   r"   rG   n   s   z$dataclass_schema.<locals>.<listcomp>rH   )r
   rI   rJ   rK   r6   rL   r5   r2   rM   rD   rC   r   
serializerrO   r!   r!   r"   dataclass_schema^   s     
"
rS   c                    s  |t u ri S i }|jr |j|d< |jr0|j|d< t|}|rD||d< |tfv rRn|ttttfv rfn~t	|rdd |D |d< n`t
|rt|jd  |d< n>t|r
t|rt|jd	kr|jd tu rt|jd
  |d< n fdd|jD |d< nt|s*t|r@t|jr@|t || nt|rbt|jd
  |d< nt|r fdd|jD |d< n\t|rt fdd|jD |d< n4t|st|rt|jr|t || |S )NtitledescriptionrM   c                 S   s   g | ]
}|j qS r!   )valuer=   xr!   r!   r"   rG      r@   z!create_schema.<locals>.<listcomp>enumr   r4      r   itemsc                    s   g | ]}t | qS r!   r2   rW   r,   r-   r!   r"   rG      s   c                    s   g | ]}t | qS r!   r\   rW   r]   r!   r"   rG      s   ZanyOfc                 3   s    | ]}  t||V  qd S r8   )rR   rM   rW   )r,   r!   r"   r?      r@   z create_schema.<locals>.<genexpr>)r   namerU   r+   r   r   r   complexr   r   r   r2   __args__r   r   lenEllipsisr   r   
__origin__rL   rQ   r   r   r   listr   rS   )r,   r3   r    r-   r7   type_r!   r]   r"   create_schemat   sX    





 



 rf   )%dataclassesr   r   r   typingr   r   r   r   commonr	   rP   r
   r   r3   r   r   Ztype_detectionr   r   r   r   r   r   r   r   r   r   r   r#   r   r+   r2   r5   rQ   rS   rf   r!   r!   r!   r"   <module>   s4   0





