Ë
    :vžjq   ã                   óN   — d dl Z ddlmZmZ ddlmZ ddlmZmZ  G d„ de«      Z	y)é    Né   )ÚCodeGeneratorDraft04ÚJSON_TYPE_TO_PYTHON_TYPE)ÚJsonSchemaDefinitionException)ÚVALIDATION_EXCEPTIONSÚenforce_listc                   óŠ   ‡ — e Zd Z eej
                  fi ddddœ¤ŽZdi ddddfˆ fd„	Zd„ Zd	„ Zd
„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zˆ xZS )ÚCodeGeneratorDraft06z^(/(([^/~])|(~[01]))*)*\Zz'^(\w+:(\/?\/?))?[^#\\\s]*(#[^\\\s]*)?\Zz³^(?:(?:[^\x00-\x20\"\'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*\Z)zjson-pointerzuri-referencezuri-templateNTc           	      óè   •— t         ‰| �  |||||||«       | j                  j                  d| j                  fd| j
                  fd| j                  fd| j                  fd| j                  ff«       y )NÚexclusiveMinimumÚexclusiveMaximumÚpropertyNamesÚcontainsÚconst)	ÚsuperÚ__init__Ú_json_keywords_to_functionÚupdateÚgenerate_exclusive_minimumÚgenerate_exclusive_maximumÚgenerate_property_namesÚgenerate_containsÚgenerate_const)	ÚselfÚ
definitionÚresolverÚformatsÚuse_defaultÚuse_formatsÚdetailed_exceptionsÚ	fast_failÚ	__class__s	           €úg/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/fastjsonschema/draft06.pyr   zCodeGeneratorDraft06.__init__   s   ø€ ô 	‰Ñ˜ X¨w¸À[ÐReÐgpÔqØ×'Ñ'×.Ñ.Ø ×!@Ñ!@ÐAØ ×!@Ñ!@ÐAØ˜d×:Ñ:Ð;Ø˜×/Ñ/Ð0Ø�d×)Ñ)Ð*ð0
õ 	ó    c                 óŒ   — t        |t        «      r| j                  «       S d|v r| j                  «       S | j	                  |«      S )Nz$ref)Ú
isinstanceÚboolÚgenerate_boolean_schemaÚgenerate_refÚrun_generate_functions)r   r   s     r#   Ú_generate_func_code_blockz.CodeGeneratorDraft06._generate_func_code_block&   sC   € Ü�j¤$Ô'Ø×/Ñ/Ó1Ð1Ø�zÑ!à×$Ñ$Ó&Ð&Ø×*Ñ*¨:Ó6Ð6r$   c                 ó‚   — | j                   du r| j                  d«       | j                   du r| j                  d«       yy)z…
        Means that schema can be specified by boolean.
        True means everything is valid, False everything is invalid.
        TÚpassFú{name} must not be thereN)Ú_definitionÚlÚexc©r   s    r#   r(   z,CodeGeneratorDraft06.generate_boolean_schema.   s=   € ð
 ×Ñ˜tÑ#Ø�F‰F�6ŒNØ×Ñ˜uÑ$Ø�H‰HÐ/Õ0ð %r$   c                 óÖ  — t        | j                  d   «      }	 dj                  d„ |D «       «      }d}d|v r|dj                  | j                  ¬	«      z  }d
|v sd|v r#d|vr|dj                  | j                  ¬	«      z  }| j                  d||«      5  | j                  ddj                  |«      d¬«       ddd«       y# t        $ r}t	        d«      |‚d}~ww xY w# 1 sw Y   yxY w)zù
        Validation of type. Can be one type or list of types.

        Since draft 06 a float without fractional part is an integer.

        .. code-block:: python

            {'type': 'string'}
            {'type': ['string', 'number']}
        Útypez, c              3   ó.   K  — | ]  }t         |   –— Œ y ­w)N)r   )Ú.0Úts     r#   Ú	<genexpr>z5CodeGeneratorDraft06.generate_type.<locals>.<genexpr>E   s   è ø€ Ð$PÉ%ÀQÔ%=¸aÕ%@É%ùs   ‚zUnknown typeNÚ ÚintegerzD and not (isinstance({variable}, float) and {variable}.is_integer()))ÚvariableÚnumberÚbooleanz  or isinstance({variable}, bool)z&if not isinstance({variable}, ({})){}:z{name} must be {}z or ©Úrule)	r   r/   ÚjoinÚKeyErrorr   ÚformatÚ	_variabler0   r1   )r   ÚtypesÚpython_typesr1   Úextras        r#   Úgenerate_typez"CodeGeneratorDraft06.generate_type8   sý   € ô ˜T×-Ñ-¨fÑ5Ó6ˆð	IØŸ9™9Ñ$PÉ%Ó$PÓPˆLð ˆà˜ÑØÐ[×bÑbØŸ™ð có ñ ˆEð ˜Ñ ¨eÑ!3¸È%Ñ9OØÐ7×>Ñ>ÈÏÉÐ>ÓWÑWˆEà�V‰VÐ<¸lÈEÕRØ�H‰HÐ(¨&¯+©+°eÓ*<À6ˆHÔJ÷ SÐRøô ò 	IÜ/°Ó?ÀSÐHûð	Iú÷ SÐRús#   šC Â$CÃ	CÃCÃCÃC(c                 ó<  — | j                  d«      5  t        | j                  d   t        t        t
        j                  f«      st        d«      ‚| j                  d«      5  | j                  dd¬«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nú1if isinstance({variable}, (int, float, Decimal)):r   z9exclusiveMinimum must be an integer, a float or a decimalz$if {variable} <= {exclusiveMinimum}:z-{name} must be bigger than {exclusiveMinimum}r>   ©	r0   r&   r/   ÚintÚfloatÚdecimalÚDecimalr   r1   r2   s    r#   r   z/CodeGeneratorDraft06.generate_exclusive_minimumV   s�   € Ø�V‰VÐGÕHÜ˜d×.Ñ.Ð/AÑBÄSÌ%ÔQX×Q`ÑQ`ÐDaÔbÜ3Ð4oÓpÐpØ—‘Ð>Õ?Ø—‘ÐHÐOa�Ôb÷ @÷ IÐH÷ @Ð?ú÷ IÐHúó$   ’ABÁ!BÁ5BÂB	ÂBÂBc                 ó<  — | j                  d«      5  t        | j                  d   t        t        t
        j                  f«      st        d«      ‚| j                  d«      5  | j                  dd¬«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)NrI   r   z9exclusiveMaximum must be an integer, a float or a decimalz$if {variable} >= {exclusiveMaximum}:z.{name} must be smaller than {exclusiveMaximum}r>   rJ   r2   s    r#   r   z/CodeGeneratorDraft06.generate_exclusive_maximum]   s�   € Ø�V‰VÐGÕHÜ˜d×.Ñ.Ð/AÑBÄSÌ%ÔQX×Q`ÑQ`ÐDaÔbÜ3Ð4oÓpÐpØ—‘Ð>Õ?Ø—‘ÐIÐPb�Ôc÷ @÷ IÐH÷ @Ð?ú÷ IÐHúrO   c                 ó”  — | j                   j                  di «      }|du ry|du r>| j                  «        | j                  d«      5  | j	                  dd¬«       ddd«       y| j                  «        | j                  d«      5  | j                  «        | j                  d	«      5  | j                  d
«       | j                  d«      5  | j                  d«      5  t        | j                  «      }| j                  «       5  | j                  |dj                  | j                  «      | j                  d¬«       ddd«       t        | j                  «      |k(  r| j                  d«       ddd«       | j                  dt        «      5  | j                  d«       ddd«       ddd«       | j                  d«      5  | j	                  dd¬«       ddd«       ddd«       ddd«       y# 1 sw Y   yxY w# 1 sw Y   Œ¼xY w# 1 sw Y   Œ—xY w# 1 sw Y   ŒsxY w# 1 sw Y   ŒwxY w# 1 sw Y   ŒVxY w# 1 sw Y   ŒZxY w# 1 sw Y   yxY w)aB  
        Means that keys of object must to follow this definition.

        .. code-block:: python

            {
                'propertyNames': {
                    'maxLength': 3,
                },
            }

        Valid keys of object for this definition are foo, bar, ... but not foobar for example.
        r   TFzif {variable}_keys:r.   r>   Nzif {variable}_is_dict:zif {variable}_len != 0:z {variable}_property_names = Trueú!for {variable}_key in {variable}:útry:ú{}_key©Úclear_variablesr-   z
except {}:z!{variable}_property_names = Falsez!if not {variable}_property_names:z/{name} must be named by propertyName definition)r/   ÚgetÚcreate_variable_keysr0   r1   Úcreate_variable_is_dictÚcreate_variable_with_lengthÚlenÚ_codeÚtrial_validationÚgenerate_func_code_blockrB   rC   Ú_variable_namer   )r   Úproperty_names_definitionÚcode_lens      r#   r   z,CodeGeneratorDraft06.generate_property_namesd   sÕ  € ð %)×$4Ñ$4×$8Ñ$8¸È"Ó$MÐ!Ø$¨Ñ,ØØ&¨%Ñ/Ø×%Ñ%Ô'Ø—‘Ð-Õ.Ø—‘Ð3¸/�ÔJ÷ /Ð.ð ×(Ñ(Ô*Ø—‘Ð0Õ1Ø×0Ñ0Ô2Ø—V‘VÐ5Õ6Ø—F‘FÐ=Ô>ØŸ™Ð CÕDØ!ŸV™V F�^Ü'*¨4¯:©:£˜HØ!%×!6Ñ!6Õ!8Ø $× =Ñ =Ø$=Ø$,§O¡O°D·N±NÓ$CØ$(×$7Ñ$7Ø48ð	 !>ô !"÷ "9ô  # 4§:¡:›°(Ò:Ø $§¡ v¤÷ ,ð "ŸV™V LÔ2GÕHØ ŸF™FÐ#FÔG÷ I÷ Eð Ÿ™Ð CÕDØŸ™Ð!RÐYh˜Ôi÷ E÷! 7÷ 2Ð1÷	 /Ð.ú÷ "9Ð!8ú÷ ,˜^ú÷ IÐHú÷ EÐDú÷ EÐDú÷! 7Ð6ú÷ 2Ð1ús¨   ÁG*Â"H>Â'#H2Ã
HÃ&H	Ä9G6Ä;1H	Å,HÆ
H	ÆHÆ$H2Æ=H&ÇH2ÇH>Ç*G3Ç6G?Ç;H	ÈHÈHÈHÈHÈH#ÈH2È&H/È+H2È2H;	È7H>È>Ic           
      ó’  — | j                  «        | j                  d«      5  | j                  d   }|du r| j                  dd¬«       �n-|du r.| j                  d«      5  | j                  dd¬«       d	d	d	«       nû| j                  d
«       | j                  d«      5  | j                  d«      5  | j	                  «       5  | j                  |dj                  | j                  «      | j                  d¬«       d	d	d	«       | j                  d«       | j                  d«       d	d	d	«       | j                  dt        «       d	d	d	«       | j                  d«      5  | j                  dd¬«       d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   Œ“xY w# 1 sw Y   ŒuxY w# 1 sw Y   ŒcxY w# 1 sw Y   ŒBxY w# 1 sw Y   y	xY w)a  
        Means that array must contain at least one defined item.

        .. code-block:: python

            {
                'contains': {
                    'type': 'number',
                },
            }

        Valid array is any with at least one number.
        zif {variable}_is_list:r   Fz{name} is always invalidr>   Tzif not {variable}:z{name} must not be emptyNz{variable}_contains = FalserR   rS   rT   rU   z{variable}_contains = TrueÚbreakzexcept {}: passzif not {variable}_contains:z.{name} must contain one of contains definition)
Úcreate_variable_is_listr0   r/   r1   r]   r^   rB   rC   r_   r   )r   Úcontains_definitions     r#   r   z&CodeGeneratorDraft06.generate_contains�   sz  € ð 	×$Ñ$Ô&Ø�V‰VÐ,Õ-Ø"&×"2Ñ"2°:Ñ">Ðà" eÑ+Ø—‘Ð3¸*�ÖEØ$¨Ñ,Ø—V‘VÐ0Õ1Ø—H‘HÐ7¸j�HÔI÷ 2Ð1ð —‘Ð4Ô5Ø—V‘VÐ?Õ@ØŸ™ �Ø!×2Ñ2Õ4Ø ×9Ñ9Ø 3Ø (§¡°·±Ó ?Ø $× 3Ñ 3Ø04ð	 :ô ÷ 5ð Ÿ™Ð;Ô<ØŸ™˜wœ÷ (ð —F‘FÐ,Ô.CÔD÷ Að —V‘VÐ9Õ:Ø—H‘HÐMÐT^�HÔ_÷ ;÷/ .Ð-÷ 2Ð1ú÷ 5Ð4ú÷ (˜ú÷ AÐ@ú÷ ;Ð:ú÷/ .Ð-úsƒ   ¢>F=Á FÁ4+F=ÂF%Â1FÃ9F	Ã;*FÄ%F%ÅF=ÅF1Å0F=ÆF
	ÆF=ÆFÆFÆF"ÆF%Æ%F.	Æ*F=Æ1F:	Æ6F=Æ=Gc                 óÎ   — | j                   d   }| j                  | j                  |«      }| j                  d|«      5  | j	                  dd¬«       ddd«       y# 1 sw Y   yxY w)zÚ
        Means that value is valid when is equeal to const definition.

        .. code-block:: python

            {
                'const': 42,
            }

        Only valid value is 42 in this example.
        r   zif not ({}):z:{name} must be same as const definition: {definition_rule}r>   N)r/   Ú_enum_value_matchesrC   r0   r1   )r   r   Úmatchs      r#   r   z#CodeGeneratorDraft06.generate_const¹   sV   € ð × Ñ  Ñ)ˆØ×(Ñ(¨¯©¸Ó?ˆØ�V‰V�N EÕ*Ø�H‰HÐQÐX_ˆHÔ`÷ +×*Ñ*ús   ¾AÁA$)Ú__name__Ú
__module__Ú__qualname__Údictr   ÚFORMAT_REGEXSr   r+   r(   rG   r   r   r   r   r   Ú__classcell__)r"   s   @r#   r
   r
      su   ø„ ÙÐ-×;Ñ;ñ 	Ø4ØCð0ñ		@ñ 	€Mð ØØØØ Øõò&7ò1òKò<còdò*jòX'`öRar$   r
   )
rM   Údraft04r   r   Ú
exceptionsr   Ú	generatorr   r   r
   © r$   r#   Ú<module>rs      s"   ðÛ ß CÝ 5ß :ôAaÐ/õ Aar$   