
][\Y0                 @   s   d  Z  d d l Z d d l Z d d l m Z d d d g Z Gd d   d  Z Gd	 d   d  Z d
 d   Z	 Gd d   d e
  Z Gd d   d e
  Z Gd d   d  Z [ Gd d   d  Z Gd 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   (/usr/lib/python3.4/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 i d4 g d5 6d6 g d7 6d8 g d9 6d: g d; 6d< g d= 6d> g d? 6d@ g dA 6dB g dC 6dD g dE 6dF g dG 6dH dI g dJ 6dK g dL 6dM g dN 6dO g dP 6dQ g dR 6dS g dT 6dU g dV 6dW g dX 6dY g dZ 6d[ g d\ 6g  d] 6d^ d_ d` da db dc dd de df g	 dg 6dh g di 6dj g dk 6dl g dm 6Z d* d+   Z d, d-   Z d. d/   Z d0 d1   Z d2 d3   Z d S)nr   Nr            c             C   s   t    |  _ d  S)N)r   _options)selfr   r   r   __init__9   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_errorHandlerA   s    zDOMBuilder._get_errorHandlerc             C   s   | |  _  d  S)N)r   )r#   r   r   r   r   _set_errorHandlerC   s    zDOMBuilder._set_errorHandlerc             C   s   |  j  S)N)r   )r#   r   r   r   _get_filterF   s    zDOMBuilder._get_filterc             C   s   | |  _  d  S)N)r   )r#   r   r   r   r   _set_filterH   s    zDOMBuilder._set_filterc             C   s   |  j  |  r | r d p d } y |  j t |  | f } Wn+ t k
 rk t j j d | f   Yq XxF | D] \ } } t |  j | |  qs Wn t j 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)N)hasattrr"   r.   )r#   r6   r   r   r   r,   Y   s    zDOMBuilder.supportsFeaturec             C   s+   t  |  | r d p d f } | |  j k S)Nr   r   )r.   r-   )r#   r6   r7   keyr   r   r   canSetFeature\   s    zDOMBuilder.canSetFeaturer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c             C   s   t  |  } y t |  j |  SWn t k
 r | d k r |  j } | j o | j o | j o | j o | j p | j	 p | j
 p | j p | j St j j d t |    Yn Xd  S)Nr   zfeature %s not known)r.   getattrr"   AttributeErrorr   r   r   r   r   r   r   r   r   r0   r1   r4   r5   )r#   r6   Zxnameoptionsr   r   r   
getFeature   s     									zDOMBuilder.getFeaturec             C   sC   |  j  r! |  j  j d  |  } n t   j d  |  } |  j |  S)N)r%   resolveEntityr   parse)r#   uriinputr   r   r   parseURI   s    	zDOMBuilder.parseURIc             C   s|   t  j  |  j  } |  j | _ |  j | _ | j } | d  k rl | j rl d d  l } | j j | j  } n  |  j	 | |  S)Nr   )
copyr"   r   r   
byteStreamsystemIdurllib.requestrequestZurlopen_parse_bytestream)r#   rD   r?   fpurllibr   r   r   rB      s    	zDOMBuilder.parsec             C   s.   | |  j  k r t d   n  t d   d  S)Nznot a legal actionzHaven't written this yet...)_legal_actions
ValueErrorNotImplementedError)r#   rD   Zcnodeactionr   r   r   parseWithContext   s    zDOMBuilder.parseWithContextc             C   s.   d d  l  } | j j j |  } | j |  S)Nr   )Zxml.dom.expatbuilderr1   ZexpatbuilderZmakeBuilderZ	parseFile)r#   streamr?   r0   Zbuilderr   r   r   rK      s    zDOMBuilder._parse_bytestream)namespace_declarationsr   )rT   r   )rT   r   )rT   r   )
validationr   )rU   r   )external_general_entitiesr   )rV   r   )rV   r   )rV   r   )external_parameter_entitiesr   )rW   r   )rW   r   )rW   r   )validate_if_schemar   )rX   r   )create_entity_ref_nodesr   )rY   r   )rY   r   )rY   r   )rY   r   )entitiesr   )rZ   r   )rZ   r   )rZ   r   )whitespace_in_element_contentr   )r[   r   )r[   r   )r[   r   )cdata_sectionsr   )r\   r   )r\   r   )r\   r   )commentsr   )r]   r   )r]   r   )r]   r   )charset_overrides_xml_encodingr   )r^   r   )r^   r   )r^   r   )infosetr   )rT   r   )rX   r   )rY   r   )rZ   r   )r\   r   )zdatatype_normalizationr   )r[   r   )r]   r   )r^   r   )r_   r   )supported_mediatypes_onlyr   )r`   r   )
namespacesr   )ra   r   )ra   r   )ra   r   )r   r	   r
   r%   r   r   ZACTION_REPLACEZACTION_APPEND_AS_CHILDRENZACTION_INSERT_AFTERZACTION_INSERT_BEFORErN   r$   r&   r'   r(   r)   r*   r+   r9   r,   r<   r-   r@   rE   rB   rR   rK   r   r   r   r   r   ,   sv   	























c             C   s   |  j    j d d  S)N-_)lowerreplace)r6   r   r   r   r.      s    r.   c               @   sF   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   } | | _ | | _ |  j   j |  | _ |  j |  | _ d d  l	 } d d  l
 } | j j |  } | \ } } }	 }
 } } |	 r |	 j d  r | j |	  d }	 | | |	 |
 | | f } | j j |  | _ n  | S)Nr   /)AssertionErrorr   publicIdrH   _get_openeropenrG   _guess_media_encodingencoding	posixpathZurllib.parserB   ZurlparseendswithdirnameZ
urlunparsebaseURI)r#   ri   rH   sourcern   rM   partsZschemeZnetlocpathZparamsZqueryZfragmentr   r   r   rA      s    			zDOMEntityResolver.resolveEntityc             C   s:   y |  j  SWn( t k
 r5 |  j   |  _  |  j  SYn Xd  S)N)rf   r>   _create_opener)r#   r   r   r   rj      s
    zDOMEntityResolver._get_openerc             C   s   d d  l  } | j j   S)Nr   )rI   rJ   Zbuild_opener)r#   rM   r   r   r   ru      s    z DOMEntityResolver._create_openerc             C   sb   | j  j   } d | k r^ x@ | j   D]/ } | j d  r( | j d d  d j   Sq( Wn  d  S)NzContent-Typezcharset==r   )rG   infoZgetplist
startswithsplitrd   )r#   rr   rw   Zparamr   r   r   rl      s
    z'DOMEntityResolver._guess_media_encodingN)z_opener)r   r	   r
   	__slots__rA   rj   ru   rl   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   rG   characterStream
stringDatarm   ri   rH   rq   c             C   sC   d  |  _  d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  S)N)rG   r{   r|   rm   ri   rH   rq   )r#   r   r   r   r$     s    						zDOMInputSource.__init__c             C   s   |  j  S)N)rG   )r#   r   r   r   _get_byteStream  s    zDOMInputSource._get_byteStreamc             C   s   | |  _  d  S)N)rG   )r#   rG   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)rm   )r#   r   r   r   _get_encoding  s    zDOMInputSource._get_encodingc             C   s   | |  _  d  S)N)rm   )r#   rm   r   r   r   _set_encoding  s    zDOMInputSource._set_encodingc             C   s   |  j  S)N)ri   )r#   r   r   r   _get_publicId!  s    zDOMInputSource._get_publicIdc             C   s   | |  _  d  S)N)ri   )r#   ri   r   r   r   _set_publicId#  s    zDOMInputSource._set_publicIdc             C   s   |  j  S)N)rH   )r#   r   r   r   _get_systemId&  s    zDOMInputSource._get_systemIdc             C   s   | |  _  d  S)N)rH   )r#   rH   r   r   r   _set_systemId(  s    zDOMInputSource._set_systemIdc             C   s   |  j  S)N)rq   )r#   r   r   r   _get_baseURI+  s    zDOMInputSource._get_baseURIc             C   s   | |  _  d  S)N)rq   )r#   rC   r   r   r   _set_baseURI-  s    zDOMInputSource._set_baseURIN)z
byteStreamzcharacterStreamz
stringDatazencodingzpublicIdzsystemIdzbaseURI)r   r	   r
   rz   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_whatToShowB  s    z DOMBuilderFilter._get_whatToShowc             C   s   |  j  S)N)FILTER_ACCEPT)r#   elementr   r   r   
acceptNodeE  s    zDOMBuilderFilter.acceptNodec             C   s   |  j  S)N)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 j d   n  d  S)Nz.asynchronous document loading is not supported)r0   r1   r2   )r#   asyncr   r   r   
_set_asyncU  s    	zDocumentLS._set_asyncc             C   s   t  d   d  S)Nz'haven't figured out what this means yet)rP   )r#   r   r   r   abortZ  s    zDocumentLS.abortc             C   s   t  d   d  S)Nzhaven't written this yet)rP   )r#   rC   r   r   r   load`  s    zDocumentLS.loadc             C   s   t  d   d  S)Nzhaven't written this yet)rP   )r#   rr   r   r   r   loadXMLc  s    zDocumentLS.loadXMLc             C   s@   | d  k r |  } n! | j  |  k	 r6 t j j    n  | j   S)N)ZownerDocumentr0   r1   ZWrongDocumentErrZtoxml)r#   Zsnoder   r   r   saveXMLf  s
    	zDocumentLS.saveXMLN)r   r	   r
   r   r   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   sk   | d  k	 r! t  j j d   n  | |  j k r7 t   S| |  j k r[ t  j j d   n  t d   d  S)NzschemaType not yet supportedz'asynchronous builders are not supportedzunknown value for mode)r0   r1   r2   MODE_SYNCHRONOUSr   MODE_ASYNCHRONOUSrO   )r#   modeZ
schemaTyper   r   r   createDOMBuilderr  s    		z$DOMImplementationLS.createDOMBuilderc             C   s   t  d   d  S)Nz-the writer interface hasn't been written yet!)rP   )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   n  s
   r   )r   rF   Zxml.domr0   Zxml.dom.NodeFilterr   __all__r   r   r.   objectr   r   r   r   r   r   r   r   r   <module>   s    ,1 