)]}'
{"smaug/services/operationengine/engine/triggers/timetrigger/rrule_format.py":[{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"ab6c90402d29054a2a9ec26a91634f30c649d99d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOCALTZINFO \u003d tz.gettz(LOCALZONE)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class RRuleFormat(object):"},{"line_number":36,"context_line":"    \"\"\"recurrence rule.\"\"\""},{"line_number":37,"context_line":"    FORMAT_TYPE \u003d \"rrule\""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_3f6fb7c6","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":26},"updated":"2016-08-21 06:30:08.000000000","message":"should inherit from timeformats.TimeFormat","commit_id":"96bc8323d734f182eb75b64f9e88a100da778c72"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"ab6c90402d29054a2a9ec26a91634f30c649d99d","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\"recurrence rule.\"\"\""},{"line_number":37,"context_line":"    FORMAT_TYPE \u003d \"rrule\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, dtstart, pattern):"},{"line_number":40,"context_line":"        \"\"\"Initiate time format"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        :param dtstart: The time after the start time is valid"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_1f72bbad","line":39,"range":{"start_line":39,"start_character":0,"end_line":39,"end_character":41},"updated":"2016-08-21 06:30:08.000000000","message":"As in Crontab format, the class is never instantiated, only class methods are used (check_time_format, compute_next_time, get_interval).\nThis code will not be executed.","commit_id":"96bc8323d734f182eb75b64f9e88a100da778c72"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"ab6c90402d29054a2a9ec26a91634f30c649d99d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.tzinfo \u003d LOCALTZINFO"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @staticmethod"},{"line_number":58,"context_line":"    def timezone_localize(dt):"},{"line_number":59,"context_line":"        if dt.tzinfo is not None:"},{"line_number":60,"context_line":"            dt \u003d dt.astimezone(tz\u003dLOCALTZINFO).replace(tzinfo\u003dNone)"},{"line_number":61,"context_line":"        return dt"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_dfbdc3d8","line":58,"range":{"start_line":58,"start_character":0,"end_line":58,"end_character":30},"updated":"2016-08-21 06:30:08.000000000","message":"why localize? we want everything in utc","commit_id":"96bc8323d734f182eb75b64f9e88a100da778c72"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"ab6c90402d29054a2a9ec26a91634f30c649d99d","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            if \u0027RRULE\u0027 in line:"},{"line_number":67,"context_line":"                self.rrulestr_list.append(line)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        return b\u0027\\r\\n\u0027.join(line for line in self.rrulestr_list) + b\u0027\\r\\n\u0027"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @classmethod"},{"line_number":72,"context_line":"    def check_time_format(cls, pattern):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_5f3d53ba","line":69,"range":{"start_line":69,"start_character":0,"end_line":69,"end_character":74},"updated":"2016-08-21 06:30:08.000000000","message":"1. \u0027\\r\\n\u0027 is windows newline. You could use `os.linesep` for OS-agnostic newline.\n2. Why use b\u0027...\u0027? This will lead to a python3 error. Use string instead.","commit_id":"96bc8323d734f182eb75b64f9e88a100da778c72"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"ab6c90402d29054a2a9ec26a91634f30c649d99d","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            msg \u003d (_(\"The trigger pattern(%s) is invalid\") % pattern)"},{"line_number":82,"context_line":"            raise exception.InvalidInput(msg)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def compute_next_time(self, current_time\u003dNone):"},{"line_number":85,"context_line":"        \"\"\"Compute next time"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        :param current_time: the time before the next time"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_ffd35f36","line":84,"range":{"start_line":84,"start_character":0,"end_line":84,"end_character":51},"updated":"2016-08-21 06:30:08.000000000","message":"should be @classmethod and recieve arguments: (pattern, start_time)","commit_id":"96bc8323d734f182eb75b64f9e88a100da778c72"}]}
