
    \j                     F    d dl m Z  d dlmZ  G d d      Z G d de      Zy)    )copy)warnc                   X    e Zd ZdZdZed        Zed        Zd Zd Z	d Z
d Zd	 Zd
 Zy)SchemaStrategyz
    base schema strategy. This contains the common interface for
    all subclasses:

    * match_schema
    * match_object
    * __init__
    * add_schema
    * add_object
    * to_schema
    * __eq__
    )typec                     t        d      )Nz'match_schema' not implementedNotImplementedErrorclsschemas     G/root/env/lib/python3.12/site-packages/genson/schema/strategies/base.pymatch_schemazSchemaStrategy.match_schema       !"BCC    c                     t        d      )Nz'match_object' not implementedr	   r   objs     r   match_objectzSchemaStrategy.match_object   r   r   c                      || _         i | _        y N)
node_class_extra_keywords)selfr   s     r   __init__zSchemaStrategy.__init__   s    $!r   c                 &    | j                  |       y r   )_add_extra_keywords)r   r   s     r   
add_schemazSchemaStrategy.add_schema    s      (r   c                    |j                         D ]n  \  }}|| j                  v r|| j                  vr|| j                  |<   3| j                  |   |k7  sFt        dj	                  || j                  |   |             p y )NzXSchema incompatible. Keyword {0!r} has conflicting values ({1!r} vs. {2!r}). Using {1!r})itemsKEYWORDSr   r   format)r   r   keywordvalues       r   r   z"SchemaStrategy._add_extra_keywords#   s    $lln 	JNGU$--' 4 4405$$W-%%g.%7 >?Ev!4#7#7#@%@IJ	Jr   c                      y r    )r   r   s     r   
add_objectzSchemaStrategy.add_object.   s    r   c                 ,    t        | j                        S r   )r   r   )r   s    r   	to_schemazSchemaStrategy.to_schema1   s    D(())r   c                 d    t        || j                        xr | j                  |j                  k(  S )z4 Required for SchemaBuilder.__eq__ to work properly )
isinstance	__class____dict__)r   others     r   __eq__zSchemaStrategy.__eq__4   s*    5$..1 4MMU^^3	5r   N)__name__
__module____qualname____doc__r!   classmethodr   r   r   r   r   r'   r)   r/   r&   r   r   r   r      sW     HD D D D")	J*5r   r   c                   B     e Zd ZdZed        Zed        Z fdZ xZS )TypedSchemaStrategyz
    base schema strategy class for scalar types. Subclasses define
    these two class constants:

    * `JS_TYPE`: a valid value of the `type` keyword
    * `PYTHON_TYPE`: Python type objects - can be a tuple of types
    c                 >    |j                  d      | j                  k(  S Nr   )getJS_TYPEr   s     r   r   z TypedSchemaStrategy.match_schemaC   s    zz&!S[[00r   c                 .    t        || j                        S r   )r+   PYTHON_TYPEr   s     r   r   z TypedSchemaStrategy.match_objectG   s    #s//r   c                 B    t         |          }| j                  |d<   |S r8   )superr)   r:   )r   r   r,   s     r   r)   zTypedSchemaStrategy.to_schemaK   s"    "$vr   )	r0   r1   r2   r3   r4   r   r   r)   __classcell__)r,   s   @r   r6   r6   :   s:     1 1 0 0 r   r6   N)r   warningsr   r   r6   r&   r   r   <module>rA      s"     25 25j. r   