B
    18\s0                 @   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 )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_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   V/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/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 )N)entityResolver)r$   r   r   r   _get_entityResolver=   s    zDOMBuilder._get_entityResolverc             C   s
   || _ d S )N)r&   )r$   r&   r   r   r   _set_entityResolver?   s    zDOMBuilder._set_entityResolverc             C   s   | j S )N)r   )r$   r   r   r   _get_errorHandlerB   s    zDOMBuilder._get_errorHandlerc             C   s
   || _ d S )N)r   )r$   r   r   r   r   _set_errorHandlerD   s    zDOMBuilder._set_errorHandlerc             C   s   | j S )N)r   )r$   r   r   r   _get_filterG   s    zDOMBuilder._get_filterc             C   s
   || _ d S )N)r   )r$   r   r   r   r   _set_filterI   s    zDOMBuilder._set_filterc             C   s   |  |rx|rdpd}y| jt||f }W n( tk
rT   tjd|f d Y qX x4|D ]\}}t| j|| q\W n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statesettingsvaluer   r   r   
setFeatureL   s    
zDOMBuilder.setFeaturec             C   s   t | jt|S )N)hasattrr#   r/   )r$   r7   r   r   r   r-   Z   s    zDOMBuilder.supportsFeaturec             C   s   t ||rdpdf}|| jkS )Nr   r   )r/   r.   )r$   r7   r8   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   ))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   )r   r   c             C   s   t |}yt| j|S  tk
r   |dkrj| j}|joh|joh|joh|joh|jpf|j	pf|j
pf|jpf|j S tjdt| Y nX d S )Nr   zfeature %s not known)r/   getattrr#   AttributeErrorr   r   r   r   r   r   r   r   r   r1   r2   r5   r6   )r$   r7   xnameoptionsr   r   r   
getFeature   s     zDOMBuilder.getFeaturec             C   s.   | j r| j d |}nt d |}| |S )N)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requesturlopen_parse_bytestream)r$   rG   rB   fpurllibr   r   r   rE      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$   rG   Zcnodeactionr   r   r   parseWithContext   s    
zDOMBuilder.parseWithContextc             C   s    dd l }|jj|}||S )Nr   )Zxml.dom.expatbuilderr2   ZexpatbuilderZmakeBuilderZ	parseFile)r$   streamrB   r1   builderr   r   r   rO      s    zDOMBuilder._parse_bytestream)r   r	   r
   r&   r   r   ZACTION_REPLACEZACTION_APPEND_AS_CHILDRENZACTION_INSERT_AFTERZACTION_INSERT_BEFORErR   r%   r'   r(   r)   r*   r+   r,   r;   r-   r>   r.   rC   rH   rE   rV   rO   r   r   r   r   r   -   st   

c             C   s   |   ddS )N-_)lowerreplace)r7   r   r   r   r/      s    r/   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   publicIdrK   _get_openeropenrJ   _guess_media_encodingencoding	posixpathurllib.parserE   urlparseendswithdirname
urlunparsebaseURI)r$   r`   rK   sourcere   rQ   partsschemenetlocpathparamsqueryfragmentr   r   r   rD      s    zDOMEntityResolver.resolveEntityc             C   s,   y| j S  tk
r&   |  | _ | j S X d S )N)r]   r@   _create_opener)r$   r   r   r   ra      s
    
zDOMEntityResolver._get_openerc             C   s   dd l }|j S )Nr   )rL   rM   build_opener)r$   rQ   r   r   r   rt      s    z DOMEntityResolver._create_openerc             C   sF   |j  }d|krBx.| D ]"}|dr|ddd  S qW d S )NzContent-Typezcharset==r   )rJ   infoZgetplist
startswithsplitr[   )r$   rl   rw   paramr   r   r   rc      s
    

z'DOMEntityResolver._guess_media_encodingN)r   r	   r
   	__slots__rD   ra   rt   rc   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   )rJ   characterStream
stringDatard   r`   rK   rk   c             C   s.   d | _ d | _d | _d | _d | _d | _d | _d S )N)rJ   r|   r}   rd   r`   rK   rk   )r$   r   r   r   r%     s    zDOMInputSource.__init__c             C   s   | j S )N)rJ   )r$   r   r   r   _get_byteStream  s    zDOMInputSource._get_byteStreamc             C   s
   || _ d S )N)rJ   )r$   rJ   r   r   r   _set_byteStream  s    zDOMInputSource._set_byteStreamc             C   s   | j S )N)r|   )r$   r   r   r   _get_characterStream  s    z#DOMInputSource._get_characterStreamc             C   s
   || _ d S )N)r|   )r$   r|   r   r   r   _set_characterStream  s    z#DOMInputSource._set_characterStreamc             C   s   | j S )N)r}   )r$   r   r   r   _get_stringData  s    zDOMInputSource._get_stringDatac             C   s
   || _ d S )N)r}   )r$   datar   r   r   _set_stringData  s    zDOMInputSource._set_stringDatac             C   s   | j S )N)rd   )r$   r   r   r   _get_encoding  s    zDOMInputSource._get_encodingc             C   s
   || _ d S )N)rd   )r$   rd   r   r   r   _set_encoding  s    zDOMInputSource._set_encodingc             C   s   | j S )N)r`   )r$   r   r   r   _get_publicId"  s    zDOMInputSource._get_publicIdc             C   s
   || _ d S )N)r`   )r$   r`   r   r   r   _set_publicId$  s    zDOMInputSource._set_publicIdc             C   s   | j S )N)rK   )r$   r   r   r   _get_systemId'  s    zDOMInputSource._get_systemIdc             C   s
   || _ d S )N)rK   )r$   rK   r   r   r   _set_systemId)  s    zDOMInputSource._set_systemIdc             C   s   | j S )N)rk   )r$   r   r   r   _get_baseURI,  s    zDOMInputSource._get_baseURIc             C   s
   || _ d S )N)rk   )r$   rF   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 )N)
whatToShow)r$   r   r   r   _get_whatToShowC  s    z DOMBuilderFilter._get_whatToShowc             C   s   | j S )N)FILTER_ACCEPT)r$   elementr   r   r   
acceptNodeF  s    zDOMBuilderFilter.acceptNodec             C   s   | j S )N)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)r1   r2   r3   )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)rT   )r$   r   r   r   abort\  s    zDocumentLS.abortc             C   s   t dd S )Nzhaven't written this yet)rT   )r$   rF   r   r   r   loadb  s    zDocumentLS.loadc             C   s   t dd S )Nzhaven't written this yet)rT   )r$   rl   r   r   r   loadXMLe  s    zDocumentLS.loadXMLc             C   s*   |d kr| }n|j | k	r"tj | S )N)ZownerDocumentr1   r2   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)r1   r2   r3   MODE_SYNCHRONOUSr   MODE_ASYNCHRONOUSrS   )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!)rT   )r$   r   r   r   createDOMWriter  s    z#DOMImplementationLS.createDOMWriterc             C   s   t  S )N)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   rI   warningsZxml.domr1   Zxml.dom.NodeFilterr   __all__r   r   r/   objectr   r   r   r   r   r   r   r   r   <module>   s   
  %,1!