
ܜV})              +   @   s  d  d l  Z  d  d l Z d Z d Z dR Z dS Z d d	 d
 dT d d d dU d d d d d d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. dV d0 dW d1 dX i Z e j d2  Z d3 d4   Z	 d5 d6   Z
 d7 d8 d9  Z Gd: d;   d; e  Z Gd< d=   d= e  Z Gd> d?   d? e  Z Gd@ dA   dA e  Z GdB dC   dC e  Z GdD dE   dE e  Z GdF dG   dG e  Z GdH dI   dI e  Z GdJ dK   dK e  Z GdL dM   dM e  Z GdN dO   dO e  Z GdP dQ   dQ e  Z d S)Y    Napplication/xrd+xmlapplication/jrd+jsonapplication/xrd+jsonapplication/json	text/jsontext/xmlZactivity_streamsz http://activitystrea.ms/spec/1.0Zapphttp://apinamespace.org/atomapplication/atomsvc+xmlZavatarzhttp://webfinger.net/rel/avatarZfoafdescribedbyapplication/rdf+xmlZhcardz%http://microformats.org/profile/hcardZoauth_access_tokenz*http://apinamespace.org/oauth/access_tokenZoauth_authorizez'http://apinamespace.org/oauth/authorizeZoauth_request_tokenz+http://apinamespace.org/oauth/request_tokenZopenidz)http://specs.openid.net/auth/2.0/providerZ
opensocialz8http://ns.opensocial.org/2008/opensocial/activitystreamsZportable_contactsz$http://portablecontacts.net/spec/1.0Zprofilez%http://webfinger.net/rel/profile-pageZupdates_fromz-http://schemas.google.com/g/2010#updates-fromZostatus_subz'http://ostatus.org/schema/1.0/subscribeZsalmon_endpointZsalmonZ
salmon_keyzmagic-public-keyZwebfistzhttp://webfist.org/spec/relZxfnzhttp://gmpg.org/xfn/11jrdlrddZ	webfingerxrdrdc             C   s7   y t  |  t  SWn t k
 r2 t  |  t  SYn Xd  S)N)
isinstancestr	NameError)s r   +/home/mikael/src/friends/friends/rd/core.py_is_str&   s    r   c             C   s   d d l  m } m } | j d  d } | t k rO t j d  | j |   S| t k ru t j d  | j |   St	 d   d  S)Nr   )r   r   ;zloads() loading JRDzloads() loading XRDzUnknown content type)
r   r   r   split	JRD_TYPESloggerdebugloads	XRD_TYPES	TypeError)ZcontentZcontent_typer   r   r   r   r   r   -   s    r   httpsc             C   sD  d  } | } d d l  m } | |   } | j rX | j rX | j } | j } | j } n | j d k s | j r d | j k r d } | j j d  d
 } d  } d | k r7| j d d d \ } } d | } na | j s t d	   nI d | j k r(| j j d d d \ } } d | } n | j } d  } | | | f S)Nr   )urlparseZacct@r      /maxsplitz,No hostname could be deduced from arguments.)urllib.parser    schemeZnetlocpathr   
ValueError)ZresourceZdefault_schemeZhostnamer'   r    Zpartsr(   r   r   r   parse_uri_componentsA   s.    		(		r*   c               @   s@   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 S)
	Attributec             C   s   | |  _  | |  _ d  S)N)namevalue)selfr,   r-   r   r   r   __init__u   s    	zAttribute.__init__c             C   s   t  t |   t |   S)N)cmpr   )r.   otherr   r   r   __cmp__y   s    zAttribute.__cmp__c             C   s   t  |   | k S)N)r   )r.   r1   r   r   r   __eq__|   s    zAttribute.__eq__c             C   s   d |  j  |  j f S)Nz%s=%s)r,   r-   )r.   r   r   r   __str__   s    zAttribute.__str__N)__name__
__module____qualname__r/   r2   r3   r4   r   r   r   r   r+   s   s   r+   c               @   s   e  Z d  Z d d d  Z d S)ElementNc             C   s%   | |  _  | |  _ | p i  |  _ d  S)N)r,   r-   attrs)r.   r,   r-   r9   r   r   r   r/      s    		zElement.__init__)r5   r6   r7   r/   r   r   r   r   r8      s   r8   c               @   sC   e  Z d  Z d d d  Z d d   Z d d   Z d d	   Z d S)
TitleNc             C   s   | |  _  | |  _ d  S)N)r-   lang)r.   r-   r;   r   r   r   r/      s    	zTitle.__init__c             C   s   t  t |   t |   S)N)r0   r   )r.   r1   r   r   r   r2      s    zTitle.__cmp__c             C   s   t  |   t  |  k S)N)r   )r.   r1   r   r   r   r3      s    zTitle.__eq__c             C   s$   |  j  r d |  j  |  j f S|  j S)Nz%s:%s)r;   r-   )r.   r   r   r   r4      s    	zTitle.__str__)r5   r6   r7   r/   r2   r3   r4   r   r   r   r   r:      s   r:   c               @   sC   e  Z d  Z d d d  Z d d   Z d d   Z d d	   Z d S)
PropertyNc             C   s   | |  _  | |  _ d  S)N)typer-   )r.   type_r-   r   r   r   r/      s    	zProperty.__init__c             C   s   t  t |   t |   S)N)r0   r   )r.   r1   r   r   r   r2      s    zProperty.__cmp__c             C   s   t  |   | k S)N)r   )r.   r1   r   r   r   r3      s    zProperty.__eq__c             C   s$   |  j  r d |  j |  j  f S|  j S)Nz%s:%s)r-   r=   )r.   r   r   r   r4      s    	zProperty.__str__)r5   r6   r7   r/   r2   r3   r4   r   r   r   r   r<      s   r<   c                   sF   e  Z d  Z   f d d   Z   f d d   Z   f d d   Z   S)ListLikeObjectc                s,   |  j  |  } t t |   j | |  d  S)N)itemsuperr?   __setitem__)r.   keyr-   )	__class__r   r   rB      s    zListLikeObject.__setitem__c                s)   |  j  |  } t t |   j |  d  S)N)r@   rA   r?   append)r.   r-   )rD   r   r   rE      s    zListLikeObject.appendc                s3     f d d   | D } t  t    j |  d  S)Nc             3   s   |  ] }   j  |  Vq d  S)N)r@   ).0r-   )r.   r   r   	<genexpr>   s    z(ListLikeObject.extend.<locals>.<genexpr>)rA   r?   extend)r.   values)rD   )r.   r   rH      s    zListLikeObject.extend)r5   r6   r7   rB   rE   rH   r   r   )rD   r   r?      s   r?   c               @   s(   e  Z d  Z d d   Z d d   Z d S)AttributeListc             c   s)   x" |  D] } | j  | k r | Vq Wd  S)N)r,   )r.   r,   attrr   r   r   __call__   s    zAttributeList.__call__c             C   s>   t  | t t f  r t |   St  | t  s: t d   | S)Nz&value must be an instance of Attribute)r   listtupler+   r)   )r.   r-   r   r   r   r@      s
    
zAttributeList.itemN)r5   r6   r7   rL   r@   r   r   r   r   rJ      s   rJ   c               @   s   e  Z d  Z d d   Z d S)ElementListc             C   s   t  | t  s t d   | S)Nz!value must be an instance of Type)r   r8   r)   )r.   r-   r   r   r   r@      s    zElementList.itemN)r5   r6   r7   r@   r   r   r   r   rO      s   rO   c               @   s   e  Z d  Z d d   Z d S)	TitleListc             C   sT   t  |  r t |  St | t t f  r5 t |   St | t  sP t d   | S)Nz"value must be an instance of Title)r   r:   r   rM   rN   r)   )r.   r-   r   r   r   r@      s    

zTitleList.itemN)r5   r6   r7   r@   r   r   r   r   rP      s   rP   c               @   s(   e  Z d  Z d d   Z d d   Z d S)LinkListc             c   s)   x" |  D] } | j  | k r | Vq Wd  S)N)rel)r.   rR   linkr   r   r   rL      s    zLinkList.__call__c             C   s   t  | t  s t d   | S)Nz!value must be an instance of Link)r   Linkr)   )r.   r-   r   r   r   r@      s    zLinkList.itemN)r5   r6   r7   rL   r@   r   r   r   r   rQ      s   rQ   c               @   s(   e  Z d  Z d d   Z d d   Z d S)PropertyListc             c   s)   x" |  D] } | j  | k r | Vq Wd  S)N)r=   )r.   r>   propr   r   r   rL      s    zPropertyList.__call__c             C   sT   t  |  r t |  St | t t f  r5 t |   St | t  sP t d   | S)Nz%value must be an instance of Property)r   r<   r   rN   rM   r)   )r.   r-   r   r   r   r@      s    

zPropertyList.itemN)r5   r6   r7   rL   r@   r   r   r   r   rU      s   rU   c               @   sp   e  Z d  Z d d d d d d  Z d d   Z e e  Z d d   Z e e  Z d d	   Z	 d
 d   Z
 d S)rT   Nc             C   s@   | |  _  | |  _ | |  _ | |  _ t   |  _ t   |  _ d  S)N)rR   r=   hreftemplaterP   _titlesrU   _properties)r.   rR   r=   rW   rX   r   r   r   r/   	  s    				zLink.__init__c             C   s   |  j  S)N)rY   )r.   r   r   r   
get_titles  s    zLink.get_titlesc             C   s   |  j  S)N)rZ   )r.   r   r   r   get_properties  s    zLink.get_propertiesc             C   sD   d d l  m } |  j s% t d   |  j j d | | d d  S)Nr   )quotezThis is not a template Linkz{uri}Zsafe )r&   r]   rX   r   replace)r.   Zurir]   r   r   r   apply_template  s    	zLink.apply_templatec             C   sw   d d l  m } d } xQ d d d d g D]= } t |  |  } | r) | d j | |  | |   7} q) Wd	 j |  S)
Nr   )escaper^   rR   r=   rW   rX   z {!s}="{!s}"z<Link{!s}/>)Zcgira   getattrformat)r.   ra   r9   rV   valr   r   r   r4   !  s    &zLink.__str__)r5   r6   r7   r/   r[   propertyZtitlesr\   
propertiesr`   r4   r   r   r   r   rT     s   rT   c               @   s  e  Z d  Z d d d d  Z d d   Z d d   Z d d d d	  Z d d
 d  Z d d   Z e	 e  Z
 e	 d d    Z d d   Z d d   Z e	 e e  Z d d   Z e	 e  Z d d   Z e	 e  Z d d   Z e	 e  Z d d   Z e	 e  Z d S)RDNc             C   sa   | |  _  | |  _ d  |  _ g  |  _ t   |  _ t   |  _ g  |  _ t	   |  _
 t   |  _ d  S)N)xml_idsubject_expires_aliasesrU   rZ   rQ   _links_signaturesrJ   _attributesrO   	_elements)r.   rh   ri   r   r   r   r/   4  s    					zRD.__init__c             C   s   d d l  m } | j |   S)Nr   )r   )r   r   dumps)r.   r   r   r   r   to_jsonC  s    z
RD.to_jsonc             C   s   d d l  m } | j |   S)Nr   )r   )r   r   rp   )r.   r   r   r   r   to_xmlG  s    z	RD.to_xmlc             C   sw   t  | t t f  s | f } xR |  j D]G } | j | k r( | rU | j | k rU q( | rk t | | d   S| Sq( Wd  S)N)r   rM   rN   linksrR   r=   rb   )r.   ZrelsrK   mimetyperS   r   r   r   	find_linkM  s    	zRD.find_linkc             C   sn   | t  k r^ y t  | \ } } Wn" t k
 rD t  | } d  } Yn X|  j | d | d | St |   d  S)NrK   rt   )
KNOWN_RELSr)   ru   AttributeError)r.   r,   rK   rR   rt   r   r   r   __getattr__X  s    
zRD.__getattr__c             C   s   |  j  S)N)ro   )r.   r   r   r   get_elementse  s    zRD.get_elementsc             C   s   |  j  S)N)rn   )r.   r   r   r   
attributesi  s    zRD.attributesc             C   s   |  j  S)N)rj   )r.   r   r   r   get_expireso  s    zRD.get_expiresc             C   s+   t  | t j  s t d   | |  _ d  S)Nz!expires must be a datetime object)r   datetimer)   rj   )r.   expiresr   r   r   set_expiresr  s    zRD.set_expiresc             C   s   |  j  S)N)rk   )r.   r   r   r   get_aliasesx  s    zRD.get_aliasesc             C   s   |  j  S)N)rZ   )r.   r   r   r   r\   |  s    zRD.get_propertiesc             C   s   |  j  S)N)rl   )r.   r   r   r   	get_links  s    zRD.get_linksc             C   s   |  j  S)N)rm   )r.   r   r   r   get_signatures  s    zRD.get_signatures)r5   r6   r7   r/   rq   rr   ru   rx   ry   re   Zelementsrz   r{   r~   r}   r   aliasesr\   rf   r   rs   r   Z
signaturesr   r   r   r   rg   2  s&   rg   )r   r   r   r   )r   r   )r   r	   )r
   r   )r   r   )r   r   )r   r   )r|   ZloggingZRFC6415_TYPEZRFC7033_TYPEr   r   rv   Z	getLoggerr   r   r   r*   objectr+   r8   r:   r<   rM   r?   rJ   rO   rP   rQ   rU   rT   rg   r   r   r   r   <module>   sT   2+