a
    åzec0  ã                   @   s˜   d dl Z d dlZd dlmZ g d¢ZG dd„ dƒZG dd„ dƒZdd	„ ZG d
d„ de	ƒZ
G dd„ de	ƒZG dd„ dƒZ[G dd„ dƒZG dd„ dƒZdS )é    N)Ú
NodeFilter)Ú
DOMBuilderÚDOMEntityResolverÚDOMInputSourcec                   @   sX   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZdS )ÚOptionsé   TFN)Ú__name__Ú
__module__Ú__qualname__Ú
namespacesÚnamespace_declarationsÚ
validationÚexternal_parameter_entitiesÚexternal_general_entitiesZexternal_dtd_subsetÚvalidate_if_schemaÚvalidateÚdatatype_normalizationÚcreate_entity_ref_nodesÚentitiesÚwhitespace_in_element_contentÚcdata_sectionsÚcommentsÚcharset_overrides_xml_encodingÚinfosetÚsupported_mediatypes_onlyÚerrorHandlerÚfilter© r   r   ú(/usr/lib/python3.9/xml/dom/xmlbuilder.pyr      s&   
r   c                   @   s  e Zd ZdZdZdZdZdZdZdZ	eeee	f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gdgdgdgdgdgd gd!gd"gd#gd"d$gd%gd&gd'gd(gd)gd*gd+gd,gd-gg g d.¢d/gd0gd1gd2œZd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ ZdS )=r   Nr   é   é   é   c                 C   s   t ƒ | _d S ©N)r   Ú_options©Úselfr   r   r   Ú__init__9   s    zDOMBuilder.__init__c                 C   s   | j S r"   ©ÚentityResolverr$   r   r   r   Ú_get_entityResolver<   s    zDOMBuilder._get_entityResolverc                 C   s
   || _ d S r"   r'   )r%   r(   r   r   r   Ú_set_entityResolver>   s    zDOMBuilder._set_entityResolverc                 C   s   | j S r"   ©r   r$   r   r   r   Ú_get_errorHandlerA   s    zDOMBuilder._get_errorHandlerc                 C   s
   || _ d S r"   r+   )r%   r   r   r   r   Ú_set_errorHandlerC   s    zDOMBuilder._set_errorHandlerc                 C   s   | j S r"   ©r   r$   r   r   r   Ú_get_filterF   s    zDOMBuilder._get_filterc                 C   s
   || _ d S r"   r.   )r%   r   r   r   r   Ú_set_filterH   s    zDOMBuilder._set_filterc                 C   sŠ   |   |¡rr|rdpd}z| jt|ƒ|f }W n& tyR   tj d|f ¡d ‚Y q†0 |D ]\}}t| j||ƒ qXntj 	dt
|ƒ ¡‚d S )Nr   r   zunsupported feature: %rzunknown feature: )ÚsupportsFeatureÚ	_settingsÚ_name_xformÚKeyErrorÚxmlÚdomÚNotSupportedErrÚsetattrr#   ÚNotFoundErrÚrepr)r%   ÚnameÚstateZsettingsÚvaluer   r   r   Ú
setFeatureK   s    
ÿÿzDOMBuilder.setFeaturec                 C   s   t | jt|ƒƒS r"   )Úhasattrr#   r3   )r%   r;   r   r   r   r1   Y   s    zDOMBuilder.supportsFeaturec                 C   s   t |ƒ|rdpdf}|| jv S )Nr   r   )r3   r2   )r%   r;   r<   Úkeyr   r   r   ÚcanSetFeature\   s    zDOMBuilder.canSetFeature©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   ©r   r   ©r   r   ©r   r   ©r   r   ©r   r   ©r   r   )	rB   rI   rJ   rL   rP   )r   r   rO   rS   rU   ©r   r   ©r   r   ©r   r   )rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   )r   r   )r   r   rV   rW   rX   c                 C   sŒ   t |ƒ}zt| j|ƒW S  ty†   |dkrn| j}|joh|joh|joh|joh|jpf|j	pf|j
pf|jpf|j  Y S tj dt|ƒ ¡‚Y n0 d S )Nr   zfeature %s not known)r3   Úgetattrr#   ÚAttributeErrorr   r   r   r   r   r   r   r   r   r5   r6   r9   r:   )r%   r;   ZxnameÚoptionsr   r   r   Ú
getFeature¢   s0    ÿþýÿþýüü	zDOMBuilder.getFeaturec                 C   s.   | j r| j  d |¡}ntƒ  d |¡}|  |¡S r"   )r(   ÚresolveEntityr   Úparse)r%   ÚuriÚinputr   r   r   ÚparseURI´   s    zDOMBuilder.parseURIc                 C   sR   t   | j¡}| j|_| j|_|j}|d u rF|jrFdd l}|j |j¡}|  	||¡S ©Nr   )
Úcopyr#   r   r   Ú
byteStreamÚsystemIdÚurllib.requestÚrequestÚurlopenÚ_parse_bytestream)r%   r`   r[   ÚfpÚurllibr   r   r   r^   »   s    zDOMBuilder.parsec                 C   s   || j vrtdƒ‚tdƒ‚d S )Nznot a legal actionzHaven't written this yet...)Ú_legal_actionsÚ
ValueErrorÚNotImplementedError)r%   r`   ZcnodeÚactionr   r   r   ÚparseWithContextÅ   s    
zDOMBuilder.parseWithContextc                 C   s    dd l }|jj |¡}| |¡S rb   )Zxml.dom.expatbuilderr6   ZexpatbuilderZmakeBuilderZ	parseFile)r%   Ústreamr[   r5   Zbuilderr   r   r   ri   Ê   s    zDOMBuilder._parse_bytestream)r   r	   r
   r(   r   r   ZACTION_REPLACEZACTION_APPEND_AS_CHILDRENZACTION_INSERT_AFTERZACTION_INSERT_BEFORErl   r&   r)   r*   r,   r-   r/   r0   r>   r1   rA   r2   r\   ra   r^   rp   ri   r   r   r   r   r   ,   s–   ÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÇ=
r   c                 C   s   |   ¡  dd¡S )Nú-Ú_)ÚlowerÚreplace)r;   r   r   r   r3   Ð   s    r3   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )r   )Ú_openerc                 C   s˜   t ƒ }||_||_|  ¡  |¡|_|  |¡|_dd l}dd l	}|j
 |¡}|\}}}	}
}}|	r”|	 d¡s”| |	¡d }	|||	|
||f}|j
 |¡|_|S )Nr   ú/)r   ÚpublicIdre   Ú_get_openerÚopenrd   Ú_guess_media_encodingÚencodingÚ	posixpathÚurllib.parser^   ÚurlparseÚendswithÚdirnameÚ
urlunparseÚbaseURI)r%   rx   re   Úsourcer}   rk   ÚpartsÚschemeÚnetlocÚpathÚparamsÚqueryÚfragmentr   r   r   r]   ×   s    zDOMEntityResolver.resolveEntityc                 C   s0   z| j W S  ty*   |  ¡ | _ | j  Y S 0 d S r"   )rv   rZ   Ú_create_openerr$   r   r   r   ry   í   s
    
zDOMEntityResolver._get_openerc                 C   s   dd l }|j ¡ S rb   )rf   rg   Zbuild_opener)r%   rk   r   r   r   rŒ   ô   s    z DOMEntityResolver._create_openerc                 C   sF   |j  ¡ }d|v rB| ¡ D ]&}| d¡r| dd¡d  ¡   S qd S )NzContent-Typezcharset=ú=r   )rd   ÚinfoZgetplistÚ
startswithÚsplitrt   )r%   r„   rŽ   Zparamr   r   r   r{   ø   s
    

z'DOMEntityResolver._guess_media_encodingN)r   r	   r
   Ú	__slots__r]   ry   rŒ   r{   r   r   r   r   r   Ô   s
   r   c                   @   sˆ   e 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 S )!r   ©rd   ÚcharacterStreamÚ
stringDatar|   rx   re   rƒ   c                 C   s.   d | _ d | _d | _d | _d | _d | _d | _d S r"   r’   r$   r   r   r   r&     s    zDOMInputSource.__init__c                 C   s   | j S r"   ©rd   r$   r   r   r   Ú_get_byteStream  s    zDOMInputSource._get_byteStreamc                 C   s
   || _ d S r"   r•   )r%   rd   r   r   r   Ú_set_byteStream  s    zDOMInputSource._set_byteStreamc                 C   s   | j S r"   ©r“   r$   r   r   r   Ú_get_characterStream  s    z#DOMInputSource._get_characterStreamc                 C   s
   || _ d S r"   r˜   )r%   r“   r   r   r   Ú_set_characterStream  s    z#DOMInputSource._set_characterStreamc                 C   s   | j S r"   ©r”   r$   r   r   r   Ú_get_stringData  s    zDOMInputSource._get_stringDatac                 C   s
   || _ d S r"   r›   )r%   Údatar   r   r   Ú_set_stringData  s    zDOMInputSource._set_stringDatac                 C   s   | j S r"   ©r|   r$   r   r   r   Ú_get_encoding  s    zDOMInputSource._get_encodingc                 C   s
   || _ d S r"   rŸ   )r%   r|   r   r   r   Ú_set_encoding  s    zDOMInputSource._set_encodingc                 C   s   | j S r"   ©rx   r$   r   r   r   Ú_get_publicId!  s    zDOMInputSource._get_publicIdc                 C   s
   || _ d S r"   r¢   )r%   rx   r   r   r   Ú_set_publicId#  s    zDOMInputSource._set_publicIdc                 C   s   | j S r"   ©re   r$   r   r   r   Ú_get_systemId&  s    zDOMInputSource._get_systemIdc                 C   s
   || _ d S r"   r¥   )r%   re   r   r   r   Ú_set_systemId(  s    zDOMInputSource._set_systemIdc                 C   s   | j S r"   ©rƒ   r$   r   r   r   Ú_get_baseURI+  s    zDOMInputSource._get_baseURIc                 C   s
   || _ d S r"   r¨   ©r%   r_   r   r   r   Ú_set_baseURI-  s    zDOMInputSource._set_baseURIN)r   r	   r
   r‘   r&   r–   r—   r™   rš   rœ   rž   r    r¡   r£   r¤   r¦   r§   r©   r«   r   r   r   r   r      s    	r   c                   @   s:   e Zd ZdZdZdZdZejZ	dd„ Z
dd„ Zd	d
„ ZdS )ÚDOMBuilderFilterr   r   r    r!   c                 C   s   | j S r"   )Ú
whatToShowr$   r   r   r   Ú_get_whatToShowB  s    z DOMBuilderFilter._get_whatToShowc                 C   s   | j S r"   ©ÚFILTER_ACCEPT©r%   Úelementr   r   r   Ú
acceptNodeE  s    zDOMBuilderFilter.acceptNodec                 C   s   | j S r"   r¯   r±   r   r   r   ÚstartContainerH  s    zDOMBuilderFilter.startContainerN)r   r	   r
   r°   ZFILTER_REJECTZFILTER_SKIPZFILTER_INTERRUPTr   ZSHOW_ALLr­   r®   r³   r´   r   r   r   r   r¬   1  s   
r¬   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )Ú
DocumentLSFc                 C   s   dS )NFr   r$   r   r   r   Ú
_get_asyncS  s    zDocumentLS._get_asyncc                 C   s   |rt j d¡‚d S )Nz.asynchronous document loading is not supported)r5   r6   r7   )r%   Úflagr   r   r   Ú
_set_asyncV  s    ÿzDocumentLS._set_asyncc                 C   s   t dƒ‚d S )Nz'haven't figured out what this means yet©rn   r$   r   r   r   Úabort[  s    ÿzDocumentLS.abortc                 C   s   t dƒ‚d S ©Nzhaven't written this yetr¹   rª   r   r   r   Úloada  s    zDocumentLS.loadc                 C   s   t dƒ‚d S r»   r¹   )r%   r„   r   r   r   ÚloadXMLd  s    zDocumentLS.loadXMLc                 C   s*   |d u r| }n|j | ur"tj ¡ ‚| ¡ S r"   )ZownerDocumentr5   r6   ZWrongDocumentErrZtoxml)r%   Zsnoder   r   r   ÚsaveXMLg  s
    

zDocumentLS.saveXMLN)
r   r	   r
   Zasync_r¶   r¸   rº   r¼   r½   r¾   r   r   r   r   rµ   N  s   rµ   c                   @   s,   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	S )
ÚDOMImplementationLSr   r   c                 C   sF   |d urt j d¡‚|| jkr$tƒ S || jkr:t j d¡‚tdƒ‚d S )NzschemaType not yet supportedz'asynchronous builders are not supportedzunknown value for mode)r5   r6   r7   ÚMODE_SYNCHRONOUSr   ÚMODE_ASYNCHRONOUSrm   )r%   ÚmodeZ
schemaTyper   r   r   ÚcreateDOMBuilders  s    ÿ

ÿz$DOMImplementationLS.createDOMBuilderc                 C   s   t dƒ‚d S )Nz-the writer interface hasn't been written yet!r¹   r$   r   r   r   ÚcreateDOMWriter~  s    ÿz#DOMImplementationLS.createDOMWriterc                 C   s   t ƒ S r"   )r   r$   r   r   r   ÚcreateDOMInputSource‚  s    z(DOMImplementationLS.createDOMInputSourceN)r   r	   r
   rÀ   rÁ   rÃ   rÄ   rÅ   r   r   r   r   r¿   o  s
   r¿   )rc   Zxml.domr5   Zxml.dom.NodeFilterr   Ú__all__r   r   r3   Úobjectr   r   r¬   rµ   r¿   r   r   r   r   Ú<module>   s     %,1!