)]}'
{"keystone/api/_shared/EC2_S3_Resource.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"22b5b76b01c2960cf09d33e5bf40d778c53d120e","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        credentials \u003d ("},{"line_number":65,"context_line":"            self.request_body_json.get(\u0027credentials\u0027) or"},{"line_number":66,"context_line":"            self.request_body_json.get(\u0027credential\u0027) or"},{"line_number":67,"context_line":"            self.request_body_json.get(\u0027ec2Credentials\u0027)"},{"line_number":68,"context_line":"        )"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if \u0027access\u0027 not in credentials:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_4ff4a055","line":67,"updated":"2018-10-10 17:18:39.000000000","message":"This needs to be .get(..., {})","commit_id":"0f3d3704e002d7855427ad9730176f763b299590"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ab4805fc9b92d9160e56de4e84d8e24c0915167","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class ResourceBase(ks_flask.ResourceBase):"},{"line_number":34,"context_line":"    collection_key \u003d \u0027__UNUSED__\u0027"},{"line_number":35,"context_line":"    member_key \u003d \u0027__UNUSED__\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def get(self):"},{"line_number":38,"context_line":"        # SPECIAL CASE: GET is not allowed, raise METHOD_NOT_ALLOWED"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_33e64d4c","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":29},"updated":"2018-10-11 19:53:13.000000000","message":"Same comment as in the user flask patch. It\u0027d be nice to find a way for the base implementation to handle cases where this doesn\u0027t need to be defined.","commit_id":"ad771eda154823bd2963f0d05fbf44ae5a74fab7"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"7dee1d1af5aaa4658320354877f5cb3cc63d9c7f","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class ResourceBase(ks_flask.ResourceBase):"},{"line_number":34,"context_line":"    collection_key \u003d \u0027__UNUSED__\u0027"},{"line_number":35,"context_line":"    member_key \u003d \u0027__UNUSED__\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def get(self):"},{"line_number":38,"context_line":"        # SPECIAL CASE: GET is not allowed, raise METHOD_NOT_ALLOWED"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_c2c13a51","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":29},"in_reply_to":"3f79a3b5_33e64d4c","updated":"2018-10-12 17:28:12.000000000","message":"We can roll a follow up patch for this. I explicitly force these to be defined, i\u0027ll change the base implementation to be an @property that raises and exception and remove the hard requirement in __init__ for them to be set.","commit_id":"ad771eda154823bd2963f0d05fbf44ae5a74fab7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c381f5d6b69609da2ef0f2a1ef0839741bee24b7","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class ResourceBase(ks_flask.ResourceBase):"},{"line_number":34,"context_line":"    collection_key \u003d \u0027__UNUSED__\u0027"},{"line_number":35,"context_line":"    member_key \u003d \u0027__UNUSED__\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def get(self):"},{"line_number":38,"context_line":"        # SPECIAL CASE: GET is not allowed, raise METHOD_NOT_ALLOWED"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_4d920f5a","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":29},"in_reply_to":"3f79a3b5_c2c13a51","updated":"2018-10-15 15:45:21.000000000","message":"++ thanks, I appreciate the followup.","commit_id":"ad771eda154823bd2963f0d05fbf44ae5a74fab7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ab4805fc9b92d9160e56de4e84d8e24c0915167","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # NOTE(morgan): THIS IS SLOPPY! Apparently... keystone passed values"},{"line_number":59,"context_line":"        # as \"credential\" and \"credentials\" in into the s3/ec2 authenticate"},{"line_number":60,"context_line":"        # methods. There is no reason the multiple names should have worked"},{"line_number":61,"context_line":"        # except that we totally did something wonky in the past... so now"},{"line_number":62,"context_line":"        # there are 2 dirty \"acceptable\" body hacks for compatibility...."},{"line_number":63,"context_line":"        # Try \"credentials\" then \"credential\" and THEN ec2Credentials. Final"},{"line_number":64,"context_line":"        # default is {}"},{"line_number":65,"context_line":"        credentials \u003d ("},{"line_number":66,"context_line":"            self.request_body_json.get(\u0027credentials\u0027) or"},{"line_number":67,"context_line":"            self.request_body_json.get(\u0027credential\u0027) or"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_93b5e11b","line":64,"range":{"start_line":61,"start_character":68,"end_line":64,"end_character":23},"updated":"2018-10-11 19:53:13.000000000","message":"gross :(","commit_id":"ad771eda154823bd2963f0d05fbf44ae5a74fab7"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"60b5663de744791e5591ac669531085a451b3057","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_3086fcbb","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2018-10-16 02:29:21.000000000","message":"generally, it should be 2018, right? or redhat instead.","commit_id":"35c9bb7eff51ebd6101b4a1d233b984cbf68fca8"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"bde4ddbed58b57d9b69b908bdfef0934b5b3ea95","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_599ba362","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"3f79a3b5_3086fcbb","updated":"2018-10-16 05:13:55.000000000","message":"This was a copy/paste error. The copyright notice shouldn\u0027t be here. Removed in a followup.","commit_id":"35c9bb7eff51ebd6101b4a1d233b984cbf68fca8"}],"keystone/api/ec2tokens.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ab4805fc9b92d9160e56de4e84d8e24c0915167","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class EC2TokensResource(EC2_S3_Resource.ResourceBase):"},{"line_number":33,"context_line":"    collection_key \u003d \u0027__UNUSED__\u0027"},{"line_number":34,"context_line":"    member_key \u003d \u0027__UNUSED__\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @staticmethod"},{"line_number":37,"context_line":"    def _check_signature(creds_ref, credentials):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_530749ca","line":34,"range":{"start_line":33,"start_character":0,"end_line":34,"end_character":29},"updated":"2018-10-11 19:53:13.000000000","message":"Ditto. \n\nI wouldn\u0027t prevent this from landing with these, but it would be nice to figure out if we can make it a little cleaner.","commit_id":"ad771eda154823bd2963f0d05fbf44ae5a74fab7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ab4805fc9b92d9160e56de4e84d8e24c0915167","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def _check_signature(creds_ref, credentials):"},{"line_number":38,"context_line":"        signer \u003d ec2_utils.Ec2Signer(creds_ref[\u0027secret\u0027])"},{"line_number":39,"context_line":"        signature \u003d signer.generate(credentials)"},{"line_number":40,"context_line":"        # NOTE(davechecn): credentials.get(\u0027signature\u0027) is not guaranteed to"},{"line_number":41,"context_line":"        # exist, we need to check it explicitly."},{"line_number":42,"context_line":"        if credentials.get(\u0027signature\u0027):"},{"line_number":43,"context_line":"            if utils.auth_str_equal(credentials[\u0027signature\u0027], signature):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_d344b91b","line":40,"range":{"start_line":40,"start_character":15,"end_line":40,"end_character":24},"updated":"2018-10-11 19:53:13.000000000","message":"davechen*","commit_id":"ad771eda154823bd2963f0d05fbf44ae5a74fab7"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"7dee1d1af5aaa4658320354877f5cb3cc63d9c7f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def _check_signature(creds_ref, credentials):"},{"line_number":38,"context_line":"        signer \u003d ec2_utils.Ec2Signer(creds_ref[\u0027secret\u0027])"},{"line_number":39,"context_line":"        signature \u003d signer.generate(credentials)"},{"line_number":40,"context_line":"        # NOTE(davechecn): credentials.get(\u0027signature\u0027) is not guaranteed to"},{"line_number":41,"context_line":"        # exist, we need to check it explicitly."},{"line_number":42,"context_line":"        if credentials.get(\u0027signature\u0027):"},{"line_number":43,"context_line":"            if utils.auth_str_equal(credentials[\u0027signature\u0027], signature):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_a2a2feab","line":40,"range":{"start_line":40,"start_character":15,"end_line":40,"end_character":24},"in_reply_to":"3f79a3b5_d344b91b","updated":"2018-10-12 17:28:12.000000000","message":"Whoopse... i\u0027ll fix that somewhere down the chain.","commit_id":"ad771eda154823bd2963f0d05fbf44ae5a74fab7"}],"keystone/server/flask/application.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ab4805fc9b92d9160e56de4e84d8e24c0915167","unresolved":false,"context_lines":[{"line_number":60,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"ALL_API_ROUTERS \u003d []"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def fail_gracefully(f):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_b31edd0a","line":63,"range":{"start_line":63,"start_character":0,"end_line":63,"end_character":15},"updated":"2018-10-11 19:53:13.000000000","message":"Woo - this can be removed, yeah?","commit_id":"ad771eda154823bd2963f0d05fbf44ae5a74fab7"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"7dee1d1af5aaa4658320354877f5cb3cc63d9c7f","unresolved":false,"context_lines":[{"line_number":60,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"ALL_API_ROUTERS \u003d []"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def fail_gracefully(f):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_02917253","line":63,"range":{"start_line":63,"start_character":0,"end_line":63,"end_character":15},"in_reply_to":"3f79a3b5_b31edd0a","updated":"2018-10-12 17:28:12.000000000","message":"It is, in a patch down the chain!","commit_id":"ad771eda154823bd2963f0d05fbf44ae5a74fab7"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"4c12cc32eecc343b16012871ec93118f8b8a6f72","unresolved":false,"context_lines":[{"line_number":60,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"ALL_API_ROUTERS \u003d []"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def fail_gracefully(f):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_f0d987f0","line":63,"updated":"2018-10-16 16:57:21.000000000","message":"this goes away in a future patch, I assume?","commit_id":"35c9bb7eff51ebd6101b4a1d233b984cbf68fca8"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"7b595037ee76b82974cf103fa4bf814f4a879b87","unresolved":false,"context_lines":[{"line_number":60,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"ALL_API_ROUTERS \u003d []"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def fail_gracefully(f):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_0ba06390","line":63,"in_reply_to":"3f79a3b5_f0d987f0","updated":"2018-10-16 16:58:48.000000000","message":"yes","commit_id":"35c9bb7eff51ebd6101b4a1d233b984cbf68fca8"}],"keystone/tests/unit/test_wsgi.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ab4805fc9b92d9160e56de4e84d8e24c0915167","unresolved":false,"context_lines":[{"line_number":29,"context_line":"# NOTE(morgan): we need to explicitly import the controller"},{"line_number":30,"context_line":"# or a number of tests get really cranky due to the way they"},{"line_number":31,"context_line":"# hit oslo_utils.import_class for the controller. This can"},{"line_number":32,"context_line":"# go away once the final bits of WSGI compat code is removed."},{"line_number":33,"context_line":"from keystone.common import controller  # noqa"},{"line_number":34,"context_line":"from keystone.common import wsgi"},{"line_number":35,"context_line":"from keystone import exception"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_d3e039fb","line":32,"updated":"2018-10-11 19:53:13.000000000","message":"interesting?","commit_id":"ad771eda154823bd2963f0d05fbf44ae5a74fab7"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"7dee1d1af5aaa4658320354877f5cb3cc63d9c7f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"# NOTE(morgan): we need to explicitly import the controller"},{"line_number":30,"context_line":"# or a number of tests get really cranky due to the way they"},{"line_number":31,"context_line":"# hit oslo_utils.import_class for the controller. This can"},{"line_number":32,"context_line":"# go away once the final bits of WSGI compat code is removed."},{"line_number":33,"context_line":"from keystone.common import controller  # noqa"},{"line_number":34,"context_line":"from keystone.common import wsgi"},{"line_number":35,"context_line":"from keystone import exception"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_8286e215","line":32,"in_reply_to":"3f79a3b5_d3e039fb","updated":"2018-10-12 17:28:12.000000000","message":"It\u0027s a dumb thing. Not super relevant except to get us from here to further down the chain.","commit_id":"ad771eda154823bd2963f0d05fbf44ae5a74fab7"}]}
