[#6652] don't use mktime() which assumes time tuple is local time
diff --git a/AlluraTest/alluratest/test_syntax.py b/AlluraTest/alluratest/test_syntax.py index b394798..b72052c 100644 --- a/AlluraTest/alluratest/test_syntax.py +++ b/AlluraTest/alluratest/test_syntax.py
@@ -69,11 +69,13 @@ def test_pyflakes(): if error: raise Exception('pyflakes failure, see stdout') -def test_no_now(): +def test_no_local_tz_functions(): if run(find_py + " | xargs grep '\.now(' ") not in [1,123]: raise Exception("These should use .utcnow()") if run(find_py + " | xargs grep '\.fromtimestamp(' ") not in [1,123]: raise Exception("These should use .utcfromtimestamp()") + if run(find_py + " | xargs grep 'mktime(' ") not in [1,123]: + raise Exception("These should use calendar.timegm()") def test_no_prints(): skips = [
diff --git a/ForgeBlog/forgeblog/command/rssfeeds.py b/ForgeBlog/forgeblog/command/rssfeeds.py index 0e70ea9..eeac4b2 100644 --- a/ForgeBlog/forgeblog/command/rssfeeds.py +++ b/ForgeBlog/forgeblog/command/rssfeeds.py
@@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -from time import mktime +import calendar from datetime import datetime import re @@ -128,7 +128,7 @@ def process_entry(self, e, appid): getattr(e, 'title')))) content += u' [link](%s)' % e.link - updated = datetime.utcfromtimestamp(mktime(e.updated_parsed)) + updated = datetime.utcfromtimestamp(calendar.timegm(e.updated_parsed)) base_slug = BM.BlogPost.make_base_slug(title, updated) b_count = BM.BlogPost.query.find(dict(slug=base_slug, app_config_id=appid)).count()
diff --git a/ForgeDiscussion/forgediscussion/controllers/root.py b/ForgeDiscussion/forgediscussion/controllers/root.py index c6f9019..aa1130e 100644 --- a/ForgeDiscussion/forgediscussion/controllers/root.py +++ b/ForgeDiscussion/forgediscussion/controllers/root.py
@@ -19,9 +19,10 @@ import logging from urllib import unquote from datetime import date, datetime, timedelta, time -from time import mktime +import calendar from collections import OrderedDict + from tg import expose, validate, redirect, flash, response from tg.decorators import with_trailing_slash, without_trailing_slash from pylons import tmpl_context as c, app_globals as g @@ -271,7 +272,7 @@ def stats_data(self, begin=None, end=None, forum=None, **kw): def reformat_data(mongo_data): def item(day, val): return [ - mktime(day.timetuple()) * 1000, + calendar.timegm(day.timetuple()) * 1000, val ]