
    \j57                     r   d dl Z d dlmZmZ 	 d dlmZ dZdZ	dZ
e j                  d    dk(  reZeZ G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z e       Z e       Z e       Z e       Z e       Z e       Zy# e$ r	 d dlmZ Y w xY w)    N)CounterOrderedDict)ElementzS Anandzroot.node@gmail.comz0.2.1   c                   N    e Zd Z	 	 	 ddZd Zed        Zed        Zd	dZd Z	y)
XMLDataNc
                 V   t        |      r|| _        n
|sd | _        t        |      r|| _        |t        n|| _        |t
        n|| _        |t        n|| _        || _        || _	        || _
        |	dk(  r#| j                  | _        | j                  | _        y |	t        d|	z        y )Nc                     | S N )vs    :/root/env/lib/python3.12/site-packages/xmljson/__init__.py<lambda>z"XMLData.__init__.<locals>.<lambda>   s         dropz,invalid_tags can be "drop" or None, not "%s")callable_fromstring	_tostringr   elementr   dictlistattr_prefixtext_contentsimple_text_element_make_valid_element	TypeError)
selfxml_fromstringxml_tostringr   	dict_type	list_typer   r   r   invalid_tagss
             r   __init__zXMLData.__init__   s     N#-D*DL!)DN")/ww#,#4K)	%-D9	&( '6! LLDM33DL%J\YZZ &r   c                 P    	 | j                  |      S # t        t        f$ r Y y w xY wr   )r   r   
ValueError)r   keys     r   r   zXMLData._make_valid_element6   s-    	==%%:& 		s    %%c                 d    | du rd} t        |       S | du rd} t        |       S | d} t        |       S )z&Convert value to XML compatible stringTtrueFfalse )unicodevalues    r   r   zXMLData._tostring<   sL     D=E
 u~	 e^E u~ ]Eu~r   c                     | y| j                         dk(  ry| j                         dk(  ry	 t        |       S # t        $ r Y nw xY w	 t        d      t        |       cxk  rt        d      k  rn | S t        |       S 	 | S # t        $ r Y | S w xY w)z7Convert XML string value to None, boolean, int or floatNr)   Tr*   Fz-infinf)lowerintr&   floatr-   s    r   r   zXMLData._fromstringG   s     = ;;=F"[[]g%	u: 			V}uU|:eEl:
 	 U|# ;
   		s'   
8 	AA(B  2
B   	BBc           	         || j                         n|}t        || j                  t        f      r|j                         D ]  \  }}t        || j                   t         f      }t        || j                  t        f      }|| j                  e|j                  | j                        rJ|j                  | j                        }|rt        d      |j                  || j                  |             | j                  &|| j                  k(  r| j                  |      |_        | j                  3| j                  '|s%|s#|j                  || j                  |             #|r|n|g}|D ]  }| j                  |      }	|	|j                  |	       t        || j                  t        | j                   t         f      s| j                  r| j                  |i}| j                  ||	         |S | j                  || j                  |      |_        |S | j                  | j                  |            }	|	|j                  |	       |S )3Convert data structure into a list of etree.Elementz XML namespaces not yet supportedroot)r   
isinstancer   itemsr   
startswithlstripr&   setr   r   textr   appendetree)
r   datar7   resultr'   r.   value_is_listvalue_is_dictvalueselems
             r   r?   zXMLData.etreec   s    $$dTYY-."jjl $1
U *5499d2C D *5499d2C D#''3>>$*:*:;"%**T-=-=">C,&01S&T T &

3u0E F$((4$"3"33*...*?FK$''/D4E4E4Q,]"JJsDNN5,AB$"/eW# 	1E<<,D| MM$'%ediityy$-OP,,%)%6%6$>EJJu4J0	17$1X    (T-= NN40	
  ||DNN4$89#MM$'r   c                    | j                         }|D cg c]  }t        |j                  t              s|! }}|j                  j                         D ]6  \  }}| j                  |n| j                  |z   }| j                  |      ||<   8 |j                  r| j                  |j                  }|j                         rf| j                  r<t        |      t        |j                        cxk(  rdk(  rn n| j                  |      }n| j                  |      || j                  <   t        d |D              }|D ]  }	||	j                     dk(  r!|j                  | j                  |	             6|j!                  |	j                  | j#                               }
|
| j                  |	      j%                         z  }
 t        |t               r|s| j                  rd}| j                  |j                  |fg      S c c}w )'Convert etree.Element into a dictionaryr   c              3   4   K   | ]  }|j                     y wr   tag.0childs     r   	<genexpr>zXMLData.data.<locals>.<genexpr>        8e		8      r+   )r   r8   rJ   
basestringattribr9   r   r   r=   r   stripr   lenr   updater@   
setdefaultr   rD   )r   r7   r.   nodechildrenattrattrvalr=   countrM   rA   s              r   r@   zXMLData.data   s   		%)NTZ*-MDNN![[..0 	4MD'++349I9ID9PD**73E$K	4 99**699Dzz|##HT[[9I(NQ(N ,,T2E/3/?/?/EE$++,8x88 	4EUYY1$TYYu-.))%))TYY[A$))E*1133	4 eT"5T5E5EEyy488U+,--+ Os
   G>G>)	TTNNNNNFNr   )
__name__
__module____qualname__r$   r   staticmethodr   r   r?   r@   r   r   r   r   r      sJ    W[RW"[B    60d.r   r   c                   "     e Zd ZdZ fdZ xZS )
BadgerFishz=Converts between XML and data using the BadgerFish conventionc                 2    t        t        | 
  dddd| y )N@$)r   r   r   )superrb   r$   r   kwargs	__class__s     r   r$   zBadgerFish.__init__   s    j$(USsUfUr   r]   r^   r_   __doc__r$   __classcell__ri   s   @r   rb   rb      s    GV Vr   rb   c                   "     e Zd ZdZ fdZ xZS )GDataz8Converts between XML and data using the GData conventionc                 0    t        t        | 
  dddi| y )Nr   z$tr   )rf   ro   r$   rg   s     r   r$   zGData.__init__   s    eT#@@@r   rj   rm   s   @r   ro   ro      s    BA Ar   ro   c                   "     e Zd ZdZ fdZ xZS )Yahooz8Converts between XML and data using the Yahoo conventionc                 V    |j                  dd       t        t        |   dddd| y )Nr   FcontentT)r   r   r   )rW   rf   rr   r$   rg   s     r   r$   zYahoo.__init__   s.    *E2eT#WWPVWr   rj   rm   s   @r   rr   rr      s    BX Xr   rr   c                   *     e Zd ZdZ fdZddZ xZS )Parkerz9Converts between XML and data using the Parker conventionc                 ,    t        t        | 
  di | y )Nr   )rf   rv   r$   rg   s     r   r$   zParker.__init__   s    fd$.v.r   c                 J   |r&|j                  di       }|j                  d|       |}|D cg c]  }t        |j                  t              s|! }}t        |      dk(  r| j                  |j                        S t        d |D              }| j                         }|D ]{  }||j                     dk(  r| j                  |      ||j                  <   4|j                  |j                  | j                               j                  | j                  |             } |S c c}w )rG   
dummy_rootr   c              3   4   K   | ]  }|j                     y wr   rI   rK   s     r   rN   zParker.data.<locals>.<genexpr>   rO   rP   rQ   )makeelementinsertr8   rJ   rR   rU   r   r=   r   r   r@   rW   r   r>   )	r   r7   preserve_rootnew_rootrX   rY   r\   rA   rM   s	            r   r@   zParker.data   s     ''b9HOOAt$D &*NTZ*-MDNNx=A##DII.. 8x88 	SEUYY1$$(IIe$4uyy!!!%))TYY[9@@5AQR		S  Os   D D )Fr]   r^   r_   rk   r$   r@   rl   rm   s   @r   rv   rv      s    C/r   rv   c                   (     e Zd ZdZ fdZd Z xZS )Abderaz9Converts between XML and data using the Abdera conventionc                 2    t        t        | 
  dddd| y )NT)r   r   r   )rf   r   r$   rg   s     r   r$   zAbdera.__init__   s    fd$SDSFSr   c                    | j                         }|j                  rU| j                         |d<   |j                  j                         D ]%  \  }}| j                  |      |d   t	        |      <   ' | j                         }|D cg c]  }t        |j                  t              s|! }}|j                  r| j                  v|j                  }|j                         rZ| j                  r<t        |      t        |j                        cxk(  rdk(  rn n| j                  |      }n| j                  |      g}|D ]$  }	| j                  |	      }
|j                  |
       & t        |j                        dk(  rt        |      dk(  r|d   }nt        |      dkD  r||d<   | j                  t	        |j                        |fg      S c c}w )rG   
attributesr   rQ   rY   )r   rS   r9   r   r,   r   r8   rJ   rR   r=   r   rT   r   rU   r@   r>   )r   r7   r.   rZ   r[   children_listrX   rY   r=   rM   
child_datas              r   r@   zAbdera.data   s    		 ;;"&))+E,!%!2!2!4 Og595E5Eg5Nl#GDM2O 		%)NTZ*-MDNN 99**699Dzz|##HT[[9I(NQ(N ,,T2E%)%5%5d%;$>M 	-E5)J  ,	-
 t{{q S%71%<!!$E!# -E*yy7488,e4566- Os   G	&G	r   rm   s   @r   r   r      s    CT#7r   r   c                   0     e Zd ZdZ fdZddZd Z xZS )Cobraz8Converts between XML and data using the Cobra conventionc                 4    t        t        | 
  ddddd| y )NTF)r   r   r   r   )rf   r   r$   rg   s     r   r$   zCobra.__init__  s)    eT# 	D438	D<B	Dr   c                    || j                         n|}t        || j                  t        f      r|j                         D ]  \  }}t        || j                  t        f      r| j	                  |      }|6|j                  |       d|v r<|d   j                         D ]&  \  }}|j                  || j                  |             ( d|v s|d   D ]  }| j                  ||        | j	                  |      }|| j                  |      |_	        |j                  |        |S || j                  |      |_	        |S | j	                  | j                  |            }||j                  |       |S )r5   r   rY   r6   )
r   r8   r   r9   r   r>   r<   r   r?   r=   )	r   r@   r7   rA   r'   r.   rE   kr   s	            r   r?   zCobra.etree  sl    $$dTYY-."jjl (
Uedii%67<<,D| MM$'#u,$),$7$=$=$? ;DAq HHQq(9:;
 "U*!&z!2 5A JJqtJ45  <<,D|  $u 5DIMM$'+(<   NN40	 	 ||DNN4$89#MM$'r   c                    | j                         }| j                         |d<   |j                  r8t        |j                        D ]   }|j                  |   |d   t        |      <   " | j	                         }|D cg c]  }t        |j                  t              s|! }}|j                  r| j                  v|j                  }|j                         rZ| j                  r<t        |      t        |j                        cxk(  rdk(  rn n| j                  |      }n| j                  |      g}t        d |D              }|D ]{  }	| j                  |	      }
||	j                     dk(  r6t        |      dkD  r(t        |d   t               r|d   j!                  |
       \|j#                  | j                  |	             } t        |      dkD  r||d<   | j                  t        |j                        |fg      S c c}w )rG   r   r   c              3   4   K   | ]  }|j                     y wr   rI   rK   s     r   rN   zCobra.data.<locals>.<genexpr>R  rO   rP   rQ   rY   )r   rS   sortedr,   r   r8   rJ   rR   r=   r   rT   r   rU   r   r   r@   rV   r>   )r   r7   r.   rZ   r   rX   rY   r=   r\   rM   r   s              r   r@   z
Cobra.data:  s    		 #iikl;;t{{+ G59[[5Fl#GDM2G 		%)NTZ*-MDNN 99**699Dzz|##HT[[9I(NQ(N ,,T2E%)%5%5d%;$>M8x88 		7E5)Jeii A%&*}R0$7b!((4 $$TYYu%56		7 }! -E*yy7488,e45665 Os   <G<G<r   )r]   r^   r_   rk   r$   r?   r@   rl   rm   s   @r   r   r     s    BD"H'7r   r   )syscollectionsr   r   
lxml.etreer   ImportErrorxml.etree.cElementTree
__author__	__email____version__version_infostrr,   rR   objectr   rb   ro   rr   rv   r   r   abdera
badgerfishcobragdataparkeryahoor   r   r   <module>r      s     ,/" 
!	 A!GJY.f Y.xV VAG AXG XW >(7W (7\Q7G Q7h 
\
	E  /./s   B( (B65B6