
    >h%                         d 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	 	 ddl
mZ  G d d	ej                        Zd
 Z G d de      Z G d d      Zd Zy# e$ r d ZY ;w xY w)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
    )ContentHandler)etree)ElementTree
SubElement)CommentProcessingInstruction)GenericAliasc                 :    | j                    d|j                    dS )N[])__name__clsitems     I/var/www/html/bid_assistant/venv/lib/python3.12/site-packages/lxml/sax.py_GenericAliasr      s    ,,qq11    c                       e Zd ZdZy)SaxErrorzGeneral SAX error.
    N)r   
__module____qualname____doc__ r   r   r   r      s    r   r   c                 V    | d   dk(  rt        | dd  j                  dd            S d | fS )Nr   {   })tuplesplit)tags    r   	_getNsTagr!   "   s3    
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 Zy)ElementTreeContentHandlerz/Build an lxml ElementTree from SAX events.
    Nc                     t        j                  |        d | _        g | _        g | _        d | _        d d gi| _        i | _        |t        j                  }|| _
        y N)r   __init___root_root_siblings_element_stack_default_ns_ns_mapping_new_mappingsr   Element_makeelement)selfmakeelements     r   r&   z"ElementTreeContentHandler.__init__,   s]    %
  !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_etree8   s    4::&&r   )docc                      y r%   r   )r/   locators     r   setDocumentLocatorz,ElementTreeContentHandler.setDocumentLocator>       r   c                      y r%   r   r2   s    r   startDocumentz'ElementTreeContentHandler.startDocumentA   r8   r   c                      y r%   r   r2   s    r   endDocumentz%ElementTreeContentHandler.endDocumentD   r8   r   c                     || j                   |<   	 | j                  |   j                  |       ||| _        y y # t        $ r |g| j                  |<   Y &w xY wr%   )r,   r+   appendKeyErrorr*   )r/   prefixuris      r   startPrefixMappingz,ElementTreeContentHandler.startPrefixMappingG   sg    %(6"	-V$++C0 >"D   	-(+uDV$	-s   : AAc                 \    | j                   |   }|j                          ||d   | _        y y N)r+   popr*   )r/   r@   ns_uri_lists      r   endPrefixMappingz*ElementTreeContentHandler.endPrefixMappingP   s2    &&v.>*2D r   c                 f    |\  }}|rd|z  }|S | j                   rd| j                   d|}|S |}|S )N{%s}%sr   r   )r*   )r/   ns_name_tuplens_uri
local_nameel_tags        r   	_buildTagz#ElementTreeContentHandler._buildTagV   sN    *
-F
 	 !%!1!1:>F   Fr   c                 l   | j                  |      }|r3i }	 |j                         }|D ]  \  }}|d   rd|z  }	n|d   }	|||	<    nd }| j                  }
| j
                  n| j                  ||| j                        x}| _        | j                  r.t        |d      r"| j                  D ]  }|j                  |        | j                  d d = nt        |
d   ||| j                        }|
j                  |       | j                  j                          y # t        $ r |j                         }Y w xY w)Nr   rJ   r   addpreviousrE   )rO   	iteritemsAttributeErroritemsr)   r'   r.   r,   r(   hasattrrQ   r   r>   clear)r/   ns_nameqname
attributesel_nameattrsiter_attributes
name_tuplevalue	attr_nameelement_stackelementsiblings                r   startElementNSz(ElementTreeContentHandler.startElementNS`   sE   ..)E5","6"6"8 &5 )!
Ea= (: 5I *1I#(i ) E++::''8J8JKLGdj""ww'F#22 1G''01##A& r!2G!&(:(:<GW%  "3 " 5","2"2"45s   D D32D3c                     t        ||      }| j                  | j                  j                  |       y | j                  d   j                  |       y rD   )r   r'   r(   r>   r)   )r/   targetdatapis       r   processingInstructionz/ElementTreeContentHandler.processingInstruction   sE    "640::&&r*#**2.r   c                     | j                   j                         }| j                  |      }||j                  k7  rt	        d|z         y )NzUnexpected element closed: )r)   rF   rO   r    r   )r/   rW   rX   ra   rN   s        r   endElementNSz&ElementTreeContentHandler.endElementNS   sF    %%))+(W[[ 86ABB !r   c                     |r%|j                         D ci c]
  \  }}d |f| }}}| j                  d |f||       y c c}}w r%   )rT   rc   )r/   namerY   kvs        r   startElementz&ElementTreeContentHandler.startElement   sI    3=3C3C3EF41a4)Q,FJFT4L$
; Gs   >c                 ,    | j                  d |f|       y r%   )rj   )r/   rl   s     r   
endElementz$ElementTreeContentHandler.endElement   s    4,-r   c                     | j                   d   }	 |d   }|j                  xs d|z   |_        y # t        $ r |j                  xs d|z   |_        Y y w xY w)NrE    )r)   tail
IndexErrortext)r/   rf   last_elements      r   
charactersz$ElementTreeContentHandler.characters   sc    **2.	A'+L!-!2!2!8bD @L 	A!-!2!2!8bD @L	As   / !AAc                     t        | |      S r%   )r   r   s     r   __class_getitem__z+ElementTreeContentHandler.__class_getitem__   s    S$''r   r%   )r   r   r   r   r&   r3   propertyr   r7   r:   r<   rB   rH   rO   rc   rh   rj   ro   rq   rx   ignorableWhitespacerz   r   r   r   r#   r#   )   sq    
(' ZZ%7%78E#/#B/C<
.A %(r   r#   c                   (    e Zd ZdZd Zd Zd Zd Zy)ElementTreeProducerz5Produces SAX events for an element and children.
    c                     	 |j                         }|| _        || _        ddlm} || _         |i i       | _        y # t        $ r |}Y 7w xY w)Nr   )AttributesNSImpl)getrootrS   _element_content_handlerxml.sax.xmlreaderr   _attr_class_empty_attributes)r/   element_or_treecontent_handlerra   
attr_classs        r   r&   zElementTreeProducer.__init__   sV    	&%--/G   /D%!+B!3  	&%G	&s   < A
	A
c                 |   | j                   j                          | j                  }t        |d      ryg }|j	                         }t        |dd       t        u r5|j                  |       |j	                         }t        |dd       t        u r5|d d d   D ]  }| j                  |i         | j                  |i        t        |d      rY|j                         }t        |dd       t        u r6| j                  |i        |j                         }t        |dd       t        u r6| j                   j                          y )Ngetpreviousr    rE   getnext)r   r:   r   rU   r   getattrr   r>   _recursive_saxifyr   r<   )r/   ra   siblingsrb   s       r   saxifyzElementTreeProducer.saxify   s!   ++---7M*H))+G'5$/3HH(!--/ '5$/3HH $DbD> 4&&w34 	w+7I&oo'G'5$/3HH&&w3!//+ '5$/3HH 	))+r   c                 >   | j                   }|j                  }|t        u s|t        u rN|t        u r&|j	                  |j
                  |j                         |j                  }|r|j                  |       y |j                  }g }||k7  r@|j                         D ]-  \  }}	|j                  |      |	k7  s|j                  ||	f       / |j                         }
|
rPi }i }|
D ]4  \  }}t        |      }|||<   | j                  |d   |d   |d d      ||<   6 | j                  ||      }n| j                   }t        |      \  }	}| j                  |	|||j"                  d      }|D ]  \  }}|j%                  ||        |j'                  |	|f||       |j                  }|r|j                  |       |D ]  }| j)                  ||        |j+                  |	|f|       |D ]  \  }}|j-                  |        |j                  }|r|j                  |       y y )Nr   r   T)preferred_prefixis_attributeF)r   )r   r    r   r   rh   re   rv   rt   rx   nsmaprT   getr>   r!   _build_qnamer   r   r@   rB   rc   r   rj   rH   )r/   ra   parent_nsmapr   r    rt   element_nsmapnew_prefixesr@   rL   attribsattr_valuesattr_qnamesattr_ns_namer^   attr_ns_tuplesax_attributesrM   rX   rA   rv   childs                         r   r   z%ElementTreeProducer._recursive_saxify   sO   //kk'>S$99++55NNGLL2<<D**40L("/"5"5"7 <##F+v5 ''&&)9;< --/KK'. >#e ), 7-2M*-1->->!!$mA&6%) .? .>M*> "--k;GN!33N&s^
!!Jw~~E " S ( 	<KFC..vs;	<&&Z %	9||&&t, 	9E""5-8	9$$fj%95A' 	5KFC,,V4	5||&&t, r   c                     ||S |s|j                  |      |k(  r|}nK|j                         D cg c]  \  }}|||k(  r| }	}}t        |	      dk(  r|	d   n|	rt        |	      nd }||S |dz   |z   S c c}}w )Nr   r   :)r   rT   lenmin)
r/   rL   rM   r   r   r   r@   pfxrA   
candidatess
             r   r   z ElementTreeProducer._build_qname  s    >		*: ;v E%F ',kkm"c?sf} J 
 "%ZA!5
1(2S_  >|j((s   A5N)r   r   r   r   r&   r   r   r   r   r   r   r~   r~      s    	4,.4-l)r   r~   c                 6    t        | |      j                         S )zlOne-shot helper to generate SAX events from an XML tree and fire
    them against a SAX ContentHandler.
    )r~   r   )r   r   s     r   r   r     s     @GGIIr   N)r   xml.sax.handlerr   lxmlr   
lxml.etreer   r   r   r   typesr	   r   ImportError	LxmlErrorr   r!   r#   r~   r   r   r   r   <module>r      sn   
 +  . 523u 
{( {(|p) p)fJG  222s   A A"!A"