
    \j                     >    d dl mZ d dlmZ ddlmZ  G d de      Zy)    )defaultdict)search   )SchemaStrategyc                   r     e Zd ZdZdZed        Zed        Z fdZ fdZ	d Z
d Zd	 Z fd
Zd Z xZS )Objectz 
    object schema strategy
    )type
propertiespatternPropertiesrequiredc                 *    | j                  d      dk(  S )Nr	   object)get)schemas    I/root/env/lib/python3.12/site-packages/genson/schema/strategies/object.pymatch_schemazObject.match_schema   s    zz&!X--    c                 "    t        | t              S N)
isinstancedict)objs    r   match_objectzObject.match_object   s    #t$$r   c                     t         |   |       t        |      | _        t        |      | _        d | _        d| _        y )NF)super__init__r   _properties_pattern_properties	_required_include_empty_required)self
node_class	__class__s     r   r   zObject.__init__   s9    $&z2#.z#: ',$r   c                    t         |   |       d|v r>|d   j                         D ](  \  }}| j                  |   }||j                  |       * d|v r>|d   j                         D ](  \  }}| j                  |   }||j                  |       * d|v rAt        |d         }|sd| _        | j                  || _        y | xj                  |z  c_        y y )Nr
   r   r   T)r   
add_schemaitemsr   r   setr    r   )r!   r   prop	subschemasubnodepatternr   r#   s          r   r%   zObject.add_schema   s    6"6!#),#7#=#=#? 2i**40(&&y12 &(&,-@&A&G&G&I 2"227;(&&y12 6*-.H/3,~~%!)(*  r   c                 |   t               }|j                         D ]v  \  }}d }|| j                  vr| j                  |      }|| j                  |   j                  |       H|j                  |       | j                  |   j                  |       x | j                  || _        y | xj                  |z  c_        y r   )r'   r&   r   _matching_patternr   
add_objectaddr   )r!   r   r
   r(   subobjr+   s         r   r.   zObject.add_object1   s    U
IIK 
	:LD&G4+++006"((1<<VDt$  &11&9
	: >>!'DNNNj(Nr   c                 b    | j                   j                         D ]  }t        ||      s|c S  y r   )r   keysr   )r!   r(   r+   s      r   r-   zObject._matching_patternD   s/    //446 	Ggt$	r   c                 <   t        | j                        t        |      k  rK| j                  j                  | j                                t        | j                        t        |      k  rKt	        | j                  |      D ]  \  }} t        ||      |        y r   )len_itemsappend_schema_node_classzipgetattr)r!   r&   funcr)   items        r   _addzObject._addI   sz    $++U+KKt6689 $++U+  #4;;6 	+OIt$GIt$T*	+r   c                 6   t         |          }d|d<   | j                  r| j                  | j                        |d<   | j                  r| j                  | j                        |d<   | j
                  s| j                  rt        | j
                        |d<   |S )Nr   r	   r
   r   r   )r   	to_schemar   _properties_to_schemar   r   r    sorted)r!   r   r#   s     r   r>   zObject.to_schemaP   s    "$!v#'#=#=  $"F< ##*.*D*D((+*F&'>>T99!'!7F:r   c                 `    i }|j                         D ]  \  }}|j                         ||<    |S r   )r&   r>   )r!   r
   schema_propertiesr(   schema_nodes        r   r?   zObject._properties_to_schema]   s?    !+!1!1!3 	>D+&1&;&;&=d#	>  r   )__name__
__module____qualname____doc__KEYWORDSstaticmethodr   r   r   r%   r.   r-   r<   r>   r?   __classcell__)r#   s   @r   r   r      sY     GH. . % %-+*)&
+!r   r   N)collectionsr   rer   baser   r    r   r   <module>rO      s    #   [!^ [!r   