o
    i,                     @   s   d dl mZ d dl mZ d dl mZ d dl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 G dd dZeG dd dZdedefddZdedefddZdS )    )asdict)	dataclass)fieldN)Any)Optional)fnv1_64   )Schema)SchemaIteratorc                   @   s   e Zd ZU dZdZi Zeeef e	d< dZ
deddfdd	Zd
edededee dee dee dee deee  defddZdd Zdd Zedd ZdS )SchemaBuilder
   i  CACHEr   iteratorreturnNc                 C   s   t  | _|| _d S N)OpenApiSchemaschemar   )selfr    r   g/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/datastreams/schemas/schema_builder.py__init__   s   
zSchemaBuilder.__init__schema_name
field_nameis_arraytype_descriptionrefformat_enum_valuesc	           
      C   sb   | j | jkrdS |  j d7  _ t|||||d }	|r%tdd d d d |	}	|	| jjj| j |< dS )NFr   arrayT)
propertiesmax_propertiesr   Propertyr   
componentsschemas)
r   r   r   r   r   r   r   r   r   	_propertyr   r   r   add_property   s   zSchemaBuilder.add_propertyc                 C   sD   | j |  t| j}tj|dd d}tt|d}t	||S )Nc                 S   s   | j S r   )__dict__)or   r   r   <lambda>/   s    z%SchemaBuilder.build.<locals>.<lambda>)defaultzutf-8)
r   iterate_over_schemaconvert_to_json_compatibler   jsondumpsstrr   encoder	   )r   no_nones
definition_idr   r   r   build,   s
   

zSchemaBuilder.buildc                 C   s6   || j krdS || jjjv rdS t | jjj|< dS )NFT)	max_depthr   r#   r$   r   r	   )r   r   depthr   r   r   should_extract_schema3   s   
z#SchemaBuilder.should_extract_schemac                 C   s&   | t jvrt | t j| < t j|  S r   )r   r   r4   )r   r   r   r   r   
get_schema;   s   

zSchemaBuilder.get_schema)__name__
__module____qualname__r5   r!   r   dictr/   r	   __annotations__r    r
   r   boolr   listr   r&   r4   r7   staticmethodr8   r   r   r   r   r      s:   
 
	

r   c                   @   sf   e Zd ZU dZeed< edd dZded< eG dd	 d	Z	eG d
d dZ
eG dd dZdS )r   z3.0.0openapic                   C   s   t  S r   )r   
Componentsr   r   r   r   r)   E   s    zOpenApiSchema.<lambda>default_factoryOpenApiSchema.Componentsr#   c                   @   s   e Zd ZU ee ed< dZee ed< edddidZee ed< dZ	ee ed< eddd	idZ
eee  ed
< dZed  ed< dS )OpenApiSchema.PropertytypeNr   name$ref)r*   metadatar   formatenumr   items)r9   r:   r;   r   r/   r=   r   r   r   rK   r   r?   rM   r   r   r   r   r"   G   s   
  r"   c                   @   s4   e Zd ZU dZeed< eedZeedf ed< dS )OpenApiSchema.SchemaobjectrG   rC   rF   r    N)	r9   r:   r;   rG   r/   r=   r   r<   r    r   r   r   r   r	   P   s   
 r	   c                   @   s(   e Zd ZU eedZeedf ed< dS )rE   rC   rN   r$   N)r9   r:   r;   r   r<   r$   r/   r=   r   r   r   r   rB   U   s   
 rB   N)r9   r:   r;   rA   r/   r=   r   r#   r   r"   r	   rB   r   r   r   r   r   B   s   
 r   objr   c                 C   sX   t | trdd | D S t | trdd |  D S t| dr*dd t|  D S | S )Nc                 S   s   g | ]
}|d urt |qS r   )r,   ).0itemr   r   r   
<listcomp>\   s    z.convert_to_json_compatible.<locals>.<listcomp>c                 S   &   i | ]\}}|d urt |t|qS r   convert_keyr,   rQ   kvr   r   r   
<dictcomp>^      & z.convert_to_json_compatible.<locals>.<dictcomp>__dataclass_fields__c                 S   rT   r   rU   rW   r   r   r   rZ   `   r[   )
isinstancer?   r<   rM   hasattrr   )rP   r   r   r   r,   Z   s   


r,   keyc                 C   s4   | dkrdS | dkrdS | dkrdS | dkrdS | S )	Nr   rI   r   rL   r%   propertyr3   idr   )r_   r   r   r   rV   d   s   rV   )dataclassesr   r   r   r-   typingr   r   ddtrace.internal.utils.fnvr   r   r	   schema_iteratorr
   r   r   r,   r/   rV   r   r   r   r   <module>   s    4
