parts/django/tests/regressiontests/syndication/feeds.py
changeset 307 c6bca38c1cbf
equal deleted inserted replaced
306:5ff1fc726848 307:c6bca38c1cbf
       
     1 from django.contrib.syndication import feeds, views
       
     2 from django.core.exceptions import ObjectDoesNotExist
       
     3 from django.utils import feedgenerator, tzinfo
       
     4 from models import Article, Entry
       
     5 
       
     6 
       
     7 class ComplexFeed(views.Feed):
       
     8     def get_object(self, request, foo=None):
       
     9         if foo is not None:
       
    10             raise ObjectDoesNotExist
       
    11         return None
       
    12 
       
    13 
       
    14 class TestRss2Feed(views.Feed):
       
    15     title = 'My blog'
       
    16     description = 'A more thorough description of my blog.'
       
    17     link = '/blog/'
       
    18     feed_guid = '/foo/bar/1234'
       
    19     author_name = 'Sally Smith'
       
    20     author_email = 'test@example.com'
       
    21     author_link = 'http://www.example.com/'
       
    22     categories = ('python', 'django')
       
    23     feed_copyright = 'Copyright (c) 2007, Sally Smith'
       
    24     ttl = 600
       
    25 
       
    26     def items(self):
       
    27         return Entry.objects.all()
       
    28 
       
    29     def item_description(self, item):
       
    30         return "Overridden description: %s" % item
       
    31 
       
    32     def item_pubdate(self, item):
       
    33         return item.date
       
    34 
       
    35     item_author_name = 'Sally Smith'
       
    36     item_author_email = 'test@example.com'
       
    37     item_author_link = 'http://www.example.com/'
       
    38     item_categories = ('python', 'testing')
       
    39     item_copyright = 'Copyright (c) 2007, Sally Smith'
       
    40 
       
    41 
       
    42 class TestRss091Feed(TestRss2Feed):
       
    43     feed_type = feedgenerator.RssUserland091Feed
       
    44 
       
    45 
       
    46 class TestAtomFeed(TestRss2Feed):
       
    47     feed_type = feedgenerator.Atom1Feed
       
    48     subtitle = TestRss2Feed.description
       
    49 
       
    50 
       
    51 class ArticlesFeed(TestRss2Feed):
       
    52     """
       
    53     A feed to test no link being defined. Articles have no get_absolute_url()
       
    54     method, and item_link() is not defined.
       
    55     """
       
    56     def items(self):
       
    57         return Article.objects.all()
       
    58 
       
    59 
       
    60 class TestEnclosureFeed(TestRss2Feed):
       
    61     pass
       
    62 
       
    63 
       
    64 class TemplateFeed(TestRss2Feed):
       
    65     """
       
    66     A feed to test defining item titles and descriptions with templates.
       
    67     """
       
    68     title_template = 'syndication/title.html'
       
    69     description_template = 'syndication/description.html'
       
    70 
       
    71     # Defining a template overrides any item_title definition
       
    72     def item_title(self):
       
    73         return "Not in a template"
       
    74 
       
    75 
       
    76 class NaiveDatesFeed(TestAtomFeed):
       
    77     """
       
    78     A feed with naive (non-timezone-aware) dates.
       
    79     """
       
    80     def item_pubdate(self, item):
       
    81         return item.date
       
    82 
       
    83 
       
    84 class TZAwareDatesFeed(TestAtomFeed):
       
    85     """
       
    86     A feed with timezone-aware dates.
       
    87     """
       
    88     def item_pubdate(self, item):
       
    89         # Provide a weird offset so that the test can know it's getting this
       
    90         # specific offset and not accidentally getting on from
       
    91         # settings.TIME_ZONE.
       
    92         return item.date.replace(tzinfo=tzinfo.FixedOffset(42))
       
    93 
       
    94 
       
    95 class TestFeedUrlFeed(TestAtomFeed):
       
    96     feed_url = 'http://example.com/customfeedurl/'
       
    97 
       
    98 
       
    99 class MyCustomAtom1Feed(feedgenerator.Atom1Feed):
       
   100     """
       
   101     Test of a custom feed generator class.
       
   102     """
       
   103     def root_attributes(self):
       
   104         attrs = super(MyCustomAtom1Feed, self).root_attributes()
       
   105         attrs[u'django'] = u'rocks'
       
   106         return attrs
       
   107 
       
   108     def add_root_elements(self, handler):
       
   109         super(MyCustomAtom1Feed, self).add_root_elements(handler)
       
   110         handler.addQuickElement(u'spam', u'eggs')
       
   111 
       
   112     def item_attributes(self, item):
       
   113         attrs = super(MyCustomAtom1Feed, self).item_attributes(item)
       
   114         attrs[u'bacon'] = u'yum'
       
   115         return attrs
       
   116 
       
   117     def add_item_elements(self, handler, item):
       
   118         super(MyCustomAtom1Feed, self).add_item_elements(handler, item)
       
   119         handler.addQuickElement(u'ministry', u'silly walks')
       
   120 
       
   121 
       
   122 class TestCustomFeed(TestAtomFeed):
       
   123     feed_type = MyCustomAtom1Feed
       
   124 
       
   125 
       
   126 class DeprecatedComplexFeed(feeds.Feed):
       
   127     def get_object(self, bits):
       
   128         if len(bits) != 1:
       
   129             raise ObjectDoesNotExist
       
   130         return None
       
   131 
       
   132 
       
   133 class DeprecatedRssFeed(feeds.Feed):
       
   134     link = "/blog/"
       
   135     title = 'My blog'
       
   136 
       
   137     def items(self):
       
   138         return Entry.objects.all()
       
   139 
       
   140     def item_link(self, item):
       
   141         return "/blog/%s/" % item.pk
       
   142