
    Eth$                         d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 ddlm
Z
mZ  G d dej                  Zd	 Z G d
 de          Z G d de          Zd ZdS )a?  
SAX-based adapter to copy trees from/to the Python standard library.

Use the `ElementTreeContentHandler` class to build an ElementTree from
SAX events.

Use the `ElementTreeProducer` class or the `saxify()` function to fire
the SAX events of an ElementTree against a SAX ContentHandler.

See https://lxml.de/sax.html
    )absolute_import)ContentHandler)etree)ElementTree
SubElement)CommentProcessingInstructionc                       e Zd ZdZdS )SaxErrorzGeneral SAX error.
    N)__name__
__module____qualname____doc__     \/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/lxml/sax.pyr   r      s           r   r   c                 x    | d         dk    r+t          | dd                              dd                    S d | fS )Nr   {   })tuplesplit)tags    r   	_getNsTagr      s=    
1v}}SW]]3**+++Syr   c                       e Zd ZdZddZd Z eeej                  Zd Zd Z	d Z
d	 Zd
 Zd ZddZd Zd ZddZd Zd ZeZdS )ElementTreeContentHandlerz/Build an lxml ElementTree from SAX events.
    Nc                     t          j        |            d | _        g | _        g | _        d | _        d d gi| _        i | _        |t          j	        }|| _
        d S N)r   __init___root_root_siblings_element_stack_default_ns_ns_mapping_new_mappingsr   Element_makeelement)selfmakeelements     r   r   z"ElementTreeContentHandler.__init__&   sd    %%%
  !TF,-K'r   c                 *    t          | j                  S )z=Contains the generated ElementTree after parsing is finished.)r   r    r(   s    r   
_get_etreez$ElementTreeContentHandler._get_etree2   s    4:&&&r   )docc                     d S r   r   )r(   locators     r   setDocumentLocatorz,ElementTreeContentHandler.setDocumentLocator8       r   c                     d S r   r   r+   s    r   startDocumentz'ElementTreeContentHandler.startDocument;   r1   r   c                     d S r   r   r+   s    r   endDocumentz%ElementTreeContentHandler.endDocument>   r1   r   c                     || j         |<   	 | j        |                             |           n# t          $ r |g| j        |<   Y nw xY w|	|| _        d S d S r   )r%   r$   appendKeyErrorr#   )r(   prefixuris      r   startPrefixMappingz,ElementTreeContentHandler.startPrefixMappingA   s}    %(6"	-V$++C0000 	- 	- 	-(+uDV$$$	->"D >s    - AAc                 j    | j         |         }|                                 ||d         | _        d S d S N)r$   popr#   )r(   r9   ns_uri_lists      r   endPrefixMappingz*ElementTreeContentHandler.endPrefixMappingJ   s=    &v.>*2D >r   c                 N    |\  }}|rd|z  }n| j         rd| j         d|}n|}|S )N{%s}%sr   r   )r#   )r(   ns_name_tuplens_uri
local_nameel_tags        r   	_buildTagz#ElementTreeContentHandler._buildTagP   sQ    *
 	 -FF 	  	 !%!1!1!1::>FFFr   c                 r   |                      |          }|r`i }	 |                                }n$# t          $ r |                                }Y nw xY w|D ] \  }}|d         rd|z  }	n|d         }	|||	<   !nd }| j        }
| j        d|                     ||| j                  x}| _        | j        r/t          |d          r| j        D ]}|
                    |           | j        d d = nt          |
d         ||| j                  }|
                    |           | j                                         d S )Nr   rC   r   addpreviousr>   )rH   	iteritemsAttributeErroritemsr"   r    r'   r%   r!   hasattrrJ   r   r7   clear)r(   ns_nameqname
attributesel_nameattrsiter_attributes
name_tuplevalue	attr_nameelement_stackelementsiblings                r   startElementNSz(ElementTreeContentHandler.startElementNSZ   s   ..)) 	E5","6"6"8"8! 5 5 5","2"2"4"45 &5 ) )!
Ea= . (: 5II *1I#(i  ) E+:''8JKKLGdj" 1ww'F'F 1#2 1 1G''0000#AAA&& r!2G!&(:< <GW%%%  """""s   0 AAc                     t          ||          }| j        | j                            |           d S | j        d                             |           d S r=   )r	   r    r!   r7   r"   )r(   targetdatapis       r   processingInstructionz/ElementTreeContentHandler.processingInstruction{   sX    "6400:&&r*****#**2.....r   c                     | j                                         }|                     |          }||j        k    rt	          d|z             d S )NzUnexpected element closed: )r"   r?   rH   r   r   )r(   rP   rQ   rZ   rG   s        r   endElementNSz&ElementTreeContentHandler.endElementNS   sP    %))++((W[  86ABBB ! r   c                     |r+t          d |                                D                       }|                     d |f||           d S )Nc                      g | ]\  }}d |f|fS r   r   ).0kvs      r   
<listcomp>z:ElementTreeContentHandler.startElement.<locals>.<listcomp>   s$    CCC1tQi^CCCr   )dictrM   r\   )r(   namerR   s      r   startElementz&ElementTreeContentHandler.startElement   sZ     	CC
0@0@0B0BCCC J 	T4L$
;;;;;r   c                 6    |                      d |f|           d S r   )rc   )r(   rk   s     r   
endElementz$ElementTreeContentHandler.endElement   s"    4,-----r   c                     | j         d         }	 |d         }|j        pd|z   |_        d S # t          $ r |j        pd|z   |_        Y d S w xY w)Nr>    )r"   tail
IndexErrortext)r(   r_   last_elements      r   
charactersz$ElementTreeContentHandler.characters   sw    *2.	A'+L!-!2!8bD @L 	A 	A 	A!-!2!8bD @L	As   * A	A	r   )r   r   r   r   r   r,   propertyr   r0   r3   r5   r;   rA   rH   r\   ra   rc   rl   rn   ru   ignorableWhitespacer   r   r   r   r   #   s#        
( 
( 
( 
(' ' ' HZZ%7888E      # # #/ / /  # # # #B/ / /C C C< < < <. . .A A A %r   r   c                   *    e Zd ZdZd Zd Zd Zd ZdS )ElementTreeProducerz5Produces SAX events for an element and children.
    c                     	 |                                 }n# t          $ r |}Y nw xY w|| _        || _        ddlm} || _         |i i           | _        d S )Nr   )AttributesNSImpl)getrootrL   _element_content_handlerxml.sax.xmlreaderr{   _attr_class_empty_attributes)r(   element_or_treecontent_handlerrZ   
attr_classs        r   r   zElementTreeProducer.__init__   s    	&%--//GG 	& 	& 	&%GGG	& /DDDDDD%!+B!3!3s    &&c                    | j                                          | j        }t          |d          rg }|                                }t          |dd           t          u rA|                    |           |                                }t          |dd           t          u A|d d d         D ]}|                     |i            |                     |i            t          |d          rn|	                                }t          |dd           t          u rB|                     |i            |	                                }t          |dd           t          u B| j         
                                 d S )Ngetpreviousr   r>   getnext)r~   r3   r}   rN   r   getattrr	   r7   _recursive_saxifyr   r5   )r(   rZ   siblingsr[   s       r   saxifyzElementTreeProducer.saxify   sz   ++----7M** 	4H))++G'5$//3HHH(((!--// '5$//3HHH $DDbD> 4 4&&w3333w+++7I&& 	,oo''G'5$//3HHH&&w333!//++ '5$//3HHH 	))+++++r   c                 p   | j         }|j        }|t          u s	|t          u rI|t          u r |                    |j        |j                   |j        }|r|                    |           d S |j	        }g }||k    rJ|
                                D ]5\  }}	|                    |          |	k    r|                    ||	f           6|
                                }
|
r`i }i }|
D ]B\  }}t          |          }|||<   |                     |d         |d         |d d          ||<   C|                     ||          }n| j        }t          |          \  }	}|                     |	|||j        d          }|D ]\  }}|                    ||           |                    |	|f||           |j        }|r|                    |           |D ]}|                     ||           |                    |	|f|           |D ]\  }}|                    |           |j        }|r|                    |           d S d S )Nr   r   T)preferred_prefixis_attributeF)r   )r~   r   r   r	   ra   r^   rs   rq   ru   nsmaprM   getr7   r   _build_qnamer   r   r9   r;   r\   r   rc   rA   )r(   rZ   parent_nsmapr   r   rq   element_nsmapnew_prefixesr9   rE   attribsattr_valuesattr_qnamesattr_ns_namerW   attr_ns_tuplesax_attributesrF   rQ   r:   rs   childs                         r   r   z%ElementTreeProducer._recursive_saxify   s   /k'>>S$999+++55NGL2 2 2<D 1**4000FL(("/"5"5"7"7 < <##F++v55 ''&&)9;;;--// 	4KK'. > >#e ), 7 7-2M*-1->->!!$mA&6%) .? .> .>M** "--k;GGNN!3N&s^^
!!Jw~E " S S ( 	< 	<KFC..vs;;;;&&Z %	9 	9 	9| 	-&&t,,, 	9 	9E""5-8888$$fj%95AAA' 	5 	5KFC,,V4444| 	-&&t,,,,,	- 	-r   c                     |S |s|                     |          k    r|}nNfd|                                D             }t          |          dk    r|d         n|rt          |          nd }||S |dz   |z   S )Nc                 *    g | ]\  }}||k    |S r   r   )rf   pfxr:   rE   s      r   ri   z4ElementTreeProducer._build_qname.<locals>.<listcomp>  s2       "c?sf}} '4}}r   r   r   :)r   rM   lenmin)r(   rE   rF   r   r   r   r9   
candidatess    `      r   r   z ElementTreeProducer._build_qname   s    > 			*: ; ;v E E%FF   &+kkmm  J
 "%ZA!5!5
1(2 S___  >|j((r   N)r   r   r   r   r   r   r   r   r   r   r   ry   ry      s[         	4 	4 	4, , ,.4- 4- 4-l) ) ) ) )r   ry   c                 F    t          | |                                          S )zlOne-shot helper to generate SAX events from an XML tree and fire
    them against a SAX ContentHandler.
    )ry   r   )r   r   s     r   r   r     s      @@GGIIIr   N)r   
__future__r   xml.sax.handlerr   lxmlr   
lxml.etreer   r   r   r	   	LxmlErrorr   r   r   objectry   r   r   r   r   <module>r      s6  
 
 ' & & & & & * * * * * *       . . . . . . . . 5 5 5 5 5 5 5 5    u   
  y% y% y% y% y% y% y% y%xp) p) p) p) p)& p) p) p)fJ J J J Jr   