+
    i-  c                   s>   R t ^ RIt^ RIHt ^ RIHu Ht ^ RIt^ RIHt ^ RI	H
t
 ^ RI	Ht ^ RIHt  ! R R4      t ! R R	]4      t ! R
 R]4      t ! R R]4      t ! R R]P&                  P(                  4      t ! R R]P,                  4      tR tR tR tR tR# )z5Generic io_object handler, io specific check methods.N)OrderedDict)	functions)errors)FirewallErrorc                   s   a  ] tR t^t o Rt/ tRt. t/ t/ t	R t
R t]R 4       tR tR tRR	 ltR
 tR tR t/ 3R ltR tR tR tR tRtV tR# )	IO_Objectz9Abstract IO_Object as base for icmptype, service and zonez()c                sL    R V n         R V n        R V n        RV n        RV n        R# ) FN)filenamepathnamedefaultbuiltinself   &?/usr/lib/python3.14/site-packages/firewall/core/io/io_object.py__init__ZIO_Object.__init__   s%    		    c                s   a  \         ;QJ d!    . V 3R  lS P                   4       F  NK  	  5# ! V 3R  lS P                   4       4      # )c              3   sd   <"   T F%  p\         P                  ! \        SV4      4      x  K'  	  R # 5iNcopydeepcopygetattr).0keyr   s   & r   	<genexpr>Z*IO_Object.export_config.<locals>.<genexpr>&   s(      
9U#DMM'$,--9Us   -0)tupleIMPORT_EXPORT_STRUCTUREr   s   fr   export_configZIO_Object.export_config%   sA    u 
9=9U9U
u 	
u 
9=9U9U
 
 	
r   c                s    \        V4      \        V 4      8  d'   \        P                  ! R V R\        V 4       R24      h\	        \        W4      4      # )z-conf tuple has unexpected too many elements (z vs. Z))lenr   ZBugErrorlistdictzip)r   conf   &&r   get_dict_from_tuple_staticZ$IO_Object.get_dict_from_tuple_static*   sR    t9s233//?vU4PgKhJiijk  C/677r   c                sB    \         P                  V P                  V4      # r   )r   r"   r   )Zobjr    r!   r   get_dict_from_tupleZIO_Object.get_dict_from_tuple2   s    33C4O4OQUVVr   c                s    / pV P                    F\  p\        W4      pV'       g/   \        V\        4      '       g   \        V\        4      '       g   KD  \
        P                  ! V4      W&   K^  	  V# r   )r   r   
isinstanceZboolZintr   r   )r   r    r   Zvs   &   r   export_config_dictZIO_Object.export_config_dict5   sS    //C"AJq$'':a+=+= MM!,	 0 r   Nc                s   a aa Sf   S P                  4       oS P                  pVe    \        \        P                  ! W24      4      pR o\        ;QJ d    . VVV 3R lV 4       F  NK  	  5# ! VVV 3R lV 4       4      # )Nc                 s\    W!9  d    \         P                  ! \        W4      4      # W,          # r   r   )r   	conf_dictr      &&&r   _getZ+IO_Object.export_config_tuple.<locals>._getG   s&    # }}WT%788>!r   c              3   s8   <"   T F  pS! SSV4      x  K  	  R # 5ir    )r   r   r(   r&   r   s   & r   r   Z0IO_Object.export_config_tuple.<locals>.<genexpr>N   s     @4CT$	3//4s   )r%   r   r   	itertoolsZislice)r   r&   ZlengthZkeysr(   s   ff& @r   export_config_tupleZIO_Object.export_config_tuple=   sf    //1I++))$78D	" u@4@u@u@4@@@r   c           	     s   V P                  W4       \        V P                  4       F  w  r4\        W,          \        4      '       di   . p\        4       pW,           F-  pWv9  g   K  VP                  V4       VP                  V4       K/  	  ?\        W\        P                  ! V4      4       K  \        W\        P                  ! W,          4      4       K  	  R # r   )check_config	enumerater   r$   r   ZsetZappendZaddsetattrr   r   )r   r    all_io_objectsiZelementZ_confZ_setxs   &&&     r   import_configZIO_Object.import_configP   s    $/#D$@$@AJA$'4((uA}Q ! t}}U';<t}}TW'=> Br   c                s   V P                  W4       V F  p\        W4      '       g*   \        \        P                  R P                  V4      4      h\        W,          \        4      '       dF   \        W\        \        P                  ! \        P                  ! W,          4      4      4      4       K  \        W\        P                  ! W,          4      4       K  	  R# )z-Internal error. '{}' is not a valid attributeN)check_config_dictZhasattrr   r   ZUNKNOWN_ERRORformatr$   r   r.   r    Zfromkeysr   r   )r   r    r/   r      &&& r   import_config_dictZIO_Object.import_config_dict`   s    t4C4%%#((CJJ3O  $)T**4(<(<T]]49=U(V#WX4==#;< r   c                s   \        V\        4      '       g9   \        \        P                  R V: R\        R4      : R\        V4      : 24      h\        V4      ^8  d   \        \        P                  R4      hV FN  pVP                  4       '       d   K  W P                  9  g   K-  \        \        P                  R V: RV: R 24      h	  R# )'' not of type r   , but zname can't be emptyz' is not allowed in 'N)
r$   Zstrr   r   INVALID_TYPEtyper   ZINVALID_NAMEZisalnumADDITIONAL_ALNUM_CHARS)r   r   Zchars   && r   
check_nameZIO_Object.check_nameo   s    $$$##15tBxdL  t9q= 3 35JKKD<<>>d2M2M&M#''4QU)W  r   c                s*   \        V4      \        V P                  4      8w  d@   \        \        P                  R \        V4      \        V P                  4      3,          4      h\        \        V P                  V4      4      pV P                  W24       R# )z structure size mismatch %d != %dN)r   r   r   r   r:   r   r   r3   )r   r    r/   r&   r5   r   r,   ZIO_Object.check_config}   sv    t9D8899##2t9c$">">?@A 
 T994@A	y9r   c                s
   V F|  pV P                   P                  V4      pVf*   \        \        P                  RP                  V4      4      hV P                  W,          V4       V P                  W,          W1V4       K~  	  R # )Nzoption '{}' is not valid)r   Zgetr   r   ZINVALID_OPTIONr4   _check_config_structure_check_config)r   r    r/   r   Ztype_formats   &&&  r   r3   ZIO_Object.check_config_dict   st    C66::3?K"#))+E+L+LS+Q  ((K@ty#^D r   c                s    R # r   r)   )r   Zdummy1Zdummy2Zdummy3Zdummy4s   &&&&&r   r?   ZIO_Object._check_config   s    r   c                s   \        V\        V4      4      '       g9   \        \        P                  R V: R\        V4      : R\        V4      : 24      h\        V\
        4      '       dU   \        V4      ^8w  d"   \        \        P                  RV,          4      hV F  pV P                  W2^ ,          4       K  	  R# \        V\        4      '       dt   \        V4      \        V4      8w  d-   \        \        P                  RV\        V4      3,          4      h\        V4       F  w  rEV P                  W,          V4       K  	  R# \        V\        4      '       d   \        VP                  4       4      ^ ,          w  rgVP                  4        F  w  r\        V\        V4      4      '       g9   \        \        P                  R V: R\        V4      : R\        V4      : 24      h\        V\        V4      4      '       d   Ku  \        \        P                  R V: R\        V4      : R\        V4      : 24      h	  R# R# )r7   r8   r9   zlen('%s') != 1zlen('%s') != %dN)r$   r;   r   r   r:   r   r   r>   r   r-   r   items)	r   r    Z	structurer1   r0   valueZskeyZsvaluer   s	   &&&      r   r>   Z!IO_Object._check_config_structure   s   $Y00##15tIT
S  i&&9~"#F$7$79II9UVV,,Q!= 	5))9~T*#''):dC	N=S)S  &i0,,TWe< 1	4((!)//"34Q7NT"jjl
!#tDz22'++9<d4j$s)T  "%f66'++ $v,U=  + )r   c                sJ   VP                  4       pR pWP                  9   dk   RpV P                  V,          eT   V P                  V,           F<  pWS9   d   VP                  V4       K  \        \        P
                  RV: RV: 24      h	  WP                  9   d6   RpV P                  V,           F  pWS9   g   K  VP                  V4       K  	  V'       g"   \        \        P
                  RV,          4      hV F"  p\        \        P
                  V: RV: 24      h	  R# )FTNzMissing attribute z for zUnexpected element %sz: Unexpected attribute )ZgetNamesPARSER_REQUIRED_ELEMENT_ATTRSZremover   r   ZPARSE_ERRORPARSER_OPTIONAL_ELEMENT_ATTRS)r   r   attrsZ_attrsZfoundr1   s   &&&   r   parser_check_element_attrsZ$IO_Object.parser_check_element_attrs   s    !555E11$7C;;DAAA{a(+"..=>E 	 B 555E77==;MM!$ >  2 24Kd4RSSA""T1$M  r   )r
   r	   r   r   r   )NN)__name__
__module____qualname____firstlineno____doc__r   ZDBUS_SIGNATUREr<   rB   rC   r   r   Zstaticmethodr"   r#   r%   r+   r2   r6   r=   r,   r3   r?   r>   rE   __static_attributes____classdictcell____classdict__   @r   r   r      s     C N$&!$&!

 8 8WA&? = 13 :E!H r   r   c                   s8   a a ] tR t^t oV 3R ltR tRtVtV ;t# )UnexpectedElementErrorc                s8   < \         \        V `  4        Wn        R # r   )superrP   r   r   )r   r   	__class__s   &&r   r   ZUnexpectedElementError.__init__   s    $d46	r   c                s(    R V P                   ,          # )zUnexpected element '%s'r   r   r   r   __str__ZUnexpectedElementError.__str__   s    (DII66r   rS   	rF   rG   rH   rI   r   rT   rK   rL   Z__classcell__rR   rN      @@r   rP   rP      s     7 7r   rP   c                   s8   a a ] tR t^t oV 3R ltR tRtVtV ;t# )MissingAttributeErrorc                D   < \         \        V `  4        Wn        W n        R # r   )rQ   rX   r   r   	attributer   r   rZ   rR      &&&r   r   ZMissingAttributeError.__init__   s    #T35	"r   c                @    R V P                   : RV P                  : R2# )	Element 'z': missing 'z' attributer   rZ   r   r   r   rT   ZMissingAttributeError.__str__   s    9=DNNSSr   rZ   r   rU   rV   rW   r   rX   rX      s     #
T Tr   rX   c                   s8   a a ] tR t^t oV 3R ltR tRtVtV ;t# )UnexpectedAttributeErrorc                rY   r   )rQ   ra   r   r   rZ   r[   r\   r   r   Z!UnexpectedAttributeError.__init__   s    &68	"r   c                r]   )r^   z': unexpected attribute 'r7   r_   r   r   r   rT   Z UnexpectedAttributeError.__str__   s    <@IIt~~VVr   r`   rU   rV   rW   r   ra   ra      s     #
W Wr   ra   c                   s>   a  ] tR t^t o R tR tR tR tR tRt	V t
R# )IO_Object_ContentHandlerc                s     Wn         R V n        R# r   N)item_element)r   rd   r!   r   r   Z!IO_Object_ContentHandler.__init__   s    	r   c                    R V n         R# rc   re   r   r   r   startDocumentZ&IO_Object_ContentHandler.startDocument   	    r   c                rf   rc   rg   )r   r   rD   r'   r   startElementZ%IO_Object_ContentHandler.startElement   ri   r   c                s    VR 8X  d   V P                   V P                  n        R# VR8X  d   V P                   V P                  n        R# R# )shortdescriptionN)re   rd   rk   rl   )r   r   r!   r   
endElementZ#IO_Object_ContentHandler.endElement  s5    7?"mmDIIO]"$(MMDII! #r   c                sX    V ;P                   VP                  R R4      ,          un         R# )Z
 N)re   Zreplace)r   Zcontentr!   r   
charactersZ#IO_Object_ContentHandler.characters  s    s33r   )re   rd   N)rF   rG   rH   rI   r   rh   rj   rm   ro   rK   rL   rM   rO   r   rb   rb      s#     24 4r   rb   c                   s,   a  ] tR tRt o R tR tRtV tR# )IO_Object_XMLGeneratori  c                s   \         P                  P                  P                  V 4       VP                  V n        VP                  V n        / .V n        V P                  R,          V n	        . V n
        RV n        RV n        RV n        R# )i   zutf-8FN)saxhandlerContentHandlerr   Zwrite_writeZflush_flush_ns_contexts_current_context_undeclared_ns_maps	_encoding_pending_start_element_short_empty_elements)r   Zoutr!   r   r   ZIO_Object_XMLGenerator.__init__  sn     	""++D1iiiiD $ 1 1" 5#%  &+#%*"r   c           	     s    V P                  RV,           4       VP                  4        F2  w  rV P                  RV: R\        P                  ! V4      : 24       K4  	  V P                  R4       R# )z slightly modified startElement()Z<rn   Z=z/>N)ru   r@   saxutilsZ	quoteattr)r   r   rD   rA   r5   r   simpleElementZ$IO_Object_XMLGenerator.simpleElement  sL    C$J ;;=KDKKD(*<*<U*CDE )Dr   )rx   rz   rv   rw   r{   r|   ry   ru   N)rF   rG   rH   rI   r   r~   rK   rL   rM   rO   r   rp   rp     s     +" r   rp   c                 s   \         P                  ! V 4      pVR8X  d"   \        \        P                  RV ,          4      hVR8X  d"   \        \        P                  RV ,          4      hVf"   \        \        P                  RV ,          4      h\        V4      ^8X  d9   V^ ,          V^,          8  d"   \        \        P                  RV ,          4      hR# R# )i   zport number in '%s' is too bigz'%s' is invalid port rangeNzport range '%s' is ambiguousirq   )r   ZgetPortRanger   r   ZINVALID_PORTr   )ZportZ
port_ranges   & r   
check_portr   %  s    ''-JR!AD!H
 	
 
r	F//1MPT1TUU		F//1ORV1VWW	ZA	*Q-:a="@F//1MPT1TUU #A	r   c                 sV    V R9  d"   \        \        P                  RV ,          4      hR# )tcpz)'%s' not from {'tcp'|'udp'|'sctp'|'dccp'}N)r   ZudpZsctpZdccp)r   r   INVALID_PROTOCOLZprotocolr   r   check_tcpudpr   3  s.    55##7(B
 	
 6r   c                 sr    \         P                  ! V 4      '       g   \        \        P                  V 4      hR # r   )r   ZcheckProtocolr   r   r   r   r   r   check_protocolr   ;  s+    ""8,,F33X>> -r   c                 s    \         P                  ! W4      '       g$   \        \        P                  R V: RV : R24      hR# )r7   z' is not valid z addressN)r   check_addressr   r   ZINVALID_ADDR)ZipvZaddrr!   r   r   r   @  s5    ""3--4!M
 	
 .r   )rJ   r*   Zxml.saxrr   Zxml.sax.saxutilsr}   r   Zcollectionsr    Zfirewallr   r   Zfirewall.errorsr   r   Z	ExceptionrP   rX   ra   rs   rt   rb   ZXMLGeneratorrp   r   r   r   r   r)   r   r   <module>r      s    <   # #  #   )~ ~H7Y 7TI TWy W4s{{99 4*X22 4V
?

r   