
    g]$                         d dl mZ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 d dlmZ d dlmZ d d	lmZ d d
lmZmZmZ d dlmZ ddZ G d de      Z G d d      Zy)    )getattr_staticunwrap)get_current_site)ImproperlyConfiguredObjectDoesNotExist)Http404HttpResponse)TemplateDoesNotExistloader)feedgenerator)
iri_to_uri)escape)	http_date)get_default_timezoneis_naive
make_aware)get_languagec                     |rdnd}|j                  d      r	|d|}|S |j                  d      st        |d| |      }|S )Nhttpshttpz//:)zhttp://zhttps://zmailto:z://)
startswithr   )domainurlsecureprotocols       x/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/contrib/syndication/views.py
add_domainr      sM     wfH
~~d!3' J ^^>?&#>?J    c                       e Zd Zy)FeedDoesNotExistN)__name__
__module____qualname__ r   r   r!   r!      s    r   r!   c                   t    e Zd Zej                  ZdZdZdZd Z	d Z
d Zd Zd ZddZd Zd	 Zd
 Zd Zd Zy)FeedNc                 p   	  | j                   |g|i |}| j                  ||      }t	        |j
                        }t        | d      st        | d      r4t        |j                         j                               |j                  d<   |j                  |d       |S # t        $ r t        d      w xY w)NzFeed object does not exist.)content_typeitem_pubdateitem_updateddatezLast-Modifiedzutf-8)
get_objectr   r   get_feedr	   r)   hasattrr   latest_post_date	timestampheaderswrite)selfrequestargskwargsobjfeedgenresponses          r   __call__zFeed.__call__#   s    	9!$//';D;F;C --W-W-A-AB4(GD:L,M 1:((*4461H_- 	h( " 	9788	9s   B   B5c                 *    t        t        |            S N)r   strr3   items     r   
item_titlezFeed.item_title3   s    c$i  r   c                     t        |      S r<   )r=   r>   s     r   item_descriptionzFeed.item_description7   s    4yr   c                     	 |j                         S # t        $ r# t        d|j                  j                  z        w xY w)NzcGive your %s class a get_absolute_url() method, or define an item_link() method in your Feed class.)get_absolute_urlAttributeErrorr   	__class__r"   r>   s     r   	item_linkzFeed.item_link:   sJ    	((** 	&9;?>>;R;RS 	s    ,>c           
          | j                  d|      }|rVt        j                  t        |      t        | j                  d|            t        | j                  d|                  }|gS g S )Nitem_enclosure_urlitem_enclosure_lengthitem_enclosure_mime_type)r   length	mime_type)_get_dynamic_attrr   	Enclosurer=   )r3   r?   enc_urlencs       r   item_enclosureszFeed.item_enclosuresC   sj    (()=tD))L4112I4PQd445OQUVWC
 5L	r   c                    	 t        | |      }t        |      rt        |      }	 |j                  }|j                  sAt        t        | |j                  d       t              st        d|d|j                  d      |j                  dk(  r ||      S  |       S |S # t        $ r |cY S w xY w# t        $ r$ t        |j
                        }|j                  }Y w xY w)NzFeed method z decorated by z needs to use @functools.wraps.   )getattrrE   callabler   __code__r:   co_argcount
isinstancer   r"   staticmethodr   )r3   attnamer7   defaultattrfunccodes          r   rN   zFeed._get_dynamic_attrN   s    	4)D D> $<D%}} ##JtT]]D9<- +"7+^DMM;L M, -  1$Cy v3  	N	 " %dmm,}}%s"   B B/ B,+B,/*CCc                     i S )zy
        Return an extra keyword arguments dictionary that is used when
        initializing the feed generator.
        r%   )r3   r7   s     r   feed_extra_kwargszFeed.feed_extra_kwargsl   	    
 	r   c                     i S )z
        Return an extra keyword arguments dictionary that is used with
        the `add_item` call of the feed generator.
        r%   r>   s     r   item_extra_kwargszFeed.item_extra_kwargss   rb   r   c                      y r<   r%   )r3   r4   r5   r6   s       r   r,   zFeed.get_objectz   s    r   c                 H    |j                  d      |j                  d      dS )a  
        Return 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.
        r?   site)r7   rg   )get)r3   r6   s     r   get_context_datazFeed.get_context_data}   s!     zz&)6::f3EFFr   c                    t        |      }| j                  d|      }t        |j                  ||j	                               } | j
                  d | j                  d|      | j                  d|      || j                  d|      | j                  xs
 t               t        |j                  | j                  d|      xs |j                  |j	                               | j                  d|      | j                  d|      | j                  d|      | j                  d	|      | j                  d
|      | j                  d|      | j                  d|      d| j                  |      }d}| j                   	 t        j                  | j                        }d}| j                   	 t        j                  | j                        }| j                  d|      D ]  }| j                  ||||      }	||j!                  |	|      }
n| j                  d|      }
||j!                  |	|      }n| j                  d|      }t        |j                  | j                  d|      |j	                               }| j                  d|      }| j                  d|      }|%| j                  d|      }| j                  d|      }ndx}}t#               }| j                  d|      }|rt%        |      rt'        ||      }| j                  d|      }|rt%        |      rt'        ||      } |j(                  d |
||| j                  d||      | j                  d|      ||||||| j                  d|      | j                  d|      | j                  d|      d| j+                  |        |S # t        $ r Y w xY w# t        $ r Y w xY w)!z
        Return a feedgenerator.DefaultFeed object, fully populated, for
        this feed. Raise FeedDoesNotExist for invalid parameters.
        linktitlesubtitledescriptionfeed_urlauthor_nameauthor_linkauthor_email
categoriesfeed_copyright	feed_guidttl)rl   rm   rk   rn   languagero   rp   rq   rr   rs   rt   ru   rv   Nitems)r?   rg   r7   r4   r@   rB   rG   rR   item_author_nameitem_author_emailitem_author_linkr*   r+   	item_guiditem_guid_is_permalinkitem_commentsitem_categoriesitem_copyright)rl   rk   rn   	unique_idunique_id_is_permalink
enclosurespubdateupdateddaterp   rr   rq   commentsrs   r   r%   )r   rN   r   r   	is_secure	feed_typerw   r   pathra   title_templater   get_templater
   description_templateri   renderr   r   r   add_itemrd   )r3   r7   r4   current_siterk   feed	title_tmpdescription_tmpr?   contextrl   rn   r   rp   rr   rq   tzr   r   s                      r   r-   zFeed.get_feed   s   
 (0%%fc2,--tW5F5F5HIt~~ 
((#6++J<..}cB]]4ln##&&z37G7<<!!#
 ..}cB..}cB//D--lC@112BCH,,[#>&&uc2#
$ $$S)%
* 	*"//0C0CD	 $$0"("5"5d6O6O"P **7C8D++#w , G $!((':..|TB*-44WgF"445GN##&&{D9!!#D
 //0A4HJ001CTJK&#556I4P"445GN-11{%'B,,^TBG8G,$Wb1001CTJKx4(b9DMM '00dDI'+'='=,d( &'')'//F112CTJ#556FM!" ((.#G 9l A (  ( s$   8N( &N8 (	N54N58	OOr<   )r"   r#   r$   r   DefaultFeedr   r   r   rw   r:   r@   rB   rG   rR   rN   ra   rd   r,   ri   r-   r%   r   r   r'   r'      sV    ))INH !	<Gcr   r'   N)F)inspectr   r   django.contrib.sites.shortcutsr   django.core.exceptionsr   r   django.httpr   r	   django.templater
   r   django.utilsr   django.utils.encodingr   django.utils.htmlr   django.utils.httpr   django.utils.timezoner   r   r   django.utils.translationr   r   r!   r'   r%   r   r   <module>r      sG    * ; K - 8 & , $ ' L L 1	) 	M Mr   