
    \j/                     t    d dl Z d dlmZ ddlmZ ddlmZ  G d de      Z G d d	e
      Z	 G d de	      Z
y)    N)warn   )
SchemaNode)BASIC_SCHEMA_STRATEGIESc                        e Zd Z fdZ xZS )_MetaSchemaBuilderc           	      6   t         |   |||       d|v r]t        |d         }|D ]  }|t        t        |dg             z  } g }|D ]  }||vs|j	                  |        t        |      | _        t        d|z  t        fd| j                  i      | _	        y )NEXTRA_STRATEGIES
STRATEGIESz%sSchemaNode)
super__init__listgetattrappendtupler   typer   
NODE_CLASS)	clsnamebasesattrsschema_strategiesbaseunique_schema_strategiesschema_strategy	__class__s	           ?/root/env/lib/python3.12/site-packages/genson/schema/builder.pyr   z_MetaSchemaBuilder.__init__   s    ue,& $U+=%> ? K!T'$b*I%JJ!K (*$#4 E"*BB,33ODE ##;<CN nt3j]+S^^<>    )__name__
__module____qualname__r   __classcell__r   s   @r   r   r      s    > >r   r   c                   R    e Zd ZdZdZdZeZeZ	ddZ
d Zd Zd Zd Zd	 Zd
 Zd Zy)SchemaBuilderz
    ``SchemaBuilder`` is the basic schema generator class.
    ``SchemaBuilder`` instances can be loaded up with existing schemas
    and objects before being serialized.
    zhttp://json-schema.org/schema#NULLc                     ||du r| j                   | _        n|dk(  rd| _        n|| _        t        | j                  t              st        d| j                  z        | j                         | _        y)aq  
        :param schema_uri: value of the ``$schema`` keyword. If not
          given, it will use the value of the first available
          ``$schema`` keyword on an added schema or else the default:
          ``'http://json-schema.org/schema#'``. A value of ``False`` or
          ``None`` will direct GenSON to leave out the ``"$schema"``
          keyword.
        NFDEFAULTz-NODE_CLASS %r is not a subclass of SchemaNode)NULL_URI
schema_uri
issubclassr   r   	TypeError
_root_node)selfr*   s     r   r   zSchemaBuilder.__init__(   sj     u!4"mmDO9$"DO(DO$//:6K"oo. / ///+r   c                 2   t        |t              r"|j                  }|j                         }|$|d= n t        |t              r|j                         }d|v r&| j                  xs |d   | _        t        |      }|d= | j                  j                  |       y)a  
        Merge in a JSON schema. This can be a ``dict`` or another
        ``SchemaBuilder``

        :param schema: a JSON Schema

        .. note::
            There is no schema validation. If you pass in a bad schema,
            you might get back a bad schema.
        N$schema)
isinstancer%   r*   	to_schemar   dictr-   
add_schema)r.   schemar*   s      r   r4   zSchemaBuilder.add_schema=   s     fm,**J%%'F!9%
+%%'F"ooB	1BDO&\Fy!""6*r   c                 :    | j                   j                  |       y)z
        Modify the schema to accommodate an object.

        :param obj: any object or scalar that can be serialized in JSON
        N)r-   
add_object)r.   objs     r   r7   zSchemaBuilder.add_objectV   s     	""3'r   c                 x    | j                         }|j                  | j                  j                                |S )zW
        Generate a schema based on previous inputs.

        :rtype: ``dict``
        )_base_schemaupdater-   r2   )r.   r5   s     r   r2   zSchemaBuilder.to_schema^   s0     ""$doo//12r   c                 P    t        j                  | j                         g|i |S )zh
        Generate a schema and convert it directly to serialized JSON.

        :rtype: ``str``
        )jsondumpsr2   )r.   argskwargss      r   to_jsonzSchemaBuilder.to_jsonh   s$     zz$..*<T<V<<r   c                 ,    t        | j                        S )zu
        Number of ``SchemaStrategy``s at the top level. This is used
        mostly to check for emptiness.
        )lenr-   r.   s    r   __len__zSchemaBuilder.__len__p   s    
 4??##r   c                     || u ryt        || j                        sy| j                         |j                         k(  xr | j                  |j                  k(  S )z
        Check for equality with another ``SchemaBuilder`` object.

        :param other: another ``SchemaBuilder`` object. Other types are
          accepted, but will always return ``False``
        TF)r1   r   r:   r-   )r.   others     r   __eq__zSchemaBuilder.__eq__w   sW     D=%0 !!#u'9'9';; 8OOu'7'77	9r   c                 p    | j                   | j                  k(  ri S d| j                   xs | j                  iS )Nr0   )r*   r)   DEFAULT_URIrD   s    r   r:   zSchemaBuilder._base_schema   s1    ??dmm+ItB$2B2BCCr   N)r(   )r   r    r!   __doc__rJ   r)   r   r   r   r   r   r4   r7   r2   rA   rE   rH   r:    r   r   r%   r%      sF    
 3KHJ(J,*+2(=$9 Dr   r%   )	metaclassc                   &     e Zd Z fdZddZ xZS )Schemac                 b    t        dt               t        |   t        j
                         y )Nzogenson.Schema is deprecated in v1.0, and it may be removed in future versions. Use genson.SchemaBuilderinstead.)r*   )r   PendingDeprecationWarningr   r   r%   r)   )r.   r   s    r   r   zSchema.__init__   s-      '	( 	M$:$:;r   c                 l    t        dt               |dk7  rt        dt               | j                         S )Nza#to_dict is deprecated in v1.0, and it may be removed in future versions. Use #to_schema instead.
DEPRECATEDz6the `recurse` option for #to_dict does nothing in v1.0)r   rQ   DeprecationWarningr2   )r.   recurses     r   to_dictzSchema.to_dict   s7     8&	( l"I#%~~r   )rS   )r   r    r!   r   rV   r"   r#   s   @r   rO   rO      s    < r   rO   )r=   warningsr   noder   
strategiesr   r   r   r%   rO   rL   r   r   <module>rZ      s;       /> >,nD0 nDb ]  r   