o
    ÷ÑÐbQ%  ã                   @   s°   d Z ddlZddlZdd„ Zdd„ Zdg d¢iZdd
d„ZG dd„ dƒZG dd„ dƒZddl	m
Z
 ddlmZmZmZmZmZ G dd„ deeeeƒZdd„ Zdd„ Zdd„ ZdS )aï  xmltramp: Make XML documents easily accessible.
__author__ = "Aaron Swartz"
__credits__ = "Many thanks to pjz, bitsko, and DanC."
__copyright__ = "(C) 2003-2006 Aaron Swartz. GNU GPL 2."
xmltramp was originally created by Aaron Swartz for simple-yet-powerful
parsing of RSS and other xml files.
xmltramp2 has been substantially rewritten for subsequent python versions,
including python3 compatibility.
The original credits will be be maintained above. Thank you, Aaron Swartz, for all you did.
é    Nc                 C   s   t | tdƒƒpt | tdƒƒS ©NÚ ©Ú
isinstanceÚtype©Úf© r	   úH/var/www/secure340b-portal/env/lib/python3.10/site-packages/xmltramp2.pyÚisstr   ó   r   c                 C   s   t | tdƒƒpt | tg ƒƒS )Nr	   r   r   r	   r	   r
   Úislst   r   r   zhttp://www.w3.org/1999/xhtml)
ÚimgÚbrÚhrÚmetaÚlinkÚbaseÚparamÚinputÚcolÚareaTc                 C   sb   |rd| v rt | ƒdkr|  d¡dkrd|  d S |  dd¡ dd¡ dd	¡} |s/|  d
d¡} | S )Nú<é   z]]>éÿÿÿÿz	<![CDATA[ú&z&amp;z&lt;z]]&gt;ú"z&quot;)ÚlenÚfindÚreplace)ÚxÚeltr	   r	   r
   Úquote   s   &r"   c                   @   sp   e Zd Zddd„Zd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 )ÚElementNc                 C   sÂ   t |ƒr|d d u r|d }|r4i }| ¡ D ]}t |ƒr+|d d u r+|| ||d < q|| ||< q|}|| _|p:i | _|p?g | _|pDi }tt| ¡ | ¡ ƒƒ| _|r\| 	d d ¡| _
d S d | _
d S )Nr   é   )r   ÚkeysÚ_nameÚ_attrsÚ_dirÚdictÚzipÚvaluesÚ	_prefixesÚgetÚ_dNS)ÚselfÚnameÚattrsÚchildrenÚprefixesÚnaÚkr	   r	   r
   Ú__init__"   s"   


zElement.__init__r   c           
         sd  dd„ ‰ d‡ ‡fdd„	}|pddi}|ˆj ||ƒ}dˆ ˆj|ƒ | }ˆjsAˆjd	 t ¡ v rAˆjd tˆjd	  v rA|d
7 }|S |d7 }|rd	}ˆjD ]	}t|tƒrUd}qLdd|  }	ˆjD ].}|ri|ri||	7 }t|ƒrt|t|ƒ7 }q_t|tƒr‡|| 	|d || 
¡ ¡7 }q_td |¡ƒ‚|rœ|rœ|dd|d   7 }nˆjr¤|d7 }|dˆ ˆj|ƒ d 7 }|S )Nc                 S   s<   t | ƒr|| d  d ur|| d  d | d  S | d S | S )Nr   ú:r$   )r   )r0   Ú
inprefixesr	   r	   r
   Úqname;   s
   zElement.__repr__.<locals>.qnamer$   c                    s®   d}ˆj  ¡ D ]2}|| ¡ vr9|r|d7 }|r%ˆj | r%|dˆj |  7 }|r2|dt|dƒ d 7 }ˆj | ||< q|  ¡ D ]}|dˆ ||ƒ d t| | dƒ d 7 }q>|S )Nr   z xmlnsr7   z="Fr   ú )r,   r%   r"   )Úar8   ZaddnsÚoutÚpr5   ©r9   r/   r	   r
   ÚarepD   s   €*zElement.__repr__.<locals>.arepz$http://www.w3.org/XML/1998/namespaceÚxmlr   r   z />ú>Ú
ú	zI wasn't expecting {}.z...z</)r$   )r'   r&   r(   Úemptyr%   r   r#   r   r"   Ú__repr__ÚcopyÚ	TypeErrorÚformat)
r/   Ú	recursiveÚ	multiliner8   r?   Ú
attributesr<   Úcontentr    Úpadr	   r>   r
   rE   :   s>   	0

€

€zElement.__repr__c                 C   sF   d}| j D ]}tjd dkrt|ƒ}nt|ƒ}||7 }qd | ¡ ¡S )Nr   r   é   r:   )r(   ÚsysÚversion_infoÚstrÚunicodeÚjoinÚsplit)r/   Útextr    Úur	   r	   r
   Ú__unicode__x   s   


zElement.__unicode__c                 C   s$   |   ¡ }tjd dkr|S | d¡S )Nr   rN   zutf-8)rW   rO   rP   Úencode)r/   rV   r	   r	   r
   Ú__str__‚   s   
zElement.__str__c                 C   sd   |d dkrt d |¡ƒ‚| jr| j|f}| jD ]}t|tƒr(|j|kr(|  S qt d t|ƒ¡ƒ‚)Nr   Ú_z*Use foo['{}'] to access the child element.zNo child element named {})ÚAttributeErrorrH   r.   r(   r   r#   r&   Úrepr©r/   Únr    r	   r	   r
   Ú__getattr__‰   s   
€zElement.__getattr__c                 C   s*   | j D ]}t|tƒr|j|kr dS qdS )NTF)r(   r   r#   r&   r]   r	   r	   r
   Ú__hasattr__‘   s   
€zElement.__hasattr__c                 C   s&   |d dkr|| j |< d S || |< d S )Nr   rZ   )Ú__dict__)r/   r^   Úvr	   r	   r
   Ú__setattr__–   s   zElement.__setattr__c                 C   sâ   t |tdƒƒr| j| S t |tdƒjƒrMt |jtdƒƒr%| j|j|j… S |j}| jr4t|ƒs4| j|f}g }| jD ]}t |t	ƒrJ|j
|krJ| |¡ q9|S | jrYt|ƒsY| j|f}| jD ]}t |t	ƒrl|j
|krl|  S q\t|ƒ‚©Nr   )r   r   r(   ÚsliceÚ	__class__ÚstartÚstopr.   r   r#   r&   ÚappendÚKeyError)r/   r^   r<   r    r	   r	   r
   Ú__getitem__›   s    
"
€
€zElement.__getitem__c                 C   sö   t |tdƒƒr|| j|< d S t |tdƒjƒr1|j}| jr%t|ƒs%| j|f}t|ƒ}| j 	|¡ d S | jr=t|ƒs=| j|f}t|ƒ}|j 	|¡ d}g }t
t| ƒƒD ]}| | j|krh|rb| 	|¡ qQ|| |< d}qQ|sq| j 	|¡ |D ]}| |= qsd S )Nr   FT)r   r   r(   re   rf   rg   r.   r   r#   ri   Úranger   r&   )r/   r^   rb   ÚnvZreplacedZtodelÚir	   r	   r
   Ú__setitem__®   s.   €ÿzElement.__setitem__c                 C   s    t |tdƒƒr| j|= d S t |tdƒjƒr9|j}| jr$t|ƒs$| j|f}tt	| ƒƒD ]}| | j
|kr6| |= q*d S tt	| ƒƒD ]}| | j
|krK| |=  d S d S rd   )r   r   r(   re   rf   rg   r.   r   rl   r   r&   )r/   r^   rn   r	   r	   r
   Ú__delitem__Ë   s   €þýzElement.__delitem__c                 O   sˆ   |r|  ¡ D ]	}|| | j|< qt|ƒdkr,tdt|ƒdƒD ]}||d  | j|| < qt|ƒdkr9| j|d  S t|ƒdkrB| jS d S )Nr$   r   é   )r%   r'   r   rl   )r/   Ú_posÚ_setr5   rn   r	   r	   r
   Ú__call__Ü   s   ÿzElement.__call__c                 C   s
   t | jƒS ©N)r   r(   ©r/   r	   r	   r
   Ú__len__è   ó   
zElement.__len__)NNN)r   r   N)Ú__name__Ú
__module__Ú__qualname__r6   rE   rW   rY   r_   r`   rc   rk   ro   rp   rt   rw   r	   r	   r	   r
   r#   !   s    

>
r#   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	Namespacec                 C   s
   || _ d S ru   ©Z_Namespace__uri)r/   Úurir	   r	   r
   r6   í   rx   zNamespace.__init__c                 C   ó
   | j |fS ru   r}   ©r/   r^   r	   r	   r
   r_   ð   rx   zNamespace.__getattr__c                 C   r   ru   r}   r€   r	   r	   r
   rk   ó   rx   zNamespace.__getitem__N)ry   rz   r{   r6   r_   rk   r	   r	   r	   r
   r|   ì   s    r|   )Úmake_parser)ÚEntityResolverÚ
DTDHandlerÚContentHandlerÚErrorHandlerÚfeature_namespacesc                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚSeederc                 C   s    g | _ d| _i | _t | ¡ d S r   )ÚstackÚchr3   r„   r6   rv   r	   r	   r
   r6   û   s   zSeeder.__init__c                 C   s(   || j vr
g | j |< | j |  |¡ d S ru   )r3   ri   )r/   Úprefixr~   r	   r	   r
   ÚstartPrefixMapping  s   

zSeeder.startPrefixMappingc                 C   s   | j |  ¡  d S ru   )r3   Úpop)r/   rŠ   r	   r	   r
   ÚendPrefixMapping  ó   zSeeder.endPrefixMappingc                 C   sv   | j }d| _ |r| ¡ s| jd j |¡ t|ƒ}i }| j ¡ D ]}| j| d ||< q | j t||| 	¡ d¡ d S )Nr   r   )r3   )
r‰   Úisspacerˆ   r(   ri   r)   r3   r%   r#   rF   )r/   r0   r9   r1   r‰   Znewprefixesr5   r	   r	   r
   ÚstartElementNS	  s   zSeeder.startElementNSc                 C   s   |  j |7  _ d S ru   )r‰   )r/   r‰   r	   r	   r
   Ú
characters  rŽ   zSeeder.charactersc                 C   sZ   | j }d| _ |r| ¡ s| jd j |¡ | j ¡ }| jr(| jd j |¡ d S || _d S )Nr   r   )r‰   r   rˆ   r(   ri   rŒ   Úresult)r/   r0   r9   r‰   Úelementr	   r	   r
   ÚendElementNS  s   

zSeeder.endElementNSN)	ry   rz   r{   r6   r‹   r   r   r‘   r”   r	   r	   r	   r
   r‡   ú   s    r‡   c                 C   s2   t ƒ }tƒ }| td¡ | |¡ | | ¡ |jS )Nr$   )r‡   r   Ú
setFeaturer†   ÚsetContentHandlerÚparser’   )ÚfileobjZseederÚparserr	   r	   r
   Úseed#  s   

rš   c                 C   s   t t | ¡ƒS ru   )rš   ÚsixÚStringIO)rU   r	   r	   r
   r—   ,  s   r—   c                 C   s   dd l }t| | ¡ƒS rd   )Úurllibrš   Úurlopen)Úurlr   r	   r	   r
   Úload0  s   r    )T)Ú__doc__r›   rO   r   r   rD   r"   r#   r|   Zxml.saxr   Zxml.sax.handlerr‚   rƒ   r„   r…   r†   r‡   rš   r—   r    r	   r	   r	   r
   Ú<module>   s     

 L
)	