)]}'
{"keystone/application_credential/controllers.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3411f79f04011537e5f7b712ca5e3bc53e4054fc","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # create and delete application credentials."},{"line_number":98,"context_line":"        if \u0027application_credential\u0027 in auth_methods:"},{"line_number":99,"context_line":"            action \u003d _(\"Using method \u0027application_credential\u0027 is not allowed \""},{"line_number":100,"context_line":"                       \"for creating additional application credentials.\")"},{"line_number":101,"context_line":"            raise exception.ForbiddenAction(action\u003daction)"},{"line_number":102,"context_line":"        if request.context.user_id !\u003d user_id:"},{"line_number":103,"context_line":"            action \u003d _(\"Cannot create an application credential for another \""}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_63584d55","line":100,"updated":"2018-01-17 22:41:10.000000000","message":"Shouldn\u0027t this include a check to see if the application credential being used to make the call has \u0027allow_application_credential_creation\u0027 set? Or are you planning on doing that in a separate patch?","commit_id":"3b343cadd460edf6a06e52f0cdc752dd3a35fc78"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5f59b03bfee6926ef6a530ddeaff12d14cfb1550","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # create and delete application credentials."},{"line_number":98,"context_line":"        if \u0027application_credential\u0027 in auth_methods:"},{"line_number":99,"context_line":"            action \u003d _(\"Using method \u0027application_credential\u0027 is not allowed \""},{"line_number":100,"context_line":"                       \"for creating additional application credentials.\")"},{"line_number":101,"context_line":"            raise exception.ForbiddenAction(action\u003daction)"},{"line_number":102,"context_line":"        if request.context.user_id !\u003d user_id:"},{"line_number":103,"context_line":"            action \u003d _(\"Cannot create an application credential for another \""}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_c13ef9bf","line":100,"in_reply_to":"7f96bb07_63584d55","updated":"2018-01-17 22:41:48.000000000","message":"Nevermind - I just looked at the next patch set in the series...","commit_id":"3b343cadd460edf6a06e52f0cdc752dd3a35fc78"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9d8695c9ea7ab432ace57c30ba531bbf9ffa03d5","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # create and delete application credentials."},{"line_number":98,"context_line":"        if \u0027application_credential\u0027 in auth_methods:"},{"line_number":99,"context_line":"            action \u003d _(\"Using method \u0027application_credential\u0027 is not allowed \""},{"line_number":100,"context_line":"                       \"for creating additional application credentials.\")"},{"line_number":101,"context_line":"            raise exception.ForbiddenAction(action\u003daction)"},{"line_number":102,"context_line":"        if request.context.user_id !\u003d user_id:"},{"line_number":103,"context_line":"            action \u003d _(\"Cannot create an application credential for another \""}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_c1d35903","line":100,"in_reply_to":"7f96bb07_811a3114","updated":"2018-01-17 23:11:19.000000000","message":"Whatever works for you! I just need to be better about looking ahead in the series and I\u0027d answer most of my questions :)","commit_id":"3b343cadd460edf6a06e52f0cdc752dd3a35fc78"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"0a65c0fb58898ee0b15999327d62b9bfaa9909df","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # create and delete application credentials."},{"line_number":98,"context_line":"        if \u0027application_credential\u0027 in auth_methods:"},{"line_number":99,"context_line":"            action \u003d _(\"Using method \u0027application_credential\u0027 is not allowed \""},{"line_number":100,"context_line":"                       \"for creating additional application credentials.\")"},{"line_number":101,"context_line":"            raise exception.ForbiddenAction(action\u003daction)"},{"line_number":102,"context_line":"        if request.context.user_id !\u003d user_id:"},{"line_number":103,"context_line":"            action \u003d _(\"Cannot create an application credential for another \""}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_811a3114","line":100,"in_reply_to":"7f96bb07_c13ef9bf","updated":"2018-01-17 23:03:46.000000000","message":"Would probably make sense at this point to roll them into the same patch, just at the time was figuring out the different bits and trying to keep things manageable","commit_id":"3b343cadd460edf6a06e52f0cdc752dd3a35fc78"}],"keystone/auth/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3411f79f04011537e5f7b712ca5e3bc53e4054fc","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":246,"context_line":"        hints.add_filter(\u0027name\u0027, app_cred_info.get(\u0027name\u0027))"},{"line_number":247,"context_line":"        app_cred_api \u003d PROVIDERS.application_credential_api"},{"line_number":248,"context_line":"        app_cred \u003d app_cred_api.list_application_credentials("},{"line_number":249,"context_line":"            user_id, hints)[0]"},{"line_number":250,"context_line":"        return app_cred"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def _set_scope_from_app_cred(self, app_cred_info):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_86448748","line":249,"range":{"start_line":248,"start_character":19,"end_line":249,"end_character":30},"updated":"2018-01-17 22:41:10.000000000","message":"If the user provides a bogus name, this will fail with a KeyError won\u0027t it?\n\nI should be able to test that locally.","commit_id":"3b343cadd460edf6a06e52f0cdc752dd3a35fc78"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"b8ca39e276ac40c15ba77c84c794bd7804575579","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":246,"context_line":"        hints.add_filter(\u0027name\u0027, app_cred_info.get(\u0027name\u0027))"},{"line_number":247,"context_line":"        app_cred_api \u003d PROVIDERS.application_credential_api"},{"line_number":248,"context_line":"        app_cred \u003d app_cred_api.list_application_credentials("},{"line_number":249,"context_line":"            user_id, hints)[0]"},{"line_number":250,"context_line":"        return app_cred"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def _set_scope_from_app_cred(self, app_cred_info):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_01cb81a4","line":249,"range":{"start_line":248,"start_character":19,"end_line":249,"end_character":30},"in_reply_to":"7f96bb07_86448748","updated":"2018-01-17 22:58:32.000000000","message":"I think so...can fix","commit_id":"3b343cadd460edf6a06e52f0cdc752dd3a35fc78"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"89f35ce950c83a810802fb14a4bb70795060019e","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            user_id \u003d PROVIDERS.identity_api.get_user_by_name("},{"line_number":254,"context_line":"                user[\u0027name\u0027], domain_ref[\u0027id\u0027])[\u0027id\u0027]"},{"line_number":255,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":256,"context_line":"        hints.add_filter(\u0027name\u0027, name)"},{"line_number":257,"context_line":"        app_cred_api \u003d PROVIDERS.application_credential_api"},{"line_number":258,"context_line":"        app_creds \u003d app_cred_api.list_application_credentials("},{"line_number":259,"context_line":"            user_id, hints)"}],"source_content_type":"text/x-python","patch_set":24,"id":"7f96bb07_180bd329","line":256,"updated":"2018-01-18 19:49:47.000000000","message":"This makes me think we need a get_application_credential_for_user_by_name(self, user_id, name) method, but that could come later I suppose.","commit_id":"bdd1cba4a8c73c4c2c24828c4831c95466c02e59"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8d8f1f79cb4c91a80a9b69e64a16eff7a7a48f9d","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            user_id \u003d PROVIDERS.identity_api.get_user_by_name("},{"line_number":254,"context_line":"                user[\u0027name\u0027], domain_ref[\u0027id\u0027])[\u0027id\u0027]"},{"line_number":255,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":256,"context_line":"        hints.add_filter(\u0027name\u0027, name)"},{"line_number":257,"context_line":"        app_cred_api \u003d PROVIDERS.application_credential_api"},{"line_number":258,"context_line":"        app_creds \u003d app_cred_api.list_application_credentials("},{"line_number":259,"context_line":"            user_id, hints)"}],"source_content_type":"text/x-python","patch_set":24,"id":"7f96bb07_81868a65","line":256,"in_reply_to":"7f96bb07_180bd329","updated":"2018-01-18 20:46:25.000000000","message":"yeah I was thinking that too","commit_id":"bdd1cba4a8c73c4c2c24828c4831c95466c02e59"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"89f35ce950c83a810802fb14a4bb70795060019e","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def _set_scope_from_app_cred(self, app_cred_info):"},{"line_number":267,"context_line":"        app_cred_ref \u003d self._lookup_app_cred(app_cred_info)"},{"line_number":268,"context_line":"        self._scope_data \u003d (None, app_cred_ref[\u0027project_id\u0027], None, None)"},{"line_number":269,"context_line":"        return"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def _validate_and_normalize_scope_data(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"7f96bb07_d8524b35","line":268,"updated":"2018-01-18 19:49:47.000000000","message":"I don\u0027t really know how this just occurred to me, but what about system-scoped things? It looks like the driver and the database migration require project IDs for application credentials. Is that being too specific for us to enable application credential usage for system level tooling later?","commit_id":"bdd1cba4a8c73c4c2c24828c4831c95466c02e59"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"e4faad879f991d1873645c55ca798814c08eef31","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def _set_scope_from_app_cred(self, app_cred_info):"},{"line_number":267,"context_line":"        app_cred_ref \u003d self._lookup_app_cred(app_cred_info)"},{"line_number":268,"context_line":"        self._scope_data \u003d (None, app_cred_ref[\u0027project_id\u0027], None, None)"},{"line_number":269,"context_line":"        return"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def _validate_and_normalize_scope_data(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"7f96bb07_4d019369","line":268,"in_reply_to":"7f96bb07_32b026dd","updated":"2018-01-18 23:25:56.000000000","message":"Yeah, I guess we should do that before the controller gets merged","commit_id":"bdd1cba4a8c73c4c2c24828c4831c95466c02e59"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08058e6b42277ee3a10ac9d5e88dc09492906040","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def _set_scope_from_app_cred(self, app_cred_info):"},{"line_number":267,"context_line":"        app_cred_ref \u003d self._lookup_app_cred(app_cred_info)"},{"line_number":268,"context_line":"        self._scope_data \u003d (None, app_cred_ref[\u0027project_id\u0027], None, None)"},{"line_number":269,"context_line":"        return"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def _validate_and_normalize_scope_data(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"7f96bb07_32b026dd","line":268,"in_reply_to":"7f96bb07_41a3a200","updated":"2018-01-18 22:45:22.000000000","message":"That works, but I wonder if we need to fix the project_id column to be nullable? Otherwise is it going to be a pain to migrate that in the future?","commit_id":"bdd1cba4a8c73c4c2c24828c4831c95466c02e59"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a66cdf45bf8594ce463ce9de76cf3e7717afb9c2","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def _set_scope_from_app_cred(self, app_cred_info):"},{"line_number":267,"context_line":"        app_cred_ref \u003d self._lookup_app_cred(app_cred_info)"},{"line_number":268,"context_line":"        self._scope_data \u003d (None, app_cred_ref[\u0027project_id\u0027], None, None)"},{"line_number":269,"context_line":"        return"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def _validate_and_normalize_scope_data(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"7f96bb07_c2480db4","line":268,"in_reply_to":"7f96bb07_4d019369","updated":"2018-01-19 01:13:07.000000000","message":"Sorry I didn\u0027t catch that sooner. I\u0027ll see if I can get a patch up to help build that in.","commit_id":"bdd1cba4a8c73c4c2c24828c4831c95466c02e59"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8d8f1f79cb4c91a80a9b69e64a16eff7a7a48f9d","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def _set_scope_from_app_cred(self, app_cred_info):"},{"line_number":267,"context_line":"        app_cred_ref \u003d self._lookup_app_cred(app_cred_info)"},{"line_number":268,"context_line":"        self._scope_data \u003d (None, app_cred_ref[\u0027project_id\u0027], None, None)"},{"line_number":269,"context_line":"        return"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def _validate_and_normalize_scope_data(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"7f96bb07_41a3a200","line":268,"in_reply_to":"7f96bb07_d8524b35","updated":"2018-01-18 20:46:25.000000000","message":"Yeah, the whole thing is definitely project-centric right now. Part of that is because it was born out of the desire for project-lived credentials. Before this was going to be user-lived, having a system-scoped application credential would have made no sense.\n\nIf we want to make this work for system-scope I think we\u0027d need a new column \u0027system\u0027 and this method would have to check properties \u0027project_id\u0027 and \u0027system\u0027 to figure out which scope was intended. I don\u0027t think it would be that hard.\n\nThat said, the primary use case here is for end-users, especially ldap and federated users, not cloud administrators. So I think we should go forward with this as-is and add follow-on work next cycle to make it work with system scope.","commit_id":"bdd1cba4a8c73c4c2c24828c4831c95466c02e59"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"2781d89113b12acfbf764c24118ab559eaa74e49","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def _set_scope_from_app_cred(self, app_cred_info):"},{"line_number":267,"context_line":"        app_cred_ref \u003d self._lookup_app_cred(app_cred_info)"},{"line_number":268,"context_line":"        self._scope_data \u003d (None, app_cred_ref[\u0027project_id\u0027], None, None)"},{"line_number":269,"context_line":"        return"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def _validate_and_normalize_scope_data(self):"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f93b717_071a5e7c","line":268,"updated":"2018-01-25 16:31:24.000000000","message":"Going to have to fix this assuming https://review.openstack.org/#/c/525687 makes it in first","commit_id":"9c297381bc9a3955f07d4ea5ab98079d60b6d2c4"}],"keystone/exception.py":[{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"08cfd9e4098ac1a668244758a928043376b6b852","unresolved":false,"context_lines":[{"line_number":304,"context_line":""},{"line_number":305,"context_line":"class ApplicationCredentialAuthError(AuthPluginException):"},{"line_number":306,"context_line":"    message_format \u003d _("},{"line_number":307,"context_line":"        \"Error authenticating with application credential: %(detail)s.\")"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"class AdditionalAuthRequired(AuthPluginException):"}],"source_content_type":"text/x-python","patch_set":30,"id":"7f96bb07_21be2165","line":307,"range":{"start_line":307,"start_character":69,"end_line":307,"end_character":70},"updated":"2018-01-23 17:27:58.000000000","message":"nit: this prints the exception message with 2 \u0027.\u0027s if the message passed in also has a \u0027.\u0027","commit_id":"c7dc14096ef6be57c2a51bc6e5a59c4f5659fd08"}],"keystone/tests/common/auth.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3411f79f04011537e5f7b712ca5e3bc53e4054fc","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            identity \u003d auth_data[\u0027identity\u0027]"},{"line_number":136,"context_line":"            identity[\u0027application_credential\u0027] \u003d self._build_app_cred_auth("},{"line_number":137,"context_line":"                secret, app_cred_id, app_cred_name, user_id, username,"},{"line_number":138,"context_line":"                user_domain_id, user_domain_name)"},{"line_number":139,"context_line":"        if kwargs:"},{"line_number":140,"context_line":"            auth_data[\u0027scope\u0027] \u003d self._build_auth_scope(**kwargs)"},{"line_number":141,"context_line":"        return {\u0027auth\u0027: auth_data}"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_868b2766","line":138,"updated":"2018-01-17 22:41:10.000000000","message":"nit: I know this isn\u0027t a convention in this module, but we could pass these as kwargs since they are defined as kwargs in the method signature. That way if things ever change in the method signature of _build_app_cred_auth, the callee won\u0027t have to change how they call the method.","commit_id":"3b343cadd460edf6a06e52f0cdc752dd3a35fc78"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"b8ca39e276ac40c15ba77c84c794bd7804575579","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            identity \u003d auth_data[\u0027identity\u0027]"},{"line_number":136,"context_line":"            identity[\u0027application_credential\u0027] \u003d self._build_app_cred_auth("},{"line_number":137,"context_line":"                secret, app_cred_id, app_cred_name, user_id, username,"},{"line_number":138,"context_line":"                user_domain_id, user_domain_name)"},{"line_number":139,"context_line":"        if kwargs:"},{"line_number":140,"context_line":"            auth_data[\u0027scope\u0027] \u003d self._build_auth_scope(**kwargs)"},{"line_number":141,"context_line":"        return {\u0027auth\u0027: auth_data}"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_81beb1fc","line":138,"in_reply_to":"7f96bb07_868b2766","updated":"2018-01-17 22:58:32.000000000","message":"Can do","commit_id":"3b343cadd460edf6a06e52f0cdc752dd3a35fc78"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"89f35ce950c83a810802fb14a4bb70795060019e","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            data[\u0027id\u0027] \u003d app_cred_id"},{"line_number":98,"context_line":"        else:"},{"line_number":99,"context_line":"            data[\u0027name\u0027] \u003d app_cred_name"},{"line_number":100,"context_line":"            data[\u0027user\u0027] \u003d self._build_user(user_id, username, user_domain_id,"},{"line_number":101,"context_line":"                                            user_domain_name)"},{"line_number":102,"context_line":"        return data"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"7f96bb07_3b6ec9c8","line":100,"updated":"2018-01-18 19:49:47.000000000","message":"We could use kwargs here, too.","commit_id":"bdd1cba4a8c73c4c2c24828c4831c95466c02e59"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a99d366f76a96e2cda7f1f822b8705206f01a907","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            data[\u0027id\u0027] \u003d app_cred_id"},{"line_number":99,"context_line":"        else:"},{"line_number":100,"context_line":"            data[\u0027name\u0027] \u003d app_cred_name"},{"line_number":101,"context_line":"            data[\u0027user\u0027] \u003d self._build_user(user_id, username, user_domain_id,"},{"line_number":102,"context_line":"                                            user_domain_name)"},{"line_number":103,"context_line":"        return data"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def build_authentication_request(self, token\u003dNone, user_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":29,"id":"7f96bb07_cb2a1d7d","line":102,"range":{"start_line":101,"start_character":44,"end_line":102,"end_character":60},"updated":"2018-01-22 21:45:47.000000000","message":"nit: if another patch set comes around, we can pass these as kwargs to make this a bit more robust in the event the method signature changes. We can always fix this later though, too.","commit_id":"88a5eeeee13d393c5b695cddfdd2e47a10cbc92a"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"08cfd9e4098ac1a668244758a928043376b6b852","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _build_user(self, user_id\u003dNone, username\u003dNone, user_domain_id\u003dNone,"},{"line_number":53,"context_line":"                    user_domain_name\u003dNone):"},{"line_number":54,"context_line":"        user \u003d {\u0027user\u0027: {}}"},{"line_number":55,"context_line":"        user \u003d {}"},{"line_number":56,"context_line":"        if user_id:"},{"line_number":57,"context_line":"            user[\u0027id\u0027] \u003d user_id"}],"source_content_type":"text/x-python","patch_set":30,"id":"7f96bb07_a1b1d191","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":27},"updated":"2018-01-23 17:27:58.000000000","message":"leftover?","commit_id":"c7dc14096ef6be57c2a51bc6e5a59c4f5659fd08"}],"keystone/tests/unit/test_v3_application_credential.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3411f79f04011537e5f7b712ca5e3bc53e4054fc","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        token_data \u003d self.v3_create_token(auth_data,"},{"line_number":143,"context_line":"                                          expected_status\u003dhttp_client.CREATED)"},{"line_number":144,"context_line":"        app_cred_body_2 \u003d self._app_cred_body(roles\u003droles)"},{"line_number":145,"context_line":"        self.public_request("},{"line_number":146,"context_line":"            path\u003d\u0027/v3/users/%s/application_credentials\u0027 % self.user_id,"},{"line_number":147,"context_line":"            method\u003d\u0027POST\u0027, body\u003dapp_cred_body_2,"},{"line_number":148,"context_line":"            token\u003dtoken_data.headers[\u0027x-subject-token\u0027],"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_46c2ff5a","line":145,"range":{"start_line":145,"start_character":13,"end_line":145,"end_character":27},"updated":"2018-01-17 22:41:10.000000000","message":"You might be able to actually use self.post() here and pass the token in as a kwargs and that might work without having to call public_request...\n\nThe testing utilities that put together requests are kind of messy, but I think they do allow tokens to be passed in from self.\u003cmethod\u003e.","commit_id":"3b343cadd460edf6a06e52f0cdc752dd3a35fc78"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"89f35ce950c83a810802fb14a4bb70795060019e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        token_data \u003d self.v3_create_token(auth_data,"},{"line_number":155,"context_line":"                                          expected_status\u003dhttp_client.CREATED)"},{"line_number":156,"context_line":"        app_cred_body_2 \u003d self._app_cred_body(roles\u003droles)"},{"line_number":157,"context_line":"        self.public_request("},{"line_number":158,"context_line":"            path\u003d\u0027/v3/users/%s/application_credentials\u0027 % self.user_id,"},{"line_number":159,"context_line":"            method\u003d\u0027POST\u0027, body\u003dapp_cred_body_2,"},{"line_number":160,"context_line":"            token\u003dtoken_data.headers[\u0027x-subject-token\u0027],"}],"source_content_type":"text/x-python","patch_set":24,"id":"7f96bb07_fbc70195","line":157,"range":{"start_line":157,"start_character":13,"end_line":157,"end_character":27},"updated":"2018-01-18 19:49:47.000000000","message":"Same comment here as on the previous patch set.","commit_id":"bdd1cba4a8c73c4c2c24828c4831c95466c02e59"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"225d0afb88b2e4b0019b6273e0437015091959e1","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                                          expected_status\u003dhttp_client.CREATED)"},{"line_number":264,"context_line":"        self.delete("},{"line_number":265,"context_line":"            path\u003dMEMBER_PATH_FMT % {"},{"line_number":266,"context_line":"                 \u0027user_id\u0027: self.user_id,"},{"line_number":267,"context_line":"                 \u0027app_cred_id\u0027: app_cred.json[\u0027application_credential\u0027][\u0027id\u0027]},"},{"line_number":268,"context_line":"            token\u003dtoken_data.headers[\u0027x-subject-token\u0027],"},{"line_number":269,"context_line":"            expected_status\u003dhttp_client.NO_CONTENT)"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f96bb07_f2fb9e75","line":266,"updated":"2018-01-18 22:47:04.000000000","message":"This will need a quick adjustment for pep8.","commit_id":"80ac8e2b7fa220452902f7bb478d3a9865a5badc"}],"keystone/tests/unit/test_v3_trust.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3411f79f04011537e5f7b712ca5e3bc53e4054fc","unresolved":false,"context_lines":[{"line_number":542,"context_line":"                                        trustee_user_id\u003dself.trustee_user_id,"},{"line_number":543,"context_line":"                                        project_id\u003dself.project_id,"},{"line_number":544,"context_line":"                                        role_ids\u003d[self.role_id])"},{"line_number":545,"context_line":"        self.public_request("},{"line_number":546,"context_line":"            path\u003d\u0027/v3/OS-TRUST/trusts\u0027, method\u003d\u0027POST\u0027,"},{"line_number":547,"context_line":"            body\u003d{\u0027trust\u0027: trust_body},"},{"line_number":548,"context_line":"            token\u003dtoken_data.headers[\u0027x-subject-token\u0027],"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_c6d84ff0","line":545,"range":{"start_line":545,"start_character":13,"end_line":545,"end_character":27},"updated":"2018-01-17 22:41:10.000000000","message":"nit: Same comment here as in the other module. You should be able to do this without reaching in to public_request stuff:\n\nhttp://paste.openstack.org/show/646595/","commit_id":"3b343cadd460edf6a06e52f0cdc752dd3a35fc78"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"b8ca39e276ac40c15ba77c84c794bd7804575579","unresolved":false,"context_lines":[{"line_number":542,"context_line":"                                        trustee_user_id\u003dself.trustee_user_id,"},{"line_number":543,"context_line":"                                        project_id\u003dself.project_id,"},{"line_number":544,"context_line":"                                        role_ids\u003d[self.role_id])"},{"line_number":545,"context_line":"        self.public_request("},{"line_number":546,"context_line":"            path\u003d\u0027/v3/OS-TRUST/trusts\u0027, method\u003d\u0027POST\u0027,"},{"line_number":547,"context_line":"            body\u003d{\u0027trust\u0027: trust_body},"},{"line_number":548,"context_line":"            token\u003dtoken_data.headers[\u0027x-subject-token\u0027],"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_616605c4","line":545,"range":{"start_line":545,"start_character":13,"end_line":545,"end_character":27},"in_reply_to":"7f96bb07_c6d84ff0","updated":"2018-01-17 22:58:32.000000000","message":"Awesome, thanks","commit_id":"3b343cadd460edf6a06e52f0cdc752dd3a35fc78"}],"keystone/trust/controllers.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"89f35ce950c83a810802fb14a4bb70795060019e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        if \u0027application_credential\u0027 in auth_methods:"},{"line_number":106,"context_line":"            if token.token_data[\u0027token\u0027][\u0027application_credential_restricted\u0027]:"},{"line_number":107,"context_line":"                action \u003d _(\"Using method \u0027application_credential\u0027 is not \""},{"line_number":108,"context_line":"                           \"allowed for managing additional application \""},{"line_number":109,"context_line":"                           \"credentials.\")"},{"line_number":110,"context_line":"                raise exception.ForbiddenAction(action\u003daction)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":24,"id":"7f96bb07_7b1691aa","line":109,"range":{"start_line":108,"start_character":49,"end_line":109,"end_character":38},"updated":"2018-01-18 19:49:47.000000000","message":"Additional application credentials or trusts?","commit_id":"bdd1cba4a8c73c4c2c24828c4831c95466c02e59"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8d8f1f79cb4c91a80a9b69e64a16eff7a7a48f9d","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        if \u0027application_credential\u0027 in auth_methods:"},{"line_number":106,"context_line":"            if token.token_data[\u0027token\u0027][\u0027application_credential_restricted\u0027]:"},{"line_number":107,"context_line":"                action \u003d _(\"Using method \u0027application_credential\u0027 is not \""},{"line_number":108,"context_line":"                           \"allowed for managing additional application \""},{"line_number":109,"context_line":"                           \"credentials.\")"},{"line_number":110,"context_line":"                raise exception.ForbiddenAction(action\u003daction)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":24,"id":"7f96bb07_019a7ab7","line":109,"range":{"start_line":108,"start_character":49,"end_line":109,"end_character":38},"in_reply_to":"7f96bb07_7b1691aa","updated":"2018-01-18 20:46:25.000000000","message":"woops","commit_id":"bdd1cba4a8c73c4c2c24828c4831c95466c02e59"}]}
