)]}'
{".testr.conf":[{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"7d6bfed3d308b907d02a553d99c7a8f1f9519a23","unresolved":false,"context_lines":[{"line_number":2,"context_line":"test_command\u003d${PYTHON:-python} -m subunit.run discover ./trove/tests/unittests $LISTOPT $IDOPTION"},{"line_number":3,"context_line":"test_id_option\u003d--load-list $IDFILE"},{"line_number":4,"context_line":"test_list_option\u003d--list"},{"line_number":5,"context_line":"test_run_concurrency\u003decho 1"}],"source_content_type":"text/plain","patch_set":12,"id":"AAAAUH%2F%2FwMY%3D","line":5,"updated":"2014-01-08 21:25:34.000000000","message":"Do we really need to update the number of workers that testr uses to 1? (Not sure if this is a local change on your box that got accidentally checked in).","commit_id":"f02e8fdbbcfe71a07e870ac741e5b58f9d807d51"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"63da11ecaf0a3092b58f8155cae4d8a9a9f7aaaa","unresolved":false,"context_lines":[{"line_number":2,"context_line":"test_command\u003d${PYTHON:-python} -m subunit.run discover ./trove/tests/unittests $LISTOPT $IDOPTION"},{"line_number":3,"context_line":"test_id_option\u003d--load-list $IDFILE"},{"line_number":4,"context_line":"test_list_option\u003d--list"},{"line_number":5,"context_line":"test_run_concurrency\u003decho 1"}],"source_content_type":"text/plain","patch_set":12,"id":"AAAAUH%2F%2Fqj8%3D","line":5,"in_reply_to":"AAAAUH%2F%2FwMY%3D","updated":"2014-01-09 22:16:02.000000000","message":"I\u0027ll remove that.  It\u0027s works around an issue that we found with os x mavericks I think.","commit_id":"f02e8fdbbcfe71a07e870ac741e5b58f9d807d51"}],"trove/guestagent/datastore/mysql/manager.py":[{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"7991a4f5ab3cd89f7e3164edc71dc29a90658ee0","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            return MySqlAdmin().grant_access(username, hostname, databases)"},{"line_number":54,"context_line":"        except Exception:"},{"line_number":55,"context_line":"            db_names \u003d \u0027, \u0027.join(databases)"},{"line_number":56,"context_line":"            LOG.info(_(\"Grant access to %s is now allowed\") % db_names)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def revoke_access(self, context, username, hostname, database):"},{"line_number":59,"context_line":"        return MySqlAdmin().revoke_access(username, hostname, database)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9x5c%3D","line":56,"updated":"2013-12-06 00:35:48.000000000","message":"It should read \u0027not allowed\u0027","commit_id":"1c501ba83950fb1cd48f96484dde1dbd9e8a4d3a"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"ccb9de0bbed55ecc273944f444afbed936acc7b0","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        try:"},{"line_number":71,"context_line":"            return MySqlAdmin().grant_access(username, hostname, databases)"},{"line_number":72,"context_line":"        except Exception:"},{"line_number":73,"context_line":"            db_names \u003d \u0027, \u0027.join(databases)"},{"line_number":74,"context_line":"            LOG.info(_(\"Grant access to %s is not allowed\") % db_names)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def revoke_access(self, context, username, hostname, database):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2F984%3D","line":73,"updated":"2014-01-06 04:05:21.000000000","message":"You may handle the exception inside MySqlAdmin().grant_access, keeping structure look alike other implemented methods.","commit_id":"bee3e900f489497c36d2c340d1e8a10103f98d70"}],"trove/guestagent/datastore/mysql/service.py":[{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"fd2c6a435e82a0d89b9cd22b50cfe37cdd42307f","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        user \u003d self._get_user(username, hostname)"},{"line_number":364,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":365,"context_line":"            for database in databases:"},{"line_number":366,"context_line":"                if database.lower() not in CONF.ignore_dbs:"},{"line_number":367,"context_line":"                    g \u003d sql_query.Grant(permissions\u003d\u0027ALL\u0027, database\u003ddatabase,"},{"line_number":368,"context_line":"                                        user\u003duser.name, host\u003duser.host,"},{"line_number":369,"context_line":"                                        hashed\u003duser.password)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F975Q%3D","line":366,"updated":"2013-12-04 09:24:51.000000000","message":"Is there a reason we\u0027re forcing all ignore_dbs to be lowercase? It\u0027s possible that mysql is using a case-sensitive FS, which means that db names will be case sensitive. This could be problematic if you wanted to ignore db \u0027foobar\u0027, but not \u0027FOOBAR\u0027.\n\nPerhaps, just compare the db names as is?","commit_id":"e36ac19e194909df9e7c6c37b31fb0f17c6f4acf"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"fce89482b26be211949df07e6a87ca8ffc11e5db","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        user \u003d self._get_user(username, hostname)"},{"line_number":364,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":365,"context_line":"            for database in databases:"},{"line_number":366,"context_line":"                if database.lower() not in CONF.ignore_dbs:"},{"line_number":367,"context_line":"                    g \u003d sql_query.Grant(permissions\u003d\u0027ALL\u0027, database\u003ddatabase,"},{"line_number":368,"context_line":"                                        user\u003duser.name, host\u003duser.host,"},{"line_number":369,"context_line":"                                        hashed\u003duser.password)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F96jA%3D","line":366,"in_reply_to":"AAAATn%2F975Q%3D","updated":"2013-12-04 15:14:34.000000000","message":"This is consistent with the way we currently validate Database names in the code.\n\nIf we change this here we need to consider changing it everywhere we validate Database names which seems more like refactoring and may require a blue print rather than a bug fix.\n\nhttps://github.com/openstack/trove/blob/master/trove/guestagent/db/models.py#L284","commit_id":"e36ac19e194909df9e7c6c37b31fb0f17c6f4acf"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"ac34ee4b7b119187b4f60e627dd3f09282d68720","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        user \u003d self._get_user(username, hostname)"},{"line_number":364,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":365,"context_line":"            for database in databases:"},{"line_number":366,"context_line":"                if database.lower() not in CONF.ignore_dbs:"},{"line_number":367,"context_line":"                    g \u003d sql_query.Grant(permissions\u003d\u0027ALL\u0027, database\u003ddatabase,"},{"line_number":368,"context_line":"                                        user\u003duser.name, host\u003duser.host,"},{"line_number":369,"context_line":"                                        hashed\u003duser.password)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97x4%3D","line":366,"in_reply_to":"AAAATn%2F975Q%3D","updated":"2013-12-04 09:47:51.000000000","message":"see http://dev.mysql.com/doc/refman/5.5/en/identifier-case-sensitivity.html. in short, it depends on the operating-system.\n\nwith ubuntu:\n\nmysql\u003e create database MYSQL;\n    Query OK, 1 row affected (0.00 sec)\n\nmysql\u003e create database INFORMATION_SCHEMA;\n    ERROR 1044 (42000): Access denied for user \u0027root\u0027@\u0027localhost\u0027 to database \u0027INFORMATION_SCHEMA\u0027\n\nmysql\u003e create database PERFORMANCE_SCHEMA;\n    Query OK, 1 row affected (0.01 sec)\n\nmysql\u003e create database TEST;\n    Query OK, 1 row affected (0.00 sec)\n\nmysql\u003e show databases;\n    +--------------------+\n    | Database           |\n    +--------------------+\n    | information_schema |\n    | MONKEY             |\n    | MYSQL              |\n    | PERFORMANCE_SCHEMA |\n    | TEST               |\n    | monkey             |\n    | mysql              |\n    | performance_schema |\n    | test               |\n    +--------------------+\n\ni think we should protect users from themselves and not permit this to occur, despite it being supported in certain situations. however, relying on the values in the conf to be lowercase is a bit naive, i\u0027d prefer a case-insensitive comparison here.","commit_id":"e36ac19e194909df9e7c6c37b31fb0f17c6f4acf"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"fce89482b26be211949df07e6a87ca8ffc11e5db","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        user \u003d self._get_user(username, hostname)"},{"line_number":364,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":365,"context_line":"            for database in databases:"},{"line_number":366,"context_line":"                if database.lower() not in CONF.ignore_dbs:"},{"line_number":367,"context_line":"                    g \u003d sql_query.Grant(permissions\u003d\u0027ALL\u0027, database\u003ddatabase,"},{"line_number":368,"context_line":"                                        user\u003duser.name, host\u003duser.host,"},{"line_number":369,"context_line":"                                        hashed\u003duser.password)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F96do%3D","line":366,"in_reply_to":"AAAATn%2F97x4%3D","updated":"2013-12-04 15:14:34.000000000","message":"Pls see my comment above to Slick\u0027s comment.\n\nI agree that the validation does not cover every case but decided to go with consistency for now.\n\nThe main bug I\u0027m trying to address is with the \u0027mysql\u0027 database where a user can modify other users\u0027s passwords.  I think that it\u0027s always lowercase \u0027mysql\u0027 across all operating systems but need to verify on a windows machine.","commit_id":"e36ac19e194909df9e7c6c37b31fb0f17c6f4acf"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"4c532f6e7740aca482900339aa875198a102dd31","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":369,"context_line":"            for database in databases:"},{"line_number":370,"context_line":"                if database.lower() not in CONF.ignore_dbs:"},{"line_number":371,"context_line":"                    g \u003d sql_query.Grant(permissions\u003d\u0027ALL\u0027, database\u003ddatabase,"},{"line_number":372,"context_line":"                                        user\u003duser.name, host\u003duser.host,"},{"line_number":373,"context_line":"                                        hashed\u003duser.password)"},{"line_number":374,"context_line":"                    t \u003d text(str(g))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9LfE%3D","line":371,"updated":"2013-12-15 16:28:55.000000000","message":"why are we directly putting here the check over ignore_dbs\n\nWe have a well define model for this in guestagent.db.models.ValidatedMySQLDatabase\n\nValidatedMySQLDatabase class inherited from MySQLDatabase has a method _is_valid which already has this implementation, so no need of redefinition, we could directly use this.","commit_id":"890100818e86617bacfa97f9d51689f951d754b9"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"64c8bfa74f791f58be2dc96ad2e6864e8052cd12","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":369,"context_line":"            for database in databases:"},{"line_number":370,"context_line":"                if database.lower() not in CONF.ignore_dbs:"},{"line_number":371,"context_line":"                    g \u003d sql_query.Grant(permissions\u003d\u0027ALL\u0027, database\u003ddatabase,"},{"line_number":372,"context_line":"                                        user\u003duser.name, host\u003duser.host,"},{"line_number":373,"context_line":"                                        hashed\u003duser.password)"},{"line_number":374,"context_line":"                    t \u003d text(str(g))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2F78c%3D","line":371,"in_reply_to":"AAAAT3%2F%2F%2Buc%3D","updated":"2013-12-26 18:48:01.000000000","message":"not sure what you mean.  perhaps you can provide an example?\nThx!","commit_id":"890100818e86617bacfa97f9d51689f951d754b9"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"c919425d88d832cde90cafc8563c394ab423fd5f","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":369,"context_line":"            for database in databases:"},{"line_number":370,"context_line":"                if database.lower() not in CONF.ignore_dbs:"},{"line_number":371,"context_line":"                    g \u003d sql_query.Grant(permissions\u003d\u0027ALL\u0027, database\u003ddatabase,"},{"line_number":372,"context_line":"                                        user\u003duser.name, host\u003duser.host,"},{"line_number":373,"context_line":"                                        hashed\u003duser.password)"},{"line_number":374,"context_line":"                    t \u003d text(str(g))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2Fu9I%3D","line":371,"in_reply_to":"AAAAT3%2F%2F2HQ%3D","updated":"2014-01-02 18:02:56.000000000","message":"Let\u0027s chat on IRC.  The code above validates database hostnames not users.  Perhaps we are not talking about the same thing?","commit_id":"890100818e86617bacfa97f9d51689f951d754b9"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"d995108c4eb9f365f153545b802a3056394f259f","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":369,"context_line":"            for database in databases:"},{"line_number":370,"context_line":"                if database.lower() not in CONF.ignore_dbs:"},{"line_number":371,"context_line":"                    g \u003d sql_query.Grant(permissions\u003d\u0027ALL\u0027, database\u003ddatabase,"},{"line_number":372,"context_line":"                                        user\u003duser.name, host\u003duser.host,"},{"line_number":373,"context_line":"                                        hashed\u003duser.password)"},{"line_number":374,"context_line":"                    t \u003d text(str(g))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2F2HQ%3D","line":371,"in_reply_to":"AAAAT3%2F%2F78c%3D","updated":"2013-12-30 09:29:30.000000000","message":"i meant something like it checks for users in MySqlAdmin._get_users","commit_id":"890100818e86617bacfa97f9d51689f951d754b9"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"a3552c4ffc163781efa534cfc84dc2633433f506","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":369,"context_line":"            for database in databases:"},{"line_number":370,"context_line":"                if database.lower() not in CONF.ignore_dbs:"},{"line_number":371,"context_line":"                    g \u003d sql_query.Grant(permissions\u003d\u0027ALL\u0027, database\u003ddatabase,"},{"line_number":372,"context_line":"                                        user\u003duser.name, host\u003duser.host,"},{"line_number":373,"context_line":"                                        hashed\u003duser.password)"},{"line_number":374,"context_line":"                    t \u003d text(str(g))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2FuVw%3D","line":371,"in_reply_to":"AAAAT3%2F%2Fu9I%3D","updated":"2014-01-02 21:24:15.000000000","message":"Dan,\n\nYou should use the ValidatedMySQLDatabase class for this. Look above @ line 284 in this review or here on github.\n\nhttps://github.com/openstack/trove/blob/master/trove/guestagent/db/models.py#L337\n\nDoes that make it clear?","commit_id":"890100818e86617bacfa97f9d51689f951d754b9"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"256fbba3a68102ff65bbe3b49e1896507ea4fbe5","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":369,"context_line":"            for database in databases:"},{"line_number":370,"context_line":"                if database.lower() not in CONF.ignore_dbs:"},{"line_number":371,"context_line":"                    g \u003d sql_query.Grant(permissions\u003d\u0027ALL\u0027, database\u003ddatabase,"},{"line_number":372,"context_line":"                                        user\u003duser.name, host\u003duser.host,"},{"line_number":373,"context_line":"                                        hashed\u003duser.password)"},{"line_number":374,"context_line":"                    t \u003d text(str(g))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2FuLo%3D","line":371,"in_reply_to":"AAAAT3%2F%2FuMs%3D","updated":"2014-01-02 22:12:59.000000000","message":"I\u0027d say you shouldnt have to. but you gotta do what you gotta do. :)","commit_id":"890100818e86617bacfa97f9d51689f951d754b9"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e6721214936d3b8e6f491c884977fe455becfa65","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":369,"context_line":"            for database in databases:"},{"line_number":370,"context_line":"                if database.lower() not in CONF.ignore_dbs:"},{"line_number":371,"context_line":"                    g \u003d sql_query.Grant(permissions\u003d\u0027ALL\u0027, database\u003ddatabase,"},{"line_number":372,"context_line":"                                        user\u003duser.name, host\u003duser.host,"},{"line_number":373,"context_line":"                                        hashed\u003duser.password)"},{"line_number":374,"context_line":"                    t \u003d text(str(g))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2FuMs%3D","line":371,"in_reply_to":"AAAAT3%2F%2FuVw%3D","updated":"2014-01-02 22:09:17.000000000","message":"Thanks Craig,  yep I can definitely do that!\nIt is a bit odd to use a setter but hey it is what it is.\n\nFYI:  I may have to abandon this and start a new review.","commit_id":"890100818e86617bacfa97f9d51689f951d754b9"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"acfa2e281c5d75ab6b242c05155050fa19e142bc","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":369,"context_line":"            for database in databases:"},{"line_number":370,"context_line":"                if database.lower() not in CONF.ignore_dbs:"},{"line_number":371,"context_line":"                    g \u003d sql_query.Grant(permissions\u003d\u0027ALL\u0027, database\u003ddatabase,"},{"line_number":372,"context_line":"                                        user\u003duser.name, host\u003duser.host,"},{"line_number":373,"context_line":"                                        hashed\u003duser.password)"},{"line_number":374,"context_line":"                    t \u003d text(str(g))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2F%2Buc%3D","line":371,"in_reply_to":"AAAATn%2F87Bk%3D","updated":"2013-12-25 15:45:38.000000000","message":"i am not asking you to use method, but rather make use of class to make your object, the approach you are using is not appropriate.","commit_id":"890100818e86617bacfa97f9d51689f951d754b9"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"984bc9c8224c4422cd4188ab791686163eb45a24","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":369,"context_line":"            for database in databases:"},{"line_number":370,"context_line":"                if database.lower() not in CONF.ignore_dbs:"},{"line_number":371,"context_line":"                    g \u003d sql_query.Grant(permissions\u003d\u0027ALL\u0027, database\u003ddatabase,"},{"line_number":372,"context_line":"                                        user\u003duser.name, host\u003duser.host,"},{"line_number":373,"context_line":"                                        hashed\u003duser.password)"},{"line_number":374,"context_line":"                    t \u003d text(str(g))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F87Bk%3D","line":371,"in_reply_to":"AAAATn%2F9LfE%3D","updated":"2013-12-18 18:52:14.000000000","message":"_is_valid is \"private\", this seemed like the least invasive way to handle it.  Otherwise we\u0027d have to consider promoting _is_valid to a public method which means renaming it to is_valid and testing everything again.  We could wrap it by having another public method call it but that seems no better that this.\n\nThe real downer is that I could have used ValidateMySQLDatabases the way it was intended except for the fact the arg passed for databases is actually a list of strings and not Database objects (like the rest of the class)","commit_id":"890100818e86617bacfa97f9d51689f951d754b9"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"ccb9de0bbed55ecc273944f444afbed936acc7b0","unresolved":false,"context_lines":[{"line_number":292,"context_line":"                    self.grant_access(uname, host, db_access)"},{"line_number":293,"context_line":"                except Exception:"},{"line_number":294,"context_line":"                    db_names \u003d \u0027,\u0027.join(db_access)"},{"line_number":295,"context_line":"                    LOG.info(_(\"Grant access to %s is not allowed\") % db_names)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def create_database(self, databases):"},{"line_number":298,"context_line":"        \"\"\"Create the list of specified databases.\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2F98o%3D","line":295,"updated":"2014-01-06 04:05:21.000000000","message":"exception handling should be inside grant_access so it lessens the handling of exception in calling methods.\nLike you needed to do it twice, if you had in called method, you would have written it only once.","commit_id":"bee3e900f489497c36d2c340d1e8a10103f98d70"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"72ce4b323d9975b683c9e5c062163ec6e32e87a0","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                    except ValueError:"},{"line_number":385,"context_line":"                        LOG.info(_("},{"line_number":386,"context_line":"                            \"Grant access to %s is not allowed\") % database)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"                    g \u003d sql_query.Grant(permissions\u003d\u0027ALL\u0027, database\u003dmydb.name,"},{"line_number":389,"context_line":"                                        user\u003duser.name, host\u003duser.host,"},{"line_number":390,"context_line":"                                        hashed\u003duser.password)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FAQk%3D","line":387,"updated":"2014-01-19 13:32:19.000000000","message":"If there is any invalid database requested, though user would not  get the desired access, but it seems there will not be any communication to user.","commit_id":"e47be9c5cc9ab4e42e21dfa39886bfdbba686621"}],"trove/tests/api/user_access.py":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"ccb9de0bbed55ecc273944f444afbed936acc7b0","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                                                       \u0027mysql\u0027,"},{"line_number":111,"context_line":"                                                       \u0027information_schema\u0027]]"},{"line_number":112,"context_line":"        self._test_access(users, databases, expected_response)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def _reset_access(self):"},{"line_number":115,"context_line":"        for user in self.users:"},{"line_number":116,"context_line":"            for database in self.databases + self.ghostdbs:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2F98M%3D","line":113,"updated":"2014-01-06 04:05:21.000000000","message":"how are we testing the course that if user request an access on  ignore list of databases.","commit_id":"bee3e900f489497c36d2c340d1e8a10103f98d70"}]}
