U
    ¼Ê¦is0  ã                   @   s¦   d Z ddlZddlZddlZddlmZ dddg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 )z4Implementation of the DOM Level 3 'LS-Load' feature.é    N)Ú
NodeFilterÚ
DOMBuilderÚDOMEntityResolverÚDOMInputSourcec                   @   s\   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ZdS )ÚOptionsz±Features object that has variables set for each DOMBuilder feature.

    The DOMBuilder class uses an instance of this class to pass settings to
    the ExpatBuilder class.
    é   TFN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
namespacesÚnamespace_declarationsÚ
validationÚexternal_parameter_entitiesÚexternal_general_entitiesZexternal_dtd_subsetÚvalidate_if_schemaZ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.8/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 dd!d"d$d(d.d'd+d-g	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__:   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_errorHandlerB   s    zDOMBuilder._get_errorHandlerc                 C   s
   || _ d S r"   r+   )r%   r   r   r   r   Ú_set_errorHandlerD   s    zDOMBuilder._set_errorHandlerc                 C   s   | j S r"   ©r   r$   r   r   r   Ú_get_filterG   s    zDOMBuilder._get_filterc                 C   s
   || _ d S r"   r.   )r%   r   r   r   r   Ú_set_filterI   s    zDOMBuilder._set_filterc                 C   sŒ   |   |¡rt|rdpd}z| jt|ƒ|f }W n( tk
rT   tj d|f ¡d ‚Y qˆX |D ]\}}t| j||ƒ qZn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   Ú
setFeatureL   s    
ÿÿzDOMBuilder.setFeaturec                 C   s   t | jt|ƒƒS r"   )Úhasattrr#   r3   )r%   r;   r   r   r   r1   Z   s    zDOMBuilder.supportsFeaturec                 C   s   t |ƒ|rdpdf}|| jk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   )r   r   ©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k
rˆ   |dkrp| j}|joj|joj|joj|joj|jph|j	ph|j
ph|jph|j  Y S tj dt|ƒ ¡‚Y nX 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 krF|jrFdd l}|j |j¡}|  	||¡S ©Nr   )
Úcopyr#   r   r   Ú
byteStreamÚsystemIdÚurllib.requestÚrequestZurlopenÚ_parse_bytestream)r%   r`   r[   ÚfpÚurllibr   r   r   r^   ¼   s    zDOMBuilder.parsec                 C   s   || j k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   rh   Ë   s    zDOMBuilder._parse_bytestream)r   r	   r
   r(   r   r   ZACTION_REPLACEZACTION_APPEND_AS_CHILDRENZACTION_INSERT_AFTERZACTION_INSERT_BEFORErk   r&   r)   r*   r,   r-   r/   r0   r>   r1   rA   r2   r\   ra   r^   ro   rh   r   r   r   r   r   -   sª    ÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿ÷ÿÿÿÇ=
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¤   |d k	st ‚tƒ }||_||_|  ¡  |¡|_|  |¡|_dd l	}dd l
}|j |¡}|\}}}	}
}}|	r |	 d¡s | |	¡d }	|||	|
||f}|j |¡|_|S )Nr   ú/)ÚAssertionErrorr   ÚpublicIdre   Ú_get_openerÚopenrd   Ú_guess_media_encodingÚencodingÚ	posixpathZurllib.parser^   ZurlparseÚendswithÚdirnameZ
urlunparseÚbaseURI)r%   rx   re   Úsourcer}   rj   ÚpartsZschemeZnetlocÚpathZparamsZqueryZfragmentr   r   r   r]   Ø   s    zDOMEntityResolver.resolveEntityc                 C   s2   z| j W S  tk
r,   |  ¡ | _ | j  Y S X d S r"   )ru   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%   rj   r   r   r   r„   õ   s    z DOMEntityResolver._create_openerc                 C   sF   |j  ¡ }d|krB| ¡ D ]&}| d¡r| dd¡d  ¡   S qd S )NzContent-Typezcharset=ú=r   )rd   ÚinfoZgetplistÚ
startswithÚsplitrs   )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
   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    	c                   @   s>   e Zd 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 )ÚDOMBuilderFilterzSElement filter which can be used to tailor construction of
    a DOM instance.
    r   r   r    r!   c                 C   s   | j S r"   )Ú
whatToShowr$   r   r   r   Ú_get_whatToShowC  s    z DOMBuilderFilter._get_whatToShowc                 C   s   | j S r"   ©ÚFILTER_ACCEPT©r%   Zelementr   r   r   Ú
acceptNodeF  s    zDOMBuilderFilter.acceptNodec                 C   s   | j S r"   r§   r©   r   r   r   ÚstartContainerI  s    zDOMBuilderFilter.startContainerN)r   r	   r
   r   r¨   ZFILTER_REJECTZFILTER_SKIPZFILTER_INTERRUPTr   ZSHOW_ALLr¥   r¦   rª   r«   r   r   r   r   r¤   2  s   	r¤   c                   @   sD   e 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S )Ú
DocumentLSz=Mixin to create documents that conform to the load/save spec.Fc                 C   s   dS )NFr   r$   r   r   r   Ú
_get_asyncT  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_asyncW  s    ÿzDocumentLS._set_asyncc                 C   s   t dƒ‚d S )Nz'haven't figured out what this means yet©rm   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   Úloadb  s    zDocumentLS.loadc                 C   s   t dƒ‚d S r²   r°   )r%   r�   r   r   r   ÚloadXMLe  s    zDocumentLS.loadXMLc                 C   s*   |d kr| }n|j | k	r"tj ¡ ‚| ¡ S r"   )ZownerDocumentr5   r6   ZWrongDocumentErrZtoxml)r%   Zsnoder   r   r   ÚsaveXMLh  s
    

zDocumentLS.saveXMLN)r   r	   r
   r   Zasync_r­   r¯   r±   r³   r´   rµ   r   r   r   r   r¬   O  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 k	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_ASYNCHRONOUSrl   )r%   ÚmodeZ
schemaTyper   r   r   ÚcreateDOMBuildert  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¶   p  s
   r¶   )r   rc   ÚwarningsZxml.domr5   Zxml.dom.NodeFilterr   Ú__all__r   r   r3   Úobjectr   r   r¤   r¬   r¶   r   r   r   r   Ú<module>   s   
  %,1!