Ticket #7016: atom_rss_feed_dates_fix.3.diff
File atom_rss_feed_dates_fix.3.diff, 4.4 KB (added by , 16 years ago) |
---|
-
django/contrib/syndication/feeds.py
2 2 from django.template import loader, Template, TemplateDoesNotExist 3 3 from django.contrib.sites.models import Site, RequestSite 4 4 from django.utils import feedgenerator 5 from django.utils.tzinfo import FixedOffset 5 6 from django.utils.encoding import smart_unicode, iri_to_uri 6 7 from django.conf import settings 7 8 from django.template import RequestContext … … 124 125 author_link = self.__get_dynamic_attr('item_author_link', item) 125 126 else: 126 127 author_email = author_link = None 128 129 pubdate = self.__get_dynamic_attr('item_pubdate', item) 130 now = datetime.now() 131 utcnow = datetime.utcnow() 132 133 # Must always subtract smaller time from larger time here. 134 if utcnow > now: 135 sign = -1 136 tzDifference = (utcnow - now) 137 else: 138 sign = 1 139 tzDifference = (now - utcnow) 140 141 # Round the timezone offset to the nearest half hour. 142 tzOffsetMinutes = sign * ((tzDifference.seconds / 60 + 15) / 30) * 30 143 tzOffset = timedelta(minutes=tzOffsetMinutes) 144 pubdate = pubdate.replace(tzinfo=FixedOffset(tzOffset)) 145 127 146 feed.add_item( 128 147 title = title_tmp.render(RequestContext(self.request, {'obj': item, 'site': current_site})), 129 148 link = link, 130 149 description = description_tmp.render(RequestContext(self.request, {'obj': item, 'site': current_site})), 131 150 unique_id = self.__get_dynamic_attr('item_guid', item, link), 132 151 enclosure = enc, 133 pubdate = self.__get_dynamic_attr('item_pubdate', item),152 pubdate = pubdate, 134 153 author_name = author_name, 135 154 author_email = author_email, 136 155 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