Ticket #7016: atom_rss_feed_dates_fix.diff
File atom_rss_feed_dates_fix.diff, 5.1 KB (added by , 16 years ago) |
---|
-
django/contrib/syndication/feeds.py
1 from datetime import datetime, tzinfo, timedelta 2 1 3 from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist 2 4 from django.template import loader, Template, TemplateDoesNotExist 3 5 from django.contrib.sites.models import Site, RequestSite … … 2 4 from django.utils import feedgenerator 5 from django.utils.tzinfo import FixedOffset 3 6 from django.utils.encoding import smart_unicode, iri_to_uri … … 58 61 59 62 def get_object(self, bits): 60 63 return None 61 64 atom/ 62 65 def get_feed(self, url=None): 63 66 """ 64 67 Returns a feedgenerator.DefaultFeed object, fully populated, for … … 109 112 description_tmp = Template('{{ obj }}') 110 113 111 114 for item in self.__get_dynamic_attr('items', obj): 112 link = add_domain( current_site.domain, self.__get_dynamic_attr('item_link', item))115 link = add_domain(atom/current_site.domain, self.__get_dynamic_attr('item_link', item)) 113 116 enc = None 114 117 enc_url = self.__get_dynamic_attr('item_enclosure_url', item) 115 118 if enc_url: … … 124 127 author_link = self.__get_dynamic_attr('item_author_link', item) 125 128 else: 126 129 author_email = author_link = None 130 131 pubdate = self.__get_dynamic_attr('item_pubdate', item) 132 now = datetime.now() 133 utcnow = datetime.utcnow() 134 135 # Must always subtract smaller time from larger time here. 136 if utcnow > now: 137 sign = -1 138 tzDifference = (utcnow - now) 139 else: 140 sign = 1 141 tzDifference = (now - utcnow) 142 143 # Round the timezone offset to the nearest half hour. 144 tzOffsetMinutes = sign * ((tzDifference.seconds / 60 + 15) / 30) * 30 145 tzOffset = timedelta(minutes=tzOffsetMinutes) 146 pubdate = pubdate.replace(tzinfo=FixedOffset(tzOffset)) 147 127 148 feed.add_item( 128 149 title = title_tmp.render(RequestContext(self.request, {'obj': item, 'site': current_site})), 129 150 link = link, 130 151 description = description_tmp.render(RequestContext(self.request, {'obj': item, 'site': current_site})), 131 152 unique_id = self.__get_dynamic_attr('item_guid', item, link), 132 153 enclosure = enc, 133 pubdate = self.__get_dynamic_attr('item_pubdate', item),154 pubdate = pubdate, 134 155 author_name = author_name, 135 156 author_email = author_email, 136 157 author_link = author_link, -
django/utils/tzinfo.py
14 14 class FixedOffset(tzinfo): 15 15 "Fixed offset in minutes east from UTC." 16 16 def __init__(self, offset): 17 self.__offset = timedelta(minutes=offset) 18 self.__name = u"%+03d%02d" % (offset // 60, offset % 60) 17 if isinstance(offset, timedelta): 18 self.__offset = offset 19 offset = self.__offset.seconds // 60 20 else: 21 self.__offset = timedelta(minutes=offset) 22 23 self.__name = u"%+03d%02d" % (offset / 60, offset % 60) 19 24 20 25 def __repr__(self): 21 26 return self.__name … … 28 33 29 34 def dst(self, dt): 30 35 return timedelta(0) 31 36 32 37 class LocalTimezone(tzinfo): 33 38 "Proxy timezone information from time module." 34 39 def __init__(self, dt): -
django/utils/feedgenerator.py
22 22 from django.utils.xmlutils import SimplerXMLGenerator 23 23 from django.utils.encoding import force_unicode, iri_to_uri 24 24 import datetime, re, time 25 import email.Utils26 25 27 26 def rfc2822_date(date): 28 return email.Utils.formatdate(time.mktime(date.timetuple())) 27 # We do this ourselves to be timezone aware, email.Utils is not tz aware. 28 if date.tzinfo: 29 time_str = date.strftime('%a, %d %b %Y %H:%M:%S ') 30 offset = date.tzinfo.utcoffset(date) 31 timezone = (offset.days * 24 * 60) + (offset.seconds / 60) 32 hour, minute = divmod(timezone, 60) 33 return time_str + "%+03d%02d" % (hour, minute) 34 else: 35 return date.strftime('%a, %d %b %Y %H:%M:%S -0000') 29 36 30 37 def rfc3339_date(date): 31 38 if date.tzinfo: 32 return date.strftime('%Y-%m-%dT%H:%M:%S%z') 39 time_str = date.strftime('%Y-%m-%dT%H:%M:%S') 40 offset = date.tzinfo.utcoffset(date) 41 timezone = (offset.days * 24 * 60) + (offset.seconds / 60) 42 hour, minute = divmod(timezone, 60) 43 return time_str + "%+03d:%02d" % (hour, minute) 33 44 else: 34 45 return date.strftime('%Y-%m-%dT%H:%M:%SZ') 35 46