Ë
    ¹ûàg=  ã                   óÞ   — d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 d„ Zd„ Zd	„ Z G d
„ d«      Z G d„ d«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      ZeZy)aÛ  
Syndication feed generation library -- used for generating RSS, etc.

Sample usage:

>>> from django.utils import feedgenerator
>>> feed = feedgenerator.Rss201rev2Feed(
...     title="Poynter E-Media Tidbits",
...     link="http://www.poynter.org/column.asp?id=31",
...     description="A group blog by the sharpest minds in online journalism.",
...     language="en",
... )
>>> feed.add_item(
...     title="Hello",
...     link="http://www.holovaty.com/test/",
...     description="Testing."
... )
>>> with open('test.rss', 'w') as fp:
...     feed.write(fp, 'utf-8')

For definitions of the different versions of RSS, see:
https://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004/02/04/incompatible-rss
é    N)ÚStringIO)Úurlparse)Ú
iri_to_uri)ÚSimplerXMLGeneratorc                 óØ   — t        | t        j                  «      s2t        j                  j                  | t        j                  «       «      } t        j
                  j                  | «      S ©N)Ú
isinstanceÚdatetimeÚcombineÚtimeÚemailÚutilsÚformat_datetime©Údates    úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django/utils/feedgenerator.pyÚrfc2822_dater   "   sE   € Ü�dœH×-Ñ-Ô.Ü× Ñ ×(Ñ(¨¬x¯}©}«Ó?ˆÜ�;‰;×&Ñ& tÓ,Ð,ó    c                 óè   — t        | t        j                  «      s2t        j                  j                  | t        j                  «       «      } | j	                  «       | j                  «       €dz   S dz   S )NÚZÚ )r	   r
   r   r   Ú	isoformatÚ	utcoffsetr   s    r   Úrfc3339_dater   (   sV   € Ü�dœH×-Ñ-Ô.Ü× Ñ ×(Ñ(¨¬x¯}©}«Ó?ˆØ�>‰>Ó d§n¡nÓ&6Ð&>˜sÑGÐGÀBÑGÐGr   c                 óž   — t        | «      }d}|�d|j                  d«      z  }d|j                  ›|›d|j                  ›d|j                  ›�S )zŒ
    Create a TagURI.

    See
    https://web.archive.org/web/20110514113830/http://diveintomark.org/archives/2004/05/28/howto-atom-id
    r   z,%sz%Y-%m-%dztag:ú:ú/)r   ÚstrftimeÚhostnameÚpathÚfragment)Úurlr   ÚbitsÚds       r   Úget_tag_urir%   .   sG   € ô �C‹=€DØ
€AØÐØ�D—M‘M *Ó-Ñ-ˆøØ#Ÿ}š}ªa°·³¸D¿MºMÐJÐJr   c                   ó|   — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 	 	 dd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zy)ÚSyndicationFeedzGBase class for all syndication feeds. Subclasses should provide write()Nc                 ó0  — d„ }|	xr |	D �cg c]  }t        |«      ‘Œ c}}	 ||«      t        |«       ||«       ||«       ||«       ||«      t        |«       ||«      |	xs dt        |
«       ||«      |xs | ||«      dœ|¥| _        g | _        y c c}w )Nc                 ó    — | �t        | «      S | S r   ©Ústr©Úss    r   Úto_strz(SyndicationFeed.__init__.<locals>.to_strP   ó   € Ø˜]”3�q“6Ð1°Ð1r   © )ÚtitleÚlinkÚdescriptionÚlanguageÚauthor_emailÚauthor_nameÚauthor_linkÚsubtitleÚ
categoriesÚfeed_urlÚfeed_copyrightÚidÚttl)r+   r   ÚfeedÚitems)Úselfr1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   Ú	feed_guidr=   Úkwargsr.   Úcs                    r   Ú__init__zSyndicationFeed.__init__?   sª   € ò"	2ð  Ò@°ZÖ$@°¤S¨¥VÒ$@ˆ
á˜E“]Ü˜tÓ$Ù! +Ó.Ù˜xÓ(Ù" <Ó0Ù! +Ó.Ü% kÓ2Ù˜xÓ(Ø$Ò*¨Ü" 8Ó,Ù$ ^Ó4ØÒ#˜tÙ˜#“;ñ
ð ð
ˆŒ	ð  ˆ�
ùò# %As   ŒBc                 ó6  — d„ }|xr |D �cg c]
  } ||«      ‘Œ c}}| j                   j                   ||«      t        |«       ||«       ||«       ||«      t        |«      || ||«       ||	«      |
|xs d|xs d ||«       ||«      dœ|¥«       yc c}w )zí
        Add an item to the feed. All args are expected to be strings except
        pubdate and updateddate, which are datetime.datetime objects, and
        enclosures, which is an iterable of instances of the Enclosure class.
        c                 ó    — | �t        | «      S | S r   r*   r,   s    r   r.   z(SyndicationFeed.add_item.<locals>.to_str   r/   r   r0   )r1   r2   r3   r5   r6   r7   ÚpubdateÚupdateddateÚcommentsÚ	unique_idÚunique_id_is_permalinkÚ
enclosuresr9   Úitem_copyrightr=   N)r?   Úappendr   )r@   r1   r2   r3   r5   r6   r7   rG   rI   rJ   rK   r9   rM   r=   rH   rL   rB   r.   rC   s                      r   Úadd_itemzSyndicationFeed.add_itemf   s°   € ò2	2ð  ÒC¸
Ö$C°1¡V¨A¥YÒ$Cˆ
Ø�
‰
×Ñá ›Ü" 4Ó(Ù% kÓ2Ù & |Ó 4Ù% kÓ2Ü)¨+Ó6Ø"Ø*Ù" 8Ó,Ù# IÓ.Ø*@Ø(Ò.¨BØ(Ò.¨BÙ"(¨Ó"8Ù˜c“{ñð  ð!õ	
ùò %Ds   ŒBc                 ó,   — t        | j                  «      S r   )Úlenr?   ©r@   s    r   Ú	num_itemszSyndicationFeed.num_items˜   s   € Ü�4—:‘:‹Ðr   c                 ó   — i S )zx
        Return extra attributes to place on the root (i.e. feed/channel) element.
        Called from write().
        r0   rR   s    r   Úroot_attributeszSyndicationFeed.root_attributes›   s	   € ð
 ˆ	r   c                  ó   — y)zd
        Add elements in the root (i.e. feed/channel) element. Called
        from write().
        Nr0   ©r@   Úhandlers     r   Úadd_root_elementsz!SyndicationFeed.add_root_elements¢   s   € ð
 	r   c                 ó   — i S )zZ
        Return extra attributes to place on each item (i.e. item/entry) element.
        r0   )r@   Úitems     r   Úitem_attributeszSyndicationFeed.item_attributes©   s	   € ð ˆ	r   c                  ó   — y)zF
        Add elements on each item (i.e. item/entry) element.
        Nr0   ©r@   rX   r[   s      r   Úadd_item_elementsz!SyndicationFeed.add_item_elements¯   s   € ð 	r   c                 ó   — t        d«      ‚)z‰
        Output the feed in the given encoding to outfile, which is a file-like
        object. Subclasses should override this.
        z;subclasses of SyndicationFeed must provide a write() method)ÚNotImplementedError)r@   ÚoutfileÚencodings      r   ÚwritezSyndicationFeed.writeµ   s   € ô
 "ØIó
ð 	
r   c                 óZ   — t        «       }| j                  ||«       |j                  «       S )zD
        Return the feed in the given encoding as a string.
        )r   rd   Úgetvalue)r@   rc   r-   s      r   ÚwriteStringzSyndicationFeed.writeString¾   s%   € ô ‹JˆØ�
‰
�1�hÔØ�z‰z‹|Ðr   c                 óî   — d}d}| j                   D ]'  }|D ]   }|j                  |«      }|sŒ|�||kD  sŒ|}Œ" Œ) |xs8 t        j                  j                  t        j                  j
                  ¬«      S )z�
        Return the latest item's pubdate or updateddate. If no items
        have either of these attributes this return the current UTC date/time.
        N)rH   rG   )Útz)r?   Úgetr
   ÚnowÚtimezoneÚutc)r@   Úlatest_dateÚ	date_keysr[   Údate_keyÚ	item_dates         r   Úlatest_post_datez SyndicationFeed.latest_post_dateÆ   s€   € ð
 ˆØ.ˆ	à—J‘Jò 	0ˆDØ%ò 0�Ø ŸH™H XÓ.�	ÚØ"Ð*¨i¸+Ó.EØ&/™ñ	0ð	0ð ÒMœh×/Ñ/×3Ñ3´x×7HÑ7H×7LÑ7LÐ3ÓMÐMr   )
NNNNNNNNNN)NNNNNNNr0   NNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rD   rO   rS   rU   rY   r\   r_   rd   rg   rr   r0   r   r   r'   r'   <   s€   „ ÙMð ØØØØØØØØØó%ðX ØØØØØØ#ØØØØØó!0
òdòòòòò
òóNr   r'   c                   ó   — e Zd ZdZd„ Zy)Ú	EnclosurezAn RSS enclosurec                 óB   — ||c| _         | _        t        |«      | _        y)z#All args are expected to be stringsN)ÚlengthÚ	mime_typer   r"   )r@   r"   rz   r{   s       r   rD   zEnclosure.__init__Û   s   € à&,¨iÐ#ˆŒ�T”^Ü˜c“?ˆ�r   N)rs   rt   ru   rv   rD   r0   r   r   rx   rx   Ø   s
   „ Ùó#r   rx   c                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚRssFeedz"application/rss+xml; charset=utf-8c                 óH  — t        ||d¬«      }|j                  «        |j                  d| j                  «       «       |j                  d| j	                  «       «       | j                  |«       | j                  |«       | j                  |«       |j                  d«       y )NT©Úshort_empty_elementsÚrssÚchannel)	r   ÚstartDocumentÚstartElementÚrss_attributesrU   rY   Úwrite_itemsÚendChannelElementÚ
endElement©r@   rb   rc   rX   s       r   rd   zRssFeed.writeä   s†   € Ü% g¨xÈdÔSˆØ×ÑÔØ×Ñ˜U D×$7Ñ$7Ó$9Ô:Ø×Ñ˜Y¨×(<Ñ(<Ó(>Ô?Ø×Ñ˜wÔ'Ø×Ñ˜Ô!Ø×Ñ˜wÔ'Ø×Ñ˜5Õ!r   c                 ó    — | j                   ddœS )Núhttp://www.w3.org/2005/Atom)Úversionz
xmlns:atom)Ú_versionrR   s    r   r…   zRssFeed.rss_attributesî   s   € à—}‘}Ø7ñ
ð 	
r   c                 ó®   — | j                   D ]F  }|j                  d| j                  |«      «       | j                  ||«       |j	                  d«       ŒH y )Nr[   ©r?   r„   r\   r_   rˆ   r^   s      r   r†   zRssFeed.write_itemsô   sN   € Ø—J‘Jò 	'ˆDØ× Ñ  ¨×)=Ñ)=¸dÓ)CÔDØ×"Ñ" 7¨DÔ1Ø×Ñ˜vÕ&ñ	'r   c                 óÖ  — |j                  d| j                  d   «       |j                  d| j                  d   «       |j                  d| j                  d   «       | j                  d   �#|j                  dd d| j                  d   dœ«       | j                  d   �|j                  d| j                  d   «       | j                  d	   D ]  }|j                  d
|«       Œ | j                  d   �|j                  d| j                  d   «       |j                  dt        | j                  «       «      «       | j                  d   � |j                  d| j                  d   «       y y )Nr1   r2   r3   r:   z	atom:linkr@   ©ÚrelÚhrefr4   r9   Úcategoryr;   Ú	copyrightÚlastBuildDater=   )ÚaddQuickElementr>   r   rr   ©r@   rX   Úcats      r   rY   zRssFeed.add_root_elementsú   sF  € Ø×Ñ ¨¯©°7Ñ);Ô<Ø×Ñ ¨¯	©	°&Ñ(9Ô:Ø×Ñ ¨t¯y©y¸Ñ/GÔHØ�9‰9�ZÑ Ð,Ø×#Ñ#Ø˜T¨6¸4¿9¹9ÀZÑ;PÑ#Qôð �9‰9�ZÑ Ð,Ø×#Ñ# J°·	±	¸*Ñ0EÔFØ—9‘9˜\Ñ*ò 	5ˆCØ×#Ñ# J°Õ4ð	5à�9‰9Ð%Ñ&Ð2Ø×#Ñ# K°·±Ð;KÑ1LÔMØ×Ñ ´¸d×>SÑ>SÓ>UÓ1VÔWØ�9‰9�UÑÐ'Ø×#Ñ# E¨4¯9©9°UÑ+;Õ<ð (r   c                 ó&   — |j                  d«       y )Nr‚   )rˆ   rW   s     r   r‡   zRssFeed.endChannelElement  s   € Ø×Ñ˜9Õ%r   N)	rs   rt   ru   Úcontent_typerd   r…   r†   rY   r‡   r0   r   r   r}   r}   á   s    „ Ø7€Lò"ò
ò'ò=ó$&r   r}   c                   ó   — e Zd ZdZd„ Zy)ÚRssUserland091Feedz0.91c                 óŽ   — |j                  d|d   «       |j                  d|d   «       |d   �|j                  d|d   «       y y )Nr1   r2   r3   )r—   r^   s      r   r_   z$RssUserland091Feed.add_item_elements  sO   € Ø×Ñ ¨¨g©Ô7Ø×Ñ ¨¨V©Ô5Ø�ÑÐ*Ø×#Ñ# M°4¸Ñ3FÕGð +r   N©rs   rt   ru   r�   r_   r0   r   r   r�   r�     s   „ Ø€HóHr   r�   c                   ó   — e Zd ZdZd„ Zy)ÚRss201rev2Feedz2.0c                 ó¶  — |j                  d|d   «       |j                  d|d   «       |d   �|j                  d|d   «       |d   r$|d   r|j                  d|d   ›d|d   ›d�«       n8|d   r|j                  d|d   «       n|d   r|j                  d	|d   d
di«       |d   �|j                  dt        |d   «      «       |d   �|j                  d|d   «       |d   �Vi }t        |j                  d«      t        «      rt        |d   «      j                  «       |d<   |j                  d|d   |«       |d   �|j                  d|d   «       |d   rat        |d   «      }t        |«      dkD  rt        d«      ‚|d   }|j                  dd|j                  |j                  |j                  dœ«       |d   D ]  }|j                  d|«       Œ y )Nr1   r2   r3   r6   r5   Úauthorz (ú)z
dc:creatorzxmlns:dcz http://purl.org/dc/elements/1.1/rG   ÚpubDaterI   rJ   rK   ÚisPermaLinkÚguidr=   rL   é   zrRSS feed items may only have one enclosure, see http://www.rssboard.org/rss-profile#element-channel-item-enclosurer   Ú	enclosurer   )r"   rz   Útyper9   r”   )r—   r   r	   rj   Úboolr+   ÚlowerÚlistrQ   Ú
ValueErrorr"   rz   r{   )r@   rX   r[   Ú
guid_attrsrL   r©   r™   s          r   r_   z Rss201rev2Feed.add_item_elements  s  € Ø×Ñ ¨¨g©Ô7Ø×Ñ ¨¨V©Ô5Ø�ÑÐ*Ø×#Ñ# M°4¸Ñ3FÔGð �Ò 4¨Ò#7Ø×#Ñ#Ø t¨NÓ';¸TÀ-Ó=PÐQõð �.Ò!Ø×#Ñ# H¨d°>Ñ.BÕCØ�-Ò Ø×#Ñ#ØØ�]Ñ#ØÐ?Ð@ôð �	‰?Ð&Ø×#Ñ# I¬|¸DÀ¹OÓ/LÔMØ�
ÑÐ'Ø×#Ñ# J°°ZÑ0@ÔAØ�ÑÐ(ØˆJÜ˜$Ÿ(™(Ð#;Ó<¼dÔCÜ,/°Ð5MÑ0NÓ,O×,UÑ,UÓ,W�
˜=Ñ)Ø×#Ñ# F¨D°Ñ,=¸zÔJØ�‰;Ð"Ø×#Ñ# E¨4°©;Ô7ð �ÒÜ˜d <Ñ0Ó1ˆJÜ�:‹ Ò"Ü ðYóð ð # 1™ˆIØ×#Ñ#ØØà$Ÿ=™=Ø'×.Ñ.Ø%×/Ñ/ñôð ˜Ñ%ò 	5ˆCØ×#Ñ# J°Õ4ñ	5r   NrŸ   r0   r   r   r¡   r¡     s   „ à€Hó55r   r¡   c                   ó2   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	y)	Ú	Atom1Feedz#application/atom+xml; charset=utf-8r‹   c                 óæ   — t        ||d¬«      }|j                  «        |j                  d| j                  «       «       | j	                  |«       | j                  |«       |j                  d«       y )NTr   r>   )r   rƒ   r„   rU   rY   r†   rˆ   r‰   s       r   rd   zAtom1Feed.write[  s_   € Ü% g¨xÈdÔSˆØ×ÑÔØ×Ñ˜V T×%9Ñ%9Ó%;Ô<Ø×Ñ˜wÔ'Ø×Ñ˜Ô!Ø×Ñ˜6Õ"r   c                 ót   — | j                   d   �| j                  | j                   d   dœS d| j                  iS )Nr4   )Úxmlnszxml:langr´   )r>   ÚnsrR   s    r   rU   zAtom1Feed.root_attributesc  s8   € Ø�9‰9�ZÑ Ð,Ø!ŸW™W°$·)±)¸JÑ2GÑHÐHà˜TŸW™WÐ%Ð%r   c                 óâ  — |j                  d| j                  d   «       |j                  ddd| j                  d   dœ«       | j                  d   �#|j                  ddd| j                  d   dœ«       |j                  d| j                  d   «       |j                  d	t        | j                  «       «      «       | j                  d
   �ž|j	                  di «       |j                  d| j                  d
   «       | j                  d   �|j                  d| j                  d   «       | j                  d   �|j                  d| j                  d   «       |j                  d«       | j                  d   �|j                  d| j                  d   «       | j                  d   D ]  }|j                  ddd|i«       Œ | j                  d   � |j                  d| j                  d   «       y y )Nr1   r2   r   Ú	alternater‘   r:   r@   r<   Úupdatedr6   r£   Únamer5   r   r7   Úurir8   r9   r”   Útermr;   Úrights)r—   r>   r   rr   r„   rˆ   r˜   s      r   rY   zAtom1Feed.add_root_elementsi  sÇ  € Ø×Ñ ¨¯©°7Ñ);Ô<Ø×ÑØ�B °T·Y±Y¸vÑ5FÑGô	
ð �9‰9�ZÑ Ð,Ø×#Ñ#Ø˜ F°D·I±I¸jÑ4IÑJôð 	×Ñ  d§i¡i°¡oÔ6Ø×Ñ 	¬<¸×8MÑ8MÓ8OÓ+PÔQØ�9‰9�]Ñ#Ð/Ø× Ñ  ¨2Ô.Ø×#Ñ# F¨D¯I©I°mÑ,DÔEØ�y‰y˜Ñ(Ð4Ø×'Ñ'¨°·±¸>Ñ1JÔKØ�y‰y˜Ñ'Ð3Ø×'Ñ'¨¨t¯y©y¸Ñ/GÔHØ×Ñ˜xÔ(Ø�9‰9�ZÑ Ð,Ø×#Ñ# J°·	±	¸*Ñ0EÔFØ—9‘9˜\Ñ*ò 	CˆCØ×#Ñ# J°°V¸S°MÕBð	Cà�9‰9Ð%Ñ&Ð2Ø×#Ñ# H¨d¯i©iÐ8HÑ.IÕJð 3r   c                 ó®   — | j                   D ]F  }|j                  d| j                  |«      «       | j                  ||«       |j	                  d«       ŒH y )NÚentryr�   r^   s      r   r†   zAtom1Feed.write_itemsƒ  sN   € Ø—J‘Jò 	(ˆDØ× Ñ  ¨$×*>Ñ*>¸tÓ*DÔEØ×"Ñ" 7¨DÔ1Ø×Ñ˜wÕ'ñ	(r   c           
      óZ  — |j                  d|d   «       |j                  dd|d   ddœ«       |d   �|j                  dt        |d   «      «       |d   �|j                  d	t        |d   «      «       |d
   �l|j                  di «       |j                  d|d
   «       |d   �|j                  d|d   «       |d   �|j                  d|d   «       |j                  d«       |d   �|d   }nt	        |d   |d   «      }|j                  d|«       |d   �|j                  d|d   ddi«       |d   D ]8  }|j                  ddd|j
                  |j                  |j                  dœ«       Œ: |d   D ]  }|j                  ddd|i«       Œ |d   �|j                  d|d   «       y y )Nr1   r2   r   r·   )r“   r’   rG   Ú	publishedrH   r¸   r6   r£   r¹   r5   r   r7   rº   rJ   r<   r3   Úsummaryrª   ÚhtmlrL   r©   )r’   r“   rz   rª   r9   r”   r»   rM   r¼   )r—   r   r„   rˆ   r%   r"   rz   r{   )r@   rX   r[   rJ   r©   r™   s         r   r_   zAtom1Feed.add_item_elements‰  sÿ  € Ø×Ñ ¨¨g©Ô7Ø×Ñ ¨°T¸&±\È+Ñ,VÔWà�	‰?Ð&Ø×#Ñ# K´¸dÀ9¹oÓ1NÔOà�ÑÐ*Ø×#Ñ# I¬|¸DÀÑ<OÓ/PÔQð �ÑÐ*Ø× Ñ  ¨2Ô.Ø×#Ñ# F¨D°Ñ,?Ô@Ø�NÑ#Ð/Ø×'Ñ'¨°°nÑ1EÔFØ�MÑ"Ð.Ø×'Ñ'¨¨t°MÑ/BÔCØ×Ñ˜xÔ(ð �ÑÐ(Ø˜[Ñ)‰Iä# D¨¡L°$°y±/ÓBˆIØ×Ñ  iÔ0ð �ÑÐ*Ø×#Ñ# I¨t°MÑ/BÀVÈVÐDTÔUð ˜lÑ+ò 
	ˆIØ×#Ñ#ØØà&Ø%ŸM™MØ'×.Ñ.Ø%×/Ñ/ñ	õ	ð
	ð ˜Ñ%ò 	CˆCØ×#Ñ# J°°V¸S°MÕBð	Cð Ð Ñ!Ð-Ø×#Ñ# H¨dÐ3CÑ.DÕEð .r   N)
rs   rt   ru   r›   rµ   rd   rU   rY   r†   r_   r0   r   r   r±   r±   V  s'   „ à8€LØ	&€Bò#ò&òKò4(ó2Fr   r±   )rv   r
   r   Úior   Úurllib.parser   Údjango.utils.encodingr   Údjango.utils.xmlutilsr   r   r   r%   r'   rx   r}   r�   r¡   r±   ÚDefaultFeedr0   r   r   ú<module>rÈ      sˆ   ðñó0 Û Ý Ý !å ,Ý 5ò-òHòK÷YNñ YN÷x#ñ #ô,&ˆoô ,&ô^H˜ô Hô95�Wô 95ôxeF�ô eFðT �r   