summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2010-01-28 13:59:57 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2010-01-28 13:59:57 +0000
commit4a1be98aee7aba994645d943af0a31aaab6ee11e (patch)
treea8cfc7b848050bb55028cafca6567e6862bd9821
parent2777cd37a8ceb04e3d4b28de674f9600ff0e0b4a (diff)
[1.1.X] Fixed #8758 -- Corrected handling of tag creation in feeds when the URL contains a port number.
Partial backport of r12338 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12340 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/utils/feedgenerator.py16
-rw-r--r--tests/regressiontests/utils/feedgenerator.py63
-rw-r--r--tests/regressiontests/utils/tests.py1
3 files changed, 74 insertions, 6 deletions
diff --git a/django/utils/feedgenerator.py b/django/utils/feedgenerator.py
index c9445f932f..7e5a4a0ae3 100644
--- a/django/utils/feedgenerator.py
+++ b/django/utils/feedgenerator.py
@@ -19,8 +19,8 @@ For definitions of the different versions of RSS, see:
http://diveintomark.org/archives/2004/02/04/incompatible-rss
"""
-import re
import datetime
+import urlparse
from django.utils.xmlutils import SimplerXMLGenerator
from django.utils.encoding import force_unicode, iri_to_uri
@@ -46,12 +46,16 @@ def rfc3339_date(date):
return date.strftime('%Y-%m-%dT%H:%M:%SZ')
def get_tag_uri(url, date):
- "Creates a TagURI. See http://diveintomark.org/archives/2004/05/28/howto-atom-id"
- tag = re.sub('^http://', '', url)
+ """
+ Creates a TagURI.
+
+ See http://diveintomark.org/archives/2004/05/28/howto-atom-id
+ """
+ url_split = urlparse.urlparse(url)
+ d = ''
if date is not None:
- tag = re.sub('/', ',%s:/' % date.strftime('%Y-%m-%d'), tag, 1)
- tag = re.sub('#', '/', tag)
- return u'tag:' + tag
+ d = ',%s' % date.strftime('%Y-%m-%d')
+ return u'tag:%s%s:%s/%s' % (url_split.hostname, d, url_split.path, url_split.fragment)
class SyndicationFeed(object):
"Base class for all syndication feeds. Subclasses should provide write()"
diff --git a/tests/regressiontests/utils/feedgenerator.py b/tests/regressiontests/utils/feedgenerator.py
new file mode 100644
index 0000000000..5a10de2d1b
--- /dev/null
+++ b/tests/regressiontests/utils/feedgenerator.py
@@ -0,0 +1,63 @@
+import datetime
+from unittest import TestCase
+
+from django.utils import feedgenerator, tzinfo
+
+class FeedgeneratorTest(TestCase):
+ """
+ Tests for the low-level syndication feed framework.
+ """
+
+ def test_get_tag_uri(self):
+ """
+ Test get_tag_uri() correctly generates TagURIs.
+ """
+ self.assertEqual(
+ feedgenerator.get_tag_uri('http://example.org/foo/bar#headline', datetime.date(2004, 10, 25)),
+ u'tag:example.org,2004-10-25:/foo/bar/headline')
+
+ def test_get_tag_uri_with_port(self):
+ """
+ Test that get_tag_uri() correctly generates TagURIs from URLs with port
+ numbers.
+ """
+ self.assertEqual(
+ feedgenerator.get_tag_uri('http://www.example.org:8000/2008/11/14/django#headline', datetime.datetime(2008, 11, 14, 13, 37, 0)),
+ u'tag:www.example.org,2008-11-14:/2008/11/14/django/headline')
+
+ def test_rfc2822_date(self):
+ """
+ Test rfc2822_date() correctly formats datetime objects.
+ """
+ self.assertEqual(
+ feedgenerator.rfc2822_date(datetime.datetime(2008, 11, 14, 13, 37, 0)),
+ "Fri, 14 Nov 2008 13:37:00 -0000"
+ )
+
+ def test_rfc2822_date_with_timezone(self):
+ """
+ Test rfc2822_date() correctly formats datetime objects with tzinfo.
+ """
+ self.assertEqual(
+ feedgenerator.rfc2822_date(datetime.datetime(2008, 11, 14, 13, 37, 0, tzinfo=tzinfo.FixedOffset(datetime.timedelta(minutes=60)))),
+ "Fri, 14 Nov 2008 13:37:00 +0100"
+ )
+
+ def test_rfc3339_date(self):
+ """
+ Test rfc3339_date() correctly formats datetime objects.
+ """
+ self.assertEqual(
+ feedgenerator.rfc3339_date(datetime.datetime(2008, 11, 14, 13, 37, 0)),
+ "2008-11-14T13:37:00Z"
+ )
+
+ def test_rfc3339_date_with_timezone(self):
+ """
+ Test rfc3339_date() correctly formats datetime objects with tzinfo.
+ """
+ self.assertEqual(
+ feedgenerator.rfc3339_date(datetime.datetime(2008, 11, 14, 13, 37, 0, tzinfo=tzinfo.FixedOffset(datetime.timedelta(minutes=120)))),
+ "2008-11-14T13:37:00+02:00"
+ )
+
diff --git a/tests/regressiontests/utils/tests.py b/tests/regressiontests/utils/tests.py
index d51fa13fd8..aaa2944511 100644
--- a/tests/regressiontests/utils/tests.py
+++ b/tests/regressiontests/utils/tests.py
@@ -29,6 +29,7 @@ __test__ = {
}
from dateformat import *
+from feedgenerator import *
class TestUtilsHtml(TestCase):