)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"b6f6c978fd16fb2350bc57972a983151fae3137b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Julien Danjou \u003cjulien@danjou.info\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-05-22 10:08:42 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"timeutils: utcnow() returns a value with a timezone"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"utcnow() used to return a non-timezone-aware timezone, which is terrible"},{"line_number":10,"context_line":"as there is then no way to know if it\u0027s a local time object or a UTC"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7a016987_e257ed23","line":7,"updated":"2015-05-22 17:15:33.000000000","message":"Well, the title is not really correct. Since it\u0027s a new optional parameter, you should update the title. But I can survive to this title :-)","commit_id":"4ff06572eab8ed65f1774d4ff1224402fe30318b"}],"oslo_utils/timeutils.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"c3b348a66dc77b8f4eda7eb506f14c890e4b98c0","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    before \u003d normalize_time(before)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    return ((normalize_time(utcnow()) - before)"},{"line_number":101,"context_line":"            \u003e datetime.timedelta(seconds\u003dseconds))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def is_newer_than(after, seconds):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a0c5dc1_69eee1b5","line":101,"updated":"2015-05-13 12:22:47.000000000","message":"You may use a code similar to is_soon():\n\n  deadline \u003d normalize_time(utcnow() - datetime.timedelta(seconds\u003dseconds))\n  return before \u003c deadline\n\nI prefer to add the timedelta before normalizing it, even if it should give the same result :-)","commit_id":"eb4a545559533063380c11aa2fad6b3bb751590a"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"c3b348a66dc77b8f4eda7eb506f14c890e4b98c0","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    after \u003d normalize_time(after)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    return (after - normalize_time(utcnow())"},{"line_number":112,"context_line":"            \u003e datetime.timedelta(seconds\u003dseconds))"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"def utcnow_ts(microsecond\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a0c5dc1_09ff6568","line":112,"updated":"2015-05-13 12:22:47.000000000","message":"Ditto:\n\n  deadline \u003d normalize_time(utcnow() + datetime.timedelta(seconds\u003dseconds))\n  return after \u003e deadline","commit_id":"eb4a545559533063380c11aa2fad6b3bb751590a"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"c3b348a66dc77b8f4eda7eb506f14c890e4b98c0","unresolved":false,"context_lines":[{"line_number":268,"context_line":"    :return: True if expiration is within the given duration"},{"line_number":269,"context_line":"    \"\"\""},{"line_number":270,"context_line":"    soon \u003d normalize_time(utcnow() + datetime.timedelta(seconds\u003dwindow))"},{"line_number":271,"context_line":"    return normalize_time(dt) \u003c\u003d soon"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"class Split(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a0c5dc1_c96eed2e","line":271,"updated":"2015-05-13 12:22:47.000000000","message":"You may normalize both datetime objects before the test, or normalize them both in the test:\n\n dt \u003d normalize_time(dt)\n return dt \u003c\u003d soon\n\nor:\n\n return normalize_time(dt) \u003c\u003d normalize_time(dt)","commit_id":"eb4a545559533063380c11aa2fad6b3bb751590a"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"f918332db6ed689d3ee082fc2e6adfb52937dc4c","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        tz \u003d iso8601.iso8601.UTC"},{"line_number":161,"context_line":"    else:"},{"line_number":162,"context_line":"        tz \u003d None"},{"line_number":163,"context_line":"    return datetime.datetime.now(tz\u003dtz)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"@removals.remove("}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_79b4e87e","line":163,"updated":"2015-05-21 23:42:25.000000000","message":"datetime.datetime.now(None) is *not* UTC, it uses the locale timezone.","commit_id":"9a5707393940d38a1075d0cf7356b60779c21b94"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ffed922637b4a125a58e96af6cc17bbd2b669eb2","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        tz \u003d iso8601.iso8601.UTC"},{"line_number":161,"context_line":"    else:"},{"line_number":162,"context_line":"        tz \u003d None"},{"line_number":163,"context_line":"    return datetime.datetime.now(tz\u003dtz)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"@removals.remove("}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_827f19df","line":163,"in_reply_to":"7a016987_79b4e87e","updated":"2015-05-22 17:08:44.000000000","message":"Done","commit_id":"9a5707393940d38a1075d0cf7356b60779c21b94"}],"tests/test_timeutils.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"c3b348a66dc77b8f4eda7eb506f14c890e4b98c0","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.skynet_self_aware_time_str \u003d \u00271997-08-29T06:14:00Z\u0027"},{"line_number":33,"context_line":"        self.skynet_self_aware_time_ms_str \u003d \u00271997-08-29T06:14:00.000123Z\u0027"},{"line_number":34,"context_line":"        self.skynet_self_aware_time \u003d datetime.datetime("},{"line_number":35,"context_line":"            1997, 8, 29, 6, 14, 0, tzinfo\u003diso8601.iso8601.UTC)"},{"line_number":36,"context_line":"        self.skynet_self_aware_ms_time \u003d datetime.datetime("},{"line_number":37,"context_line":"            1997, 8, 29, 6, 14, 0, 123, tzinfo\u003diso8601.iso8601.UTC)"},{"line_number":38,"context_line":"        self.one_minute_before \u003d datetime.datetime(1997, 8, 29, 6, 13, 0,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a0c5dc1_29cb4920","line":35,"updated":"2015-05-13 12:22:47.000000000","message":"For readability, I suggest to use an alias (local variable):\n\n utc\u003diso8601.iso8601.UTC\n self.skynet_self_aware_time \u003d datetime.datetime(1997, 8, 29, 6, 14, 0, tzinfo\u003dutc)\n ...","commit_id":"eb4a545559533063380c11aa2fad6b3bb751590a"}]}
