o
    Óó·i“Q  ã                   @   s€   d Z ddlmZ ddlmZ dZdZdZdZed Z	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZG dd„ deƒZdS )aÒ  
*S*mall, *U*ncomplicated *X*ML.

This is a very simple implementation of XML/HTML as a network
protocol.  It is not at all clever.  Its main features are that it
does not:

  - support namespaces
  - mung mnemonic entity references
  - validate
  - perform *any* external actions (such as fetching URLs or writing files)
    under *any* circumstances
  - has lots and lots of horrible hacks for supporting broken HTML (as an
    option, they're not on by default).
é    )ÚProtocol©ÚprefixedMethodNamesé   é   z.-_:z;+#/%~c                  O   ó   dS )zDo nothing.N© )ÚargsÚkwr   r   úUC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/web/sux.pyÚnop$   s    r   c                  G   s.   g }| D ]}|  |¡ qdd„ |D ƒ}| ¡ S )Nc                 S   s   i | ]}|d “qS )r   r   ©Ú.0Úxr   r   r   Ú
<dictcomp>,   s    zunionlist.<locals>.<dictcomp>)ÚextendÚkeys)r	   Úlr   Údr   r   r   Ú	unionlist(   s
   r   c                     sH   |  dt¡‰ i }tdd„ | D ƒŽ D ]‰t‡ ‡fdd„| D ƒƒ|ˆ< q|S )NÚdefaultc                 s   s   � | ]}|  ¡ V  qd S ©N)r   )r   Zfndictr   r   r   Ú	<genexpr>3   s   € zzipfndict.<locals>.<genexpr>c                 3   s   � | ]	}|  ˆˆ ¡V  qd S r   )Úgetr   ©r   Úkeyr   r   r   4   s   € )r   r   r   Útuple)r	   r
   r   r   r   r   Ú	zipfndict0   s
   r   c                    s   ‡ ‡fdd„t ˆ ˆƒD ƒS )Nc                    ó   i | ]
}|t ˆ ˆ| ƒ“qS r   ©Úgetattr©r   Úname©ZclazzÚprefixr   r   r   9   ó    ÿÿz+prefixedMethodClassDict.<locals>.<dictcomp>r   r#   r   r#   r   ÚprefixedMethodClassDict8   s   þr&   c                    s   ‡ ‡fdd„t ˆ jˆƒD ƒS )Nc                    r   r   r   r!   ©Úobjr$   r   r   r   @   r%   z)prefixedMethodObjDict.<locals>.<dictcomp>)r   Ú	__class__r'   r   r'   r   ÚprefixedMethodObjDict?   s   
þr*   c                   @   s"   e Zd Zdd„ Zdefdd„ZdS )Ú
ParseErrorc                 C   s   || _ || _|| _|| _d S r   ©ÚfilenameÚlineÚcolÚmessage)Úselfr-   r.   r/   r0   r   r   r   Ú__init__G   ó   
zParseError.__init__Úreturnc                 C   s"   | j › d| j› d| j› d| j› �S )Nú:z: r,   ©r1   r   r   r   Ú__str__M   s   "zParseError.__str__N)Ú__name__Ú
__module__Ú__qualname__r2   Ústrr7   r   r   r   r   r+   F   s    r+   c                   @   sì  e Zd ZdZdZdZdZdZdZdd„ Z	dd„ Z
dd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Z d4d5„ Z!d6d7„ Z"d8d9„ Z#d:d;„ Z$d<Z%d<Z&d=d>„ Z'd?d@„ Z(dAdB„ Z)dCdD„ Z*dEdF„ Z+dGdH„ Z,dIdJ„ Z-dKdL„ Z.dMdN„ Z/dOdP„ Z0dQdR„ Z1dSdT„ Z2dUdV„ Z3dWdX„ Z4dYdZ„ Z5d[d\„ Z6d]d^„ Z7d_d`„ Z8dadb„ Z9dcdd„ Z:e2Z;e3Z<dedf„ Z=dgdh„ Z>didj„ Z?dkdl„ Z@dmdn„ ZAdodp„ ZBdqdr„ ZCdS )sÚ	XMLParserNz<xml />r   c                 C   s   d| _ d| _g | _d S )Nr   r   )ÚlinenoÚcolnoÚ	encodingsr6   r   r   r   ÚconnectionMade]   ó   
zXMLParser.connectionMadec                 C   s   | j | jfS )z;Get the line number and column of the last character parsedN)r=   r>   r6   r   r   r   ÚsaveMarkb   s   zXMLParser.saveMarkc                 C   s   t | jf|  ¡  |f Ž ‚r   )r+   r-   rB   )r1   r0   r   r   r   Ú_parseErrorg   s   zXMLParser._parseErrorc                    s8   t ˆ jddƒ}|du rt‡ fdd„dD ƒŽ  }ˆ j_|S )z;Return a dictionary of begin, do, end state function tuplesZ__stateTableNc                 3   s   � | ]}t ˆ |ƒV  qd S r   )r*   )r   r$   r6   r   r   r   r   s
   € ÿ
ÿz-XMLParser._buildStateTable.<locals>.<genexpr>)Úbegin_Zdo_Úend_)r    r)   r   Z_XMLParser__stateTable)r1   Ú
stateTabler   r6   r   Ú_buildStateTablej   s   
þÿzXMLParser._buildStateTablec                 C   sR   d| j v s
d| j v rt|ƒd@ rJ dƒ‚| jr| j| }| j D ]}t||ƒ}q|S )NúUTF-16zUCS-2r   z!UTF-16 must come in pairs for now)r?   ÚlenÚ_prependr;   )r1   ÚdataÚencodingr   r   r   Ú_decodey   s   

zXMLParser._decodec                 C   s0   | j rdS | jdkrd| jvr|  d ¡ dS dS )NÚbodydataÚscriptÚsrcÚwaitforendscript)ÚendtagÚtagNameÚtagAttributesÚbegin_bodydatar6   r   r   r   ÚmaybeBodyData‚   s   

zXMLParser.maybeBodyDatac              	      s6  |   ¡ }| js"| d¡r|dd… | _| j d¡ |dd … }d| _| jr+|  |¡}n| d¡}| j| j	‰‰ | j}| j
}‡ ‡fdd„}|| _
|| \}}}z<|D ]-}	|	d	kr^ˆd
7 ‰d‰ nˆ d
7 ‰ ||	ƒ}
|
d ur~|
|kr~|ƒ  |
}|| \}}}||	ƒ qQW || _
ˆˆ | _| _	n|| _
ˆˆ | _| _	w || _d S )N)s   ÿþs   þÿr   r   rH   Úbeginzutf-8c                      s   ˆˆ fS r   r   r   ©r>   r=   r   r   rB   ©   s   z(XMLParser.dataReceived.<locals>.saveMarkÚ
r   )rG   ÚstateÚ
startswithrJ   r?   ÚappendrM   Údecoder=   r>   rB   )r1   rK   rF   ZcurStateZ	_saveMarkrB   ZbeginFnZdoFnZendFnÚbyteZnewStater   rX   r   ÚdataReceived–   sF   

€óÿ
zXMLParser.dataReceivedc                 C   s   |   ¡ }|| j t ƒ  dS )z0
        End the last state we were in.
        N)rG   rZ   ÚEND_HANDLER)r1   ÚreasonrF   r   r   r   ÚconnectionLostÄ   s   zXMLParser.connectionLostc                 C   s:   |  ¡ rd S |dkr| jr|| _dS |  d|›d�¡ dS )Nú<rN   zFirst char of document [z
] wasn't <Útagstart)ÚisspaceÚbeExtremelyLenientÚ_leadingBodyDatarC   ©r1   r^   r   r   r   Údo_beginÍ   s   zXMLParser.do_beginc                 C   ó
   d| _ d S ©NÚ )Ú
commentbufrh   r   r   r   Úbegin_comment×   ó   
zXMLParser.begin_commentc                 C   s6   |  j |7  _ | j  d¡r|  | j d d… ¡ dS d S )Nz-->éýÿÿÿrN   )rm   ÚendswithÚ
gotCommentrh   r   r   r   Ú
do_commentÚ   s
   þzXMLParser.do_commentc                 C   s   d| _ i | _d| _d| _d S ©Nrl   r   )rS   rT   ÚtermtagrR   rh   r   r   r   Úbegin_tagstartà   r3   zXMLParser.begin_tagstartc                 C   s:  |  ¡ s|tv r|  j|7  _| jdkrdS d S | ¡ r-| jr&| jr$dS dS |  d¡ d S |dkrM| jr<|  | j¡ dS |  | ji ¡ | j rIdpL|  	¡ S |dkr[| jrVd	S d
| _d S |dv rz| jrn| jsl|  d¡ d S d S |  j|7  _d
| _
d S |dkrŒ| jdkr…dS |  d¡ d S | jr”d| _dS |  d| ¡ d S )Nz!--ÚcommentÚ	waitforgtÚattrszWhitespace before tag-nameú>rN   ú/Ú
afterslashr   ú!?zInvalid character in tag-nameú[ú!ZexpectcdatazInvalid '[' in tag-namerc   ZunentityzInvalid tag character: %r)ÚisalnumÚ
identCharsrS   re   rR   rC   Ú	gotTagEndÚgotTagStartrf   rV   ru   rN   rh   r   r   r   Údo_tagstartæ   sJ   
ÿÿ
ÿ

zXMLParser.do_tagstartc                 C   s   |  j |7  _ d S r   ©rN   rh   r   r   r   Úbegin_unentity  s   zXMLParser.begin_unentityc                 C   s   |  j |7  _ dS )NrN   r…   rh   r   r   r   Údo_unentity  s   zXMLParser.do_unentityc                 C   ó   |   | j¡ d S r   ©ÚgotTextrN   r6   r   r   r   Úend_unentity  ó   zXMLParser.end_unentityc                 C   ó
   || _ d S r   )Úcdatabufrh   r   r   r   Úbegin_expectcdata  ro   zXMLParser.begin_expectcdatac                 C   sj   |  j |7  _ | j }d}t|ƒt|ƒkr%| |¡rd S | jr dS |  d¡ ||kr.d| _ dS |  d¡ d S )Nz[CDATA[rx   zMal-formed CDATA headerrl   Úcdata)rŽ   rI   r[   rf   rC   )r1   r^   ZcdbZcdr   r   r   Údo_expectcdata!  s   

zXMLParser.do_expectcdatac                 C   s2   |  j |7  _ | j  d¡r| j d d… | _ dS d S )Nz]]>rp   rN   )rŽ   rq   rh   r   r   r   Údo_cdata5  s
   þzXMLParser.do_cdatac                 C   ó   |   | j¡ d| _d S rk   )ÚgotCDatarŽ   r6   r   r   r   Ú	end_cdata;  ó   
zXMLParser.end_cdatac                 C   s”   |  ¡ s|tv r| jdkrdS | jd dv rdS dS | ¡ r d S |dkr6|  | j| j¡ | j r2dp5|  ¡ S |d	kr<d
S | jrAd S |  d| ¡ d S )Nú!DOCTYPEÚdoctyper   r}   rx   Úattrnamerz   rN   r{   r|   zUnexpected character: %r)	r€   r�   rS   re   rƒ   rT   rf   rV   rC   rh   r   r   r   Údo_attrs?  s    
zXMLParser.do_attrsc                 C   r�   r   ©r˜   rh   r   r   r   Úbegin_doctypeT  ro   zXMLParser.begin_doctypec                 C   ó   |dkrdS |  j |7  _ d S ©Nrz   rN   r›   rh   r   r   r   Ú
do_doctypeW  ó   zXMLParser.do_doctypec                 C   s   |   | j¡ d | _d S r   )Ú
gotDoctyper˜   r6   r   r   r   Úend_doctype\  r–   zXMLParser.end_doctypec                 C   s$   |dkr| j s
| jsdS |  ¡ S d S rž   )rR   rf   rV   rh   r   r   r   Údo_waitforgt`  s
   ýzXMLParser.do_waitforgtc                 C   ó   || _ d| _d S ©Nr   )r™   Ú_attrname_termtagrh   r   r   r   Úbegin_attrnamef  ó   
zXMLParser.begin_attrnamec                 C   sê   |  ¡ s|tv r|  j|7  _d S |dkrdS | ¡ rdS | jrg|dv r&dS |tv s.|  ¡ r7|  j|7  _d S |dkr@d| _d S |dkred	| _| j| j| j< |  	| j
| j¡ | jra|  | j
¡ d
S |  ¡ S d S |  d| j›d|›�¡ d S )Nú=ÚbeforeattrvalZbeforeeqú"'Úattrvalr{   r   rz   ÚTruerN   zInvalid attribute name: ú )r€   r�   r™   re   rf   ÚlenientIdentCharsr¦   r¬   rT   rƒ   rS   r‚   rV   rC   rh   r   r   r   Údo_attrnamej  s4   zXMLParser.do_attrnamec                 C   s„   |dv rdS |  ¡ rd S | jr9|tv s| ¡ rdS |dkr3d| _| j| j| j< |  | j| j¡ |  	¡ S |dkr9d S |  
d| ¡ d S )Nr«   r¬   Z	messyattrrz   r­   ú\zEInvalid initial attribute value: %r; Attribute values must be quoted.)re   rf   r¯   r€   r¬   rT   r™   rƒ   rS   rV   rC   rh   r   r   r   Údo_beforeattrvalˆ  s&   ÿÿzXMLParser.do_beforeattrvalrl   c                 C   rj   r¥   )Ú_beforeeq_termtagrh   r   r   r   Úbegin_beforeeq¡  ro   zXMLParser.begin_beforeeqc                 C   s°   |dkrdS |  ¡ rd S | jrQ| ¡ s|tv r#d| _| j| j| j< dS |dkrHd| _| j| j| j< |  | j| j¡ | j	rD|  
| j¡ dS |  ¡ S |dkrQd| _	d S |  d	¡ d S )
Nr©   rª   r­   r™   rz   rN   r{   r   zInvalid attribute)re   rf   r€   r�   r¬   rT   r™   rƒ   rS   r³   r‚   rV   rC   rh   r   r   r   Údo_beforeeq¤  s*   zXMLParser.do_beforeeqc                 C   r¤   rk   ©Z	quotetyper¬   rh   r   r   r   Úbegin_attrval»  r¨   zXMLParser.begin_attrvalc                 C   s    || j krdS |  j|7  _d S )Nry   r¶   rh   r   r   r   Ú
do_attrval¿  s   
zXMLParser.do_attrvalc                 C   s   | j | j| j< d | _| _ d S rk   ©r¬   rT   r™   r6   r   r   r   Úend_attrvalÄ  s   zXMLParser.end_attrvalc                 C   r�   r   )r¬   rh   r   r   r   Úbegin_messyattrÈ  ro   zXMLParser.begin_messyattrc                 C   s„   |  ¡ rdS |dkr9d}| j d¡rd}| jd d… | _| j| j| j< |  | j| j¡ |r5|  | j¡ dS |  ¡ S |  j|7  _d S )Nry   rz   r   r{   r   éÿÿÿÿrN   )	re   r¬   rq   rT   r™   rƒ   rS   r‚   rV   )r1   r^   ÚendTagr   r   r   Údo_messyattrË  s   zXMLParser.do_messyattrc                 C   s   | j r| j | j| j< d S d S r   r¹   r6   r   r   r   Úend_messyattrÜ  s   ÿzXMLParser.end_messyattrc                 C   rj   r¥   )Ú_after_slash_closedrh   r   r   r   Úbegin_afterslashà  ro   zXMLParser.begin_afterslashc                 C   sR   | j r|  d¡ |dkr| jrd S |  d¡ d| _ |  | j| j¡ |  | j¡ dS )Nz
Mal-formedrz   zNo data allowed after '/'r   rN   )rÀ   rC   rf   rƒ   rS   rT   r‚   rh   r   r   r   Údo_afterslashã  s   

zXMLParser.do_afterslashc                 C   s    | j r| j | _| ` d S d| _d S rk   )rg   rN   rh   r   r   r   rU   ó  s   
zXMLParser.begin_bodydatac                 C   s*   |dkrdS |dkrdS |  j |7  _ d S )Nrc   rd   ú&Ú	entityrefr…   rh   r   r   r   Údo_bodydataú  s
   zXMLParser.do_bodydatac                 C   r“   rk   r‰   r6   r   r   r   Úend_bodydata  r–   zXMLParser.end_bodydatac                 C   r�   )Nrc   Úwaitscriptendtagr…   rh   r   r   r   Údo_waitforendscript  r    zXMLParser.do_waitforendscriptc                 C   s   d| _ d| _d| _d S rt   )ÚtemptagdatarS   rR   rh   r   r   r   Úbegin_waitscriptendtag
  rA   z XMLParser.begin_waitscriptendtagc                 C   sÎ   |  j |7  _ |dkrd| _d S | js|  jd| j  7  _dS | ¡ s'|tv rU|  j|7  _d | j¡s@|  jd| j  7  _dS | jdkrS|  | j¡ |  | j¡ dS d S | 	¡ r[dS |  jd| j  7  _dS )Nr{   Trc   rQ   rO   rx   rÇ   )
rÉ   rR   rN   r€   r�   rS   r[   rŠ   r‚   re   rh   r   r   r   Údo_waitscriptendtag  s(   

ýzXMLParser.do_waitscriptendtagc                 C   s   d| _ d| _d S rk   )ÚerefbufÚ	erefextrarh   r   r   r   Úbegin_entityref6  r¨   zXMLParser.begin_entityrefc                 C   s~   |  ¡ s|dkr0| jr)| jr| jdkr| j| _d| _|dkr dS |  j|7  _dS |  d¡ d S |dkr=|  j|7  _d S dS )Nrc   Úamprd   ZspacebodydatazBad entity referenceú;rN   )re   rf   rÌ   rÍ   rC   rh   r   r   r   Údo_entityref:  s   zXMLParser.do_entityrefc                 C   rˆ   r   )ÚgotEntityReferencerÌ   r6   r   r   r   Úend_entityrefL  rŒ   zXMLParser.end_entityrefc                 C   s   | j | _d | _ d S r   )rÍ   rN   rh   r   r   r   Úbegin_spacebodydataQ  s   
zXMLParser.begin_spacebodydatac                 C   s   t d||ƒ dS )zCEncountered an opening tag.

        Default behaviour is to print.rW   N©Úprint)r1   r"   Ú
attributesr   r   r   rƒ   Z  ó   zXMLParser.gotTagStartc                 C   ó   t dt|ƒƒ dS )z8Encountered text

        Default behaviour is to print.ztext:N©rÖ   Úrepr)r1   rK   r   r   r   rŠ   `  s   zXMLParser.gotTextc                 C   s   t d| ƒ dS )zMEncountered mnemonic entity reference

        Default behaviour is to print.zentityRef: &%s;NrÕ   )r1   Z	entityRefr   r   r   rÒ   f  rØ   zXMLParser.gotEntityReferencec                 C   r   )z=Encountered comment.

        Default behaviour is to ignore.Nr   )r1   rw   r   r   r   rr   l  s   zXMLParser.gotCommentc                 C   s   |   |¡ dS )zJEncountered CDATA

        Default behaviour is to call the gotText methodN)rŠ   )r1   r�   r   r   r   r”   r  ó   zXMLParser.gotCDatac                 C   rÙ   )z—Encountered DOCTYPE

        This is really grotty: it basically just gives you everything between
        '<!DOCTYPE' and '>' as an argument.
        r—   NrÚ   )r1   r˜   r   r   r   r¡   x  s   zXMLParser.gotDoctypec                 C   s   t d|ƒ dS )z?Encountered closing tag

        Default behaviour is to print.ÚendNrÕ   )r1   r"   r   r   r   r‚   €  rÜ   zXMLParser.gotTagEnd)Dr8   r9   r:   rZ   r?   r-   rf   rJ   rg   r@   rB   rC   rG   rM   rV   r_   rb   ri   rn   rs   rv   r„   r†   r‡   r‹   r�   r‘   r’   r•   rš   rœ   rŸ   r¢   r£   r§   r°   r²   r™   r¬   r´   rµ   r·   r¸   rº   r»   r¾   r¿   rÁ   rÂ   rU   rÅ   rÆ   rÈ   rÊ   rË   rÎ   rÑ   rÓ   rÔ   Zdo_spacebodydataZend_spacebodydatarƒ   rŠ   rÒ   rr   r”   r¡   r‚   r   r   r   r   r<   Q   s„    	.	
.'r<   N)Ú__doc__Ztwisted.internet.protocolr   Ztwisted.python.reflectr   ZBEGIN_HANDLERZ
DO_HANDLERr`   r�   r¯   r   r   r   r&   r*   Ú	Exceptionr+   r<   r   r   r   r   Ú<module>   s   