)]}'
{"nova/keymgr/barbican.py":[{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"3b786dc12ec07c4e1b529d02a9d5eb0d0139ec53","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                  not from_copy):"},{"line_number":140,"context_line":"                key_list \u003d key.get_encoded()"},{"line_number":141,"context_line":"                string_key \u003d \u0027\u0027.join(hex(x).replace(\u00270x\u0027, \u0027\u0027)"},{"line_number":142,"context_line":"                                     for x in key_list)"},{"line_number":143,"context_line":"                encoded_key \u003d string_key.decode(\u0027hex\u0027).encode(\u0027base64\u0027)"},{"line_number":144,"context_line":"            else:"},{"line_number":145,"context_line":"                encoded_key \u003d key.get_encoded()"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_7bbc30b6","line":142,"updated":"2014-07-30 18:17:26.000000000","message":"This does not correctly translate the byte list into a string. Joel caught this bug in my dmcrypt.py module code. The problem is that hex() drops the leading zero, so [0x00, 0x01, 0x02, ..] will produce 012 rather than 000102.","commit_id":"b7f37344154b34a6251ee7d3d333f5c5420d6d17"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"b53ce5bb4a3d184a869b915b24cc51e59d31cd6e","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                  not from_copy):"},{"line_number":140,"context_line":"                key_list \u003d key.get_encoded()"},{"line_number":141,"context_line":"                string_key \u003d \u0027\u0027.join(hex(x).replace(\u00270x\u0027, \u0027\u0027)"},{"line_number":142,"context_line":"                                     for x in key_list)"},{"line_number":143,"context_line":"                encoded_key \u003d string_key.decode(\u0027hex\u0027).encode(\u0027base64\u0027)"},{"line_number":144,"context_line":"            else:"},{"line_number":145,"context_line":"                encoded_key \u003d key.get_encoded()"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_d6edf8f1","line":142,"in_reply_to":"baada198_7bbc30b6","updated":"2014-08-07 18:32:18.000000000","message":"Done","commit_id":"b7f37344154b34a6251ee7d3d333f5c5420d6d17"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"3b786dc12ec07c4e1b529d02a9d5eb0d0139ec53","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                                                  payload_content_encoding,"},{"line_number":149,"context_line":"                                                  algorithm, bit_length, mode,"},{"line_number":150,"context_line":"                                                  expiration)"},{"line_number":151,"context_line":"            secret_uuid \u003d secret_ref.rsplit(\u0027/\u0027, 1)[1]"},{"line_number":152,"context_line":"            return secret_uuid"},{"line_number":153,"context_line":"        except Exception as e:"},{"line_number":154,"context_line":"            LOG.error(_(\"Error storing key: %s\") % (e))"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_96b719f8","line":151,"updated":"2014-07-30 18:17:26.000000000","message":"If there are multiple slashes in secret_ref, e.g., secret_ref \u003d \u0027x/y/z\u0027, then secret_uuid will be the second substring in the partition, \u0027y\u0027. If you want the last substring in the partition it is better to use secrete_ref.rpartition(\u0027/\u0027)[2].","commit_id":"b7f37344154b34a6251ee7d3d333f5c5420d6d17"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"b53ce5bb4a3d184a869b915b24cc51e59d31cd6e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                                                  payload_content_encoding,"},{"line_number":149,"context_line":"                                                  algorithm, bit_length, mode,"},{"line_number":150,"context_line":"                                                  expiration)"},{"line_number":151,"context_line":"            secret_uuid \u003d secret_ref.rsplit(\u0027/\u0027, 1)[1]"},{"line_number":152,"context_line":"            return secret_uuid"},{"line_number":153,"context_line":"        except Exception as e:"},{"line_number":154,"context_line":"            LOG.error(_(\"Error storing key: %s\") % (e))"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_9622a000","line":151,"in_reply_to":"baada198_96b719f8","updated":"2014-08-07 18:32:18.000000000","message":"Done","commit_id":"b7f37344154b34a6251ee7d3d333f5c5420d6d17"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"3b786dc12ec07c4e1b529d02a9d5eb0d0139ec53","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            secret_ref \u003d self._create_secret_ref(key_id, connection)"},{"line_number":170,"context_line":"            meta \u003d self._get_secret_metadata(ctxt, secret_ref)"},{"line_number":171,"context_line":"            content_type \u003d meta.content_types[\u0027default\u0027]"},{"line_number":172,"context_line":"            secret_data \u003d self.\\"},{"line_number":173,"context_line":"                _get_secret_data(ctxt, secret_ref,"},{"line_number":174,"context_line":"                                 payload_content_type\u003dcontent_type)"},{"line_number":175,"context_line":"            key \u003d keymgr_key.SymmetricKey(meta.algorithm, secret_data)"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_b68fbd21","line":172,"updated":"2014-07-30 18:17:26.000000000","message":"Slashes are generally frowned upon and in this case I think it would be easy enough to get rid of it.","commit_id":"b7f37344154b34a6251ee7d3d333f5c5420d6d17"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"b53ce5bb4a3d184a869b915b24cc51e59d31cd6e","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            secret_ref \u003d self._create_secret_ref(key_id, connection)"},{"line_number":170,"context_line":"            meta \u003d self._get_secret_metadata(ctxt, secret_ref)"},{"line_number":171,"context_line":"            content_type \u003d meta.content_types[\u0027default\u0027]"},{"line_number":172,"context_line":"            secret_data \u003d self.\\"},{"line_number":173,"context_line":"                _get_secret_data(ctxt, secret_ref,"},{"line_number":174,"context_line":"                                 payload_content_type\u003dcontent_type)"},{"line_number":175,"context_line":"            key \u003d keymgr_key.SymmetricKey(meta.algorithm, secret_data)"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_3660f433","line":172,"in_reply_to":"baada198_b68fbd21","updated":"2014-08-07 18:32:18.000000000","message":"Done","commit_id":"b7f37344154b34a6251ee7d3d333f5c5420d6d17"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"3b786dc12ec07c4e1b529d02a9d5eb0d0139ec53","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        connection \u003d self._create_connection(ctxt)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        try:"},{"line_number":211,"context_line":"            generated_secret_data \u003d \\"},{"line_number":212,"context_line":"                connection.secrets.decrypt(secret_ref, payload_content_type)"},{"line_number":213,"context_line":"            if payload_content_type \u003d\u003d \u0027application/octet-stream\u0027:"},{"line_number":214,"context_line":"                secret_data \u003d generated_secret_data.encode(\u0027base64\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_f6b055de","line":211,"updated":"2014-07-30 18:17:26.000000000","message":"Same comment as above about slashes. It\u0027s better to have parameters on separate lines.","commit_id":"b7f37344154b34a6251ee7d3d333f5c5420d6d17"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"b53ce5bb4a3d184a869b915b24cc51e59d31cd6e","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        connection \u003d self._create_connection(ctxt)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        try:"},{"line_number":211,"context_line":"            generated_secret_data \u003d \\"},{"line_number":212,"context_line":"                connection.secrets.decrypt(secret_ref, payload_content_type)"},{"line_number":213,"context_line":"            if payload_content_type \u003d\u003d \u0027application/octet-stream\u0027:"},{"line_number":214,"context_line":"                secret_data \u003d generated_secret_data.encode(\u0027base64\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_d64a58ac","line":211,"in_reply_to":"baada198_f6b055de","updated":"2014-08-07 18:32:18.000000000","message":"Done","commit_id":"b7f37344154b34a6251ee7d3d333f5c5420d6d17"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"3b786dc12ec07c4e1b529d02a9d5eb0d0139ec53","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            if payload_content_type \u003d\u003d \u0027application/octet-stream\u0027:"},{"line_number":261,"context_line":"                secret_hex \u003d secret_data.decode(\u0027base64\u0027).encode(\u0027hex\u0027)"},{"line_number":262,"context_line":"                # convert hex string to list of ints"},{"line_number":263,"context_line":"                secret \u003d [int(\"\".join((\"0x\", i)), 0) for i in list(secret_hex)]"},{"line_number":264,"context_line":"            else:"},{"line_number":265,"context_line":"                secret \u003d secret_data"},{"line_number":266,"context_line":"            meta \u003d self._get_secret_metadata(ctxt, secret_ref)"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_0cd85cef","line":263,"updated":"2014-07-30 18:17:26.000000000","message":"You used single quotes in a similar expression above but double quotes here. Should probably use the same for consistency.\n\nMore importantly, secret is assigned a list of half-bytes here because secret_hex is processed a symbol at a time, and, I believe, SymmetricKey() expects a byte list.","commit_id":"b7f37344154b34a6251ee7d3d333f5c5420d6d17"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"b53ce5bb4a3d184a869b915b24cc51e59d31cd6e","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            if payload_content_type \u003d\u003d \u0027application/octet-stream\u0027:"},{"line_number":261,"context_line":"                secret_hex \u003d secret_data.decode(\u0027base64\u0027).encode(\u0027hex\u0027)"},{"line_number":262,"context_line":"                # convert hex string to list of ints"},{"line_number":263,"context_line":"                secret \u003d [int(\"\".join((\"0x\", i)), 0) for i in list(secret_hex)]"},{"line_number":264,"context_line":"            else:"},{"line_number":265,"context_line":"                secret \u003d secret_data"},{"line_number":266,"context_line":"            meta \u003d self._get_secret_metadata(ctxt, secret_ref)"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_231d1563","line":263,"in_reply_to":"baada198_0cd85cef","updated":"2014-08-07 18:32:18.000000000","message":"Done","commit_id":"b7f37344154b34a6251ee7d3d333f5c5420d6d17"},{"author":{"_account_id":1528,"name":"Stanislaw Pitucha","email":"viraptor@gmail.com","username":"stanislaw-pitucha"},"change_message_id":"1d2396c92dcb20a92483a60225ebc6b381b4f5fd","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            connection \u003d barbican_client.Client(auth_plugin\u003dkeystone_auth)"},{"line_number":71,"context_line":"            return connection"},{"line_number":72,"context_line":"        except Exception as e:"},{"line_number":73,"context_line":"            LOG.error(_(\"Error establishing Barbican connection: %s\"), (e))"},{"line_number":74,"context_line":"            raise"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def create_key(self, ctxt, expiration\u003dNone, name\u003d\u0027Nova Volume Key\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_0815fe93","line":73,"updated":"2014-08-12 15:53:30.000000000","message":"I don\u0027t think any connection will be tried at at this point. I believe by this point only the client object is prepared. The message could reflect that better.","commit_id":"cd9e91cdd8af946cad627ad66105d004197bffd3"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"d64fcbaebdd3053f27b3541e9ff75a1b31d1ab22","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            connection \u003d barbican_client.Client(auth_plugin\u003dkeystone_auth)"},{"line_number":71,"context_line":"            return connection"},{"line_number":72,"context_line":"        except Exception as e:"},{"line_number":73,"context_line":"            LOG.error(_(\"Error establishing Barbican connection: %s\"), (e))"},{"line_number":74,"context_line":"            raise"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def create_key(self, ctxt, expiration\u003dNone, name\u003d\u0027Nova Volume Key\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_821abb69","line":73,"in_reply_to":"baada198_0815fe93","updated":"2014-08-12 21:36:26.000000000","message":"Done","commit_id":"cd9e91cdd8af946cad627ad66105d004197bffd3"},{"author":{"_account_id":1528,"name":"Stanislaw Pitucha","email":"viraptor@gmail.com","username":"stanislaw-pitucha"},"change_message_id":"1d2396c92dcb20a92483a60225ebc6b381b4f5fd","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                  not from_copy):"},{"line_number":141,"context_line":"                key_list \u003d key.get_encoded()"},{"line_number":142,"context_line":"                string_key \u003d \u0027\u0027.join(map(lambda byte: \"%02x\" % byte, key_list))"},{"line_number":143,"context_line":"                encoded_key \u003d string_key.decode(\u0027hex\u0027).encode(\u0027base64\u0027)"},{"line_number":144,"context_line":"            else:"},{"line_number":145,"context_line":"                encoded_key \u003d key.get_encoded()"},{"line_number":146,"context_line":"            secret_ref \u003d connection.secrets.store(name, encoded_key,"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_254bcb5f","line":143,"updated":"2014-08-12 15:53:30.000000000","message":"This is not valid anymore in python3 - should we aim for compatibility earlier? (base64 and binascii should be safer) Same in other places.","commit_id":"cd9e91cdd8af946cad627ad66105d004197bffd3"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"d64fcbaebdd3053f27b3541e9ff75a1b31d1ab22","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                  not from_copy):"},{"line_number":141,"context_line":"                key_list \u003d key.get_encoded()"},{"line_number":142,"context_line":"                string_key \u003d \u0027\u0027.join(map(lambda byte: \"%02x\" % byte, key_list))"},{"line_number":143,"context_line":"                encoded_key \u003d string_key.decode(\u0027hex\u0027).encode(\u0027base64\u0027)"},{"line_number":144,"context_line":"            else:"},{"line_number":145,"context_line":"                encoded_key \u003d key.get_encoded()"},{"line_number":146,"context_line":"            secret_ref \u003d connection.secrets.store(name, encoded_key,"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_3f12e864","line":143,"in_reply_to":"baada198_254bcb5f","updated":"2014-08-12 21:36:26.000000000","message":"I\u0027ve replaced instances of \".decode\" and \".encode\" with a combination of base64 and binascii.","commit_id":"cd9e91cdd8af946cad627ad66105d004197bffd3"},{"author":{"_account_id":1528,"name":"Stanislaw Pitucha","email":"viraptor@gmail.com","username":"stanislaw-pitucha"},"change_message_id":"1d2396c92dcb20a92483a60225ebc6b381b4f5fd","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        :return: the URL of the requested secret"},{"line_number":192,"context_line":"        \"\"\""},{"line_number":193,"context_line":"        return \u0027\u0027.join((connection.base_url, \"/secrets/\", key_id))"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _get_secret_data(self, ctxt, secret_ref,"},{"line_number":196,"context_line":"                         payload_content_type\u003d\u0027application/octet-stream\u0027):"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_a5ffdb33","line":193,"updated":"2014-08-12 15:53:30.000000000","message":"This is just: connection.base_url + \"/secrets/\" + key_id\n\nLet\u0027s not complicate it if not needed.","commit_id":"cd9e91cdd8af946cad627ad66105d004197bffd3"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"d64fcbaebdd3053f27b3541e9ff75a1b31d1ab22","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        :return: the URL of the requested secret"},{"line_number":192,"context_line":"        \"\"\""},{"line_number":193,"context_line":"        return \u0027\u0027.join((connection.base_url, \"/secrets/\", key_id))"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _get_secret_data(self, ctxt, secret_ref,"},{"line_number":196,"context_line":"                         payload_content_type\u003d\u0027application/octet-stream\u0027):"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_22b00f40","line":193,"in_reply_to":"baada198_a5ffdb33","updated":"2014-08-12 21:36:26.000000000","message":"Done","commit_id":"cd9e91cdd8af946cad627ad66105d004197bffd3"},{"author":{"_account_id":1528,"name":"Stanislaw Pitucha","email":"viraptor@gmail.com","username":"stanislaw-pitucha"},"change_message_id":"1d2396c92dcb20a92483a60225ebc6b381b4f5fd","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        :returns: the secret data"},{"line_number":205,"context_line":"        :throws Exception: if data cannot be retrieved"},{"line_number":206,"context_line":"        \"\"\""},{"line_number":207,"context_line":"        ction \u003d self._create_connection(ctxt)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        try:"},{"line_number":210,"context_line":"            generated_secret_data \u003d ction.secrets.decrypt(secret_ref,"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_c843060f","line":207,"updated":"2014-08-12 15:53:30.000000000","message":"it\u0027s full \"connection\" in other places","commit_id":"cd9e91cdd8af946cad627ad66105d004197bffd3"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"d64fcbaebdd3053f27b3541e9ff75a1b31d1ab22","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        :returns: the secret data"},{"line_number":205,"context_line":"        :throws Exception: if data cannot be retrieved"},{"line_number":206,"context_line":"        \"\"\""},{"line_number":207,"context_line":"        ction \u003d self._create_connection(ctxt)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        try:"},{"line_number":210,"context_line":"            generated_secret_data \u003d ction.secrets.decrypt(secret_ref,"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_22872f5d","line":207,"in_reply_to":"baada198_c843060f","updated":"2014-08-12 21:36:26.000000000","message":"Done","commit_id":"cd9e91cdd8af946cad627ad66105d004197bffd3"},{"author":{"_account_id":1528,"name":"Stanislaw Pitucha","email":"viraptor@gmail.com","username":"stanislaw-pitucha"},"change_message_id":"1d2396c92dcb20a92483a60225ebc6b381b4f5fd","unresolved":false,"context_lines":[{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        try:"},{"line_number":235,"context_line":"            secret_metadata \u003d connection.secrets.get(secret_ref)"},{"line_number":236,"context_line":"            return secret_metadata"},{"line_number":237,"context_line":"        except Exception as e:"},{"line_number":238,"context_line":"            LOG.error(_(\"Error getting secret metadata: %s\"), (e))"},{"line_number":239,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_e8b28a48","line":236,"updated":"2014-08-12 15:53:30.000000000","message":"unnecessary variable?","commit_id":"cd9e91cdd8af946cad627ad66105d004197bffd3"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"d64fcbaebdd3053f27b3541e9ff75a1b31d1ab22","unresolved":false,"context_lines":[{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        try:"},{"line_number":235,"context_line":"            secret_metadata \u003d connection.secrets.get(secret_ref)"},{"line_number":236,"context_line":"            return secret_metadata"},{"line_number":237,"context_line":"        except Exception as e:"},{"line_number":238,"context_line":"            LOG.error(_(\"Error getting secret metadata: %s\"), (e))"},{"line_number":239,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_e2ba970b","line":236,"in_reply_to":"baada198_e8b28a48","updated":"2014-08-12 21:36:26.000000000","message":"Done","commit_id":"cd9e91cdd8af946cad627ad66105d004197bffd3"},{"author":{"_account_id":1528,"name":"Stanislaw Pitucha","email":"viraptor@gmail.com","username":"stanislaw-pitucha"},"change_message_id":"1d2396c92dcb20a92483a60225ebc6b381b4f5fd","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            return key"},{"line_number":268,"context_line":"        except Exception as e:"},{"line_number":269,"context_line":"            LOG.error(_(\"Error getting key: %s\"), (e))"},{"line_number":270,"context_line":"            raise KeyError()"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def delete_key(self, ctxt, key_id):"},{"line_number":273,"context_line":"        \"\"\"Deletes the specified key."}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_68a59ab2","line":270,"updated":"2014-08-12 15:53:30.000000000","message":"KeyError is quite specific. In this case more things can go wrong. For example secret_data not decoding properly can raise an exception. Or network connection can fail.\n\nSame for other functions.","commit_id":"cd9e91cdd8af946cad627ad66105d004197bffd3"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"d64fcbaebdd3053f27b3541e9ff75a1b31d1ab22","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            return key"},{"line_number":268,"context_line":"        except Exception as e:"},{"line_number":269,"context_line":"            LOG.error(_(\"Error getting key: %s\"), (e))"},{"line_number":270,"context_line":"            raise KeyError()"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def delete_key(self, ctxt, key_id):"},{"line_number":273,"context_line":"        \"\"\"Deletes the specified key."}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_c244b31c","line":270,"in_reply_to":"baada198_68a59ab2","updated":"2014-08-12 21:36:26.000000000","message":"Done","commit_id":"cd9e91cdd8af946cad627ad66105d004197bffd3"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c24f5f486c3a5ae56dd51f5b25a4040cea482a9f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from nova import exception"},{"line_number":30,"context_line":"from nova.keymgr import key as keymgr_key"},{"line_number":31,"context_line":"from nova.keymgr import key_mgr"},{"line_number":32,"context_line":"from nova.openstack.common.gettextutils import _    # noqa"},{"line_number":33,"context_line":"from nova.openstack.common import log as logging"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"barbican_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_1b38c2ca","line":32,"updated":"2014-08-13 07:33:10.000000000","message":"you do not need the #noqa","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from nova import exception"},{"line_number":30,"context_line":"from nova.keymgr import key as keymgr_key"},{"line_number":31,"context_line":"from nova.keymgr import key_mgr"},{"line_number":32,"context_line":"from nova.openstack.common.gettextutils import _    # noqa"},{"line_number":33,"context_line":"from nova.openstack.common import log as logging"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"barbican_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_8a6d506a","line":32,"in_reply_to":"baada198_1b38c2ca","updated":"2014-08-13 15:24:23.000000000","message":"If I don\u0027t use \"# noqa\" I get the pep8 error \"H302 import only modules.\"  Do you know a better alternative to pass the pep8 tests?","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c24f5f486c3a5ae56dd51f5b25a4040cea482a9f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from nova.keymgr import key_mgr"},{"line_number":32,"context_line":"from nova.openstack.common.gettextutils import _    # noqa"},{"line_number":33,"context_line":"from nova.openstack.common import log as logging"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"barbican_opts \u003d ["},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027barbican_auth_url\u0027,"},{"line_number":37,"context_line":"               default\u003d\u0027http://localhost:5000/v2.0\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_9b4cd277","line":34,"updated":"2014-08-13 07:33:10.000000000","message":"can you please add a DocImpact to the commit message and mention the new configuration variables. This will help the guys documenting","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from nova.keymgr import key_mgr"},{"line_number":32,"context_line":"from nova.openstack.common.gettextutils import _    # noqa"},{"line_number":33,"context_line":"from nova.openstack.common import log as logging"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"barbican_opts \u003d ["},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027barbican_auth_url\u0027,"},{"line_number":37,"context_line":"               default\u003d\u0027http://localhost:5000/v2.0\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_0ae8607a","line":34,"in_reply_to":"baada198_9b4cd277","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"f96060cfe6692639c35127222967721c18e0772e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"CONF \u003d cfg.CONF"},{"line_number":45,"context_line":"CONF.register_opts(barbican_opts)"},{"line_number":46,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":47,"context_line":"logging.setup(\u0027barbicankeymgr\u0027)"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_9bb048e1","line":45,"updated":"2014-08-13 11:51:16.000000000","message":"I\u0027m thinking we should probably put these config options in their own group, rather than the default group. eg  \u0027register_opts(barbican_opts, \u0027barbican\u0027)  then you can remove the \u0027barbican_\u0027 prefix from the option names.","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"CONF \u003d cfg.CONF"},{"line_number":45,"context_line":"CONF.register_opts(barbican_opts)"},{"line_number":46,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":47,"context_line":"logging.setup(\u0027barbicankeymgr\u0027)"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_ca62e814","line":45,"in_reply_to":"baada198_9bb048e1","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"f96060cfe6692639c35127222967721c18e0772e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"CONF \u003d cfg.CONF"},{"line_number":45,"context_line":"CONF.register_opts(barbican_opts)"},{"line_number":46,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":47,"context_line":"logging.setup(\u0027barbicankeymgr\u0027)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class BarbicanKeyManager(key_mgr.KeyManager):"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_bb034c74","line":47,"updated":"2014-08-13 11:51:16.000000000","message":"Why are you calling \u0027logging.setup\u0027 here ?  That should only be done from the main command setup, (ie cmd/compute.py)","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":44,"context_line":"CONF \u003d cfg.CONF"},{"line_number":45,"context_line":"CONF.register_opts(barbican_opts)"},{"line_number":46,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":47,"context_line":"logging.setup(\u0027barbicankeymgr\u0027)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class BarbicanKeyManager(key_mgr.KeyManager):"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_0a6dc003","line":47,"in_reply_to":"baada198_bb034c74","updated":"2014-08-13 15:24:23.000000000","message":"It has been removed.","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c24f5f486c3a5ae56dd51f5b25a4040cea482a9f","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            keystone_auth._barbican_url \u003d CONF.barbican_url"},{"line_number":72,"context_line":"            connection \u003d barbican_client.Client(auth_plugin\u003dkeystone_auth)"},{"line_number":73,"context_line":"            return connection"},{"line_number":74,"context_line":"        except Exception as e:"},{"line_number":75,"context_line":"            LOG.error(_(\"Error creating Barbican client: %s\"), (e))"},{"line_number":76,"context_line":"            raise"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_3b5ca61a","line":74,"updated":"2014-08-13 07:33:10.000000000","message":"please use with excutils.save_and_reraise_exception():","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            keystone_auth._barbican_url \u003d CONF.barbican_url"},{"line_number":72,"context_line":"            connection \u003d barbican_client.Client(auth_plugin\u003dkeystone_auth)"},{"line_number":73,"context_line":"            return connection"},{"line_number":74,"context_line":"        except Exception as e:"},{"line_number":75,"context_line":"            LOG.error(_(\"Error creating Barbican client: %s\"), (e))"},{"line_number":76,"context_line":"            raise"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_2020e3f8","line":74,"in_reply_to":"baada198_3b5ca61a","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c24f5f486c3a5ae56dd51f5b25a4040cea482a9f","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            connection \u003d barbican_client.Client(auth_plugin\u003dkeystone_auth)"},{"line_number":73,"context_line":"            return connection"},{"line_number":74,"context_line":"        except Exception as e:"},{"line_number":75,"context_line":"            LOG.error(_(\"Error creating Barbican client: %s\"), (e))"},{"line_number":76,"context_line":"            raise"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def create_key(self, ctxt, expiration\u003dNone, name\u003d\u0027Nova Volume Key\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_7b6e1ecd","line":75,"updated":"2014-08-13 07:33:10.000000000","message":"please use the logging hint _LE here","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            connection \u003d barbican_client.Client(auth_plugin\u003dkeystone_auth)"},{"line_number":73,"context_line":"            return connection"},{"line_number":74,"context_line":"        except Exception as e:"},{"line_number":75,"context_line":"            LOG.error(_(\"Error creating Barbican client: %s\"), (e))"},{"line_number":76,"context_line":"            raise"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def create_key(self, ctxt, expiration\u003dNone, name\u003d\u0027Nova Volume Key\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_a073131b","line":75,"in_reply_to":"baada198_7b6e1ecd","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c24f5f486c3a5ae56dd51f5b25a4040cea482a9f","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            order \u003d connection.orders.get(order_ref)"},{"line_number":102,"context_line":"            secret_uuid \u003d order.secret_ref.rpartition(\u0027/\u0027)[2]"},{"line_number":103,"context_line":"            return secret_uuid"},{"line_number":104,"context_line":"        except Exception as e:"},{"line_number":105,"context_line":"            LOG.error(_(\"Error creating key: %s\"), (e))"},{"line_number":106,"context_line":"            raise"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_9b9a12c3","line":104,"updated":"2014-08-13 07:33:10.000000000","message":"please use with excutils.save_and_reraise_exception():","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            order \u003d connection.orders.get(order_ref)"},{"line_number":102,"context_line":"            secret_uuid \u003d order.secret_ref.rpartition(\u0027/\u0027)[2]"},{"line_number":103,"context_line":"            return secret_uuid"},{"line_number":104,"context_line":"        except Exception as e:"},{"line_number":105,"context_line":"            LOG.error(_(\"Error creating key: %s\"), (e))"},{"line_number":106,"context_line":"            raise"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_6052db37","line":104,"in_reply_to":"baada198_9b9a12c3","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c24f5f486c3a5ae56dd51f5b25a4040cea482a9f","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            secret_uuid \u003d order.secret_ref.rpartition(\u0027/\u0027)[2]"},{"line_number":103,"context_line":"            return secret_uuid"},{"line_number":104,"context_line":"        except Exception as e:"},{"line_number":105,"context_line":"            LOG.error(_(\"Error creating key: %s\"), (e))"},{"line_number":106,"context_line":"            raise"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def store_key(self, ctxt, key, expiration\u003dNone, name\u003d\u0027Nova Volume Key\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_fb614ed6","line":105,"updated":"2014-08-13 07:33:10.000000000","message":"ditto","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            secret_uuid \u003d order.secret_ref.rpartition(\u0027/\u0027)[2]"},{"line_number":103,"context_line":"            return secret_uuid"},{"line_number":104,"context_line":"        except Exception as e:"},{"line_number":105,"context_line":"            LOG.error(_(\"Error creating key: %s\"), (e))"},{"line_number":106,"context_line":"            raise"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def store_key(self, ctxt, key, expiration\u003dNone, name\u003d\u0027Nova Volume Key\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_806e0f2b","line":105,"in_reply_to":"baada198_fb614ed6","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c24f5f486c3a5ae56dd51f5b25a4040cea482a9f","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                                                  expiration)"},{"line_number":153,"context_line":"            secret_uuid \u003d secret_ref.rpartition(\u0027/\u0027)[2]"},{"line_number":154,"context_line":"            return secret_uuid"},{"line_number":155,"context_line":"        except Exception as e:"},{"line_number":156,"context_line":"            LOG.error(_(\"Error storing key: %s\"), (e))"},{"line_number":157,"context_line":"            raise"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_dba48a09","line":155,"updated":"2014-08-13 07:33:10.000000000","message":"same as above","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                                                  expiration)"},{"line_number":153,"context_line":"            secret_uuid \u003d secret_ref.rpartition(\u0027/\u0027)[2]"},{"line_number":154,"context_line":"            return secret_uuid"},{"line_number":155,"context_line":"        except Exception as e:"},{"line_number":156,"context_line":"            LOG.error(_(\"Error storing key: %s\"), (e))"},{"line_number":157,"context_line":"            raise"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_404b17b2","line":155,"in_reply_to":"baada198_dba48a09","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c24f5f486c3a5ae56dd51f5b25a4040cea482a9f","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                                       meta.mode, True)"},{"line_number":182,"context_line":"            return copy_uuid"},{"line_number":183,"context_line":"        except Exception as e:"},{"line_number":184,"context_line":"            LOG.error(_(\"Error copying key: %s\"), (e))"},{"line_number":185,"context_line":"            raise"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def _create_secret_ref(self, key_id, connection):"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_fba86edc","line":184,"updated":"2014-08-13 07:33:10.000000000","message":"ditto","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                                       meta.mode, True)"},{"line_number":182,"context_line":"            return copy_uuid"},{"line_number":183,"context_line":"        except Exception as e:"},{"line_number":184,"context_line":"            LOG.error(_(\"Error copying key: %s\"), (e))"},{"line_number":185,"context_line":"            raise"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def _create_secret_ref(self, key_id, connection):"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_00d11fcc","line":184,"in_reply_to":"baada198_fba86edc","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c24f5f486c3a5ae56dd51f5b25a4040cea482a9f","unresolved":false,"context_lines":[{"line_number":216,"context_line":"            else:"},{"line_number":217,"context_line":"                secret_data \u003d generated_data"},{"line_number":218,"context_line":"            return secret_data"},{"line_number":219,"context_line":"        except Exception as e:"},{"line_number":220,"context_line":"            LOG.error(_(\"Error getting secret data: %s\"), (e))"},{"line_number":221,"context_line":"            raise"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_3bb3c64f","line":219,"updated":"2014-08-13 07:33:10.000000000","message":"ditto","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":216,"context_line":"            else:"},{"line_number":217,"context_line":"                secret_data \u003d generated_data"},{"line_number":218,"context_line":"            return secret_data"},{"line_number":219,"context_line":"        except Exception as e:"},{"line_number":220,"context_line":"            LOG.error(_(\"Error getting secret data: %s\"), (e))"},{"line_number":221,"context_line":"            raise"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_a0e8737f","line":219,"in_reply_to":"baada198_3bb3c64f","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c24f5f486c3a5ae56dd51f5b25a4040cea482a9f","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        try:"},{"line_number":237,"context_line":"            return connection.secrets.get(secret_ref)"},{"line_number":238,"context_line":"        except Exception as e:"},{"line_number":239,"context_line":"            LOG.error(_(\"Error getting secret metadata: %s\"), (e))"},{"line_number":240,"context_line":"            raise"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_9b81324f","line":238,"updated":"2014-08-13 07:33:10.000000000","message":"ditto","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        try:"},{"line_number":237,"context_line":"            return connection.secrets.get(secret_ref)"},{"line_number":238,"context_line":"        except Exception as e:"},{"line_number":239,"context_line":"            LOG.error(_(\"Error getting secret metadata: %s\"), (e))"},{"line_number":240,"context_line":"            raise"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_60f65b60","line":238,"in_reply_to":"baada198_9b81324f","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c24f5f486c3a5ae56dd51f5b25a4040cea482a9f","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            meta \u003d self._get_secret_metadata(ctxt, secret_ref)"},{"line_number":267,"context_line":"            key \u003d keymgr_key.SymmetricKey(meta.algorithm, secret)"},{"line_number":268,"context_line":"            return key"},{"line_number":269,"context_line":"        except Exception as e:"},{"line_number":270,"context_line":"            LOG.error(_(\"Error getting key: %s\"), (e))"},{"line_number":271,"context_line":"            raise"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_bb76f690","line":269,"updated":"2014-08-13 07:33:10.000000000","message":"ditto","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            meta \u003d self._get_secret_metadata(ctxt, secret_ref)"},{"line_number":267,"context_line":"            key \u003d keymgr_key.SymmetricKey(meta.algorithm, secret)"},{"line_number":268,"context_line":"            return key"},{"line_number":269,"context_line":"        except Exception as e:"},{"line_number":270,"context_line":"            LOG.error(_(\"Error getting key: %s\"), (e))"},{"line_number":271,"context_line":"            raise"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_608d7bd4","line":269,"in_reply_to":"baada198_bb76f690","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c24f5f486c3a5ae56dd51f5b25a4040cea482a9f","unresolved":false,"context_lines":[{"line_number":285,"context_line":"            connection.secrets.delete(secret_ref)"},{"line_number":286,"context_line":"        except Exception as e:"},{"line_number":287,"context_line":"            LOG.error(_(\"Error deleting key: %s\"), (e))"},{"line_number":288,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_db7baa78","line":288,"updated":"2014-08-13 07:33:10.000000000","message":"ditto","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":285,"context_line":"            connection.secrets.delete(secret_ref)"},{"line_number":286,"context_line":"        except Exception as e:"},{"line_number":287,"context_line":"            LOG.error(_(\"Error deleting key: %s\"), (e))"},{"line_number":288,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_c062c714","line":288,"in_reply_to":"baada198_db7baa78","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4a6dd1d56934e1b42f48d9735b3bc2a79cef029a","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":197,"context_line":"                LOG.error(_LE(\"Error copying key: %s\"), (e))"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _create_secret_ref(self, key_id, barbican_client):"},{"line_number":200,"context_line":"        \"\"\"Creates the URL required for accessing a secret."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        :param key_id: the UUID of the key to copy"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a961159_60d48547","line":199,"updated":"2014-12-09 22:20:21.000000000","message":"barbican_client parameter is unused","commit_id":"14760aa362d93a1b6c8344ca299096b3394585cd"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"dba1d4237afef2ee5f8ae6b295b85c7488a60bad","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":197,"context_line":"                LOG.error(_LE(\"Error copying key: %s\"), (e))"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _create_secret_ref(self, key_id, barbican_client):"},{"line_number":200,"context_line":"        \"\"\"Creates the URL required for accessing a secret."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        :param key_id: the UUID of the key to copy"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a961159_1b4920b7","line":199,"in_reply_to":"3a961159_60d48547","updated":"2014-12-12 15:10:51.000000000","message":"You\u0027re right. Thanks for the catch!","commit_id":"14760aa362d93a1b6c8344ca299096b3394585cd"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4a6dd1d56934e1b42f48d9735b3bc2a79cef029a","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                LOG.error(_LE(\"Error getting secret data: %s\"), (e))"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def _get_secret(self, ctxt, secret_ref):"},{"line_number":237,"context_line":"        \"\"\"Creates the URL required for accessing a secret\u0027s metadata."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        :param ctxt: contains information of the user and the environment for"},{"line_number":240,"context_line":"                     the request (nova/context.py)"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a961159_80cb31a4","line":237,"updated":"2014-12-09 22:20:21.000000000","message":"Is this docstring correct? I believe it should say \"Returns a secret\u0027s metadata.\"","commit_id":"14760aa362d93a1b6c8344ca299096b3394585cd"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"dba1d4237afef2ee5f8ae6b295b85c7488a60bad","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                LOG.error(_LE(\"Error getting secret data: %s\"), (e))"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def _get_secret(self, ctxt, secret_ref):"},{"line_number":237,"context_line":"        \"\"\"Creates the URL required for accessing a secret\u0027s metadata."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        :param ctxt: contains information of the user and the environment for"},{"line_number":240,"context_line":"                     the request (nova/context.py)"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a961159_7bcf8429","line":237,"in_reply_to":"3a961159_80cb31a4","updated":"2014-12-12 15:10:51.000000000","message":"Done","commit_id":"14760aa362d93a1b6c8344ca299096b3394585cd"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"03bd64d1650f7b6afa07a2aaf9bac49b6a78ed3c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        if not self._barbican_client:"},{"line_number":61,"context_line":"            # Confirm context is provided, if not raise not authorized"},{"line_number":62,"context_line":"            if not ctxt:"},{"line_number":63,"context_line":"                msg \u003d _(\"User is not authorized to use key manager.\")"},{"line_number":64,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_d46db033","line":61,"updated":"2014-12-19 21:25:21.000000000","message":"not authorized -\u003e forbidden (to match name of exception class)?","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"0bd0f862fa5765d7ea494d30358462bb0f879cca","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        if not self._barbican_client:"},{"line_number":61,"context_line":"            # Confirm context is provided, if not raise not authorized"},{"line_number":62,"context_line":"            if not ctxt:"},{"line_number":63,"context_line":"                msg \u003d _(\"User is not authorized to use key manager.\")"},{"line_number":64,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_90119bb1","line":61,"in_reply_to":"3a961159_d46db033","updated":"2015-01-05 18:37:20.000000000","message":"Done","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2511f876dfb4b322182c8c9a536719592c5347dc","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                                                    mode,"},{"line_number":163,"context_line":"                                                    expiration)"},{"line_number":164,"context_line":"            secret_ref \u003d secret.store()"},{"line_number":165,"context_line":"            secret_uuid \u003d secret_ref.rpartition(\u0027/\u0027)[2]"},{"line_number":166,"context_line":"            return secret_uuid"},{"line_number":167,"context_line":"        except Exception as e:"},{"line_number":168,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_222f0cf8","line":165,"updated":"2014-12-29 19:56:31.000000000","message":"Please see my comment from the previous patchset about adding an inline code comment about the structure of the secret_ref variable returned from the call to secret.store(). Seeing code like rpartition(\u0027/\u0027)[2] does not inspire a lot of understanding about the data being operated on here...","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"0bd0f862fa5765d7ea494d30358462bb0f879cca","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                                                    mode,"},{"line_number":163,"context_line":"                                                    expiration)"},{"line_number":164,"context_line":"            secret_ref \u003d secret.store()"},{"line_number":165,"context_line":"            secret_uuid \u003d secret_ref.rpartition(\u0027/\u0027)[2]"},{"line_number":166,"context_line":"            return secret_uuid"},{"line_number":167,"context_line":"        except Exception as e:"},{"line_number":168,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_0601f538","line":165,"in_reply_to":"3a961159_222f0cf8","updated":"2015-01-05 18:37:20.000000000","message":"Since there were two instances using rpartition(\u0027/\u0027)[2], I moved the rpartition to \"_retrieve_secret_uuid\" and provided a comment there.","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2511f876dfb4b322182c8c9a536719592c5347dc","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        \"\"\""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        try:"},{"line_number":182,"context_line":"            secret_ref \u003d self._create_secret_ref(key_id)"},{"line_number":183,"context_line":"            secret \u003d self._get_secret(ctxt, secret_ref)"},{"line_number":184,"context_line":"            con_type \u003d secret.content_types[\u0027default\u0027]"},{"line_number":185,"context_line":"            secret_data \u003d self._get_secret_data(secret,"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_4234184a","line":182,"updated":"2014-12-29 19:56:31.000000000","message":"See below about placing the call to _create_secret_ref() within _get_secret() and just passing _get_secret() the key_id from this public call interface.","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"0bd0f862fa5765d7ea494d30358462bb0f879cca","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        \"\"\""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        try:"},{"line_number":182,"context_line":"            secret_ref \u003d self._create_secret_ref(key_id)"},{"line_number":183,"context_line":"            secret \u003d self._get_secret(ctxt, secret_ref)"},{"line_number":184,"context_line":"            con_type \u003d secret.content_types[\u0027default\u0027]"},{"line_number":185,"context_line":"            secret_data \u003d self._get_secret_data(secret,"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_261fd171","line":182,"in_reply_to":"3a961159_4234184a","updated":"2015-01-05 18:37:20.000000000","message":"Done","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2511f876dfb4b322182c8c9a536719592c5347dc","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            return secret_data"},{"line_number":230,"context_line":"        except Exception as e:"},{"line_number":231,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":232,"context_line":"                LOG.error(_LE(\"Error getting secret data: %s\"), (e))"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def _get_secret(self, ctxt, secret_ref):"},{"line_number":235,"context_line":"        \"\"\"Returns the metadata of the secret."}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_62391441","line":232,"updated":"2014-12-29 19:56:31.000000000","message":"nit: no parens needed around (e).","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"0bd0f862fa5765d7ea494d30358462bb0f879cca","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            return secret_data"},{"line_number":230,"context_line":"        except Exception as e:"},{"line_number":231,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":232,"context_line":"                LOG.error(_LE(\"Error getting secret data: %s\"), (e))"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def _get_secret(self, ctxt, secret_ref):"},{"line_number":235,"context_line":"        \"\"\"Returns the metadata of the secret."}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_30670753","line":232,"in_reply_to":"3a961159_62391441","updated":"2015-01-05 18:37:20.000000000","message":"Done","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2511f876dfb4b322182c8c9a536719592c5347dc","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":232,"context_line":"                LOG.error(_LE(\"Error getting secret data: %s\"), (e))"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def _get_secret(self, ctxt, secret_ref):"},{"line_number":235,"context_line":"        \"\"\"Returns the metadata of the secret."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        :param ctxt: contains information of the user and the environment for"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_823d202f","line":234,"updated":"2014-12-29 19:56:31.000000000","message":"Instead of passing secret_ref, how about just passing key_id instead and calling secret_ref \u003d self._create_secret_ref(key_id). The secret_ref URI is more of an implementation detail and not something you should expose in the interfaces here, IMO.","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"0bd0f862fa5765d7ea494d30358462bb0f879cca","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":232,"context_line":"                LOG.error(_LE(\"Error getting secret data: %s\"), (e))"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def _get_secret(self, ctxt, secret_ref):"},{"line_number":235,"context_line":"        \"\"\"Returns the metadata of the secret."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        :param ctxt: contains information of the user and the environment for"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_e63dc9de","line":234,"in_reply_to":"3a961159_823d202f","updated":"2015-01-05 18:37:20.000000000","message":"Good point.  Done.","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2511f876dfb4b322182c8c9a536719592c5347dc","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        :throws Exception: if key retrieval fails"},{"line_number":264,"context_line":"        \"\"\""},{"line_number":265,"context_line":"        try:"},{"line_number":266,"context_line":"            secret_ref \u003d self._create_secret_ref(key_id)"},{"line_number":267,"context_line":"            secret \u003d self._get_secret(ctxt, secret_ref)"},{"line_number":268,"context_line":"            secret_data \u003d self._get_secret_data(secret,"},{"line_number":269,"context_line":"                                                payload_content_type)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_a23a1c32","line":266,"updated":"2014-12-29 19:56:31.000000000","message":"See note above about moving this into _get_secret() and instead just passing _get_secret() the key_id from the public call interface here.","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"0bd0f862fa5765d7ea494d30358462bb0f879cca","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        :throws Exception: if key retrieval fails"},{"line_number":264,"context_line":"        \"\"\""},{"line_number":265,"context_line":"        try:"},{"line_number":266,"context_line":"            secret_ref \u003d self._create_secret_ref(key_id)"},{"line_number":267,"context_line":"            secret \u003d self._get_secret(ctxt, secret_ref)"},{"line_number":268,"context_line":"            secret_data \u003d self._get_secret_data(secret,"},{"line_number":269,"context_line":"                                                payload_content_type)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_062495c4","line":266,"in_reply_to":"3a961159_a23a1c32","updated":"2015-01-05 18:37:20.000000000","message":"Done","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7a972b9ecd66c3a0ccedb5d7e78891cab83b8c0f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":"CONF.import_opt(\u0027encryption_auth_url\u0027, \u0027nova.keymgr.key_mgr\u0027, group\u003d\u0027keymgr\u0027)"},{"line_number":39,"context_line":"CONF.import_opt(\u0027encryption_api_url\u0027, \u0027nova.keymgr.key_mgr\u0027, group\u003d\u0027keymgr\u0027)"},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class BarbicanKeyManager(key_mgr.KeyManager):"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa81d914_b16054d0","line":40,"updated":"2015-01-30 11:34:32.000000000","message":"I would make the config params to find Barbian specific to barbican and live in here.\n\nSeems odd to have a general URL config, doesn\u0027t seem to copy what we do elsewhere in the code base.","commit_id":"d41b430a58e4a14654996199327c4ebb250d61d0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"885ea7c770d1fb64ed2f181091bf732c947f6e72","unresolved":false,"context_lines":[{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":"CONF.import_opt(\u0027encryption_auth_url\u0027, \u0027nova.keymgr.key_mgr\u0027, group\u003d\u0027keymgr\u0027)"},{"line_number":39,"context_line":"CONF.import_opt(\u0027encryption_api_url\u0027, \u0027nova.keymgr.key_mgr\u0027, group\u003d\u0027keymgr\u0027)"},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class BarbicanKeyManager(key_mgr.KeyManager):"}],"source_content_type":"text/x-python","patch_set":27,"id":"da86d52c_3d9a0715","line":40,"in_reply_to":"fa81d914_b16054d0","updated":"2015-01-30 22:09:48.000000000","message":"Done","commit_id":"d41b430a58e4a14654996199327c4ebb250d61d0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ce131e649172e596b0a559bf226a9ca665d35ba6","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        :param ctxt: the user context for authentication"},{"line_number":71,"context_line":"        :return: a Barbican Client object"},{"line_number":72,"context_line":"        :throws Forbidden: if the ctxt is None"},{"line_number":73,"context_line":"        \"\"\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        if not self._barbican_client:"}],"source_content_type":"text/x-python","patch_set":28,"id":"da86d52c_9ae76be4","line":72,"updated":"2015-01-31 17:48:57.000000000","message":"I can tell you\u0027re a Java or C++ programmer!\n\nTechnically, \"throws\" should be \"raises\" in Python-land :)","commit_id":"5b230e6d066c05af4e8f0dcd50d15af5f672bdcc"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"efc64da233c907a0d25ebd82c90ec8659084d951","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        :param ctxt: the user context for authentication"},{"line_number":71,"context_line":"        :return: a Barbican Client object"},{"line_number":72,"context_line":"        :throws Forbidden: if the ctxt is None"},{"line_number":73,"context_line":"        \"\"\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        if not self._barbican_client:"}],"source_content_type":"text/x-python","patch_set":28,"id":"da86d52c_42b166f7","line":72,"in_reply_to":"da86d52c_9ae76be4","updated":"2015-02-02 15:24:51.000000000","message":"Indeed, you are correct, I am a Java programmer :).\n\nThanks for the catch!","commit_id":"5b230e6d066c05af4e8f0dcd50d15af5f672bdcc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ce131e649172e596b0a559bf226a9ca665d35ba6","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        # The secret_ref is assumed to be of a form similar to"},{"line_number":254,"context_line":"        # http://host:9311/v1/secrets/d152fa13-2b41-42ca-a934-6c21566c0f40"},{"line_number":255,"context_line":"        # with the UUID at the end. This command retrieves everything"},{"line_number":256,"context_line":"        # after the last \u0027/\u0027, which is the UUID."},{"line_number":257,"context_line":"        return secret_ref.rpartition(\u0027/\u0027)[2]"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def _get_secret_data(self,"}],"source_content_type":"text/x-python","patch_set":28,"id":"da86d52c_5a04137e","line":256,"updated":"2015-01-31 17:48:57.000000000","message":"++ thank you for adding this code comment :)","commit_id":"5b230e6d066c05af4e8f0dcd50d15af5f672bdcc"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"efc64da233c907a0d25ebd82c90ec8659084d951","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        # The secret_ref is assumed to be of a form similar to"},{"line_number":254,"context_line":"        # http://host:9311/v1/secrets/d152fa13-2b41-42ca-a934-6c21566c0f40"},{"line_number":255,"context_line":"        # with the UUID at the end. This command retrieves everything"},{"line_number":256,"context_line":"        # after the last \u0027/\u0027, which is the UUID."},{"line_number":257,"context_line":"        return secret_ref.rpartition(\u0027/\u0027)[2]"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def _get_secret_data(self,"}],"source_content_type":"text/x-python","patch_set":28,"id":"da86d52c_ad34d3de","line":256,"in_reply_to":"da86d52c_5a04137e","updated":"2015-02-02 15:24:51.000000000","message":"you\u0027re welcome :)","commit_id":"5b230e6d066c05af4e8f0dcd50d15af5f672bdcc"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"3a91d1a07e1da302c3189298486f9552877a6511","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"barbican_opts \u003d ["},{"line_number":37,"context_line":"     cfg.StrOpt(\u0027catalog_info\u0027,"},{"line_number":38,"context_line":"                default\u003d\u0027key-manager:barbican:public\u0027,"},{"line_number":39,"context_line":"                help\u003d\u0027Info to match when looking for barbican in the service \u0027"},{"line_number":40,"context_line":"                     \u0027catalog. Format is: separated values of the form: \u0027"},{"line_number":41,"context_line":"                     \u0027\u003cservice_type\u003e:\u003cservice_name\u003e:\u003cendpoint_type\u003e\u0027),"}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_c55e3276","line":38,"updated":"2015-02-02 19:01:43.000000000","message":"Why default to using the public interface? shouldn\u0027t this be private?","commit_id":"0fc76f1b5152c2ce62a2be5788fd630ed60f0575"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"340668e00b4ff3aed172e8d76071507c54ab9415","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"barbican_opts \u003d ["},{"line_number":37,"context_line":"     cfg.StrOpt(\u0027catalog_info\u0027,"},{"line_number":38,"context_line":"                default\u003d\u0027key-manager:barbican:public\u0027,"},{"line_number":39,"context_line":"                help\u003d\u0027Info to match when looking for barbican in the service \u0027"},{"line_number":40,"context_line":"                     \u0027catalog. Format is: separated values of the form: \u0027"},{"line_number":41,"context_line":"                     \u0027\u003cservice_type\u003e:\u003cservice_name\u003e:\u003cendpoint_type\u003e\u0027),"}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_02b800e4","line":38,"in_reply_to":"da86d52c_c55e3276","updated":"2015-02-03 22:54:43.000000000","message":"I was following the cinder example, which uses public (https://github.com/openstack/nova/blob/680354b5a0b8fcf6217083de68efb24af8de6f26/nova/volume/cinder.py#L41).\n\nMy assumption was that public was used between OpenStack services, and internal was used within an OpenStack service, but I could be wrong.","commit_id":"0fc76f1b5152c2ce62a2be5788fd630ed60f0575"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"3a91d1a07e1da302c3189298486f9552877a6511","unresolved":false,"context_lines":[{"line_number":48,"context_line":"]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"},{"line_number":51,"context_line":"BARBICAN_OPT_GROUP \u003d \u0027keymgr\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"CONF.register_opts(barbican_opts, group\u003dBARBICAN_OPT_GROUP)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_05504a5d","line":51,"updated":"2015-02-02 19:01:43.000000000","message":"Why abbreviate this?","commit_id":"0fc76f1b5152c2ce62a2be5788fd630ed60f0575"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"340668e00b4ff3aed172e8d76071507c54ab9415","unresolved":false,"context_lines":[{"line_number":48,"context_line":"]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"},{"line_number":51,"context_line":"BARBICAN_OPT_GROUP \u003d \u0027keymgr\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"CONF.register_opts(barbican_opts, group\u003dBARBICAN_OPT_GROUP)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_e2076c16","line":51,"in_reply_to":"da86d52c_05504a5d","updated":"2015-02-03 22:54:43.000000000","message":"I was going off of the cinder implementation of using keystone with options, which has \"CINDER_OPT_GROUP\" (https://github.com/openstack/nova/blob/680354b5a0b8fcf6217083de68efb24af8de6f26/nova/volume/cinder.py#L60)","commit_id":"0fc76f1b5152c2ce62a2be5788fd630ed60f0575"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"799a54f5d30db9340e1a9caa6974b264d68981be","unresolved":false,"context_lines":[{"line_number":48,"context_line":"]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"},{"line_number":51,"context_line":"BARBICAN_OPT_GROUP \u003d \u0027keymgr\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"CONF.register_opts(barbican_opts, group\u003dBARBICAN_OPT_GROUP)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_359d24bd","line":51,"in_reply_to":"da86d52c_0608fdd8","updated":"2015-02-04 15:38:47.000000000","message":"Agreed. Done.","commit_id":"0fc76f1b5152c2ce62a2be5788fd630ed60f0575"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"c66b234c58250dea2426f17441e68ac8b0336ef9","unresolved":false,"context_lines":[{"line_number":48,"context_line":"]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"},{"line_number":51,"context_line":"BARBICAN_OPT_GROUP \u003d \u0027keymgr\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"CONF.register_opts(barbican_opts, group\u003dBARBICAN_OPT_GROUP)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"da86d52c_0608fdd8","line":51,"in_reply_to":"da86d52c_e2076c16","updated":"2015-02-04 13:21:43.000000000","message":"that\u0027s the confusing part, all the other groups are based on service. So this should be \u0027barbican\u0027. Changing groups is hard, so we need to fix that before this merges.","commit_id":"0fc76f1b5152c2ce62a2be5788fd630ed60f0575"}],"nova/keymgr/key_mgr.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"b520eb1fec2b078ac003fc02f0eb9bf45e1b6d4f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    cfg.StrOpt(\u0027encryption_api_url\u0027,"},{"line_number":30,"context_line":"               default\u003d\u0027http://localhost:9311/v1\u0027,"},{"line_number":31,"context_line":"               help\u003d\u0027Url for encryption service.\u0027),"},{"line_number":32,"context_line":"]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"CONF \u003d cfg.CONF"},{"line_number":35,"context_line":"CONF.register_opts(encryption_opts, \u0027keymgr\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a961159_113cbc92","line":32,"updated":"2015-01-14 21:10:17.000000000","message":"why aren\u0027t these coming from keystone?","commit_id":"53eda75c7f7bb488d7a1b1e457ac694b65f7633e"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"2c4fbdc1aaed0ed0f1cd5ea0ad82ea7905d5f45e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    cfg.StrOpt(\u0027encryption_api_url\u0027,"},{"line_number":30,"context_line":"               default\u003d\u0027http://localhost:9311/v1\u0027,"},{"line_number":31,"context_line":"               help\u003d\u0027Url for encryption service.\u0027),"},{"line_number":32,"context_line":"]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"CONF \u003d cfg.CONF"},{"line_number":35,"context_line":"CONF.register_opts(encryption_opts, \u0027keymgr\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"da86d52c_586ee9ca","line":32,"in_reply_to":"1a930d6b_b5bc246e","updated":"2015-01-30 22:10:04.000000000","message":"Thank you for the help, Davanum.","commit_id":"53eda75c7f7bb488d7a1b1e457ac694b65f7633e"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"9ec7a6dc8a7e2523ec7f220df35a9fb0b5bd91c6","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    cfg.StrOpt(\u0027encryption_api_url\u0027,"},{"line_number":30,"context_line":"               default\u003d\u0027http://localhost:9311/v1\u0027,"},{"line_number":31,"context_line":"               help\u003d\u0027Url for encryption service.\u0027),"},{"line_number":32,"context_line":"]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"CONF \u003d cfg.CONF"},{"line_number":35,"context_line":"CONF.register_opts(encryption_opts, \u0027keymgr\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a961159_ec83b5c8","line":32,"in_reply_to":"3a961159_113cbc92","updated":"2015-01-15 16:48:18.000000000","message":"These configuration options were meant to provide flexibility so that other key managers would not be limited to using keystone for authentication.\n\nIt also isn\u0027t clear or straightforward to me exactly how keystone is used to retrieve URLs.  Do you know where any instructions or examples of this may be?","commit_id":"53eda75c7f7bb488d7a1b1e457ac694b65f7633e"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"8975c62a79111881945f58402c353a59c115c763","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    cfg.StrOpt(\u0027encryption_api_url\u0027,"},{"line_number":30,"context_line":"               default\u003d\u0027http://localhost:9311/v1\u0027,"},{"line_number":31,"context_line":"               help\u003d\u0027Url for encryption service.\u0027),"},{"line_number":32,"context_line":"]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"CONF \u003d cfg.CONF"},{"line_number":35,"context_line":"CONF.register_opts(encryption_opts, \u0027keymgr\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a930d6b_b5bc246e","line":32,"in_reply_to":"3a961159_ec83b5c8","updated":"2015-01-21 16:33:45.000000000","message":"Brianna, see how Nova figures out urls for cinder \n\nhttps://github.com/openstack/nova/blob/master/nova/volume/cinder.py#L114","commit_id":"53eda75c7f7bb488d7a1b1e457ac694b65f7633e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7a972b9ecd66c3a0ccedb5d7e78891cab83b8c0f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"CONF \u003d cfg.CONF"},{"line_number":35,"context_line":"CONF.register_opts(encryption_opts, \u0027keymgr\u0027)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa81d914_d146a84e","line":35,"updated":"2015-01-30 11:34:32.000000000","message":"Agreed with the previous comments here, this should follow a similar pattern to what we do with Cinder.\n\nWe really don\u0027t want to add config properties we will need to remove in a future release for consistency with other services we integrate with.","commit_id":"d41b430a58e4a14654996199327c4ebb250d61d0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"885ea7c770d1fb64ed2f181091bf732c947f6e72","unresolved":false,"context_lines":[{"line_number":32,"context_line":"]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"CONF \u003d cfg.CONF"},{"line_number":35,"context_line":"CONF.register_opts(encryption_opts, \u0027keymgr\u0027)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":27,"id":"da86d52c_986781ea","line":35,"in_reply_to":"fa81d914_d146a84e","updated":"2015-01-30 22:09:48.000000000","message":"Done","commit_id":"d41b430a58e4a14654996199327c4ebb250d61d0"}],"nova/tests/keymgr/test_barbican.py":[{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"82aa76e8fd4ed40ea526ff5f0ffc3598bc878dbe","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    def test_get_unknown_key(self):"},{"line_number":205,"context_line":"        self.assertRaises(KeyError, self.key_mgr.get_key, self.ctxt, None)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def test_store_key(self):"},{"line_number":208,"context_line":"        # Create Key to store"},{"line_number":209,"context_line":"        secret_key \u003d array.array(\u0027B\u0027, [0x01, 0x02, 0xA0, 0xB3]).tolist()"},{"line_number":210,"context_line":"        _key \u003d keymgr_key.SymmetricKey(\u0027AES\u0027, secret_key)"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_73358cf4","line":207,"updated":"2014-08-12 14:51:58.000000000","message":"Given that the \"text/plain\" test is called test_store_key_plaintest, should this be called test_store_key_base64?","commit_id":"cd9e91cdd8af946cad627ad66105d004197bffd3"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"d64fcbaebdd3053f27b3541e9ff75a1b31d1ab22","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    def test_get_unknown_key(self):"},{"line_number":205,"context_line":"        self.assertRaises(KeyError, self.key_mgr.get_key, self.ctxt, None)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def test_store_key(self):"},{"line_number":208,"context_line":"        # Create Key to store"},{"line_number":209,"context_line":"        secret_key \u003d array.array(\u0027B\u0027, [0x01, 0x02, 0xA0, 0xB3]).tolist()"},{"line_number":210,"context_line":"        _key \u003d keymgr_key.SymmetricKey(\u0027AES\u0027, secret_key)"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_a73a74c3","line":207,"in_reply_to":"baada198_73358cf4","updated":"2014-08-12 21:36:26.000000000","message":"Done","commit_id":"cd9e91cdd8af946cad627ad66105d004197bffd3"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c24f5f486c3a5ae56dd51f5b25a4040cea482a9f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from barbicanclient.common import auth"},{"line_number":26,"context_line":"from keystoneclient.v2_0 import client as keystone_client"},{"line_number":27,"context_line":"import mock"},{"line_number":28,"context_line":"from oslo.config import cfg"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from nova import exception"},{"line_number":31,"context_line":"from nova.keymgr import barbican"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_7be37e3a","line":28,"updated":"2014-08-13 07:33:10.000000000","message":"not used","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from barbicanclient.common import auth"},{"line_number":26,"context_line":"from keystoneclient.v2_0 import client as keystone_client"},{"line_number":27,"context_line":"import mock"},{"line_number":28,"context_line":"from oslo.config import cfg"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from nova import exception"},{"line_number":31,"context_line":"from nova.keymgr import barbican"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_0fceab8f","line":28,"in_reply_to":"baada198_7be37e3a","updated":"2014-08-13 15:24:23.000000000","message":"Now used with a new test (test_conf_urls)","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c24f5f486c3a5ae56dd51f5b25a4040cea482a9f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from nova.keymgr import key as keymgr_key"},{"line_number":33,"context_line":"from nova.tests.keymgr import test_key_mgr"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"CONF \u003d cfg.CONF"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class BarbicanKeyManagerTestCase(test_key_mgr.KeyManagerTestCase):"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_9be85217","line":35,"updated":"2014-08-13 07:33:10.000000000","message":"not used - would at least expect tests of the new config vars","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from nova.keymgr import key as keymgr_key"},{"line_number":33,"context_line":"from nova.tests.keymgr import test_key_mgr"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"CONF \u003d cfg.CONF"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class BarbicanKeyManagerTestCase(test_key_mgr.KeyManagerTestCase):"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_ef6337a9","line":35,"in_reply_to":"baada198_9be85217","updated":"2014-08-13 15:24:23.000000000","message":"I added a new test to confirm auth_url and url are used.","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":11716,"name":"Tim Kelsey","email":"timothy.kelsey@uk.ibm.com","username":"tkelsey"},"change_message_id":"d7e5a470ea8a16d030e8b61af8a84b041a161294","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        if hasattr(self, \u0027original_base64\u0027):"},{"line_number":75,"context_line":"            base64.b64encode \u003d self.original_base64"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _get_mock_auth(self):"},{"line_number":78,"context_line":"        self.mock_auth \u003d mock.Mock()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        def fake_keystone_auth(keystone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_23355845","line":77,"updated":"2014-08-13 10:36:40.000000000","message":"just a nit, _get_mock_.... sounds like it should return something, perhaps _build_mock_... would be better?","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        if hasattr(self, \u0027original_base64\u0027):"},{"line_number":75,"context_line":"            base64.b64encode \u003d self.original_base64"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _get_mock_auth(self):"},{"line_number":78,"context_line":"        self.mock_auth \u003d mock.Mock()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        def fake_keystone_auth(keystone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_a6efacb1","line":77,"in_reply_to":"baada198_23355845","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":11716,"name":"Tim Kelsey","email":"timothy.kelsey@uk.ibm.com","username":"tkelsey"},"change_message_id":"d7e5a470ea8a16d030e8b61af8a84b041a161294","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self.original_auth \u003d auth.KeystoneAuthV2"},{"line_number":83,"context_line":"        auth.KeystoneAuthV2 \u003d fake_keystone_auth"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def _get_mock_barbican(self):"},{"line_number":86,"context_line":"        self.mock_barbican \u003d mock.MagicMock(name\u003d\u0027mock_barbican\u0027)"},{"line_number":87,"context_line":"        self.mock_barbican.base_url \u003d \"http://localhost:9311/v1/None\""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_037e94e3","line":85,"updated":"2014-08-13 10:36:40.000000000","message":"ditto","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self.original_auth \u003d auth.KeystoneAuthV2"},{"line_number":83,"context_line":"        auth.KeystoneAuthV2 \u003d fake_keystone_auth"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def _get_mock_barbican(self):"},{"line_number":86,"context_line":"        self.mock_barbican \u003d mock.MagicMock(name\u003d\u0027mock_barbican\u0027)"},{"line_number":87,"context_line":"        self.mock_barbican.base_url \u003d \"http://localhost:9311/v1/None\""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_06269822","line":85,"in_reply_to":"baada198_037e94e3","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":11716,"name":"Tim Kelsey","email":"timothy.kelsey@uk.ibm.com","username":"tkelsey"},"change_message_id":"d7e5a470ea8a16d030e8b61af8a84b041a161294","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.original_barbican \u003d barbican_client.Client"},{"line_number":98,"context_line":"        barbican_client.Client \u003d fake_barbican_client"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _get_mock_keystone(self):"},{"line_number":101,"context_line":"        self.mock_keystone \u003d mock.Mock()"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        def fake_keystone_client(token, endpoint):"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_c35adc84","line":100,"updated":"2014-08-13 10:36:40.000000000","message":"ditto","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.original_barbican \u003d barbican_client.Client"},{"line_number":98,"context_line":"        barbican_client.Client \u003d fake_barbican_client"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _get_mock_keystone(self):"},{"line_number":101,"context_line":"        self.mock_keystone \u003d mock.Mock()"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        def fake_keystone_client(token, endpoint):"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_262b9ceb","line":100,"in_reply_to":"baada198_c35adc84","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":11716,"name":"Tim Kelsey","email":"timothy.kelsey@uk.ibm.com","username":"tkelsey"},"change_message_id":"d7e5a470ea8a16d030e8b61af8a84b041a161294","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self.original_keystone \u003d keystone_client.Client"},{"line_number":106,"context_line":"        keystone_client.Client \u003d fake_keystone_client"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def _get_mock_symKey(self):"},{"line_number":109,"context_line":"        self.mock_symKey \u003d mock.Mock()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        def fake_sym_key(alg, key):"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_e35fe072","line":108,"updated":"2014-08-13 10:36:40.000000000","message":"ditto","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self.original_keystone \u003d keystone_client.Client"},{"line_number":106,"context_line":"        keystone_client.Client \u003d fake_keystone_client"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def _get_mock_symKey(self):"},{"line_number":109,"context_line":"        self.mock_symKey \u003d mock.Mock()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        def fake_sym_key(alg, key):"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_46309055","line":108,"in_reply_to":"baada198_e35fe072","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":11716,"name":"Tim Kelsey","email":"timothy.kelsey@uk.ibm.com","username":"tkelsey"},"change_message_id":"d7e5a470ea8a16d030e8b61af8a84b041a161294","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        self.original_key \u003d keymgr_key.SymmetricKey"},{"line_number":116,"context_line":"        keymgr_key.SymmetricKey \u003d fake_sym_key"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def _get_mock_base64(self):"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        def fake_base64_b64encode(string):"},{"line_number":121,"context_line":"            return self.pre_hex"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_c3c1fcfe","line":118,"updated":"2014-08-13 10:36:40.000000000","message":"ditto","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"07350bdf9182ca4f30377a6719dcd716ddb1be80","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        self.original_key \u003d keymgr_key.SymmetricKey"},{"line_number":116,"context_line":"        keymgr_key.SymmetricKey \u003d fake_sym_key"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def _get_mock_base64(self):"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        def fake_base64_b64encode(string):"},{"line_number":121,"context_line":"            return self.pre_hex"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_8639c842","line":118,"in_reply_to":"baada198_c3c1fcfe","updated":"2014-08-13 15:24:23.000000000","message":"Done","commit_id":"3e4b175baee002366f64ac80c0e1eca95bd1ad1d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4a6dd1d56934e1b42f48d9735b3bc2a79cef029a","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    def test_delete_unknown_key(self):"},{"line_number":168,"context_line":"        self.assertRaises(exception.KeyManagerError,"},{"line_number":169,"context_line":"                          self.key_mgr.delete_key, self.ctxt, None)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def test_get_key(self):"},{"line_number":172,"context_line":"        self._build_mock_base64()"},{"line_number":173,"context_line":"        content_type \u003d \u0027application/octet-stream\u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a961159_40d14956","line":170,"updated":"2014-12-09 22:20:21.000000000","message":"Just do:\n\n @mock.patch(\u0027base64.base64decode\u0027)\n def test_get_key(self, b64_mock):\n    b64_mock.return_value \u003d self.pre_hex\n    ...\n\nThere\u0027s no need for the _build_mock_base64() method from above.","commit_id":"14760aa362d93a1b6c8344ca299096b3394585cd"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"dba1d4237afef2ee5f8ae6b295b85c7488a60bad","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    def test_delete_unknown_key(self):"},{"line_number":168,"context_line":"        self.assertRaises(exception.KeyManagerError,"},{"line_number":169,"context_line":"                          self.key_mgr.delete_key, self.ctxt, None)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def test_get_key(self):"},{"line_number":172,"context_line":"        self._build_mock_base64()"},{"line_number":173,"context_line":"        content_type \u003d \u0027application/octet-stream\u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a961159_086a9fed","line":170,"in_reply_to":"3a961159_40d14956","updated":"2014-12-12 15:10:51.000000000","message":"Thank you for providing the example!  Done.","commit_id":"14760aa362d93a1b6c8344ca299096b3394585cd"}],"nova/tests/unit/keymgr/test_barbican.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2511f876dfb4b322182c8c9a536719592c5347dc","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            self.mock_symKey.get_encoded(),"},{"line_number":112,"context_line":"            content_types[\u0027default\u0027],"},{"line_number":113,"context_line":"            \u0027base64\u0027,"},{"line_number":114,"context_line":"            original_secret_metadata.algorithm,"},{"line_number":115,"context_line":"            original_secret_metadata.bit_length,"},{"line_number":116,"context_line":"            original_secret_metadata.mode,"},{"line_number":117,"context_line":"            original_secret_metadata.expiration)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_82f6008f","line":114,"updated":"2014-12-29 19:56:31.000000000","message":"mock.sentinel.alg","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"0bd0f862fa5765d7ea494d30358462bb0f879cca","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            self.mock_symKey.get_encoded(),"},{"line_number":112,"context_line":"            content_types[\u0027default\u0027],"},{"line_number":113,"context_line":"            \u0027base64\u0027,"},{"line_number":114,"context_line":"            original_secret_metadata.algorithm,"},{"line_number":115,"context_line":"            original_secret_metadata.bit_length,"},{"line_number":116,"context_line":"            original_secret_metadata.mode,"},{"line_number":117,"context_line":"            original_secret_metadata.expiration)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_9c2b75ea","line":114,"in_reply_to":"3a961159_82f6008f","updated":"2015-01-05 18:37:20.000000000","message":"Done","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2511f876dfb4b322182c8c9a536719592c5347dc","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            content_types[\u0027default\u0027],"},{"line_number":113,"context_line":"            \u0027base64\u0027,"},{"line_number":114,"context_line":"            original_secret_metadata.algorithm,"},{"line_number":115,"context_line":"            original_secret_metadata.bit_length,"},{"line_number":116,"context_line":"            original_secret_metadata.mode,"},{"line_number":117,"context_line":"            original_secret_metadata.expiration)"},{"line_number":118,"context_line":"        self.store.assert_called()"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_a2f3fc9d","line":115,"updated":"2014-12-29 19:56:31.000000000","message":"mock.sentinel.bit","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"0bd0f862fa5765d7ea494d30358462bb0f879cca","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            content_types[\u0027default\u0027],"},{"line_number":113,"context_line":"            \u0027base64\u0027,"},{"line_number":114,"context_line":"            original_secret_metadata.algorithm,"},{"line_number":115,"context_line":"            original_secret_metadata.bit_length,"},{"line_number":116,"context_line":"            original_secret_metadata.mode,"},{"line_number":117,"context_line":"            original_secret_metadata.expiration)"},{"line_number":118,"context_line":"        self.store.assert_called()"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_bc303157","line":115,"in_reply_to":"3a961159_a2f3fc9d","updated":"2015-01-05 18:37:20.000000000","message":"Done","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2511f876dfb4b322182c8c9a536719592c5347dc","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            \u0027base64\u0027,"},{"line_number":114,"context_line":"            original_secret_metadata.algorithm,"},{"line_number":115,"context_line":"            original_secret_metadata.bit_length,"},{"line_number":116,"context_line":"            original_secret_metadata.mode,"},{"line_number":117,"context_line":"            original_secret_metadata.expiration)"},{"line_number":118,"context_line":"        self.store.assert_called()"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_c2f00894","line":116,"updated":"2014-12-29 19:56:31.000000000","message":"mock.sentinel.mode","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"0bd0f862fa5765d7ea494d30358462bb0f879cca","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            \u0027base64\u0027,"},{"line_number":114,"context_line":"            original_secret_metadata.algorithm,"},{"line_number":115,"context_line":"            original_secret_metadata.bit_length,"},{"line_number":116,"context_line":"            original_secret_metadata.mode,"},{"line_number":117,"context_line":"            original_secret_metadata.expiration)"},{"line_number":118,"context_line":"        self.store.assert_called()"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_dc317d5a","line":116,"in_reply_to":"3a961159_c2f00894","updated":"2015-01-05 18:37:20.000000000","message":"Done","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2511f876dfb4b322182c8c9a536719592c5347dc","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            original_secret_metadata.algorithm,"},{"line_number":115,"context_line":"            original_secret_metadata.bit_length,"},{"line_number":116,"context_line":"            original_secret_metadata.mode,"},{"line_number":117,"context_line":"            original_secret_metadata.expiration)"},{"line_number":118,"context_line":"        self.store.assert_called()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def test_copy_null_context(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_e2ed04b9","line":117,"updated":"2014-12-29 19:56:31.000000000","message":"mock.sentinel.expiration","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"0bd0f862fa5765d7ea494d30358462bb0f879cca","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            original_secret_metadata.algorithm,"},{"line_number":115,"context_line":"            original_secret_metadata.bit_length,"},{"line_number":116,"context_line":"            original_secret_metadata.mode,"},{"line_number":117,"context_line":"            original_secret_metadata.expiration)"},{"line_number":118,"context_line":"        self.store.assert_called()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def test_copy_null_context(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_fc363950","line":117,"in_reply_to":"3a961159_e2ed04b9","updated":"2015-01-05 18:37:20.000000000","message":"Done","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2511f876dfb4b322182c8c9a536719592c5347dc","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            original_secret_metadata.bit_length,"},{"line_number":116,"context_line":"            original_secret_metadata.mode,"},{"line_number":117,"context_line":"            original_secret_metadata.expiration)"},{"line_number":118,"context_line":"        self.store.assert_called()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def test_copy_null_context(self):"},{"line_number":121,"context_line":"        self.key_mgr._barbican_client \u003d None"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_022a10e7","line":118,"updated":"2014-12-29 19:56:31.000000000","message":"assert_called() is not a method of mock.MagicMock(). You need to replace this with assert_called_once_with().","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"0bd0f862fa5765d7ea494d30358462bb0f879cca","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            original_secret_metadata.bit_length,"},{"line_number":116,"context_line":"            original_secret_metadata.mode,"},{"line_number":117,"context_line":"            original_secret_metadata.expiration)"},{"line_number":118,"context_line":"        self.store.assert_called()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def test_copy_null_context(self):"},{"line_number":121,"context_line":"        self.key_mgr._barbican_client \u003d None"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_3ce4410c","line":118,"in_reply_to":"3a961159_022a10e7","updated":"2015-01-05 18:37:20.000000000","message":"Done","commit_id":"107f2421da28d88b6e5cec39a4ff9ba7e3430357"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ce131e649172e596b0a559bf226a9ca665d35ba6","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import array"},{"line_number":21,"context_line":"import base64"},{"line_number":22,"context_line":"import binascii"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":28,"id":"da86d52c_ba034f72","line":21,"updated":"2015-01-31 17:48:57.000000000","message":"The import of base64 is no longer needed.","commit_id":"5b230e6d066c05af4e8f0dcd50d15af5f672bdcc"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"efc64da233c907a0d25ebd82c90ec8659084d951","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import array"},{"line_number":21,"context_line":"import base64"},{"line_number":22,"context_line":"import binascii"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":28,"id":"da86d52c_4d5d1721","line":21,"in_reply_to":"da86d52c_ba034f72","updated":"2015-02-02 15:24:51.000000000","message":"Done","commit_id":"5b230e6d066c05af4e8f0dcd50d15af5f672bdcc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ce131e649172e596b0a559bf226a9ca665d35ba6","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        if hasattr(self, \u0027original_key\u0027):"},{"line_number":58,"context_line":"            keymgr_key.SymmetricKey \u003d self.original_key"},{"line_number":59,"context_line":"        if hasattr(self, \u0027original_base64\u0027):"},{"line_number":60,"context_line":"            base64.b64encode \u003d self.original_base64"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _build_mock_barbican(self):"},{"line_number":63,"context_line":"        self.mock_barbican \u003d mock.MagicMock(name\u003d\u0027mock_barbican\u0027)"}],"source_content_type":"text/x-python","patch_set":28,"id":"da86d52c_9afe8b6a","line":60,"updated":"2015-01-31 17:48:57.000000000","message":"Lines 59-60 are no longer needed.","commit_id":"5b230e6d066c05af4e8f0dcd50d15af5f672bdcc"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"efc64da233c907a0d25ebd82c90ec8659084d951","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        if hasattr(self, \u0027original_key\u0027):"},{"line_number":58,"context_line":"            keymgr_key.SymmetricKey \u003d self.original_key"},{"line_number":59,"context_line":"        if hasattr(self, \u0027original_base64\u0027):"},{"line_number":60,"context_line":"            base64.b64encode \u003d self.original_base64"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _build_mock_barbican(self):"},{"line_number":63,"context_line":"        self.mock_barbican \u003d mock.MagicMock(name\u003d\u0027mock_barbican\u0027)"}],"source_content_type":"text/x-python","patch_set":28,"id":"da86d52c_4d743799","line":60,"in_reply_to":"da86d52c_9afe8b6a","updated":"2015-02-02 15:24:51.000000000","message":"Done","commit_id":"5b230e6d066c05af4e8f0dcd50d15af5f672bdcc"}],"requirements.txt":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"5bff51b65d545691b2e2c38e6f7d1aa0e9f9ebd5","unresolved":false,"context_lines":[{"line_number":23,"context_line":"Babel\u003e\u003d1.3"},{"line_number":24,"context_line":"iso8601\u003e\u003d0.1.9"},{"line_number":25,"context_line":"jsonschema\u003e\u003d2.0.0,\u003c3.0.0"},{"line_number":26,"context_line":"python-barbicanclient\u003e\u003d2.1.0"},{"line_number":27,"context_line":"python-cinderclient\u003e\u003d1.0.7"},{"line_number":28,"context_line":"python-neutronclient\u003e\u003d2.3.6,\u003c3"},{"line_number":29,"context_line":"python-glanceclient\u003e\u003d0.13.1"}],"source_content_type":"text/plain","patch_set":18,"id":"fa98f980_b344be1b","line":26,"updated":"2014-09-03 19:14:24.000000000","message":"should probably be in test requirements instead","commit_id":"d24d921fe0ec89a0ddcc2cab7522e56aa5a73205"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"84a9c1490999df7216b5ee988daabd44860807bb","unresolved":false,"context_lines":[{"line_number":23,"context_line":"Babel\u003e\u003d1.3"},{"line_number":24,"context_line":"iso8601\u003e\u003d0.1.9"},{"line_number":25,"context_line":"jsonschema\u003e\u003d2.0.0,\u003c3.0.0"},{"line_number":26,"context_line":"python-barbicanclient\u003e\u003d2.1.0"},{"line_number":27,"context_line":"python-cinderclient\u003e\u003d1.0.7"},{"line_number":28,"context_line":"python-neutronclient\u003e\u003d2.3.6,\u003c3"},{"line_number":29,"context_line":"python-glanceclient\u003e\u003d0.13.1"}],"source_content_type":"text/plain","patch_set":18,"id":"fa98f980_00008b32","line":26,"in_reply_to":"fa98f980_b344be1b","updated":"2014-09-05 13:28:03.000000000","message":"Done","commit_id":"d24d921fe0ec89a0ddcc2cab7522e56aa5a73205"}]}
