
    \j                     >    d dl mZmZ  G d de      Z G d d      Zy)   )BASIC_SCHEMA_STRATEGIESTypelessc                       e Zd Zy)SchemaGenerationErrorN)__name__
__module____qualname__     </root/env/lib/python3.12/site-packages/genson/schema/node.pyr   r      s    r   r   c                   P    e Zd ZdZeZd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zy)
SchemaNodez
    Basic schema generator class. SchemaNode objects can be loaded
    up with existing schemas and objects before being serialized.
    c                     g | _         y N)_active_strategiesselfs    r   __init__zSchemaNode.__init__   s
    "$r   c                     t        |t              r|j                         }| j                  |      D ]$  }| j	                  |      }|j                  |       & | S )z
        Merges in an existing schema.

        arguments:
        * `schema` (required - `dict` or `SchemaNode`):
          an existing JSON Schema to merge.
        )
isinstancer   	to_schema_get_subschemas_get_strategy_for_schema
add_schema)r   schema	subschemaactive_strategys       r   r   zSchemaNode.add_schema   s[     fj)%%'F--f5 	2I";;IFO&&y1	2 r   c                 J    | j                  |      }|j                  |       | S )z
        Modify the schema to accommodate an object.

        arguments:
        * `obj` (required - `dict`):
          a JSON object to use in generating the schema.
        )_get_strategy_for_object
add_object)r   objr   s      r   r    zSchemaNode.add_object'   s)     77<""3' r   c                 \   t               }g }| j                  D ]J  }|j                         }t        |      dk(  rd|v r|j	                  |d          :|j                  |       L |r&t        |      dk(  r|\  }nt        |      }d|ig|z   }t        |      dk(  r|\  }|S |rd|i}|S i }|S )z9
        Convert the current schema to a `dict`.
        r   typeanyOf)setr   r   lenaddappendsorted)r   typesgenerated_schemasr   generated_schemaresult_schemas         r   r   zSchemaNode.to_schema7   s     #66 	;O.88:#$)f8H.H		*623!(()9:	; 5zQ u"(% 14E E !Q&0]  $&78M  Mr   c                 ,    t        | j                        S r   )r&   r   r   s    r   __len__zSchemaNode.__len__S   s    4**++r   c                 d    t        || j                        xr | j                  |j                  k(  S )z4 Required for SchemaBuilder.__eq__ to work properly )r   	__class____dict__)r   others     r   __eq__zSchemaNode.__eq__V   s*    5$..1 4MMU^^3	5r   c                    d|v r+|d   D cg c]  }| j                  |      D ]  }|  c}}S t        |j                  d      t              r,t	        |      }|d= |d   D cg c]  }t	        dd|i| c}S |gS c c}}w c c}w )Nr$   r#   r
   )r   r   getlistdict)r   r   anyofr   
other_keystipes         r   r   zSchemaNode._get_subschemas]   s    f+1'? B%%)%9%9%%@B!  BI B B

6*D1fJ6">DVnMdD1d1j1MM8OB
 Ns   A>$Bc                 &    | j                  d|      S )Nr   _get_strategy_for_)r   r   s     r   r   z#SchemaNode._get_strategy_for_schemah   s    &&x88r   c                 &    | j                  d|      S )Nobjectr=   )r   r!   s     r   r   z#SchemaNode._get_strategy_for_objectk   s    &&x55r   c                    | j                   D ]  } t        |d|z         |      s|c S  | j                  D ]  } t        |d|z         |      s || j                        }| j                   rVt	        | j                   d   t
              r9| j                   j                         }|j                  |j                                | j                   j                  |       |c S  |dk(  r`t        j                  |      rK| j                   s.| j                   j                  t        | j                               | j                   d   }|S t        dj                  ||            )Nmatch_r       z2Could not find matching schema type for {0}: {1!r})r   getattr
STRATEGIESr1   r   r   popr   r   r(   match_schemar   format)r   kindschema_or_objr   strategytypelesss         r   r>   zSchemaNode._get_strategy_for_n   sD   #66 	'O8w48G&&	'
  	'H1wxD1-@"*4>>": **"4#:#:2#>I#66::<H#..x/A/A/CD''..?&&	' 8 5 5m D**''..x/GH"55a8O"" $@GGm%& 	&r   N)r   r   r	   __doc__r   rF   r   r   r    r   r/   r4   r   r   r   r>   r
   r   r   r   r      s@     )J%* 8,5	96&r   r   N)
strategiesr   r   RuntimeErrorr   r   r
   r   r   <module>rQ      s     9	L 	D& D&r   