a
    Ifc0                     @   s   d Z 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 )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 )OptionszFeatures 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   #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 q0 |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requestZ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   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   =
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   |d usJ 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	posixpathZurllib.parser^   ZurlparseendswithdirnameZ
urlunparsebaseURI)r%   rw   re   sourcer|   rj   partsZschemeZnetlocpathparamsZqueryZfragmentr   r   r   r]      s    zDOMEntityResolver.resolveEntityc                 C   s0   z| j W S  ty*   |  | _ | j  Y S 0 d S r"   )ru   rZ   _create_openerr$   r   r   r   rx      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|v 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   rz      s
    

z'DOMEntityResolver._guess_media_encodingN)r   r	   r
   	__slots__r]   rx   r   rz   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{   rw   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"   rw   r$   r   r   r   _get_publicId!  s    zDOMInputSource._get_publicIdc                 C   s
   || _ d S r"   r   )r%   rw   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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_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   r   ZFILTER_REJECTZFILTER_SKIPZFILTER_INTERRUPTr   ZSHOW_ALLr   r   r   r   r   r   r   r   r   1  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_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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   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
   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_ASYNCHRONOUSrl   )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   )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!