)]}'
{"nova/exception.py":[{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"37cf8f9e6ea1138d013b31e3cad84553e7dffa43","unresolved":false,"context_lines":[{"line_number":1621,"context_line":""},{"line_number":1622,"context_line":"class SignatureVerificationError(NovaException):"},{"line_number":1623,"context_line":"    msg_fmt \u003d _(\"The signature verification for the image \""},{"line_number":1624,"context_line":"                \"failed: %(reason)s.\") "},{"line_number":1625,"context_line":""},{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"class ResourceMonitorError(NovaException):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_d5a42f4c","line":1624,"updated":"2015-09-03 22:14:56.000000000","message":"Nit: white space needs to be deleted","commit_id":"8157263e96034a51b88a7a439af2bdbd65d7c06d"}],"nova/image/glance.py":[{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"a4649333cc95a8338bf5350054813692ef06de2a","unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"            if result:"},{"line_number":408,"context_line":"                LOG.info(_LI(\"Successfully verified signature for image \""},{"line_number":409,"context_line":"                             \"%s\" % image_id))"},{"line_number":410,"context_line":"            else:"},{"line_number":411,"context_line":"                msg \u003d _(\u0027Signature verification failed for image %s\u0027"},{"line_number":412,"context_line":"                        % image_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_be7eed67","line":409,"updated":"2015-06-09 18:23:44.000000000","message":"See the following for logging recommendations moving forward:\n\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html#\n\nIn this case, I think this would be...\n\nLOG.info(_LI(\"Successfully verified signature for image %s\"), image_id)","commit_id":"5f7bc6914701fc53a7977c88e777625e24888f1f"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"a4649333cc95a8338bf5350054813692ef06de2a","unresolved":false,"context_lines":[{"line_number":425,"context_line":""},{"line_number":426,"context_line":"        if method_name not in self.HASH_METHODS:"},{"line_number":427,"context_line":"            raise exception.ImageSignatureVerificationError("},{"line_number":428,"context_line":"                \u0027Invalid signature hash method: %s\u0027 % method_name)"},{"line_number":429,"context_line":"    "},{"line_number":430,"context_line":"        hasher \u003d self.HASH_METHODS[method_name]"},{"line_number":431,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_7ec3d589","line":428,"updated":"2015-06-09 18:23:44.000000000","message":"Translation needed?","commit_id":"5f7bc6914701fc53a7977c88e777625e24888f1f"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"a4649333cc95a8338bf5350054813692ef06de2a","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        if method_name not in self.HASH_METHODS:"},{"line_number":427,"context_line":"            raise exception.ImageSignatureVerificationError("},{"line_number":428,"context_line":"                \u0027Invalid signature hash method: %s\u0027 % method_name)"},{"line_number":429,"context_line":"    "},{"line_number":430,"context_line":"        hasher \u003d self.HASH_METHODS[method_name]"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        return hasher"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_fe2c659a","line":429,"updated":"2015-06-09 18:23:44.000000000","message":"White space here should be cleaned up.","commit_id":"5f7bc6914701fc53a7977c88e777625e24888f1f"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"a4649333cc95a8338bf5350054813692ef06de2a","unresolved":false,"context_lines":[{"line_number":453,"context_line":"        signature_hex \u003d properties[\u0027signature\u0027]"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        # Convert from hex"},{"line_number":456,"context_line":"        signature \u003d binascii.unhexlify(signature_hex)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        return signature"},{"line_number":459,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_1ed2a15c","line":456,"updated":"2015-06-09 18:23:44.000000000","message":"Are you anticipating adding more here?  Seems like this could be condensed in its current form?\n\nreturn binascii.unhexlify(properties[\u0027signature\u0027])","commit_id":"5f7bc6914701fc53a7977c88e777625e24888f1f"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"37cf8f9e6ea1138d013b31e3cad84553e7dffa43","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        return"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    def _get_detailed_image_properties(self, context, image_id):"},{"line_number":348,"context_line":"        detailed_images \u003d self.detail(context)"},{"line_number":349,"context_line":"        for image in detailed_images:"},{"line_number":350,"context_line":"            if image[\u0027id\u0027] \u003d\u003d image_id:"},{"line_number":351,"context_line":"                return image[\u0027properties\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_48a7220b","line":348,"updated":"2015-09-03 22:14:56.000000000","message":"is there a more efficient way of doing this?  it seems like a lot of effort to get a list of all of the images, and then go through that whole list looking for a particular image id","commit_id":"8157263e96034a51b88a7a439af2bdbd65d7c06d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"37cf8f9e6ea1138d013b31e3cad84553e7dffa43","unresolved":false,"context_lines":[{"line_number":381,"context_line":"            hasher \u003d hashes.Hash(hashes.MD5(), backend\u003ddefault_backend())"},{"line_number":382,"context_line":"            for chunk in image_chunks:"},{"line_number":383,"context_line":"                hasher.update(chunk)"},{"line_number":384,"context_line":"            checksum \u003d hasher.finalize()"},{"line_number":385,"context_line":"            "},{"line_number":386,"context_line":"            try:"},{"line_number":387,"context_line":"                signature_utils.verify_signature(context,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_a88d9e7d","line":384,"updated":"2015-09-03 22:14:56.000000000","message":"is this checksum already computed elsewhere?","commit_id":"8157263e96034a51b88a7a439af2bdbd65d7c06d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"37cf8f9e6ea1138d013b31e3cad84553e7dffa43","unresolved":false,"context_lines":[{"line_number":382,"context_line":"            for chunk in image_chunks:"},{"line_number":383,"context_line":"                hasher.update(chunk)"},{"line_number":384,"context_line":"            checksum \u003d hasher.finalize()"},{"line_number":385,"context_line":"            "},{"line_number":386,"context_line":"            try:"},{"line_number":387,"context_line":"                signature_utils.verify_signature(context,"},{"line_number":388,"context_line":"                                                 checksum,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_c8b3324c","line":385,"updated":"2015-09-03 22:14:56.000000000","message":"nit: white space","commit_id":"8157263e96034a51b88a7a439af2bdbd65d7c06d"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b57e5885bc7d698178388834def7ac7772667c9d","unresolved":false,"context_lines":[{"line_number":39,"context_line":"import six.moves.urllib.parse as urlparse"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"from nova import exception"},{"line_number":42,"context_line":"from nova import signature_utils"},{"line_number":43,"context_line":"from nova.i18n import _LE, _LI, _LW"},{"line_number":44,"context_line":"import nova.image.download as image_xfers"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_935b42f6","line":42,"updated":"2015-12-10 20:28:47.000000000","message":"Ordering violation.  Imports should be ordered alphabetically by the canonical module name; e.g., this is an import of \"nova.signature_utils\", which sorts after \"nova.i18n\" and \"nova.image.download\".","commit_id":"dbd43de6e58015fb2b7c88b6b18e93b9cfc332b3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b57e5885bc7d698178388834def7ac7772667c9d","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        except Exception:"},{"line_number":389,"context_line":"            _reraise_translated_image_exception(image_id)"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        \"\"\"Perform verification of Glance image signature\"\"\""},{"line_number":392,"context_line":"        if CONF.glance.verify_glance_signatures:"},{"line_number":393,"context_line":"            image_meta \u003d self.show(context, image_id, include_locations\u003dFalse)"},{"line_number":394,"context_line":"            image_props \u003d image_meta[\u0027properties\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_f36c069e","line":391,"updated":"2015-12-10 20:28:47.000000000","message":"Docstrings are not comments.  Make this a comment or remove it…","commit_id":"dbd43de6e58015fb2b7c88b6b18e93b9cfc332b3"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"7a5ce51e00d7eccd121a64f04c43cdc0dc0183f4","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        # Perform verification of Glance image signature"},{"line_number":392,"context_line":"        if CONF.glance.verify_glance_signatures:"},{"line_number":393,"context_line":"            image_meta \u003d self.show(context, image_id, include_locations\u003dFalse)"},{"line_number":394,"context_line":"            image_props \u003d image_meta[\u0027properties\u0027]"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"            try:"},{"line_number":397,"context_line":"                verifier \u003d signature_utils.get_verifier(context,"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_54e1ab28","line":394,"range":{"start_line":394,"start_character":48,"end_line":394,"end_character":50},"updated":"2015-12-22 10:38:38.000000000","message":"We should not be using image_meta as a dict anymore, so you should convert it into an object using:\n\n   image_meta \u003d objects.ImageMeta.from_dict(image_meta)\n\nand then pass the full \u0027image_meta\u0027 object into \u0027signature_utils\u0027 module, not the \"image_props\" dict.\n\nYes, I\u0027m afraid this will require you to change the APIs in the signature_utils module to use object based attribute access, not dict access. Sorry I missed the chance to review that before it was merged","commit_id":"67ba1ddd6fb19bc5a240eddcfaafc40aea57b5b1"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a8ee0797f345aa57c9c8d655fff3a545aa27198f","unresolved":false,"context_lines":[{"line_number":421,"context_line":"            image_meta \u003d objects.ImageMeta.from_dict(image_meta_dict)"},{"line_number":422,"context_line":"            img_signature \u003d image_meta.properties.get(\u0027img_signature\u0027)"},{"line_number":423,"context_line":"            img_sig_hash_method \u003d image_meta.properties.get("},{"line_number":424,"context_line":"                                      \u0027img_signature_hash_method\u0027"},{"line_number":425,"context_line":"                                  )"},{"line_number":426,"context_line":"            img_sig_cert_uuid \u003d image_meta.properties.get("},{"line_number":427,"context_line":"                                    \u0027img_signature_certificate_uuid\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_0b6c84cc","line":424,"updated":"2016-01-06 16:52:24.000000000","message":"I would slightly prefer to see an indentation like so:\n\n    img_sig_hash_method \u003d image_meta.properties.get(\n        \u0027img_signature_hash_method\u0027\n    )\n\nJust a personal preference, though, as we don\u0027t seem to be enforcing those style rules :)","commit_id":"1f92fc6929f5538812f89018fb8ee464acaf9878"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"695b497d77bb492d2f0e63660feed1b556232bde","unresolved":false,"context_lines":[{"line_number":421,"context_line":"            image_meta \u003d objects.ImageMeta.from_dict(image_meta_dict)"},{"line_number":422,"context_line":"            img_signature \u003d image_meta.properties.get(\u0027img_signature\u0027)"},{"line_number":423,"context_line":"            img_sig_hash_method \u003d image_meta.properties.get("},{"line_number":424,"context_line":"                                      \u0027img_signature_hash_method\u0027"},{"line_number":425,"context_line":"                                  )"},{"line_number":426,"context_line":"            img_sig_cert_uuid \u003d image_meta.properties.get("},{"line_number":427,"context_line":"                                    \u0027img_signature_certificate_uuid\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_a6efad1c","line":424,"in_reply_to":"fa69d971_0b6c84cc","updated":"2016-01-06 17:13:12.000000000","message":"Done","commit_id":"1f92fc6929f5538812f89018fb8ee464acaf9878"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"9d242fd0c6f95b1f25898cb8bd26e7e3de95f4ac","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                                                        img_signature,"},{"line_number":437,"context_line":"                                                        img_sig_key_type)"},{"line_number":438,"context_line":"                for chunk in image_chunks:"},{"line_number":439,"context_line":"                    verifier.update(chunk)"},{"line_number":440,"context_line":"                verifier.verify()"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"                LOG.info(_LI(\u0027Image signature verification succeeded \u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa69d971_0aa8298b","line":439,"range":{"start_line":439,"start_character":41,"end_line":439,"end_character":42},"updated":"2016-01-11 15:43:03.000000000","message":"Here we are iterating over all data in the image","commit_id":"e01abbf010052b904a2cd1ad9db22c36aabb7fed"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"9d242fd0c6f95b1f25898cb8bd26e7e3de95f4ac","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        else:"},{"line_number":459,"context_line":"            try:"},{"line_number":460,"context_line":"                for chunk in image_chunks:"},{"line_number":461,"context_line":"                    data.write(chunk)"},{"line_number":462,"context_line":"            except Exception as ex:"},{"line_number":463,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":464,"context_line":"                    LOG.error(_LE(\"Error writing to %(path)s: %(exception)s\"),"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa69d971_8ac17931","line":461,"range":{"start_line":461,"start_character":36,"end_line":461,"end_character":37},"updated":"2016-01-11 15:43:03.000000000","message":"ANd here we iterate over it all again. For large images this feels like it is going to be quite wasteful of resources.\n\nIMHO it would be better to have the verifier.update(chunk) call done right here, so we only process the data once.\n\nThis would obviously mean that when verification fails we have to take care to unlink the file we just wrote, but IMHO that\u0027s not a big deal.","commit_id":"e01abbf010052b904a2cd1ad9db22c36aabb7fed"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"a8984cacfef70bb76c202ff351c697b820ee781a","unresolved":false,"context_lines":[{"line_number":429,"context_line":"                        verifier.update(chunk)"},{"line_number":430,"context_line":"                    data.write(chunk)"},{"line_number":431,"context_line":"                if verifier:"},{"line_number":432,"context_line":"                    verifier.verify()"},{"line_number":433,"context_line":"            except cryptography.exceptions.InvalidSignature:"},{"line_number":434,"context_line":"                data.truncate(0)"},{"line_number":435,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":22,"id":"da6ed579_6ab1eae0","line":432,"updated":"2016-01-13 15:29:11.000000000","message":"should there be an info log message in this if block as well, that indicates that verification succeeded (as is logged on line 417 above)?","commit_id":"d91d2a83eeecae66dd6dd9d2237605741f20615b"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"a23d24658f9e5968dd59475ba2cc8aadeca8c2ca","unresolved":false,"context_lines":[{"line_number":429,"context_line":"                        verifier.update(chunk)"},{"line_number":430,"context_line":"                    data.write(chunk)"},{"line_number":431,"context_line":"                if verifier:"},{"line_number":432,"context_line":"                    verifier.verify()"},{"line_number":433,"context_line":"            except cryptography.exceptions.InvalidSignature:"},{"line_number":434,"context_line":"                data.truncate(0)"},{"line_number":435,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":22,"id":"da6ed579_e18c1c81","line":432,"in_reply_to":"da6ed579_6ab1eae0","updated":"2016-01-13 16:49:38.000000000","message":"Done","commit_id":"d91d2a83eeecae66dd6dd9d2237605741f20615b"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"9f1deef4d1c72915f759b64968ba7ea7ca8a67ed","unresolved":false,"context_lines":[{"line_number":415,"context_line":"                    verifier.verify()"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"                    LOG.info(_LI(\u0027Image signature verification succeeded \u0027"},{"line_number":418,"context_line":"                             \u0027for image %(image_id)s\u0027), image_id)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"                except cryptography.exceptions.InvalidSignature:"},{"line_number":421,"context_line":"                    with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":23,"id":"da6ed579_a494ede1","line":418,"range":{"start_line":418,"start_character":29,"end_line":418,"end_character":33},"updated":"2016-01-13 18:39:38.000000000","message":"This has the same indenting issue as noted below.","commit_id":"2dfd1df54956ba3e9b1273b45c76bdf7e79bc7b8"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"d58ad7fa64113f19e9b656f1d5518eed3022cf8e","unresolved":false,"context_lines":[{"line_number":415,"context_line":"                    verifier.verify()"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"                    LOG.info(_LI(\u0027Image signature verification succeeded \u0027"},{"line_number":418,"context_line":"                             \u0027for image %(image_id)s\u0027), image_id)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"                except cryptography.exceptions.InvalidSignature:"},{"line_number":421,"context_line":"                    with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":23,"id":"da6ed579_c90d723f","line":418,"range":{"start_line":418,"start_character":29,"end_line":418,"end_character":33},"in_reply_to":"da6ed579_a494ede1","updated":"2016-01-13 21:04:19.000000000","message":"Done","commit_id":"2dfd1df54956ba3e9b1273b45c76bdf7e79bc7b8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"28fb429e14f6cc059b53c340ead6b5e6716ca6ef","unresolved":false,"context_lines":[{"line_number":431,"context_line":"                if verifier:"},{"line_number":432,"context_line":"                    verifier.verify()"},{"line_number":433,"context_line":"                    LOG.info(_LI(\u0027Image signature verification succeeded \u0027"},{"line_number":434,"context_line":"                             \u0027for image %(image_id)s\u0027), image_id)"},{"line_number":435,"context_line":"            except cryptography.exceptions.InvalidSignature:"},{"line_number":436,"context_line":"                data.truncate(0)"},{"line_number":437,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":23,"id":"da6ed579_eff96381","line":434,"range":{"start_line":434,"start_character":29,"end_line":434,"end_character":33},"updated":"2016-01-13 17:28:51.000000000","message":"Should be indented another four spaces to line up after the open paren following _LI, e.g.:\n\n    LOG.info(_LI(\u0027Image signature verification succeeded \u0027\n                 \u0027for image %s\u0027), image_id)\n\nI also just spotted what I think is a problem with your log messages: you\u0027re using the \"%(key)s\" form in the format strings, but you\u0027re not including a dictionary.  You should check the log messages generated by this code and verify that they\u0027re being formatted the way you expect, because I strongly suspect that they aren\u0027t :)","commit_id":"2dfd1df54956ba3e9b1273b45c76bdf7e79bc7b8"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"d58ad7fa64113f19e9b656f1d5518eed3022cf8e","unresolved":false,"context_lines":[{"line_number":431,"context_line":"                if verifier:"},{"line_number":432,"context_line":"                    verifier.verify()"},{"line_number":433,"context_line":"                    LOG.info(_LI(\u0027Image signature verification succeeded \u0027"},{"line_number":434,"context_line":"                             \u0027for image %(image_id)s\u0027), image_id)"},{"line_number":435,"context_line":"            except cryptography.exceptions.InvalidSignature:"},{"line_number":436,"context_line":"                data.truncate(0)"},{"line_number":437,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":23,"id":"da6ed579_89077a1b","line":434,"range":{"start_line":434,"start_character":29,"end_line":434,"end_character":33},"in_reply_to":"da6ed579_eff96381","updated":"2016-01-13 21:04:19.000000000","message":"Done","commit_id":"2dfd1df54956ba3e9b1273b45c76bdf7e79bc7b8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f8e5ad6ef4459e1c0e951e5de04beaecffb5c9e2","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                     \u0027via the direct_url.  Currently supported schemes: \u0027"},{"line_number":86,"context_line":"                     \u0027[file].\u0027),"},{"line_number":87,"context_line":"    cfg.BoolOpt(\u0027verify_glance_signatures\u0027,"},{"line_number":88,"context_line":"            default\u003dFalse,"},{"line_number":89,"context_line":"            help\u003d\u0027Require Nova to perform signature verification on \u0027"},{"line_number":90,"context_line":"                 \u0027each image downloaded from Glance.\u0027),"},{"line_number":91,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":24,"id":"da6ed579_dc28d1e4","line":88,"updated":"2016-01-13 21:38:06.000000000","message":"needs a bit more indentation to line up after the open paren of line 87…","commit_id":"d63f47fa5bcf07fc662bdbd1c34ea99a0a9d4dcd"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"e3a729341312461f7c73444d6685c2e214cb0772","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                     \u0027via the direct_url.  Currently supported schemes: \u0027"},{"line_number":86,"context_line":"                     \u0027[file].\u0027),"},{"line_number":87,"context_line":"    cfg.BoolOpt(\u0027verify_glance_signatures\u0027,"},{"line_number":88,"context_line":"            default\u003dFalse,"},{"line_number":89,"context_line":"            help\u003d\u0027Require Nova to perform signature verification on \u0027"},{"line_number":90,"context_line":"                 \u0027each image downloaded from Glance.\u0027),"},{"line_number":91,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":24,"id":"da6ed579_223f8488","line":88,"in_reply_to":"da6ed579_dc28d1e4","updated":"2016-01-13 22:12:02.000000000","message":"Done","commit_id":"d63f47fa5bcf07fc662bdbd1c34ea99a0a9d4dcd"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"38fafdf231b28d97ed8309f3a33af80b66ae0e13","unresolved":false,"context_lines":[{"line_number":395,"context_line":"                                                        img_sig_hash_method,"},{"line_number":396,"context_line":"                                                        img_signature,"},{"line_number":397,"context_line":"                                                        img_sig_key_type)"},{"line_number":398,"context_line":"            except (exception.SignatureVerificationError):"},{"line_number":399,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":400,"context_line":"                    LOG.error(_LE(\u0027Image signature verification failed \u0027"},{"line_number":401,"context_line":"                                  \u0027for image: %s\u0027), image_id)"}],"source_content_type":"text/x-python","patch_set":27,"id":"da6ed579_d57aa487","line":398,"range":{"start_line":398,"start_character":19,"end_line":398,"end_character":57},"updated":"2016-01-14 20:56:14.000000000","message":"is there a reason for the \"(\" and \")\"?","commit_id":"957ad3049cfc02d89da081185096c2d41d195f0f"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"c94a79d74faecbab959c0ccab20393d612321a22","unresolved":false,"context_lines":[{"line_number":395,"context_line":"                                                        img_sig_hash_method,"},{"line_number":396,"context_line":"                                                        img_signature,"},{"line_number":397,"context_line":"                                                        img_sig_key_type)"},{"line_number":398,"context_line":"            except (exception.SignatureVerificationError):"},{"line_number":399,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":400,"context_line":"                    LOG.error(_LE(\u0027Image signature verification failed \u0027"},{"line_number":401,"context_line":"                                  \u0027for image: %s\u0027), image_id)"}],"source_content_type":"text/x-python","patch_set":27,"id":"da6ed579_90eafa72","line":398,"range":{"start_line":398,"start_character":19,"end_line":398,"end_character":57},"in_reply_to":"da6ed579_15f7dc59","updated":"2016-01-14 21:29:38.000000000","message":"Done","commit_id":"957ad3049cfc02d89da081185096c2d41d195f0f"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"0bc74fce25a3d6cf75f138f88099e0473221e25b","unresolved":false,"context_lines":[{"line_number":395,"context_line":"                                                        img_sig_hash_method,"},{"line_number":396,"context_line":"                                                        img_signature,"},{"line_number":397,"context_line":"                                                        img_sig_key_type)"},{"line_number":398,"context_line":"            except (exception.SignatureVerificationError):"},{"line_number":399,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":400,"context_line":"                    LOG.error(_LE(\u0027Image signature verification failed \u0027"},{"line_number":401,"context_line":"                                  \u0027for image: %s\u0027), image_id)"}],"source_content_type":"text/x-python","patch_set":27,"id":"da6ed579_15f7dc59","line":398,"range":{"start_line":398,"start_character":19,"end_line":398,"end_character":57},"in_reply_to":"da6ed579_d57aa487","updated":"2016-01-14 21:20:25.000000000","message":"No reason besides too much Java in my past.","commit_id":"957ad3049cfc02d89da081185096c2d41d195f0f"}],"nova/objects/fields.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"c9f9a371674ec58ba180529eb7a7f30981b3d743","unresolved":false,"context_lines":[{"line_number":243,"context_line":"class ImageSignatureHashType(Enum):"},{"line_number":244,"context_line":"    # Represents the possible hash methods used for image signing"},{"line_number":245,"context_line":"    def __init__(self):"},{"line_number":246,"context_line":"        self.hashes \u003d tuple(sorted(signature_utils.HASH_METHODS.keys()))"},{"line_number":247,"context_line":"        super(ImageSignatureHashType, self).__init__("},{"line_number":248,"context_line":"            valid_values\u003dself.hashes"},{"line_number":249,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":26,"id":"da6ed579_6fc68e69","line":246,"range":{"start_line":246,"start_character":68,"end_line":246,"end_character":72},"updated":"2016-01-14 17:18:19.000000000","message":"I think I\u0027d invert the code pattern here. eg\n\nIn this file do add static constants for each value type, like other enums do eg\n\n  SHA_224 \u003d \"SHA-224\",\n  SHA_256 \u003d \"SHA-256\",\n  SHA_384 \u003d \"SHA-384\",\n  SHA_512 \u003d \"SHA-512\",\n\n  ALL \u003d [ SHA_224, SHA_256, SHA_384, SHA_512]\n\nThen, in the signature_utils.py method change\n\nHASH_METHODS \u003d {\n    \u0027SHA-224\u0027: hashes.SHA224(),\n    \u0027SHA-256\u0027: hashes.SHA256(),\n    \u0027SHA-384\u0027: hashes.SHA384(),\n    \u0027SHA-512\u0027: hashes.SHA512(),\n}\n\n\nto reference these constants, eg\n\nHASH_METHODS \u003d {\n    fields.ImageSignatureHashType.SHA_224: hashes.SHA224(),\n    fields.ImageSignatureHashType.SHA_256: hashes.SHA256(),\n    fields.ImageSignatureHashType.SHA_384: hashes.SHA384(),\n    fields.ImageSignatureHashType.SHA_512: hashes.SHA512(),\n}","commit_id":"bfe95ea243e6ba6202e2a7a33c629f5557839ede"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"502179cf55f6c18403eba58e82f9516be1e8e748","unresolved":false,"context_lines":[{"line_number":243,"context_line":"class ImageSignatureHashType(Enum):"},{"line_number":244,"context_line":"    # Represents the possible hash methods used for image signing"},{"line_number":245,"context_line":"    def __init__(self):"},{"line_number":246,"context_line":"        self.hashes \u003d tuple(sorted(signature_utils.HASH_METHODS.keys()))"},{"line_number":247,"context_line":"        super(ImageSignatureHashType, self).__init__("},{"line_number":248,"context_line":"            valid_values\u003dself.hashes"},{"line_number":249,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":26,"id":"da6ed579_cf01ba39","line":246,"range":{"start_line":246,"start_character":68,"end_line":246,"end_character":72},"in_reply_to":"da6ed579_6fc68e69","updated":"2016-01-14 17:24:22.000000000","message":"I\u0027m hesitant to \"invert the code pattern\" as you suggest here, since we are operating under the assumption that signature_utils will eventually be removed from Nova and Glance and added to a common lib.","commit_id":"bfe95ea243e6ba6202e2a7a33c629f5557839ede"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"041fb885ceff05c7e2cc5f6ea7754ea8b5dcf34f","unresolved":false,"context_lines":[{"line_number":243,"context_line":"class ImageSignatureHashType(Enum):"},{"line_number":244,"context_line":"    # Represents the possible hash methods used for image signing"},{"line_number":245,"context_line":"    def __init__(self):"},{"line_number":246,"context_line":"        self.hashes \u003d tuple(sorted(signature_utils.HASH_METHODS.keys()))"},{"line_number":247,"context_line":"        super(ImageSignatureHashType, self).__init__("},{"line_number":248,"context_line":"            valid_values\u003dself.hashes"},{"line_number":249,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":26,"id":"da6ed579_c4d99858","line":246,"range":{"start_line":246,"start_character":68,"end_line":246,"end_character":72},"in_reply_to":"da6ed579_c2719177","updated":"2016-01-14 19:57:01.000000000","message":"Done.","commit_id":"bfe95ea243e6ba6202e2a7a33c629f5557839ede"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"3279bff8af612c2519b4a294deb3f16436a93796","unresolved":false,"context_lines":[{"line_number":243,"context_line":"class ImageSignatureHashType(Enum):"},{"line_number":244,"context_line":"    # Represents the possible hash methods used for image signing"},{"line_number":245,"context_line":"    def __init__(self):"},{"line_number":246,"context_line":"        self.hashes \u003d tuple(sorted(signature_utils.HASH_METHODS.keys()))"},{"line_number":247,"context_line":"        super(ImageSignatureHashType, self).__init__("},{"line_number":248,"context_line":"            valid_values\u003dself.hashes"},{"line_number":249,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":26,"id":"da6ed579_c2719177","line":246,"range":{"start_line":246,"start_character":68,"end_line":246,"end_character":72},"in_reply_to":"da6ed579_cf01ba39","updated":"2016-01-14 17:31:32.000000000","message":"Then, I\u0027d suggest you just completely separate them, and define the constants here and leave signature_utils untouched.  We don\u0027t really want this field definition to depend on signature_utils, as that means anytime signature_utils changes it\u0027ll silently change the object definition.","commit_id":"bfe95ea243e6ba6202e2a7a33c629f5557839ede"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"c9f9a371674ec58ba180529eb7a7f30981b3d743","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    # Represents the possible keypair types used for image signing"},{"line_number":254,"context_line":"    def __init__(self):"},{"line_number":255,"context_line":"        self.key_types \u003d tuple("},{"line_number":256,"context_line":"            sorted(signature_utils.SignatureKeyType._REGISTERED_TYPES.keys())"},{"line_number":257,"context_line":"        )"},{"line_number":258,"context_line":"        super(ImageSignatureKeyType, self).__init__("},{"line_number":259,"context_line":"            valid_values\u003dself.key_types"}],"source_content_type":"text/x-python","patch_set":26,"id":"da6ed579_4f8f0a2a","line":256,"range":{"start_line":256,"start_character":19,"end_line":256,"end_character":34},"updated":"2016-01-14 17:18:19.000000000","message":"Likewise here, I suggest you define the total permitted set of values against this class. Then reference the constants from signature_utils.SignatureKeyType._REGISTERED_TYPES\n\nThis will avoids the problems if not all permitted types are currently supported by the crypto backend in use.","commit_id":"bfe95ea243e6ba6202e2a7a33c629f5557839ede"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"502179cf55f6c18403eba58e82f9516be1e8e748","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    # Represents the possible keypair types used for image signing"},{"line_number":254,"context_line":"    def __init__(self):"},{"line_number":255,"context_line":"        self.key_types \u003d tuple("},{"line_number":256,"context_line":"            sorted(signature_utils.SignatureKeyType._REGISTERED_TYPES.keys())"},{"line_number":257,"context_line":"        )"},{"line_number":258,"context_line":"        super(ImageSignatureKeyType, self).__init__("},{"line_number":259,"context_line":"            valid_values\u003dself.key_types"}],"source_content_type":"text/x-python","patch_set":26,"id":"da6ed579_0fa2724b","line":256,"range":{"start_line":256,"start_character":19,"end_line":256,"end_character":34},"in_reply_to":"da6ed579_4f8f0a2a","updated":"2016-01-14 17:24:22.000000000","message":"See previous comment.","commit_id":"bfe95ea243e6ba6202e2a7a33c629f5557839ede"}],"nova/objects/image_meta.py":[{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"f2bc8b7fbf8c473089c07e9c912d580bbc4f2cb3","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # Version 1.8: ImageMetaProps version 1.8"},{"line_number":43,"context_line":"    # Version 1.9: ImageMetaProps version 1.9"},{"line_number":44,"context_line":"    # Version 1.10: ImageMetaProps version 1.10"},{"line_number":45,"context_line":"    VERSION \u003d \u00271.10\u0027"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    # These are driven by what the image client API returns"},{"line_number":48,"context_line":"    # to Nova from Glance. This is defined in the glance"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa69d971_a557aa24","line":45,"updated":"2016-01-06 15:21:49.000000000","message":"ImageMeta version does not need to change because the version is no longer tied to ImageMetaProps","commit_id":"cf17dd9e079c272e5e81e40b560473b866caebf5"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"373b9af59d321d5d4423a4999988ee2f9522d8c9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # Version 1.8: ImageMetaProps version 1.8"},{"line_number":43,"context_line":"    # Version 1.9: ImageMetaProps version 1.9"},{"line_number":44,"context_line":"    # Version 1.10: ImageMetaProps version 1.10"},{"line_number":45,"context_line":"    VERSION \u003d \u00271.10\u0027"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    # These are driven by what the image client API returns"},{"line_number":48,"context_line":"    # to Nova from Glance. This is defined in the glance"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa69d971_9a3a0498","line":45,"in_reply_to":"fa69d971_a557aa24","updated":"2016-01-06 15:52:56.000000000","message":"Done","commit_id":"cf17dd9e079c272e5e81e40b560473b866caebf5"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"8ed7f485a896ab001a501dff70f87f604557988e","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        \u0027img_signature\u0027: fields.StringField(),"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        # string indicating hash method used to compute image signature"},{"line_number":354,"context_line":"        \u0027img_signature_hash_method\u0027: fields.StringField(),"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        # string indicating Castellan uuid of certificate"},{"line_number":357,"context_line":"        # used to compute the image\u0027s signature"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6ed579_ff1eccb9","line":354,"range":{"start_line":354,"start_character":55,"end_line":354,"end_character":58},"updated":"2016-01-14 10:23:01.000000000","message":"Is there a finite list of permitted hash methods ? If so, we should define an enum type for this in fields.py","commit_id":"de67bd740d53b379b67694336bc8952017ce0649"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"8ed7f485a896ab001a501dff70f87f604557988e","unresolved":false,"context_lines":[{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        # string indicating Castellan uuid of certificate"},{"line_number":357,"context_line":"        # used to compute the image\u0027s signature"},{"line_number":358,"context_line":"        \u0027img_signature_certificate_uuid\u0027: fields.StringField(),"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # string indicating type of key used to compute image signature"},{"line_number":361,"context_line":"        \u0027img_signature_key_type\u0027: fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6ed579_df1988d8","line":358,"range":{"start_line":358,"start_character":60,"end_line":358,"end_character":63},"updated":"2016-01-14 10:23:01.000000000","message":"Assuming this shoul dbe a well-formed UUID, then we should use  UUIDField()","commit_id":"de67bd740d53b379b67694336bc8952017ce0649"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"8ed7f485a896ab001a501dff70f87f604557988e","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        \u0027img_signature_certificate_uuid\u0027: fields.StringField(),"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # string indicating type of key used to compute image signature"},{"line_number":361,"context_line":"        \u0027img_signature_key_type\u0027: fields.StringField(),"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        # string of username with admin privileges"},{"line_number":364,"context_line":"        \u0027os_admin_user\u0027: fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":25,"id":"da6ed579_9f86b0d9","line":361,"updated":"2016-01-14 10:23:01.000000000","message":"Same question about probably wanting an EnumField subclass for this","commit_id":"de67bd740d53b379b67694336bc8952017ce0649"}],"nova/signature_utils.py":[{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"41f1382a6d5add7196ae6e8089370a8ee49abe0b","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# Note: This is the signature hash method, which is independent from the"},{"line_number":42,"context_line":"# image data checksum hash method (which is handled elsewhere)."},{"line_number":43,"context_line":"HASH_METHODS \u003d {"},{"line_number":44,"context_line":"    \u0027SHA-224\u0027: hashes.SHA224(),"},{"line_number":45,"context_line":"    \u0027SHA-256\u0027: hashes.SHA256(),"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a740942_5d8ad9c0","line":42,"updated":"2015-12-04 23:00:47.000000000","message":"Now that there\u0027s only one hash method (with the sign-the-data approach), this note should be removed.","commit_id":"d783415d42ad1c5cf45bb983cc885c8fedbab131"}],"nova/tests/unit/image/test_glance.py":[{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"37cf8f9e6ea1138d013b31e3cad84553e7dffa43","unresolved":false,"context_lines":[{"line_number":679,"context_line":"                ]"},{"line_number":680,"context_line":"        )"},{"line_number":681,"context_line":"        writer.close.assert_called_once_with()"},{"line_number":682,"context_line":"    "},{"line_number":683,"context_line":"    @mock.patch(\u0027nova.image.glance.GlanceImageService._client.call\u0027)"},{"line_number":684,"context_line":"    @mock.patch(\u0027nova.image.glance.GlanceImageService\u0027"},{"line_number":685,"context_line":"                \u0027._get_detailed_image_properties\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_c82ed28b","line":682,"updated":"2015-09-03 22:14:56.000000000","message":"nit: white space","commit_id":"8157263e96034a51b88a7a439af2bdbd65d7c06d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"41f1382a6d5add7196ae6e8089370a8ee49abe0b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import datetime"},{"line_number":17,"context_line":"from six.moves import StringIO"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a740942_7d5a3552","line":15,"updated":"2015-12-04 23:00:47.000000000","message":"the line removal seems unrelated","commit_id":"d783415d42ad1c5cf45bb983cc885c8fedbab131"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"41f1382a6d5add7196ae6e8089370a8ee49abe0b","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from nova import test"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"glance_opts \u003d ["},{"line_number":31,"context_line":"    cfg.ListOpt(\u0027allowed_direct_url_schemes\u0027,"},{"line_number":32,"context_line":"                default\u003d[],"},{"line_number":33,"context_line":"                help\u003d\u0027A list of url scheme that can be downloaded directly \u0027"},{"line_number":34,"context_line":"                     \u0027via the direct_url.  Currently supported schemes: \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a740942_c84da573","line":31,"updated":"2015-12-04 23:00:47.000000000","message":"what is this used for?","commit_id":"d783415d42ad1c5cf45bb983cc885c8fedbab131"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"41f1382a6d5add7196ae6e8089370a8ee49abe0b","unresolved":false,"context_lines":[{"line_number":720,"context_line":"    @mock.patch(\u0027nova.image.glance.LOG\u0027)"},{"line_number":721,"context_line":"    @mock.patch(\u0027nova.image.glance.GlanceImageService.show\u0027)"},{"line_number":722,"context_line":"    @mock.patch(\u0027nova.signature_utils.get_verifier\u0027)"},{"line_number":723,"context_line":"    def test_download_with_signature_verification(self,"},{"line_number":724,"context_line":"                                                  mock_get_verifier,"},{"line_number":725,"context_line":"                                                  mock_show,"},{"line_number":726,"context_line":"                                                  mock_log):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a740942_48b0d543","line":723,"updated":"2015-12-04 23:00:47.000000000","message":"It looks like this test case confirms that verification occurs when the flag is set, and the second test confirms that verification fails when the right properties don\u0027t exist.\n\nI think it would also be good ton have a test that confirms that no verification occurs when the verify_glance_signatures flag is set to false.","commit_id":"d783415d42ad1c5cf45bb983cc885c8fedbab131"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"df2b55d17eb7e39a3d59983fece802a5f713e375","unresolved":false,"context_lines":[{"line_number":754,"context_line":"                                                       mock_show,"},{"line_number":755,"context_line":"                                                       mock_log):"},{"line_number":756,"context_line":"        msg \u003d \u0027Signature verification failed.\u0027"},{"line_number":757,"context_line":"        mock_verifier.side_effect \u003d exception.SignatureVerificationError(msg)"},{"line_number":758,"context_line":"        CONF.set_override(name\u003d\u0027verify_glance_signatures\u0027,"},{"line_number":759,"context_line":"                          override\u003dTrue,"},{"line_number":760,"context_line":"                          group\u003d\u0027glance\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a740942_568ee879","line":757,"updated":"2015-12-07 23:19:13.000000000","message":"Dane, I think this is causing an error in the py34 tests.  In the depths of six\u0027s reraise calls, it\u0027s trying to call SignatureVerificationError(msg)(), so it\u0027s going to say \"object is not callable\" because it\u0027s already been called.  That\u0027s my theory.  Hope that helps.","commit_id":"d783415d42ad1c5cf45bb983cc885c8fedbab131"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b57e5885bc7d698178388834def7ac7772667c9d","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    ]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"CONF \u003d cfg.CONF"},{"line_number":43,"context_line":"CONF.register_opts(glance_opts, \u0027glance\u0027)"},{"line_number":44,"context_line":"NOW_GLANCE_FORMAT \u003d \"2010-10-11T10:30:22.000000\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_d32f8a3c","line":43,"updated":"2015-12-10 20:28:47.000000000","message":"Why are these declared in a _test_ module?  I could perhaps understand *importing* them, but that\u0027s not what you\u0027re doing.","commit_id":"dbd43de6e58015fb2b7c88b6b18e93b9cfc332b3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b57e5885bc7d698178388834def7ac7772667c9d","unresolved":false,"context_lines":[{"line_number":471,"context_line":"    default of not allowing direct URI transfers is set."},{"line_number":472,"context_line":"    \"\"\""},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    @mock.patch(\u0027__builtin__.open\u0027)"},{"line_number":475,"context_line":"    @mock.patch(\u0027nova.image.glance.GlanceImageService.show\u0027)"},{"line_number":476,"context_line":"    def test_download_no_data_no_dest_path(self, show_mock, open_mock):"},{"line_number":477,"context_line":"        client \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_f31ac616","line":474,"updated":"2015-12-10 20:28:47.000000000","message":"Accidental revert.  I suspect you have a bad rebase here.","commit_id":"dbd43de6e58015fb2b7c88b6b18e93b9cfc332b3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b57e5885bc7d698178388834def7ac7772667c9d","unresolved":false,"context_lines":[{"line_number":744,"context_line":"                               data\u003dNone, dst_path\u003dNone)"},{"line_number":745,"context_line":"        mock_get_verifier.assert_called_once_with(None, {})"},{"line_number":746,"context_line":"        self.assertEqual(mock_image_data, res)"},{"line_number":747,"context_line":"        self.assertEqual(1, mock_log.info.call_count)"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"    @mock.patch(\u0027nova.image.glance.LOG\u0027)"},{"line_number":750,"context_line":"    @mock.patch(\u0027nova.image.glance.GlanceImageService.show\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_13ed12ef","line":747,"updated":"2015-12-10 20:28:47.000000000","message":"You could instead use assert_called_once_with():\n\n    mock_log.info.assert_called_once_with(…)\n\nIf you don\u0027t care to assert the exact text of the log message, you can use mock.ANY.","commit_id":"dbd43de6e58015fb2b7c88b6b18e93b9cfc332b3"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"a8984cacfef70bb76c202ff351c697b820ee781a","unresolved":false,"context_lines":[{"line_number":787,"context_line":"    @mock.patch(\u0027nova.signature_utils.get_verifier\u0027)"},{"line_number":788,"context_line":"    @mock.patch(\u0027nova.image.glance.LOG\u0027)"},{"line_number":789,"context_line":"    @mock.patch(\u0027nova.image.glance.GlanceImageService.show\u0027)"},{"line_number":790,"context_line":"    def test_download_dst_path_signature_fail(self, mock_show,"},{"line_number":791,"context_line":"                                              mock_log, mock_get_verifier,"},{"line_number":792,"context_line":"                                              mock_open):"},{"line_number":793,"context_line":"        class BadVerifier(object):"}],"source_content_type":"text/x-python","patch_set":22,"id":"da6ed579_4f6e7802","line":790,"updated":"2016-01-13 15:29:11.000000000","message":"should there also be a unit test that shows signature verification succeeding with a dst_path provided?","commit_id":"d91d2a83eeecae66dd6dd9d2237605741f20615b"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"a23d24658f9e5968dd59475ba2cc8aadeca8c2ca","unresolved":false,"context_lines":[{"line_number":787,"context_line":"    @mock.patch(\u0027nova.signature_utils.get_verifier\u0027)"},{"line_number":788,"context_line":"    @mock.patch(\u0027nova.image.glance.LOG\u0027)"},{"line_number":789,"context_line":"    @mock.patch(\u0027nova.image.glance.GlanceImageService.show\u0027)"},{"line_number":790,"context_line":"    def test_download_dst_path_signature_fail(self, mock_show,"},{"line_number":791,"context_line":"                                              mock_log, mock_get_verifier,"},{"line_number":792,"context_line":"                                              mock_open):"},{"line_number":793,"context_line":"        class BadVerifier(object):"}],"source_content_type":"text/x-python","patch_set":22,"id":"da6ed579_a1edc426","line":790,"in_reply_to":"da6ed579_4f6e7802","updated":"2016-01-13 16:49:38.000000000","message":"Done","commit_id":"d91d2a83eeecae66dd6dd9d2237605741f20615b"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"9f1deef4d1c72915f759b64968ba7ea7ca8a67ed","unresolved":false,"context_lines":[{"line_number":675,"context_line":""},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"class TestDownloadSignatureVerification(test.NoDBTestCase):"},{"line_number":678,"context_line":"    \"\"\"Tests the download method of the GlanceImageService when the"},{"line_number":679,"context_line":"    verify_glance_signatures config flag is set"},{"line_number":680,"context_line":"    \"\"\""},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"    class MockVerifier(object):"},{"line_number":683,"context_line":"            def update(self, data):"}],"source_content_type":"text/x-python","patch_set":23,"id":"da6ed579_6727d7b6","line":680,"range":{"start_line":678,"start_character":4,"end_line":680,"end_character":7},"updated":"2016-01-13 18:39:38.000000000","message":"If the doc string is more than one line, the first line needs to have en empty line follow it: http://docs.openstack.org/developer/hacking/#docstrings","commit_id":"2dfd1df54956ba3e9b1273b45c76bdf7e79bc7b8"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"d58ad7fa64113f19e9b656f1d5518eed3022cf8e","unresolved":false,"context_lines":[{"line_number":675,"context_line":""},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"class TestDownloadSignatureVerification(test.NoDBTestCase):"},{"line_number":678,"context_line":"    \"\"\"Tests the download method of the GlanceImageService when the"},{"line_number":679,"context_line":"    verify_glance_signatures config flag is set"},{"line_number":680,"context_line":"    \"\"\""},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"    class MockVerifier(object):"},{"line_number":683,"context_line":"            def update(self, data):"}],"source_content_type":"text/x-python","patch_set":23,"id":"da6ed579_19075b19","line":680,"range":{"start_line":678,"start_character":4,"end_line":680,"end_character":7},"in_reply_to":"da6ed579_6727d7b6","updated":"2016-01-13 21:04:19.000000000","message":"Done","commit_id":"2dfd1df54956ba3e9b1273b45c76bdf7e79bc7b8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"28fb429e14f6cc059b53c340ead6b5e6716ca6ef","unresolved":false,"context_lines":[{"line_number":691,"context_line":"                return"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"            def verify(self):"},{"line_number":694,"context_line":"                raise cryptography.exceptions.InvalidSignature("},{"line_number":695,"context_line":"                          \u0027Invalid signature.\u0027"},{"line_number":696,"context_line":"                      )"},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"    def setUp(self):"},{"line_number":699,"context_line":"        super(TestDownloadSignatureVerification, self).setUp()"}],"source_content_type":"text/x-python","patch_set":23,"id":"da6ed579_0f6ab71a","line":696,"range":{"start_line":694,"start_character":0,"end_line":696,"end_character":23},"updated":"2016-01-13 17:28:51.000000000","message":"The indentation isn\u0027t quite right, though I\u0027m not sure we have pep8 enforcing the style.  I would expect that these last two lines should be dedented 4 spaces, e.g.:\n\n    raise cryptography.exceptions.InvalidSignature(\n        \u0027Invalid signature.\u0027\n    )","commit_id":"2dfd1df54956ba3e9b1273b45c76bdf7e79bc7b8"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"d58ad7fa64113f19e9b656f1d5518eed3022cf8e","unresolved":false,"context_lines":[{"line_number":691,"context_line":"                return"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"            def verify(self):"},{"line_number":694,"context_line":"                raise cryptography.exceptions.InvalidSignature("},{"line_number":695,"context_line":"                          \u0027Invalid signature.\u0027"},{"line_number":696,"context_line":"                      )"},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"    def setUp(self):"},{"line_number":699,"context_line":"        super(TestDownloadSignatureVerification, self).setUp()"}],"source_content_type":"text/x-python","patch_set":23,"id":"da6ed579_795457fe","line":696,"range":{"start_line":694,"start_character":0,"end_line":696,"end_character":23},"in_reply_to":"da6ed579_0f6ab71a","updated":"2016-01-13 21:04:19.000000000","message":"Done","commit_id":"2dfd1df54956ba3e9b1273b45c76bdf7e79bc7b8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"28fb429e14f6cc059b53c340ead6b5e6716ca6ef","unresolved":false,"context_lines":[{"line_number":698,"context_line":"    def setUp(self):"},{"line_number":699,"context_line":"        super(TestDownloadSignatureVerification, self).setUp()"},{"line_number":700,"context_line":"        self.flags(verify_glance_signatures\u003dTrue, group\u003d\u0027glance\u0027)"},{"line_number":701,"context_line":"        self.fake_img_props \u003d {\u0027properties\u0027: {"},{"line_number":702,"context_line":"                                     \u0027img_signature\u0027: \u0027signature\u0027,"},{"line_number":703,"context_line":"                                     \u0027img_signature_hash_method\u0027: \u0027hash\u0027,"},{"line_number":704,"context_line":"                                     \u0027img_signature_certificate_uuid\u0027: \u0027uuid\u0027,"},{"line_number":705,"context_line":"                                     \u0027img_signature_key_type\u0027: \u0027key_type\u0027, }}"},{"line_number":706,"context_line":"        self.fake_img_data \u003d [\u0027A\u0027 * 256, \u0027B\u0027 * 256]"},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"    @mock.patch(\u0027nova.image.glance.LOG\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"da6ed579_6fefb387","line":705,"range":{"start_line":701,"start_character":30,"end_line":705,"end_character":77},"updated":"2016-01-13 17:28:51.000000000","message":"Let me suggest a more open style for this dictionary:\n\n    self.fake_img_props \u003d {\n        \u0027properties\u0027: {\n            \u0027img_signature\u0027: \u0027signature\u0027,\n            …\n        },\n    }","commit_id":"2dfd1df54956ba3e9b1273b45c76bdf7e79bc7b8"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"d58ad7fa64113f19e9b656f1d5518eed3022cf8e","unresolved":false,"context_lines":[{"line_number":698,"context_line":"    def setUp(self):"},{"line_number":699,"context_line":"        super(TestDownloadSignatureVerification, self).setUp()"},{"line_number":700,"context_line":"        self.flags(verify_glance_signatures\u003dTrue, group\u003d\u0027glance\u0027)"},{"line_number":701,"context_line":"        self.fake_img_props \u003d {\u0027properties\u0027: {"},{"line_number":702,"context_line":"                                     \u0027img_signature\u0027: \u0027signature\u0027,"},{"line_number":703,"context_line":"                                     \u0027img_signature_hash_method\u0027: \u0027hash\u0027,"},{"line_number":704,"context_line":"                                     \u0027img_signature_certificate_uuid\u0027: \u0027uuid\u0027,"},{"line_number":705,"context_line":"                                     \u0027img_signature_key_type\u0027: \u0027key_type\u0027, }}"},{"line_number":706,"context_line":"        self.fake_img_data \u003d [\u0027A\u0027 * 256, \u0027B\u0027 * 256]"},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"    @mock.patch(\u0027nova.image.glance.LOG\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"da6ed579_395a5f2b","line":705,"range":{"start_line":701,"start_character":30,"end_line":705,"end_character":77},"in_reply_to":"da6ed579_6fefb387","updated":"2016-01-13 21:04:19.000000000","message":"Done","commit_id":"2dfd1df54956ba3e9b1273b45c76bdf7e79bc7b8"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"9f1deef4d1c72915f759b64968ba7ea7ca8a67ed","unresolved":false,"context_lines":[{"line_number":716,"context_line":"        client \u003d mock.MagicMock()"},{"line_number":717,"context_line":"        client.call.return_value \u003d self.fake_img_data"},{"line_number":718,"context_line":"        mock_show.return_value \u003d self.fake_img_props"},{"line_number":719,"context_line":"        service \u003d glance.GlanceImageService(client)"},{"line_number":720,"context_line":"        res \u003d service.download(context\u003dNone, image_id\u003dNone,"},{"line_number":721,"context_line":"                               data\u003dNone, dst_path\u003dNone)"},{"line_number":722,"context_line":"        self.assertEqual(self.fake_img_data, res)"}],"source_content_type":"text/x-python","patch_set":23,"id":"da6ed579_4745f314","line":719,"range":{"start_line":719,"start_character":8,"end_line":719,"end_character":51},"updated":"2016-01-13 18:39:38.000000000","message":"The following three lines are repeated in each test case:\nclient \u003d mock.MagicMock()\nclient.call.return_value \u003d self.fake_img_data\nservice \u003d glance.GlanceImageService(client)\n\nThey could be moved to setUp, and self.service.download used instead below.","commit_id":"2dfd1df54956ba3e9b1273b45c76bdf7e79bc7b8"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"d58ad7fa64113f19e9b656f1d5518eed3022cf8e","unresolved":false,"context_lines":[{"line_number":716,"context_line":"        client \u003d mock.MagicMock()"},{"line_number":717,"context_line":"        client.call.return_value \u003d self.fake_img_data"},{"line_number":718,"context_line":"        mock_show.return_value \u003d self.fake_img_props"},{"line_number":719,"context_line":"        service \u003d glance.GlanceImageService(client)"},{"line_number":720,"context_line":"        res \u003d service.download(context\u003dNone, image_id\u003dNone,"},{"line_number":721,"context_line":"                               data\u003dNone, dst_path\u003dNone)"},{"line_number":722,"context_line":"        self.assertEqual(self.fake_img_data, res)"}],"source_content_type":"text/x-python","patch_set":23,"id":"da6ed579_f9404736","line":719,"range":{"start_line":719,"start_character":8,"end_line":719,"end_character":51},"in_reply_to":"da6ed579_4745f314","updated":"2016-01-13 21:04:19.000000000","message":"Done","commit_id":"2dfd1df54956ba3e9b1273b45c76bdf7e79bc7b8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f8e5ad6ef4459e1c0e951e5de04beaecffb5c9e2","unresolved":false,"context_lines":[{"line_number":675,"context_line":""},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"class TestDownloadSignatureVerification(test.NoDBTestCase):"},{"line_number":678,"context_line":"    \"\"\"TestDownloadSignatureVerification"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    Tests the download method of the GlanceImageService when the"},{"line_number":681,"context_line":"    verify_glance_signatures config flag is set"}],"source_content_type":"text/x-python","patch_set":24,"id":"da6ed579_bca5dd47","line":678,"updated":"2016-01-13 21:38:06.000000000","message":"Brianna: nice catch.\n\nThe first line really should be a brief summary of the intent of the class, rather than just restating the class name.  That said, I don\u0027t think any docstring is really necessary here, as this is simply part of the test suite…","commit_id":"d63f47fa5bcf07fc662bdbd1c34ea99a0a9d4dcd"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"e3a729341312461f7c73444d6685c2e214cb0772","unresolved":false,"context_lines":[{"line_number":675,"context_line":""},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"class TestDownloadSignatureVerification(test.NoDBTestCase):"},{"line_number":678,"context_line":"    \"\"\"TestDownloadSignatureVerification"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    Tests the download method of the GlanceImageService when the"},{"line_number":681,"context_line":"    verify_glance_signatures config flag is set"}],"source_content_type":"text/x-python","patch_set":24,"id":"da6ed579_4212b80a","line":678,"in_reply_to":"da6ed579_bca5dd47","updated":"2016-01-13 22:12:02.000000000","message":"Just deleted it. You\u0027re right, not really necessary.","commit_id":"d63f47fa5bcf07fc662bdbd1c34ea99a0a9d4dcd"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f8e5ad6ef4459e1c0e951e5de04beaecffb5c9e2","unresolved":false,"context_lines":[{"line_number":682,"context_line":"    \"\"\""},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"    class MockVerifier(object):"},{"line_number":685,"context_line":"            def update(self, data):"},{"line_number":686,"context_line":"                return"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"            def verify(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"da6ed579_7cce852f","line":685,"range":{"start_line":685,"start_character":0,"end_line":685,"end_character":35},"updated":"2016-01-13 21:38:06.000000000","message":"This is pretty deeply indented.  Not a show-stopper, but this really should only be indented by 4 extra spaces over line 684, not 8 as here…","commit_id":"d63f47fa5bcf07fc662bdbd1c34ea99a0a9d4dcd"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"e3a729341312461f7c73444d6685c2e214cb0772","unresolved":false,"context_lines":[{"line_number":682,"context_line":"    \"\"\""},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"    class MockVerifier(object):"},{"line_number":685,"context_line":"            def update(self, data):"},{"line_number":686,"context_line":"                return"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"            def verify(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"da6ed579_622edc44","line":685,"range":{"start_line":685,"start_character":0,"end_line":685,"end_character":35},"in_reply_to":"da6ed579_7cce852f","updated":"2016-01-13 22:12:02.000000000","message":"Done","commit_id":"d63f47fa5bcf07fc662bdbd1c34ea99a0a9d4dcd"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"38fafdf231b28d97ed8309f3a33af80b66ae0e13","unresolved":false,"context_lines":[{"line_number":757,"context_line":"                                            reason\u003d\u0027Signature verification \u0027"},{"line_number":758,"context_line":"                                                   \u0027failed.\u0027"},{"line_number":759,"context_line":"                                        )"},{"line_number":760,"context_line":"        client \u003d mock.MagicMock()"},{"line_number":761,"context_line":"        client.call.return_value \u003d self.fake_img_data"},{"line_number":762,"context_line":"        mock_show.return_value \u003d self.fake_img_props"},{"line_number":763,"context_line":"        self.assertRaises(exception.SignatureVerificationError,"},{"line_number":764,"context_line":"                          self.service.download,"}],"source_content_type":"text/x-python","patch_set":27,"id":"da6ed579_ea80238d","line":761,"range":{"start_line":760,"start_character":0,"end_line":761,"end_character":53},"updated":"2016-01-14 20:56:14.000000000","message":"are these lines needed? i don\u0027t see client used below","commit_id":"957ad3049cfc02d89da081185096c2d41d195f0f"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"c94a79d74faecbab959c0ccab20393d612321a22","unresolved":false,"context_lines":[{"line_number":757,"context_line":"                                            reason\u003d\u0027Signature verification \u0027"},{"line_number":758,"context_line":"                                                   \u0027failed.\u0027"},{"line_number":759,"context_line":"                                        )"},{"line_number":760,"context_line":"        client \u003d mock.MagicMock()"},{"line_number":761,"context_line":"        client.call.return_value \u003d self.fake_img_data"},{"line_number":762,"context_line":"        mock_show.return_value \u003d self.fake_img_props"},{"line_number":763,"context_line":"        self.assertRaises(exception.SignatureVerificationError,"},{"line_number":764,"context_line":"                          self.service.download,"}],"source_content_type":"text/x-python","patch_set":27,"id":"da6ed579_d09b9216","line":761,"range":{"start_line":760,"start_character":0,"end_line":761,"end_character":53},"in_reply_to":"da6ed579_504a4227","updated":"2016-01-14 21:29:38.000000000","message":"Done","commit_id":"957ad3049cfc02d89da081185096c2d41d195f0f"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"0bc74fce25a3d6cf75f138f88099e0473221e25b","unresolved":false,"context_lines":[{"line_number":757,"context_line":"                                            reason\u003d\u0027Signature verification \u0027"},{"line_number":758,"context_line":"                                                   \u0027failed.\u0027"},{"line_number":759,"context_line":"                                        )"},{"line_number":760,"context_line":"        client \u003d mock.MagicMock()"},{"line_number":761,"context_line":"        client.call.return_value \u003d self.fake_img_data"},{"line_number":762,"context_line":"        mock_show.return_value \u003d self.fake_img_props"},{"line_number":763,"context_line":"        self.assertRaises(exception.SignatureVerificationError,"},{"line_number":764,"context_line":"                          self.service.download,"}],"source_content_type":"text/x-python","patch_set":27,"id":"da6ed579_504a4227","line":761,"range":{"start_line":760,"start_character":0,"end_line":761,"end_character":53},"in_reply_to":"da6ed579_ea80238d","updated":"2016-01-14 21:20:25.000000000","message":"woops. Those should\u0027ve been deleted when I refactored the tests into a TestCase. Good catch.","commit_id":"957ad3049cfc02d89da081185096c2d41d195f0f"}],"requirements.txt":[{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"37cf8f9e6ea1138d013b31e3cad84553e7dffa43","unresolved":false,"context_lines":[{"line_number":52,"context_line":"oslo.versionedobjects\u003e\u003d0.6.0"},{"line_number":53,"context_line":"alembic\u003e\u003d0.8.0"},{"line_number":54,"context_line":"os-brick\u003e\u003d0.3.2 # Apache-2.0"},{"line_number":55,"context_line":"castellan\u003e\u003d0.2.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":2,"id":"da20952f_4822c2a4","line":55,"updated":"2015-09-03 22:14:56.000000000","message":"it might be better to move this to a separate patch, and make this patch dependent on it","commit_id":"8157263e96034a51b88a7a439af2bdbd65d7c06d"}]}
