
 X;"                 @   s/  d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d  d l m	 Z	 m
 Z
 d  d l m Z m Z d  d l m Z m Z d  d l m Z m Z d  d	 l m Z m Z m Z d  d
 l m Z d  d l m Z d  d l m Z m Z m Z d d d  Z  Gd d   d e
  Z! Gd d   d e"  Z# d S)    )unicode_literals)timegm)settings)get_current_site)ImproperlyConfiguredObjectDoesNotExist)Http404HttpResponse)TemplateDoesNotExistloader)feedgeneratorsix)
force_text
iri_to_uri
smart_text)escape)	http_date)get_default_timezoneis_naive
make_awareFc             C   sc   | r d n d } | j  d  r4 d | | f } n+ | j  d	  s_ t d | |  | f  } n  | S)
Nhttpshttpz//z%s:%shttp://https://mailto:z	%s://%s%s)r   r   r   )
startswithr   )domainurlsecureprotocol r    N/home/ubuntu/projects/ifolica/build/django/django/contrib/syndication/views.py
add_domain   s    r"   c               @   s   e  Z d  Z d S)FeedDoesNotExistN)__name__
__module____qualname__r    r    r    r!   r#      s   r#   c               @   s   e  Z d  Z e j Z d Z d Z d d   Z d d   Z	 d d   Z
 d d	   Z d
 d   Z d d d  Z d d   Z d d   Z d d   Z d d   Z d d   Z d S)FeedNc             O   s   y |  j  | | |  } Wn t k
 r9 t d   Yn X|  j | |  } t d | j  } t |  d  s| t |  d  r t t | j	   j
     | d <n  | j | d  | S)NzFeed object does not exist.content_typeitem_pubdateitem_updateddatezLast-Modifiedzutf-8)
get_objectr   r   get_feedr	   r(   hasattrr   r   Zlatest_post_dateutctimetuplewrite)selfrequestargskwargsobjZfeedgenresponser    r    r!   __call__$   s    "zFeed.__call__c             C   s   t  t |   S)N)r   r   )r0   itemr    r    r!   
item_title3   s    zFeed.item_titlec             C   s
   t  |  S)N)r   )r0   r7   r    r    r!   item_description7   s    zFeed.item_descriptionc             C   s=   y | j    SWn( t k
 r8 t d | j j   Yn Xd  S)NzcGive your %s class a get_absolute_url() method, or define an item_link() method in your Feed class.)Zget_absolute_urlAttributeErrorr   	__class__r$   )r0   r7   r    r    r!   	item_link:   s    zFeed.item_linkc          
   C   sk   |  j  d |  } | rg t j d t |  d t |  j  d |   d t |  j  d |    } | g Sg  S)NZitem_enclosure_urlr   lengthZitem_enclosure_lengthZ	mime_typeZitem_enclosure_mime_type)_get_dynamic_attrr   Z	Enclosurer   )r0   r7   Zenc_urlencr    r    r!   item_enclosuresC   s    	zFeed.item_enclosuresc             C   s   y t  |  |  } Wn t k
 r+ | SYn Xt |  r y t j |  } Wn$ t k
 rq t j | j  } Yn X| j d k r | |  S|   Sn  | S)N   )getattrr:   callabler   get_function_coder6   co_argcount)r0   Zattnamer4   defaultattrcoder    r    r!   r>   N   s    	

zFeed._get_dynamic_attrc             C   s   i  S)zz
        Returns an extra keyword arguments dictionary that is used when
        initializing the feed generator.
        r    )r0   r4   r    r    r!   feed_extra_kwargsa   s    zFeed.feed_extra_kwargsc             C   s   i  S)z
        Returns an extra keyword arguments dictionary that is used with
        the `add_item` call of the feed generator.
        r    )r0   r7   r    r    r!   item_extra_kwargsh   s    zFeed.item_extra_kwargsc             O   s   d  S)Nr    )r0   r1   r2   r3   r    r    r!   r+   o   s    zFeed.get_objectc             K   s$   i | j  d  d 6| j  d  d 6S)a  
        Returns a dictionary to use as extra context if either
        ``self.description_template`` or ``self.item_template`` are used.

        Default implementation preserves the old behavior
        of using {'obj': item, 'site': current_site} as the context.
        r7   r4   site)get)r0   r3   r    r    r!   get_context_datar   s    zFeed.get_context_datac          .   C   s	  t  |  } |  j d |  } t | j | | j    } |  j d |  j d |  d |  j d |  d | d |  j d |  d t j d t | j |  j d |  p | j | j    d |  j d |  d |  j d |  d	 |  j d	 |  d
 |  j d
 |  d |  j d |  d |  j d |  d |  j d |  |  j	 |   } d } |  j
 d k	 ry t j |  j
  } Wqt k
 rYqXn  d } |  j d k	 ry t j |  j  } Wqt k
 rYqXn  x8|  j d |  D]$} |  j d | d | d | d |  }	 | d k	 r(| j |	 |  }
 n |  j d |  }
 | d k	 r[| j |	 |  } n |  j d |  } t | j |  j d |  | j    } |  j d |  } |  j d |  } | d k	 r|  j d |  } |  j d |  } n
 d } } t   } |  j d |  } | r4t |  r4t | |  } n  |  j d |  } | rjt |  rjt | |  } n  | j d |
 d | d | d |  j d | |  d |  j d  |  d! | d" | d# | d | d	 | d | d
 |  j d$ |  d% |  j d% |  |  j |   qW| S)&z
        Returns a feedgenerator.DefaultFeed object, fully populated, for
        this feed. Raises FeedDoesNotExist for invalid parameters.
        linktitleZsubtitledescriptionlanguageZfeed_urlauthor_nameauthor_linkauthor_email
categoriesZfeed_copyrightZ	feed_guidZttlNitemsr7   rK   r4   r1   r8   r9   r<   r@   Zitem_author_nameZitem_author_emailZitem_author_linkr)   r*   Z	unique_idZ	item_guidZunique_id_is_permalinkZitem_guid_is_permalink
enclosurespubdateupdateddateZitem_categoriesZitem_copyright)r   r>   r"   r   Z	is_secure	feed_typer   ZLANGUAGE_CODEpathrI   title_templater   Zget_templater
   description_templaterM   renderr   r   r   Zadd_itemrJ   )r0   r4   r1   Zcurrent_siterN   feedZ	title_tmpZdescription_tmpr7   contextrO   rP   rW   rR   rT   rS   tzrX   rY   r    r    r!   r,   |   s    		
		zFeed.get_feed)r$   r%   r&   r   ZDefaultFeedrZ   r\   r]   r6   r8   r9   r<   r@   r>   rI   rJ   r+   rM   r,   r    r    r    r!   r'      s   		
r'   N)$
__future__r   calendarr   Zdjango.confr   Zdjango.contrib.sites.shortcutsr   Zdjango.core.exceptionsr   r   Zdjango.httpr   r	   Zdjango.templater
   r   Zdjango.utilsr   r   Zdjango.utils.encodingr   r   r   Zdjango.utils.htmlr   Zdjango.utils.httpr   Zdjango.utils.timezoner   r   r   r"   r#   objectr'   r    r    r    r!   <module>   s   
