)]}'
{"zaqar/common/urls.py":[{"author":{"_account_id":12321,"name":"Ryan Brown","email":"rybrown@redhat.com","username":"ryansb"},"change_message_id":"7add7978d91430620b544cfc2218a79d2818a304","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        raise ValueError(_LE(\u0027The `key` can\\\u0027t be None\u0027))"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    if not isinstance(paths, list) or not paths:"},{"line_number":53,"context_line":"        raise ValueError(_LE(\u0027`paths` should be a non-empty list\u0027))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    if not isinstance(methods, list):"},{"line_number":56,"context_line":"        raise ValueError(_LE(\u0027`methods` should be a list\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_b5cf807e","line":53,"updated":"2015-08-27 17:11:58.000000000","message":"s/should/must/","commit_id":"2837540f9f3199f8141e8956592626ebd9ec8221"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"b2729a852311b6719d20b2aadad4e2656cdd53e3","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        raise ValueError(_LE(\u0027The `key` can\\\u0027t be None\u0027))"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    if not isinstance(paths, list) or not paths:"},{"line_number":53,"context_line":"        raise ValueError(_LE(\u0027`paths` should be a non-empty list\u0027))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    if not isinstance(methods, list):"},{"line_number":56,"context_line":"        raise ValueError(_LE(\u0027`methods` should be a list\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_c8194e7b","line":53,"in_reply_to":"da20952f_b5cf807e","updated":"2015-09-02 08:20:38.000000000","message":"Done","commit_id":"2837540f9f3199f8141e8956592626ebd9ec8221"},{"author":{"_account_id":12321,"name":"Ryan Brown","email":"rybrown@redhat.com","username":"ryansb"},"change_message_id":"7add7978d91430620b544cfc2218a79d2818a304","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    methods.sort()"},{"line_number":75,"context_line":"    paths.sort()"},{"line_number":76,"context_line":"    expires_str \u003d expires.strftime(_DATE_FORMAT)"},{"line_number":77,"context_line":"    hmac_body \u003d six.b(\u0027%(paths)s\\\\n%(methods)s\\\\n%(project)s\\\\n%(expires)s\u0027 %"},{"line_number":78,"context_line":"                      {\u0027paths\u0027: \u0027,\u0027.join(paths), \u0027methods\u0027: \u0027,\u0027.join(methods),"},{"line_number":79,"context_line":"                       \u0027project\u0027: project, \u0027expires\u0027: expires_str})"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_15af4c95","line":77,"updated":"2015-08-27 17:11:58.000000000","message":"Can you change this to use a raw string (using r\u0027body\u0027) to make it a bit less escape-happy?","commit_id":"2837540f9f3199f8141e8956592626ebd9ec8221"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"b2729a852311b6719d20b2aadad4e2656cdd53e3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    methods.sort()"},{"line_number":75,"context_line":"    paths.sort()"},{"line_number":76,"context_line":"    expires_str \u003d expires.strftime(_DATE_FORMAT)"},{"line_number":77,"context_line":"    hmac_body \u003d six.b(\u0027%(paths)s\\\\n%(methods)s\\\\n%(project)s\\\\n%(expires)s\u0027 %"},{"line_number":78,"context_line":"                      {\u0027paths\u0027: \u0027,\u0027.join(paths), \u0027methods\u0027: \u0027,\u0027.join(methods),"},{"line_number":79,"context_line":"                       \u0027project\u0027: project, \u0027expires\u0027: expires_str})"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_6825a2ac","line":77,"in_reply_to":"da20952f_15af4c95","updated":"2015-09-02 08:20:38.000000000","message":"Done","commit_id":"2837540f9f3199f8141e8956592626ebd9ec8221"},{"author":{"_account_id":12321,"name":"Ryan Brown","email":"rybrown@redhat.com","username":"ryansb"},"change_message_id":"7bbda59db5b72af5e30c8519b61ba5afdd8e5969","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        raise ValueError(_LE(\u0027`expires` is lower than the current time\u0027))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    methods.sort()"},{"line_number":75,"context_line":"    paths.sort()"},{"line_number":76,"context_line":"    expires_str \u003d expires.strftime(_DATE_FORMAT)"},{"line_number":77,"context_line":"    hmac_body \u003d six.b(r\u0027%(paths)s\\n%(methods)s\\n%(project)s\\n%(expires)s\u0027 %"},{"line_number":78,"context_line":"                      {\u0027paths\u0027: \u0027,\u0027.join(paths), \u0027methods\u0027: \u0027,\u0027.join(methods),"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_6ded668d","line":75,"updated":"2015-09-10 19:22:41.000000000","message":"I\u0027d really rather have `x \u003d sorted(x) here, because using `x.sort()` mutates x in place, which will affect x outside this function\u0027s scope.","commit_id":"f66f1b96f0281c8827492d0dc9e46e4e3318715c"}],"zaqar/tests/unit/common/test_urls.py":[{"author":{"_account_id":12321,"name":"Ryan Brown","email":"rybrown@redhat.com","username":"ryansb"},"change_message_id":"7add7978d91430620b544cfc2218a79d2818a304","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        expires \u003d timeutils.utcnow() + datetime.timedelta(days\u003d1)"},{"line_number":38,"context_line":"        expires_str \u003d expires.strftime(urls._DATE_FORMAT)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        hmac_body \u003d six.b(\u0027%(paths)s\\\\n%(methods)s\\\\n\u0027"},{"line_number":41,"context_line":"                          \u0027%(project)s\\\\n%(expires)s\u0027 %"},{"line_number":42,"context_line":"                          {\u0027paths\u0027: \u0027,\u0027.join(paths),"},{"line_number":43,"context_line":"                           \u0027methods\u0027: \u0027,\u0027.join(methods),"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_15866c13","line":40,"updated":"2015-08-27 17:11:58.000000000","message":"Same comment about r\u0027body\u0027","commit_id":"2837540f9f3199f8141e8956592626ebd9ec8221"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"b2729a852311b6719d20b2aadad4e2656cdd53e3","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        expires \u003d timeutils.utcnow() + datetime.timedelta(days\u003d1)"},{"line_number":38,"context_line":"        expires_str \u003d expires.strftime(urls._DATE_FORMAT)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        hmac_body \u003d six.b(\u0027%(paths)s\\\\n%(methods)s\\\\n\u0027"},{"line_number":41,"context_line":"                          \u0027%(project)s\\\\n%(expires)s\u0027 %"},{"line_number":42,"context_line":"                          {\u0027paths\u0027: \u0027,\u0027.join(paths),"},{"line_number":43,"context_line":"                           \u0027methods\u0027: \u0027,\u0027.join(methods),"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_281faa5c","line":40,"in_reply_to":"da20952f_15866c13","updated":"2015-09-02 08:20:38.000000000","message":"Done","commit_id":"2837540f9f3199f8141e8956592626ebd9ec8221"},{"author":{"_account_id":12321,"name":"Ryan Brown","email":"rybrown@redhat.com","username":"ryansb"},"change_message_id":"7add7978d91430620b544cfc2218a79d2818a304","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        hmac_body \u003d six.b(\u0027%(paths)s\\\\n%(methods)s\\\\n\u0027"},{"line_number":41,"context_line":"                          \u0027%(project)s\\\\n%(expires)s\u0027 %"},{"line_number":42,"context_line":"                          {\u0027paths\u0027: \u0027,\u0027.join(paths),"},{"line_number":43,"context_line":"                           \u0027methods\u0027: \u0027,\u0027.join(methods),"},{"line_number":44,"context_line":"                           \u0027project\u0027: project, \u0027expires\u0027: expires_str})"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_f599786f","line":42,"updated":"2015-08-27 17:11:58.000000000","message":"This test doesn\u0027t cover the case of lists of multiple paths, can you add a test that tests with lists of 0 and \u003e1 length?","commit_id":"2837540f9f3199f8141e8956592626ebd9ec8221"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"b2729a852311b6719d20b2aadad4e2656cdd53e3","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        hmac_body \u003d six.b(\u0027%(paths)s\\\\n%(methods)s\\\\n\u0027"},{"line_number":41,"context_line":"                          \u0027%(project)s\\\\n%(expires)s\u0027 %"},{"line_number":42,"context_line":"                          {\u0027paths\u0027: \u0027,\u0027.join(paths),"},{"line_number":43,"context_line":"                           \u0027methods\u0027: \u0027,\u0027.join(methods),"},{"line_number":44,"context_line":"                           \u0027project\u0027: project, \u0027expires\u0027: expires_str})"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_684cc276","line":42,"in_reply_to":"da20952f_f599786f","updated":"2015-09-02 08:20:38.000000000","message":"0 is handled in the validation test below. I added a test for several paths.","commit_id":"2837540f9f3199f8141e8956592626ebd9ec8221"},{"author":{"_account_id":12321,"name":"Ryan Brown","email":"rybrown@redhat.com","username":"ryansb"},"change_message_id":"7bbda59db5b72af5e30c8519b61ba5afdd8e5969","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        expires_str \u003d expires.strftime(urls._DATE_FORMAT)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        hmac_body \u003d six.b(r\u0027%(paths)s\\n%(methods)s\\n\u0027"},{"line_number":41,"context_line":"                          r\u0027%(project)s\\n%(expires)s\u0027 %"},{"line_number":42,"context_line":"                          {\u0027paths\u0027: \u0027,\u0027.join(paths),"},{"line_number":43,"context_line":"                           \u0027methods\u0027: \u0027,\u0027.join(methods),"},{"line_number":44,"context_line":"                           \u0027project\u0027: project, \u0027expires\u0027: expires_str})"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_cddfd2d4","line":41,"updated":"2015-09-10 19:22:41.000000000","message":"Thanks for moving these to raw strings while you were at it :)","commit_id":"f66f1b96f0281c8827492d0dc9e46e4e3318715c"}]}
