)]}'
{"rally/cli/commands/deployment.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cc57816028098f22f23d3fd203022e54bf97d5a8","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            if logging.is_debug():"},{"line_number":236,"context_line":"                print(error[\"trace\"])"},{"line_number":237,"context_line":"            else:"},{"line_number":238,"context_line":"                print(\"\\tInvalid credential for user %(username)s\""},{"line_number":239,"context_line":"                      \" in tenant %(tenant_name)s\\n\\t%(etype)s: %(msg)s\" %"},{"line_number":240,"context_line":"                      {\"username\": error[\"user\"][\"username\"],"},{"line_number":241,"context_line":"                       \"tenant_name\": error[\"user\"][\"tenant_name\"],"},{"line_number":242,"context_line":"                       \"etype\": error[\"etype\"],"},{"line_number":243,"context_line":"                       \"msg\": error[\"msg\"]})"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        exit_code \u003d 0"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f201791_8fc73f46","line":243,"range":{"start_line":238,"start_character":16,"end_line":243,"end_character":44},"updated":"2017-06-23 13:54:29.000000000","message":"We made a great progress during the last release cycle (soon, very soon it will be released) to abandon alignment Rally to OpenStack(Keystone). In this terms, all such messages should be unified and do not contain platform-specific keys. Let\u0027s construct the proper (more helpful) error message at credentials layer.\nI mean here - https://github.com/openstack/rally/blob/master/rally/plugins/openstack/credential.py#L84-L96","commit_id":"94b15f5af4b84efb8a9ae42f55451f66ddc3c8a7"}],"rally/exceptions.py":[{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"7d738fb4a8670a774bcdb657f04ccf5682304788","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"class AuthenticationFailed(InvalidArgumentsException):"},{"line_number":190,"context_line":"    msg_fmt \u003d _(\"authentication failed for user \u0027%(username)s\u0027 in project\""},{"line_number":191,"context_line":"                \" \u0027%(project)s\u0027 to establish connection to the remote host:\""},{"line_number":192,"context_line":"                \" \u0027%(url)s\u0027\\n\\t%(etype)s: %(error)s\")"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_54d6cc51","line":190,"updated":"2017-06-29 06:43:20.000000000","message":"please add error_code","commit_id":"9406ba90b199dfe469ee7a47545e7e4cfed5fcad"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b862c4574bf66e9b08c8d5a86b7ae6ece4048ee4","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"class AuthenticationFailed(InvalidArgumentsException):"},{"line_number":190,"context_line":"    error_code \u003d 401"},{"line_number":191,"context_line":"    msg_fmt \u003d _(\"authentication failed for user \u0027%(username)s\u0027 in project\""},{"line_number":192,"context_line":"                \" \u0027%(project)s\u0027 to establish connection to the remote host:\""},{"line_number":193,"context_line":"                \" \u0027%(url)s\u0027\\n\\t%(etype)s: %(error)s\")"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f1d235d_f08c80d8","line":191,"updated":"2017-07-11 00:37:07.000000000","message":"can you capitalize message?","commit_id":"96866a074b1813bbbeb33fa8bbf585a0188d2480"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b862c4574bf66e9b08c8d5a86b7ae6ece4048ee4","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    error_code \u003d 401"},{"line_number":191,"context_line":"    msg_fmt \u003d _(\"authentication failed for user \u0027%(username)s\u0027 in project\""},{"line_number":192,"context_line":"                \" \u0027%(project)s\u0027 to establish connection to the remote host:\""},{"line_number":193,"context_line":"                \" \u0027%(url)s\u0027\\n\\t%(etype)s: %(error)s\")"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"class InvalidScenarioArgument(RallyException):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f1d235d_b0c048e2","line":193,"updated":"2017-07-11 00:37:07.000000000","message":"it\u0027s better to avoid \\n in error messages, that simplifies parsing of them later.","commit_id":"96866a074b1813bbbeb33fa8bbf585a0188d2480"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"34619f60e8868523326721906382bed5ca195ab3","unresolved":false,"context_lines":[{"line_number":190,"context_line":"class AuthenticationFailed(InvalidArgumentsException):"},{"line_number":191,"context_line":"    error_code \u003d 401"},{"line_number":192,"context_line":"    msg_fmt \u003d _(\"Authentication failed for user \u0027%(username)s\u0027 in project\""},{"line_number":193,"context_line":"                \" \u0027%(project)s\u0027 to establish connection to the remote host:\""},{"line_number":194,"context_line":"                \" \u0027%(url)s\u0027. Error details: %(etype)s: %(error)s\")"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1f1a1f67_7e081c2b","line":193,"updated":"2017-07-14 18:08:38.000000000","message":"I would rephrase this message to: \n\n  Failed to authenticate to %url for user %username in project %project:  %(etype)s: %(error)s","commit_id":"b895236ad1420b7be099b1653d37b0505348584d"}],"rally/osclients.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"7cab477fd037a698ec1ca969471f991d3c21e9ee","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                    timeout\u003dCONF.openstack_client_http_timeout)"},{"line_number":285,"context_line":"                self.cache[key] \u003d (sess, identity_plugin)"},{"line_number":286,"context_line":"        except Exception as e:"},{"line_number":287,"context_line":"            if logging.is_debug():"},{"line_number":288,"context_line":"                LOG.exceiption(\"Unable to authenticate for user\""},{"line_number":289,"context_line":"                               \" %(username)s in project\""},{"line_number":290,"context_line":"                               \" %(tenant_name)s\" %"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_8bb93816","line":287,"range":{"start_line":287,"start_character":13,"end_line":287,"end_character":34},"updated":"2017-06-26 21:35:45.000000000","message":"it would be nice to test this case by unit tests to catch typos like at L288","commit_id":"dc7c7e106991137f0f4dd6a998a26327724ab86f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"7cab477fd037a698ec1ca969471f991d3c21e9ee","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                self.cache[key] \u003d (sess, identity_plugin)"},{"line_number":286,"context_line":"        except Exception as e:"},{"line_number":287,"context_line":"            if logging.is_debug():"},{"line_number":288,"context_line":"                LOG.exceiption(\"Unable to authenticate for user\""},{"line_number":289,"context_line":"                               \" %(username)s in project\""},{"line_number":290,"context_line":"                               \" %(tenant_name)s\" %"},{"line_number":291,"context_line":"                               {\"username\": self.credential.username,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_6b381c9f","line":288,"range":{"start_line":288,"start_character":20,"end_line":288,"end_character":30},"updated":"2017-06-26 21:35:45.000000000","message":"s/exceiption/exception","commit_id":"dc7c7e106991137f0f4dd6a998a26327724ab86f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"f68b04d4f8f512a937ac86d74abe61174c613ee7","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def get_session(self, version\u003dNone):"},{"line_number":240,"context_line":"        key \u003d \"keystone_session_and_plugin_%s\" % version"},{"line_number":241,"context_line":"        try:"},{"line_number":242,"context_line":"            if key not in self.cache:"},{"line_number":243,"context_line":"                from keystoneauth1 import discover"},{"line_number":244,"context_line":"                from keystoneauth1 import identity"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_bf20349d","line":241,"updated":"2017-07-10 07:32:24.000000000","message":"as we discuss IRL this is not enough, we need actually to wrap auth_ref method and  call self.auth during the client creation.","commit_id":"8ddbc8a8f7477c5d36c7d23ed7fc62faf0fc718c"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"34619f60e8868523326721906382bed5ca195ab3","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        if self.credential.endpoint_type:"},{"line_number":343,"context_line":"            kw[\"interface\"] \u003d self.credential.endpoint_type"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        # Note by Amy:"},{"line_number":346,"context_line":"        # In auth_ref(), plugin.get_access(sess) only returns a auth_ref object"},{"line_number":347,"context_line":"        # and won\u0027t check the authentication access until it is actually being"},{"line_number":348,"context_line":"        # called. To catch the authentication failure in auth_ref(), we will"}],"source_content_type":"text/x-python","patch_set":9,"id":"1f1a1f67_2151690f","line":345,"updated":"2017-07-14 18:08:38.000000000","message":"# NOTE(amy)","commit_id":"b895236ad1420b7be099b1653d37b0505348584d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"34619f60e8868523326721906382bed5ca195ab3","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        # and won\u0027t check the authentication access until it is actually being"},{"line_number":348,"context_line":"        # called. To catch the authentication failure in auth_ref(), we will"},{"line_number":349,"context_line":"        # have to call self.auth_ref.auth_token here to actually use auth_ref."},{"line_number":350,"context_line":"        self.auth_ref.auth_token   # noqa"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        return client.Client(**kw)"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1f1a1f67_0158ad2f","line":350,"updated":"2017-07-14 18:08:38.000000000","message":"this is not in try-except so we don\u0027t actually catch any error here","commit_id":"b895236ad1420b7be099b1653d37b0505348584d"}],"rally/plugins/openstack/credential.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"7cab477fd037a698ec1ca969471f991d3c21e9ee","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                \"profiler_hmac_key\": self.profiler_hmac_key}"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def verify_connection(self):"},{"line_number":85,"context_line":"        from keystoneclient import exceptions as keystone_exceptions"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        try:"},{"line_number":88,"context_line":"            if self.permission \u003d\u003d consts.EndpointPermission.ADMIN:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_abff54a9","side":"PARENT","line":85,"range":{"start_line":85,"start_character":8,"end_line":85,"end_character":68},"updated":"2017-06-26 21:35:45.000000000","message":"yes, I like that keystone related things are now located only in one place - rally.osclients.","commit_id":"06cd90e39cebd87d564377aa71e9868895a7ce58"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"7cab477fd037a698ec1ca969471f991d3c21e9ee","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            else:"},{"line_number":88,"context_line":"                self.clients().keystone()"},{"line_number":89,"context_line":"        except Exception:"},{"line_number":90,"context_line":"            if logging.is_debug():"},{"line_number":91,"context_line":"                LOG.exception(\"Unable to connect for user %(username)s\""},{"line_number":92,"context_line":"                              \" in project %(project)s\" %"},{"line_number":93,"context_line":"                              {\"username\": self.username,"},{"line_number":94,"context_line":"                               \"project\": self.tenant_name})"},{"line_number":95,"context_line":"            raise"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def list_services(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_2b0c64ea","line":94,"range":{"start_line":90,"start_character":12,"end_line":94,"end_character":60},"updated":"2017-06-26 21:35:45.000000000","message":"as far as I understand, if AuthenticationFailed is raised, debug message will be print twice (while obtaining session and here).","commit_id":"dc7c7e106991137f0f4dd6a998a26327724ab86f"}]}
