Author: mtredinnick
Date: 2007-05-31 04:04:55 -0500 (Thu, 31 May 2007)
New Revision: 5389

Modified:
   django/branches/unicode/django/utils/feedgenerator.py
Log:
unicode: Fixed #4430 -- Handle bytestrings and IRIs more robustly in feed
production. Thanks to Almad and [EMAIL PROTECTED] for some good debugging here.


Modified: django/branches/unicode/django/utils/feedgenerator.py
===================================================================
--- django/branches/unicode/django/utils/feedgenerator.py       2007-05-31 
09:03:29 UTC (rev 5388)
+++ django/branches/unicode/django/utils/feedgenerator.py       2007-05-31 
09:04:55 UTC (rev 5389)
@@ -19,6 +19,7 @@
 """
 
 from django.utils.xmlutils import SimplerXMLGenerator
+from django.utils.encoding import force_unicode, iri_to_uri
 import datetime, re, time
 import email.Utils
 
@@ -41,18 +42,20 @@
     def __init__(self, title, link, description, language=None, 
author_email=None,
             author_name=None, author_link=None, subtitle=None, categories=None,
             feed_url=None, feed_copyright=None):
+        if categories:
+            categories = [force_unicode(c) for c in categories]
         self.feed = {
-            'title': title,
-            'link': link,
-            'description': description,
-            'language': language,
-            'author_email': author_email,
-            'author_name': author_name,
-            'author_link': author_link,
-            'subtitle': subtitle,
+            'title': force_unicode(title),
+            'link': iri_to_uri(link),
+            'description': force_unicode(description),
+            'language': force_unicode(language),
+            'author_email': force_unicode(author_email),
+            'author_name': force_unicode(author_name),
+            'author_link': iri_to_uri(author_link),
+            'subtitle': force_unicode(subtitle),
             'categories': categories or (),
-            'feed_url': feed_url,
-            'feed_copyright': feed_copyright,
+            'feed_url': iri_to_uri(feed_url),
+            'feed_copyright': force_unicode(feed_copyright),
         }
         self.items = []
 
@@ -64,19 +67,21 @@
         objects except pubdate, which is a datetime.datetime object, and
         enclosure, which is an instance of the Enclosure class.
         """
+        if categories:
+            categories = [force_unicode(c) for c in categories]
         self.items.append({
-            'title': title,
-            'link': link,
-            'description': description,
-            'author_email': author_email,
-            'author_name': author_name,
-            'author_link': author_link,
+            'title': force_unicode(title),
+            'link': iri_to_uri(link),
+            'description': force_unicode(description),
+            'author_email': force_unicode(author_email),
+            'author_name': force_unicode(author_name),
+            'author_link': iri_to_uri(author_link),
             'pubdate': pubdate,
-            'comments': comments,
-            'unique_id': unique_id,
+            'comments': force_unicode(comments),
+            'unique_id': force_unicode(unique_id),
             'enclosure': enclosure,
             'categories': categories or (),
-            'item_copyright': item_copyright,
+            'item_copyright': force_unicode(item_copyright),
         })
 
     def num_items(self):
@@ -114,7 +119,8 @@
     "Represents an RSS enclosure"
     def __init__(self, url, length, mime_type):
         "All args are expected to be Python Unicode objects"
-        self.url, self.length, self.mime_type = url, length, mime_type
+        self.length, self.mime_type = length, mime_type
+        self.url = iri_to_uri(url)
 
 class RssFeed(SyndicationFeed):
     mime_type = 'application/rss+xml'


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to