o
    id                     @  s   d dl mZ d dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZ ddlmZ eeef Ze
d	d
G dd deZG dd deZdS )    )annotationsN)ABCabstractmethod)deepcopy)	dataclass)AnyLiteral   )	UserErrorF)initc                   @  sr   e Zd ZdZddddd!ddZed"ddZd#ddZd"ddZd"ddZ	d"ddZ
d$ddZed%dd ZdS )&JsonSchemaTransformera  Walks a JSON schema, applying transformations to it at each level.

    Note: We may eventually want to rework tools to build the JSON schema from the type directly, using a subclass of
    pydantic.json_schema.GenerateJsonSchema, rather than making use of this machinery.
    NF)strictprefer_inlined_defssimplify_nullable_unionsschema
JsonSchemar   bool | Noner   boolr   c                C  sD   || _ || _d| _|| _|| _| j di | _g | _tt	  | _
d S )NT$defs)r   r   is_strict_compatibler   r   getdefs
refs_stacksetstrrecursive_refs)selfr   r   r   r    r   ^/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/pydantic_ai/_json_schema.py__init__   s   zJsonSchemaTransformer.__init__returnc                 C     |S )zMake changes to the schema.r   r   r   r   r   r   	transform*   s   zJsonSchemaTransformer.transformc                   s   t  j}|dd   |} js& jr& fdd j D |d< |S  jrj fdd jD } jd}|d u r?d nt	
dd|}|d u r^ jdd	}||v r^| d
}||v sU|||< |d| dS |S )Nr   c                   s   i | ]
\}}|  |qS r   _handle).0kvr   r   r   
<dictcomp>7   s    z.JsonSchemaTransformer.walk.<locals>.<dictcomp>c                   s   i | ]}| j | qS r   )r   )r&   keyr)   r   r   r*   =   s    $ref
^#/\$defs/ titleroot_rootz#/$defs/)r   r,   )r   r   popr%   r   r   itemsr   r   resub)r   r   handledr   root_refroot_keyr   r)   r   walk/   s$   


zJsonSchemaTransformer.walkc                 C  s  d}| j rI|d }rItdd|}|| jv rn0|| jv r%| j| n$| j| |d7 }| j|}|d u r@t	d| |}|d }s|d}|dkrX| 
|}n|d	krb| |}n|d u rr| |d
}| |d}| |}|dkr| jd |  | _|S )Nr   r,   r-   r.   r	   z#Could not find $ref definition for typeobjectarrayanyOfoneOf)r   r   r4   r5   r   r   addappendr   r
   _handle_object_handle_array_handle_unionr#   )r   r   nested_refsrefr+   
def_schematype_r   r   r   r%   K   s8   



zJsonSchemaTransformer._handlec           	      C  s   | d }ri }| D ]\}}| |||< q||d< | d }d ur7t|tr0||d< n| ||d< | d }d urVi }| D ]\}}| |||< qF||d< |S )N
propertiesadditionalPropertiespatternProperties)r   r3   r%   
isinstancer   )	r   r   rH   handled_propertiesr+   valueadditional_propertiespattern_propertieshandled_pattern_propertiesr   r   r   rA   o   s   

z$JsonSchemaTransformer._handle_objectc                   sD   | d }r fdd|D |d< | d }r  ||d< |S )NprefixItemsc                      g | ]}  |qS r   r$   r&   itemr)   r   r   
<listcomp>       z7JsonSchemaTransformer._handle_array.<locals>.<listcomp>r3   )r   r%   )r   r   prefix_itemsr3   r   r)   r   rB      s
   z#JsonSchemaTransformer._handle_array
union_kindLiteral['anyOf', 'oneOf']c                   st   z| |}W n ty   | Y S w  fdd|D } jr$ |}t|dkr0|d |B S | }|||< |S )Nc                   rR   r   r$   )r&   memberr)   r   r   rU      rV   z7JsonSchemaTransformer._handle_union.<locals>.<listcomp>r	   r   )r2   KeyErrorr   _simplify_nullable_unionlencopy)r   r   rX   membersr6   r   r)   r   rC      s   
z#JsonSchemaTransformer._handle_unioncaseslist[JsonSchema]c                 C  sT   t | dkr(ddi| v r(tdd | D d }|r#t|}d|d< |gS | d gS | S )	N   r:   nullc                 s  s     | ]}|d dikr|V  qdS )r:   rc   Nr   rS   r   r   r   	<genexpr>   s    zAJsonSchemaTransformer._simplify_nullable_union.<locals>.<genexpr>Tnullabler   )r]   nextr   )r`   non_null_schema
new_schemar   r   r   r\      s   
z.JsonSchemaTransformer._simplify_nullable_union)r   r   r   r   r   r   r   r   r   r   r    r   )r    r   )r   r   rX   rY   r    r   )r`   ra   r    ra   )__name__
__module____qualname____doc__r   r   r#   r9   r%   rA   rB   rC   staticmethodr\   r   r   r   r   r      s    



$

	r   c                      s2   e Zd ZdZddd fdd	ZdddZ  ZS )InlineDefsJsonSchemaTransformerz+Transforms the JSON Schema to inline $defs.N)r   r   r   r   r   c                  s   t  j||dd d S )NT)r   r   )superr   )r   r   r   	__class__r   r   r      s   z(InlineDefsJsonSchemaTransformer.__init__r    c                 C  r!   )Nr   r"   r   r   r   r#      s   z)InlineDefsJsonSchemaTransformer.transform)r   r   r   r   ri   )rj   rk   rl   rm   r   r#   __classcell__r   r   rq   r   ro      s    ro   )
__future__r   _annotationsr4   abcr   r   r^   r   dataclassesr   typingr   r   
exceptionsr
   dictr   r   r   ro   r   r   r   r   <module>   s     )