
    M/e                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 dd	lm
Z dd
lmZ  G d de	j                        Z G d de      Z G d de      Z G d de      Ze	j$                  j'                  e       e	j(                  j'                  e       e	j*                  j'                  e       y)z: apacheconfig implementation of the ParserNode interfaces     )Any)Iterable)List)Optional)Tuple)
assertions)
interfaces)parsernode_util)
ParserNodec                   R     e Zd ZdZdeddf fdZdeddfdZdeded    fd	Z	 xZ
S )
ApacheParserNodez apacheconfig implementation of ParserNode interface.

        Expects metadata `ac_ast` to be passed in, where `ac_ast` is the AST provided
        by parsing the equivalent configuration text using the apacheconfig library.
    kwargsreturnNc                     t        j                  |      \  }}}}t        |   di | || _        || _        || _        || _        | j                  d   | _        y )Nac_ast )	utilparsernode_kwargssuper__init__ancestorfilepathdirtymetadata_raw)selfr   r   r   r   r   	__class__s         G/usr/lib/python3/dist-packages/certbot_apache/_internal/apacheparser.pyr   zApacheParserNode.__init__   sX    .2.D.DV.L+%8"6"  
 x0	    msgc                      y )Nr   )r   r    s     r   savezApacheParserNode.save   s    r   namec                     t        t        j                  t        j                  | t        j                  | j                        gS )z*Find ancestor BlockNodes with a given namer#   
parametersr   r   r   ApacheBlockNoder   PASSr   )r   r#   s     r   find_ancestorszApacheParserNode.find_ancestors"   2    Z__+5??)-)3)-	8 9 	9r   )__name__
__module____qualname____doc__r   r   strr"   r   r*   __classcell__r   s   @r   r   r      sG    1 1 1  93 940B+C 9r   r   c                   <     e Zd ZdZdeddf fdZdedefdZ xZS )ApacheCommentNodez6 apacheconfig implementation of CommentNode interface r   r   Nc                 b    t        j                  |      \  }}t        |   di | || _        y Nr   )r   commentnode_kwargsr   r   comment)r   r   r8   r   s      r   r   zApacheCommentNode.__init__.   s.    11&9"6"r   otherc                 :   t        || j                        r| j                  |j                  k(  xrj | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j
                  |j
                  k(  xr | j                  |j                  k(  S yNF)
isinstancer   r8   r   r   r   r   r   r9   s     r   __eq__zApacheCommentNode.__eq__3   s    eT^^,LLEMM1 4JJ%++-4MMU^^34 MMU^^34 MMU^^3	5
 r   )	r,   r-   r.   r/   r   r   boolr>   r1   r2   s   @r   r4   r4   +   s,    @  
C D r   r4   c                   R     e Zd ZdZdeddf fdZdedefdZdee	   ddfd	Z
 xZS )
ApacheDirectiveNodez8 apacheconfig implementation of DirectiveNode interface r   r   Nc                     t        j                  |      \  }}}}t        |   di | || _        || _        || _        d | _        y r6   )r   directivenode_kwargsr   r   r#   r&   enabledinclude)r   r   r#   r&   rD   r   s        r   r   zApacheDirectiveNode.__init__@   sH    ,0,E,Ef,M)j'6"6"	$&*r   r9   c                    t        || j                        r| j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xrj | j
                  |j
                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S yr;   )	r<   r   r#   r   r&   rD   r   r   r   r=   s     r   r>   zApacheDirectiveNode.__eq__H   s    eT^^,II+ 4MMU^^34OOu'7'774 LLEMM14 JJ%++-	4
 MMU^^34 MMU^^35 r   _parametersc                      y)z%Sets the parameters for DirectiveNodeNr   )r   rG   s     r   set_parametersz"ApacheDirectiveNode.set_parametersS       r   )r,   r-   r.   r/   r   r   r?   r>   r   r0   rI   r1   r2   s   @r   rA   rA   =   sC    B+ + +	C 	D 	(3- D r   rA   c            	       L    e Zd ZdZdeddf fdZdedefdZ	 	 dded	e	e
e      d
e	e   dd fdZ	 	 dded	e	e
e      d
e	e   defdZ	 dded	e	e   d
e	e   defdZddedede
d    fdZddedede
e   fdZddedede
e   fdZdeddfdZde
e   fdZde
e   fdZ xZS )r(   z4 apacheconfig implementation of BlockNode interface r   r   Nc                 2    t        |   di | d| _        y r6   )r   r   children)r   r   r   s     r   r   zApacheBlockNode.__init__[   s    "6"68r   r9   c                    t        || j                        r| j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j
                  |j
                  k(  xrj | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S yr;   )
r<   r   r#   r   r&   rM   rD   r   r   r   r=   s     r   r>   zApacheBlockNode.__eq___   s    eT^^,II+ 4MMU^^34OOu'7'774 MMU^^34 LLEMM1	4
 JJ%++-4 MMU^^34 MMU^^35 r   r#   r&   positionc                     t        t        j                  t        j                  | t        j                  | j                        }| xj                  |fz  c_        |S )z0Adds a new BlockNode to the sequence of childrenr%   )r(   r   r)   r   rM   )r   r#   r&   rO   	new_blocks        r   add_child_blockzApacheBlockNode.add_child_blockl   sD     $/9-1-7__-1]]	<	
 	)%r   c                     t        t        j                  t        j                  | t        j                  | j                        }| xj                  |fz  c_        |S )z4Adds a new DirectiveNode to the sequence of childrenr%   )rA   r   r)   r   rM   )r   r#   r&   rO   new_dirs        r   add_child_directivez#ApacheBlockNode.add_child_directivex   sC     &:??1;/3/9/3}}	>
 	'#r   c                     t        t        j                  | t        j                  | j                        }| xj                  |fz  c_        |S )z2Adds a new CommentNode to the sequence of childrenr8   r   r   r   )r4   r   r)   r   rM   )r   r#   r&   rO   new_comments        r   add_child_commentz!ApacheBlockNode.add_child_comment   s>    
 (
151;15@ 	+'r   excludec                     t        t        j                  t        j                  | t        j                  | j                        gS )z<Recursive search of BlockNodes from the sequence of childrenr%   r'   r   r#   rZ   s      r   find_blockszApacheBlockNode.find_blocks   r+   r   c                     t        t        j                  t        j                  | t        j                  | j                        gS )@Recursive search of DirectiveNodes from the sequence of childrenr%   )rA   r   r)   r   r\   s      r   find_directiveszApacheBlockNode.find_directives   s2    #/9-1-7__-1]]	< = 	=r   r8   exactc                 n    t        t        j                  | t        j                  | j                        gS )r_   rW   )r4   r   r)   r   )r   r8   ra   s      r   find_commentszApacheBlockNode.find_comments   s+    !*//+/+5??+/==: ; 	;r   childc                      y)z2Deletes a ParserNode from the sequence of childrenNr   )r   rd   s     r   delete_childzApacheBlockNode.delete_child   rJ   r   c                 $    t         j                  gS )z#Returns a list of unsaved filepathsr   r)   r   s    r   unsaved_fileszApacheBlockNode.unsaved_files         r   c                 $    t         j                  gS )z1Returns a list of parsed configuration file pathsrh   ri   s    r   parsed_pathszApacheBlockNode.parsed_paths   rk   r   )NN)T)F)r,   r-   r.   r/   r   r   r?   r>   r0   r   r   intrR   rA   rU   r4   rY   r]   r`   rc   r   rf   rj   rm   r1   r2   s   @r   r(   r(   X   sg   >9 9 9
C 
D 
 LP26	C 	Xd3i5H 	"*3-	;L	 PT6:
 
$s)9L 
&.sm
	
 VZ

%-c]
EMc]
	
9 9d 9dCT>U 9=C =$ =$GZB[ =;S ; ;$GXBY ;*  !tCy !!d3i !r   r(   N)r/   typingr   r   r   r   r   certbot_apache._internalr   r	   r
   r   #certbot_apache._internal.interfacesr   r   r4   rA   r(   CommentNoderegisterDirectiveNode	BlockNoder   r   r   <module>rv      s    @      / / < :9z,, 9:( $* 6[!) [!|      1 2 
   ! !"5 6 
    o .r   