)]}'
{"keystone/common/wsgi.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d40509e965381515f71e18a4c44b39e17bdfd74e","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        context[\u0027accept_header\u0027] \u003d req.accept"},{"line_number":209,"context_line":"        req.environ \u003d None"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        _ALLOWED_CONTENT_TYPES \u003d (\u0027application/json\u0027,"},{"line_number":212,"context_line":"                                  \u0027application/json-home\u0027,"},{"line_number":213,"context_line":"                                  \u0027text/xml\u0027,"},{"line_number":214,"context_line":"                                  \u0027application/x-www-urlformencoded\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_5a79652e","line":211,"updated":"2014-10-20 18:10:14.000000000","message":"this seems unnecessary. If keystone wants to return a content-type it should be able to do it.","commit_id":"eeb427e96849fe8578c58ce58e418bd54dce91ec"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9d1bb315429ec640891a91e1b683c4149a874617","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        context[\u0027accept_header\u0027] \u003d req.accept"},{"line_number":209,"context_line":"        req.environ \u003d None"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        _ALLOWED_CONTENT_TYPES \u003d (\u0027application/json\u0027,"},{"line_number":212,"context_line":"                                  \u0027application/json-home\u0027,"},{"line_number":213,"context_line":"                                  \u0027text/xml\u0027,"},{"line_number":214,"context_line":"                                  \u0027application/x-www-urlformencoded\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_81bee6d2","line":211,"in_reply_to":"9aa7fdbe_5a79652e","updated":"2014-10-21 17:32:06.000000000","message":"These content types are read from the Request object and not the Response object. Keystone can still return a different type depending on the Accept header from the user/client. \n\nThis allows us to give the user a more detailed message when they try to pass an unsupported Content-Type to Keystone (application/xml for example), instead of \"Couldn\u0027t parse JSON response\" or something similar.","commit_id":"eeb427e96849fe8578c58ce58e418bd54dce91ec"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"379832abf4b7dbf5882303d3f8de7638c71cbe7d","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        req.environ \u003d None"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        _ALLOWED_CONTENT_TYPES \u003d (\u0027application/json\u0027,"},{"line_number":212,"context_line":"                                  \u0027application/json-home\u0027,"},{"line_number":213,"context_line":"                                  \u0027text/xml\u0027,"},{"line_number":214,"context_line":"                                  \u0027application/x-www-urlformencoded\u0027,"},{"line_number":215,"context_line":"                                  \u0027application/x-pem-file\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9aa7fdbe_501cc5c1","line":212,"updated":"2014-10-21 17:56:34.000000000","message":"Clients can\u0027t pass in application/json-home data. No resource accepts it in a POST.\n\nWe don\u0027t know at this point what content types the resource is going to accept. It depends on the resource.\n\nSo we can\u0027t put out the correct message at this point because we don\u0027t know what the allowed content types are. It needs to be up to the resource handler to put out the message.","commit_id":"51cbb1924a6cf18c9b4017aab011c3842adefa83"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2d348cd44e70033db87144836dcad09856160470","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        req.environ \u003d None"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        _ALLOWED_CONTENT_TYPES \u003d (\u0027application/json\u0027,"},{"line_number":212,"context_line":"                                  \u0027application/json-home\u0027,"},{"line_number":213,"context_line":"                                  \u0027text/xml\u0027,"},{"line_number":214,"context_line":"                                  \u0027application/x-www-urlformencoded\u0027,"},{"line_number":215,"context_line":"                                  \u0027application/x-pem-file\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9aa7fdbe_59e869b4","line":212,"in_reply_to":"9aa7fdbe_501cc5c1","updated":"2014-10-21 22:05:24.000000000","message":"Done","commit_id":"51cbb1924a6cf18c9b4017aab011c3842adefa83"}],"keystone/exception.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8ae4925f0ac8a690ab88f8ddc5143fca7802a057","unresolved":false,"context_lines":[{"line_number":327,"context_line":"    title \u003d \u0027Request is too large.\u0027"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"class UnsupportedMediaType(Error):"},{"line_number":331,"context_line":"    message_format \u003d _(\"Unsupported media type: %(media_type)s\")"},{"line_number":332,"context_line":"    code \u003d 415"},{"line_number":333,"context_line":"    title \u003d \u0027Unsupported media type.\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"9aa7fdbe_01e2c302","line":330,"updated":"2014-10-23 01:39:57.000000000","message":"This isn\u0027t used as far as I can tell.","commit_id":"7709a9c86a4575aa0f0b225595f1330ba64bdb49"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0f22fddbf866aca93a09fb2eac51d169244a528d","unresolved":false,"context_lines":[{"line_number":327,"context_line":"    title \u003d \u0027Request is too large.\u0027"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"class UnsupportedMediaType(Error):"},{"line_number":331,"context_line":"    message_format \u003d _(\"Unsupported media type: %(media_type)s\")"},{"line_number":332,"context_line":"    code \u003d 415"},{"line_number":333,"context_line":"    title \u003d \u0027Unsupported media type.\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"9aa7fdbe_c8be0e65","line":330,"in_reply_to":"9aa7fdbe_01e2c302","updated":"2014-10-23 14:01:15.000000000","message":"Done","commit_id":"7709a9c86a4575aa0f0b225595f1330ba64bdb49"}],"keystone/middleware/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"391d1b14dcde92b2b8afe752cd1b8f0067825946","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        request.environ[authorization.AUTH_CONTEXT_ENV] \u003d auth_context"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"class XmlBodyMiddleware(wsgi.Middleware):"},{"line_number":228,"context_line":"    \"\"\"De/serializes XML to/from JSON.\"\"\""},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def print_warning(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_07237305","line":227,"updated":"2014-12-03 17:54:43.000000000","message":"no need to move things around. put it back where it was.","commit_id":"65ad4e90e87a8f6c62192b8c0e348bb9112e645b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6dd8d1a9ef6182ca813ec70a5d0811400603e565","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        request.environ[authorization.AUTH_CONTEXT_ENV] \u003d auth_context"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"class XmlBodyMiddleware(wsgi.Middleware):"},{"line_number":228,"context_line":"    \"\"\"De/serializes XML to/from JSON.\"\"\""},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def print_warning(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_1bb4ab80","line":227,"in_reply_to":"5a890539_07237305","updated":"2014-12-03 19:53:03.000000000","message":"Done","commit_id":"65ad4e90e87a8f6c62192b8c0e348bb9112e645b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"391d1b14dcde92b2b8afe752cd1b8f0067825946","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        what\u003d\u0027keystone.middleware.core.XmlBodyMiddleware\u0027,"},{"line_number":238,"context_line":"        as_of\u003dversionutils.deprecated.ICEHOUSE,"},{"line_number":239,"context_line":"        in_favor_of\u003d\u0027support for \"application/json\" only\u0027,"},{"line_number":240,"context_line":"        remove_in\u003d+2)"},{"line_number":241,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":242,"context_line":"        super(XmlBodyMiddleware, self).__init__(*args, **kwargs)"},{"line_number":243,"context_line":"        self.print_warning()"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_67eef78c","line":240,"updated":"2014-12-03 17:54:43.000000000","message":"Remove the deprecated warning since it\u0027s been removed... or change to remove_in\u003d0 ?","commit_id":"65ad4e90e87a8f6c62192b8c0e348bb9112e645b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6dd8d1a9ef6182ca813ec70a5d0811400603e565","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        what\u003d\u0027keystone.middleware.core.XmlBodyMiddleware\u0027,"},{"line_number":238,"context_line":"        as_of\u003dversionutils.deprecated.ICEHOUSE,"},{"line_number":239,"context_line":"        in_favor_of\u003d\u0027support for \"application/json\" only\u0027,"},{"line_number":240,"context_line":"        remove_in\u003d+2)"},{"line_number":241,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":242,"context_line":"        super(XmlBodyMiddleware, self).__init__(*args, **kwargs)"},{"line_number":243,"context_line":"        self.print_warning()"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_1b6bcbf1","line":240,"in_reply_to":"5a890539_67eef78c","updated":"2014-12-03 19:53:03.000000000","message":"Removing, that seems cleaner. Done.","commit_id":"65ad4e90e87a8f6c62192b8c0e348bb9112e645b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"391d1b14dcde92b2b8afe752cd1b8f0067825946","unresolved":false,"context_lines":[{"line_number":247,"context_line":"    \"\"\"De/serializes XML to/from JSON for v2.0 API.\"\"\""},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":250,"context_line":"        super(XmlBodyMiddleware, self).__init__(*args, **kwargs)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"class XmlBodyMiddlewareV3(XmlBodyMiddleware):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_6760b735","line":250,"updated":"2014-12-03 17:54:43.000000000","message":"this is unnecessary, right, since it\u0027s the default behavior.","commit_id":"65ad4e90e87a8f6c62192b8c0e348bb9112e645b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6dd8d1a9ef6182ca813ec70a5d0811400603e565","unresolved":false,"context_lines":[{"line_number":247,"context_line":"    \"\"\"De/serializes XML to/from JSON for v2.0 API.\"\"\""},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":250,"context_line":"        super(XmlBodyMiddleware, self).__init__(*args, **kwargs)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"class XmlBodyMiddlewareV3(XmlBodyMiddleware):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_fe16eda5","line":250,"in_reply_to":"5a890539_6760b735","updated":"2014-12-03 19:53:03.000000000","message":"Done","commit_id":"65ad4e90e87a8f6c62192b8c0e348bb9112e645b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"391d1b14dcde92b2b8afe752cd1b8f0067825946","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    \"\"\"De/serializes XML to/from JSON for v3 API.\"\"\""},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":257,"context_line":"        super(XmlBodyMiddleware, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_a7561f5c","line":257,"updated":"2014-12-03 17:54:43.000000000","message":"same.","commit_id":"65ad4e90e87a8f6c62192b8c0e348bb9112e645b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6dd8d1a9ef6182ca813ec70a5d0811400603e565","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    \"\"\"De/serializes XML to/from JSON for v3 API.\"\"\""},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":257,"context_line":"        super(XmlBodyMiddleware, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_1e0ad978","line":257,"in_reply_to":"5a890539_a7561f5c","updated":"2014-12-03 19:53:03.000000000","message":"Done","commit_id":"65ad4e90e87a8f6c62192b8c0e348bb9112e645b"}],"keystone/tests/test_content_types.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"cb07a96b553c7c9d2cc7ce656e0166bd4cf7ade4","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class CoreApiTests(object):"},{"line_number":32,"context_line":"    def assertValidError(self, error):"},{"line_number":33,"context_line":"        \"\"\"Applicable to JSON.\"\"\""},{"line_number":34,"context_line":"        self.assertIsNotNone(error.get(\u0027code\u0027))"},{"line_number":35,"context_line":"        self.assertIsNotNone(error.get(\u0027title\u0027))"},{"line_number":36,"context_line":"        self.assertIsNotNone(error.get(\u0027message\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_fa8aef62","line":33,"updated":"2014-10-13 14:40:53.000000000","message":"I\u0027d probably remove all of these comments now that everything applies to JSON only.","commit_id":"1ee0cbf9b0ae8e0d19d303d45e247585fb5c0c7d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7164df84dc63b5c43dcec7545ecee3d25fd8bcd6","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class CoreApiTests(object):"},{"line_number":32,"context_line":"    def assertValidError(self, error):"},{"line_number":33,"context_line":"        \"\"\"Applicable to JSON.\"\"\""},{"line_number":34,"context_line":"        self.assertIsNotNone(error.get(\u0027code\u0027))"},{"line_number":35,"context_line":"        self.assertIsNotNone(error.get(\u0027title\u0027))"},{"line_number":36,"context_line":"        self.assertIsNotNone(error.get(\u0027message\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_975b71f5","line":33,"in_reply_to":"baa201ad_fa8aef62","updated":"2014-10-13 19:31:13.000000000","message":"Done","commit_id":"1ee0cbf9b0ae8e0d19d303d45e247585fb5c0c7d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8ae4925f0ac8a690ab88f8ddc5143fca7802a057","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                \u0027user\u0027: {"},{"line_number":310,"context_line":"                    \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":311,"context_line":"                    \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":312,"context_line":"                    \u0027enabled\u0027: \"False\","},{"line_number":313,"context_line":"                },"},{"line_number":314,"context_line":"            },"},{"line_number":315,"context_line":"            token\u003dtoken,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9aa7fdbe_e1b5bfee","line":312,"updated":"2014-10-23 01:39:57.000000000","message":"Is there a test where this is a boolean? e.g., \u0027enabled\u0027: False\n\nDoesn\u0027t need to be addressed in this commit but if you want to add a new test that would be interesting.","commit_id":"7709a9c86a4575aa0f0b225595f1330ba64bdb49"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ff105a8b7d54db6f754e6c7c2274047303d1d099","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                \u0027user\u0027: {"},{"line_number":310,"context_line":"                    \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":311,"context_line":"                    \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":312,"context_line":"                    \u0027enabled\u0027: \"False\","},{"line_number":313,"context_line":"                },"},{"line_number":314,"context_line":"            },"},{"line_number":315,"context_line":"            token\u003dtoken,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9aa7fdbe_b2013108","line":312,"in_reply_to":"9aa7fdbe_a8a54a48","updated":"2014-10-23 16:30:44.000000000","message":"https://review.openstack.org/#/c/130591/2","commit_id":"7709a9c86a4575aa0f0b225595f1330ba64bdb49"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0f22fddbf866aca93a09fb2eac51d169244a528d","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                \u0027user\u0027: {"},{"line_number":310,"context_line":"                    \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":311,"context_line":"                    \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":312,"context_line":"                    \u0027enabled\u0027: \"False\","},{"line_number":313,"context_line":"                },"},{"line_number":314,"context_line":"            },"},{"line_number":315,"context_line":"            token\u003dtoken,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9aa7fdbe_a8a54a48","line":312,"in_reply_to":"9aa7fdbe_e1b5bfee","updated":"2014-10-23 14:01:15.000000000","message":"noted, I\u0027ll see if I can push up a dependent patch","commit_id":"7709a9c86a4575aa0f0b225595f1330ba64bdb49"}],"keystone/tests/test_v3_auth.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d40509e965381515f71e18a4c44b39e17bdfd74e","unresolved":false,"context_lines":[{"line_number":1674,"context_line":"            password\u003d\u0027keystone.auth.plugins.password.Password\u0027,"},{"line_number":1675,"context_line":"            token\u003d\u0027keystone.auth.plugins.token.Token\u0027)"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"class TestAuthJSON(test_v3.RestfulTestCase):"},{"line_number":1679,"context_line":"    content_type \u003d \u0027json\u0027"},{"line_number":1680,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_da7e35e4","line":1677,"updated":"2014-10-20 18:10:14.000000000","message":"should change this to just TestAuth.","commit_id":"eeb427e96849fe8578c58ce58e418bd54dce91ec"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9d1bb315429ec640891a91e1b683c4149a874617","unresolved":false,"context_lines":[{"line_number":1674,"context_line":"            password\u003d\u0027keystone.auth.plugins.password.Password\u0027,"},{"line_number":1675,"context_line":"            token\u003d\u0027keystone.auth.plugins.token.Token\u0027)"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"class TestAuthJSON(test_v3.RestfulTestCase):"},{"line_number":1679,"context_line":"    content_type \u003d \u0027json\u0027"},{"line_number":1680,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_fcfd953c","line":1677,"in_reply_to":"9aa7fdbe_da7e35e4","updated":"2014-10-21 17:32:06.000000000","message":"Done","commit_id":"eeb427e96849fe8578c58ce58e418bd54dce91ec"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d40509e965381515f71e18a4c44b39e17bdfd74e","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"            token\u003d\u0027keystone.auth.plugins.token.Token\u0027)"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"class TestAuthJSON(test_v3.RestfulTestCase):"},{"line_number":1679,"context_line":"    content_type \u003d \u0027json\u0027"},{"line_number":1680,"context_line":""},{"line_number":1681,"context_line":"    def test_unscoped_token_with_user_id(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_9a74adfe","line":1678,"updated":"2014-10-20 18:10:14.000000000","message":"shouldn\u0027t need this anymore.","commit_id":"eeb427e96849fe8578c58ce58e418bd54dce91ec"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9d1bb315429ec640891a91e1b683c4149a874617","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"            token\u003d\u0027keystone.auth.plugins.token.Token\u0027)"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"class TestAuthJSON(test_v3.RestfulTestCase):"},{"line_number":1679,"context_line":"    content_type \u003d \u0027json\u0027"},{"line_number":1680,"context_line":""},{"line_number":1681,"context_line":"    def test_unscoped_token_with_user_id(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_1cfdf93a","line":1678,"in_reply_to":"9aa7fdbe_9a74adfe","updated":"2014-10-21 17:32:06.000000000","message":"Done","commit_id":"eeb427e96849fe8578c58ce58e418bd54dce91ec"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d40509e965381515f71e18a4c44b39e17bdfd74e","unresolved":false,"context_lines":[{"line_number":1820,"context_line":"            project_id\u003dself.project[\u0027id\u0027])"},{"line_number":1821,"context_line":"        r \u003d self.v3_authenticate_token(auth_data)"},{"line_number":1822,"context_line":""},{"line_number":1823,"context_line":"        # In JSON, this is an empty list."},{"line_number":1824,"context_line":"        self.assertFalse(r.result[\u0027token\u0027][\u0027catalog\u0027])"},{"line_number":1825,"context_line":""},{"line_number":1826,"context_line":"    def test_auth_catalog_disabled_endpoint(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_9a1d8dc0","line":1823,"updated":"2014-10-20 18:10:14.000000000","message":"the assertion here should be changed to verify it\u0027s an empty list and the comment removed.\n\n self.assertEqual([], r.result[\u0027token\u0027][\u0027catalog\u0027])","commit_id":"eeb427e96849fe8578c58ce58e418bd54dce91ec"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9d1bb315429ec640891a91e1b683c4149a874617","unresolved":false,"context_lines":[{"line_number":1820,"context_line":"            project_id\u003dself.project[\u0027id\u0027])"},{"line_number":1821,"context_line":"        r \u003d self.v3_authenticate_token(auth_data)"},{"line_number":1822,"context_line":""},{"line_number":1823,"context_line":"        # In JSON, this is an empty list."},{"line_number":1824,"context_line":"        self.assertFalse(r.result[\u0027token\u0027][\u0027catalog\u0027])"},{"line_number":1825,"context_line":""},{"line_number":1826,"context_line":"    def test_auth_catalog_disabled_endpoint(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_bcba2d6c","line":1823,"in_reply_to":"9aa7fdbe_9a1d8dc0","updated":"2014-10-21 17:32:06.000000000","message":"Done","commit_id":"eeb427e96849fe8578c58ce58e418bd54dce91ec"}],"keystone/tests/test_v3_filters.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d40509e965381515f71e18a4c44b39e17bdfd74e","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class IdentityTestFilteredCase(filtering.FilterTests,"},{"line_number":31,"context_line":"                               test_v3.RestfulTestCase):"},{"line_number":32,"context_line":"    \"\"\"Test filter enforcement on the v3 Identity API.\"\"\""},{"line_number":33,"context_line":"    content_type \u003d \u0027json\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_9a4bcdaf","line":32,"updated":"2014-10-20 18:10:14.000000000","message":"shouldn\u0027t need this anymore.","commit_id":"eeb427e96849fe8578c58ce58e418bd54dce91ec"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9d1bb315429ec640891a91e1b683c4149a874617","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class IdentityTestFilteredCase(filtering.FilterTests,"},{"line_number":31,"context_line":"                               test_v3.RestfulTestCase):"},{"line_number":32,"context_line":"    \"\"\"Test filter enforcement on the v3 Identity API.\"\"\""},{"line_number":33,"context_line":"    content_type \u003d \u0027json\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_3ca63d54","line":32,"in_reply_to":"9aa7fdbe_9a4bcdaf","updated":"2014-10-21 17:32:06.000000000","message":"Done","commit_id":"eeb427e96849fe8578c58ce58e418bd54dce91ec"}],"keystone/token/controllers.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6e9a1770ad47f8774f6f64a446da2d404e1910d6","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        if not environment.get(\u0027REMOTE_USER\u0027):"},{"line_number":315,"context_line":"            raise ExternalAuthNotApplicable()"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # NOTE(jamielennox): json differ and get confused about what"},{"line_number":318,"context_line":"        # empty auth should look like so just reset it."},{"line_number":319,"context_line":"        if not auth:"},{"line_number":320,"context_line":"            auth \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_d0132db6","line":317,"updated":"2014-10-02 19:51:42.000000000","message":"suggest changing the comment to \"reset auth\" or something...","commit_id":"7b210ef43fbb14749a1caf92e7d41294944fccab"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"13eab0b2038030f224282076972791d362c858d6","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        if not environment.get(\u0027REMOTE_USER\u0027):"},{"line_number":315,"context_line":"            raise ExternalAuthNotApplicable()"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # NOTE(jamielennox): json differ and get confused about what"},{"line_number":318,"context_line":"        # empty auth should look like so just reset it."},{"line_number":319,"context_line":"        if not auth:"},{"line_number":320,"context_line":"            auth \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_52962540","line":317,"in_reply_to":"baa201ad_cf2d24aa","updated":"2014-10-06 18:57:48.000000000","message":"Thanks Steve!","commit_id":"7b210ef43fbb14749a1caf92e7d41294944fccab"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a8c34f4d12a60c5351531b6bffe027803b6aa7a0","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        if not environment.get(\u0027REMOTE_USER\u0027):"},{"line_number":315,"context_line":"            raise ExternalAuthNotApplicable()"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # NOTE(jamielennox): json differ and get confused about what"},{"line_number":318,"context_line":"        # empty auth should look like so just reset it."},{"line_number":319,"context_line":"        if not auth:"},{"line_number":320,"context_line":"            auth \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_cf2d24aa","line":317,"in_reply_to":"baa201ad_d0132db6","updated":"2014-10-06 05:41:08.000000000","message":"Done","commit_id":"7b210ef43fbb14749a1caf92e7d41294944fccab"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f54c34374cd5867582adfc1af38e40da6b7835fe","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            raise ExternalAuthNotApplicable()"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # NOTE(jamielennox): set auth to empty dictionary, as a lot of the"},{"line_number":318,"context_line":"        # auth related functions depend on it being a dictionay."},{"line_number":319,"context_line":"        if not auth:"},{"line_number":320,"context_line":"            auth \u003d {}"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_5280e5bf","line":318,"updated":"2014-10-06 19:07:57.000000000","message":"s/dictionay/dictionary/","commit_id":"75a88f594821b39376ed0aec9af8c9ecdd277761"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d3f222bcb03902050b8bfb7e51feb38d22abb24b","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            raise ExternalAuthNotApplicable()"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # NOTE(jamielennox): set auth to empty dictionary, as a lot of the"},{"line_number":318,"context_line":"        # auth related functions depend on it being a dictionay."},{"line_number":319,"context_line":"        if not auth:"},{"line_number":320,"context_line":"            auth \u003d {}"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_ec02cb08","line":318,"in_reply_to":"baa201ad_5280e5bf","updated":"2014-10-07 14:21:40.000000000","message":"Done","commit_id":"75a88f594821b39376ed0aec9af8c9ecdd277761"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"cb07a96b553c7c9d2cc7ce656e0166bd4cf7ade4","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # NOTE(jamielennox): set auth to empty dictionary, as a lot of the"},{"line_number":318,"context_line":"        # auth related functions depend on it being a dictionary."},{"line_number":319,"context_line":"        if not auth:"},{"line_number":320,"context_line":"            auth \u003d {}"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        username \u003d environment[\u0027REMOTE_USER\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_fa4f4f32","line":319,"updated":"2014-10-13 14:40:53.000000000","message":"What does JSON empty auth look like and can we just do that here instead?","commit_id":"1ee0cbf9b0ae8e0d19d303d45e247585fb5c0c7d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"93f1738313c3cf551a3dd2fdfbe30abdb939021d","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # NOTE(jamielennox): set auth to empty dictionary, as a lot of the"},{"line_number":318,"context_line":"        # auth related functions depend on it being a dictionary."},{"line_number":319,"context_line":"        if not auth:"},{"line_number":320,"context_line":"            auth \u003d {}"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        username \u003d environment[\u0027REMOTE_USER\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_f72e7da4","line":319,"in_reply_to":"baa201ad_7758cdfa","updated":"2014-10-13 19:49:04.000000000","message":"So, from what I understand just by glancing through the code, if auth \u003d dict() then def _get_project_id_from_auth() will return tenant_id \u003d None. As a result, if tenant_id is None def _get_project_roles_and_ref() will return (None, []) as the tenant_ref and role list. \n\nI *think* what Jamie means by that comment is that _get_project_id_from_auth() has auth.get() calls, expecting auth to be of type dictionary.","commit_id":"1ee0cbf9b0ae8e0d19d303d45e247585fb5c0c7d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7164df84dc63b5c43dcec7545ecee3d25fd8bcd6","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # NOTE(jamielennox): set auth to empty dictionary, as a lot of the"},{"line_number":318,"context_line":"        # auth related functions depend on it being a dictionary."},{"line_number":319,"context_line":"        if not auth:"},{"line_number":320,"context_line":"            auth \u003d {}"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        username \u003d environment[\u0027REMOTE_USER\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_7758cdfa","line":319,"in_reply_to":"baa201ad_fa4f4f32","updated":"2014-10-13 19:31:13.000000000","message":"I\u0027ll probably have to follow up with Jamie","commit_id":"1ee0cbf9b0ae8e0d19d303d45e247585fb5c0c7d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d40509e965381515f71e18a4c44b39e17bdfd74e","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            raise ExternalAuthNotApplicable()"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # NOTE(jamielennox): set auth to empty dictionary, as a lot of the"},{"line_number":318,"context_line":"        # auth related functions depend on it being a dictionary."},{"line_number":319,"context_line":"        if not auth:"},{"line_number":320,"context_line":"            auth \u003d {}"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_1aeefd88","line":318,"updated":"2014-10-20 18:10:14.000000000","message":"weird... seems like shouldn\u0027t have to reset auth based on the original comment.","commit_id":"eeb427e96849fe8578c58ce58e418bd54dce91ec"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9d1bb315429ec640891a91e1b683c4149a874617","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            raise ExternalAuthNotApplicable()"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # NOTE(jamielennox): set auth to empty dictionary, as a lot of the"},{"line_number":318,"context_line":"        # auth related functions depend on it being a dictionary."},{"line_number":319,"context_line":"        if not auth:"},{"line_number":320,"context_line":"            auth \u003d {}"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_1c59795a","line":318,"in_reply_to":"9aa7fdbe_1aeefd88","updated":"2014-10-21 17:32:06.000000000","message":"would it be better to ensure it was of type dict?","commit_id":"eeb427e96849fe8578c58ce58e418bd54dce91ec"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"f4c91d018c4ac804aba135f93204a3efef9a3348","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            raise ExternalAuthNotApplicable()"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # NOTE(jamielennox): set auth to empty dictionary, as a lot of the"},{"line_number":318,"context_line":"        # auth related functions depend on it being a dictionary."},{"line_number":319,"context_line":"        if not auth:"},{"line_number":320,"context_line":"            auth \u003d {}"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9aa7fdbe_2a3e6a8c","line":318,"updated":"2014-10-27 14:07:49.000000000","message":"What can auth be that triggers this? An empty list?","commit_id":"66f8f494dca357f6439f60d0d78b6fe9e775ceb8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a9efc000a829b35f01b4b3d63bdbe4a61f0a5012","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            raise ExternalAuthNotApplicable()"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # NOTE(jamielennox): set auth to empty dictionary, as a lot of the"},{"line_number":318,"context_line":"        # auth related functions depend on it being a dictionary."},{"line_number":319,"context_line":"        if not auth:"},{"line_number":320,"context_line":"            auth \u003d {}"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9aa7fdbe_e21b7d70","line":318,"in_reply_to":"9aa7fdbe_28eae8ab","updated":"2014-10-28 19:40:19.000000000","message":"Removed per our discussion in #openstack-keystone","commit_id":"66f8f494dca357f6439f60d0d78b6fe9e775ceb8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fc9f179b2c0a8d4b71de31b7174850cecd1644be","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            raise ExternalAuthNotApplicable()"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # NOTE(jamielennox): set auth to empty dictionary, as a lot of the"},{"line_number":318,"context_line":"        # auth related functions depend on it being a dictionary."},{"line_number":319,"context_line":"        if not auth:"},{"line_number":320,"context_line":"            auth \u003d {}"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9aa7fdbe_d21bcb7e","line":318,"in_reply_to":"9aa7fdbe_2a3e6a8c","updated":"2014-10-27 19:17:38.000000000","message":"I believe so, but I\u0027ll have to check with Jamie.","commit_id":"66f8f494dca357f6439f60d0d78b6fe9e775ceb8"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"442870ed82648d1d1d8d937777b5d11ca9aeb253","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            raise ExternalAuthNotApplicable()"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # NOTE(jamielennox): set auth to empty dictionary, as a lot of the"},{"line_number":318,"context_line":"        # auth related functions depend on it being a dictionary."},{"line_number":319,"context_line":"        if not auth:"},{"line_number":320,"context_line":"            auth \u003d {}"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9aa7fdbe_28eae8ab","line":318,"in_reply_to":"9aa7fdbe_d21bcb7e","updated":"2014-10-27 20:34:50.000000000","message":"I actually removed these lines and the tests all passed. So if it\u0027s still needed then we have a missing test case.","commit_id":"66f8f494dca357f6439f60d0d78b6fe9e775ceb8"}]}
