)]}'
{"keystoneclient/contrib/ec2/utils.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"c7c14db571dcb89f5dcbbc71b618e4218e717727","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            self.hmac.update(val)"},{"line_number":119,"context_line":"        return base64.b64encode(self.hmac.digest())"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _cannonical_qs(self, params):"},{"line_number":122,"context_line":"        \"\"\""},{"line_number":123,"context_line":"        Construct a sorted, correctly encoded query string as required for"},{"line_number":124,"context_line":"        _calc_signature_2 and _calc_signature_4"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOX%2F%2F%2B6w%3D","line":121,"updated":"2013-04-03 16:39:47.000000000","message":"This method could be static afaict. Also, unless actual cannon are involved, it should be spelled \u0027canonical\u0027.","commit_id":"ca10c428ae3ec884ef568a8a4b94a400359b4ec9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9b3710438ee34b6735730450122c0343cd1f0eff","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                                          credentials[\u0027verb\u0027],"},{"line_number":82,"context_line":"                                          credentials[\u0027host\u0027],"},{"line_number":83,"context_line":"                                          credentials[\u0027path\u0027])"},{"line_number":84,"context_line":"        elif self._v4_creds(credentials) is True:"},{"line_number":85,"context_line":"            return self._calc_signature_4(credentials[\u0027params\u0027],"},{"line_number":86,"context_line":"                                          credentials[\u0027verb\u0027],"},{"line_number":87,"context_line":"                                          credentials[\u0027host\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2F%2Fgs%3D","line":84,"updated":"2013-04-08 22:25:27.000000000","message":"(nit) remove \"is True\".","commit_id":"36333950c5765b2a15d133d45d28b605cd02aeea"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9b3710438ee34b6735730450122c0343cd1f0eff","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                                          credentials[\u0027path\u0027],"},{"line_number":89,"context_line":"                                          credentials[\u0027headers\u0027],"},{"line_number":90,"context_line":"                                          credentials[\u0027body_hash\u0027])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        raise Exception(\u0027Unknown Signature Version: %s\u0027 %"},{"line_number":93,"context_line":"                        credentials[\u0027params\u0027].get(\u0027SignatureVersion\u0027))"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2F%2FgY%3D","line":91,"updated":"2013-04-08 22:25:27.000000000","message":"why no \u0027else\u0027 here, since added \"el\" on the other lines? should be consistent.\n\nI\u0027d prefer the elifs be reverted back to ifs, since return.","commit_id":"36333950c5765b2a15d133d45d28b605cd02aeea"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9b3710438ee34b6735730450122c0343cd1f0eff","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                                          credentials[\u0027headers\u0027],"},{"line_number":90,"context_line":"                                          credentials[\u0027body_hash\u0027])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        raise Exception(\u0027Unknown Signature Version: %s\u0027 %"},{"line_number":93,"context_line":"                        credentials[\u0027params\u0027].get(\u0027SignatureVersion\u0027))"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2F%2Fgk%3D","line":92,"updated":"2013-04-08 22:25:27.000000000","message":"suggest change message to be more obvious for case when doesn\u0027t have \u0027SignatureVersion\u0027 like v4... maybe something like if .get(\u0027SignatureVersion\u0027), print this message, otherwise print \u0027Unexpected signature format\u0027.","commit_id":"36333950c5765b2a15d133d45d28b605cd02aeea"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9b3710438ee34b6735730450122c0343cd1f0eff","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        credential_date \u003d credential_split[1]"},{"line_number":239,"context_line":"        param_date \u003d date_param()"},{"line_number":240,"context_line":"        if not param_date.startswith(credential_date):"},{"line_number":241,"context_line":"            raise Exception(\u0027Request date mismatch Error\u0027)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        # Create the string to sign"},{"line_number":244,"context_line":"        # http://docs.aws.amazon.com/general/latest/gr/"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2F%2FgA%3D","line":241,"updated":"2013-04-08 22:25:27.000000000","message":"(typo) change \"Error\" to \"error\"","commit_id":"36333950c5765b2a15d133d45d28b605cd02aeea"}],"tests/test_ec2utils.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"dcf7c7f8612bbb618aeeafb097c255d4289b086d","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        secret \u003d \u0027wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY\u0027"},{"line_number":118,"context_line":"        signer \u003d Ec2Signer(secret)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        body_hash \u003d \u0027\u0027.join((\u0027b6359072c78d70ebee1e81adcbab4f0\u0027,"},{"line_number":121,"context_line":"                             \u00271bf2c23245fa365ef83fe8f1f955085e2\u0027))"},{"line_number":122,"context_line":"        auth_str \u003d \u0027\u0027.join((\u0027AWS4-HMAC-SHA256 \u0027,"},{"line_number":123,"context_line":"                            \u0027Credential\u003d\u0027 +"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOX%2F%2F770%3D","line":120,"updated":"2013-04-05 08:59:20.000000000","message":"Is there a particular reason you don\u0027t just write this as:\n\nbody_hash \u003d (\u0027b6359072c78d70ebee1e81adcbab4f0\u0027\n             \u00271bf2c23245fa365ef83fe8f1f955085e2\u0027)\n\n(a similar comment to the others below)","commit_id":"a373995a4504b1dc937ea97690f5c54b78391eae"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"18d7bdfe5576a7fd78a5516885952b488c163c5b","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        secret \u003d \u0027wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY\u0027"},{"line_number":118,"context_line":"        signer \u003d Ec2Signer(secret)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        body_hash \u003d \u0027\u0027.join((\u0027b6359072c78d70ebee1e81adcbab4f0\u0027,"},{"line_number":121,"context_line":"                             \u00271bf2c23245fa365ef83fe8f1f955085e2\u0027))"},{"line_number":122,"context_line":"        auth_str \u003d \u0027\u0027.join((\u0027AWS4-HMAC-SHA256 \u0027,"},{"line_number":123,"context_line":"                            \u0027Credential\u003d\u0027 +"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOX%2F%2F6bY%3D","line":120,"in_reply_to":"AAAAOX%2F%2F770%3D","updated":"2013-04-07 07:52:44.000000000","message":"Fixed in updated patch - tbh I just forgot you could do string concatenation this way in Python :)","commit_id":"a373995a4504b1dc937ea97690f5c54b78391eae"}]}
