)]}'
{"trove/common/db/models.py":[{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"erkin.mussurmankulov@ps.kz","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"f42715a7faf4e25a385c2c2d94734e53be4f5926","unresolved":true,"context_lines":[{"line_number":419,"context_line":"    def make_root(self):"},{"line_number":420,"context_line":"        self._is_root \u003d True"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    def check_reserved(self, ignored_users\u003dNone):"},{"line_number":423,"context_line":"        \"\"\"Check if the name is on the ignore_users list, meaning it is"},{"line_number":424,"context_line":"        reserved."},{"line_number":425,"context_line":"        :param ignored_users: Users to treat as reserved. Use configured users"}],"source_content_type":"text/x-python","patch_set":1,"id":"aed1caab_87c8d178","line":422,"updated":"2026-09-16 11:58:48.000000000","message":"These changes seem correct, and I\u0027m sure they work. However, it looks like we do an entirely new check here instead of using the existing design.\n\nThe minimal change that I can see is to add a new `datastore` parameter to the `DatastoreUser` constructor, which would then be passed to `cfg.get_ignored_users()`.\nIf we do it that way, all changes in this method may be reverted.","commit_id":"55714ae29b3e5776aea2a7347dca651dde60e772"}],"trove/extensions/common/common.py":[{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"erkin.mussurmankulov@ps.kz","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"f42715a7faf4e25a385c2c2d94734e53be4f5926","unresolved":true,"context_lines":[{"line_number":44,"context_line":"        raise exception.BadRequest(safe_string)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def populate_users(users, initial_databases\u003dNone, ignored_users\u003dNone):"},{"line_number":48,"context_line":"    \"\"\"Create a serializable request containing users.\"\"\""},{"line_number":49,"context_line":"    users_data \u003d []"},{"line_number":50,"context_line":"    unique_identities \u003d set()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9243420c_cd8f35df","line":47,"updated":"2026-09-16 11:58:48.000000000","message":"I\u0027m not sure whether we should modify this method. Can you please check where it\u0027s called from?","commit_id":"55714ae29b3e5776aea2a7347dca651dde60e772"}],"trove/extensions/common/models.py":[{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"erkin.mussurmankulov@ps.kz","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"f42715a7faf4e25a385c2c2d94734e53be4f5926","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    @classmethod"},{"line_number":190,"context_line":"    def load(cls, context, instance_id, username, hostname, root_user\u003dFalse):"},{"line_number":191,"context_line":"        instance \u003d load_and_verify("},{"line_number":192,"context_line":"            context, instance_id,"},{"line_number":193,"context_line":"            enabled_datastore\u003d[\u0027mysql\u0027, \u0027mariadb\u0027, \u0027postgresql\u0027])"},{"line_number":194,"context_line":"        ignored_users \u003d cfg.get_ignored_users("}],"source_content_type":"text/x-python","patch_set":1,"id":"ab2abde1_08eb3849","line":191,"updated":"2026-09-16 11:58:48.000000000","message":"I like this part, how we may simply get `instance.datastore_version.manager`.","commit_id":"55714ae29b3e5776aea2a7347dca651dde60e772"},{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"erkin.mussurmankulov@ps.kz","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"f42715a7faf4e25a385c2c2d94734e53be4f5926","unresolved":true,"context_lines":[{"line_number":191,"context_line":"        instance \u003d load_and_verify("},{"line_number":192,"context_line":"            context, instance_id,"},{"line_number":193,"context_line":"            enabled_datastore\u003d[\u0027mysql\u0027, \u0027mariadb\u0027, \u0027postgresql\u0027])"},{"line_number":194,"context_line":"        ignored_users \u003d cfg.get_ignored_users("},{"line_number":195,"context_line":"            instance.datastore_version.manager)"},{"line_number":196,"context_line":"        validate \u003d guest_models.DatastoreUser(name\u003dusername, host\u003dhostname)"},{"line_number":197,"context_line":"        if root_user:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9e9b39c1_d35a9064","line":194,"updated":"2026-09-16 11:58:48.000000000","message":"But this one is redundant if we pass the datastore manager string into the `DatastoreUser` constructor below.","commit_id":"55714ae29b3e5776aea2a7347dca651dde60e772"},{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"erkin.mussurmankulov@ps.kz","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"f42715a7faf4e25a385c2c2d94734e53be4f5926","unresolved":true,"context_lines":[{"line_number":196,"context_line":"        validate \u003d guest_models.DatastoreUser(name\u003dusername, host\u003dhostname)"},{"line_number":197,"context_line":"        if root_user:"},{"line_number":198,"context_line":"            validate.make_root()"},{"line_number":199,"context_line":"        validate.check_reserved(ignored_users\u003dignored_users)"},{"line_number":200,"context_line":"        client \u003d create_guest_client(context, instance_id)"},{"line_number":201,"context_line":"        found_user \u003d client.get_user(username\u003dusername, hostname\u003dhostname)"},{"line_number":202,"context_line":"        if not found_user:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ed7349bb_37f0cf0d","line":199,"updated":"2026-09-16 11:58:48.000000000","message":"And we can revert this also.","commit_id":"55714ae29b3e5776aea2a7347dca651dde60e772"},{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"erkin.mussurmankulov@ps.kz","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"f42715a7faf4e25a385c2c2d94734e53be4f5926","unresolved":true,"context_lines":[{"line_number":329,"context_line":"            limit\u003dlimit,"},{"line_number":330,"context_line":"            marker\u003dmarker,"},{"line_number":331,"context_line":"            include_marker\u003dinclude_marker)"},{"line_number":332,"context_line":"        if ignored_users is None:"},{"line_number":333,"context_line":"            ignored_users \u003d cfg.get_ignored_users()"},{"line_number":334,"context_line":"        model_users \u003d []"},{"line_number":335,"context_line":"        for user in user_list:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba0765eb_ad1a0e07","line":332,"updated":"2026-09-16 11:58:48.000000000","message":"I\u0027m not sure if we require this since `ignored_users` isn\u0027t used below.","commit_id":"55714ae29b3e5776aea2a7347dca651dde60e772"}],"trove/extensions/common/service.py":[{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"erkin.mussurmankulov@ps.kz","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"f42715a7faf4e25a385c2c2d94734e53be4f5926","unresolved":true,"context_lines":[{"line_number":322,"context_line":"        context \u003d req.environ[wsgi.CONTEXT_KEY]"},{"line_number":323,"context_line":"        instance \u003d self.authorize_target_action("},{"line_number":324,"context_line":"            context, \u0027user:create\u0027, instance_id)"},{"line_number":325,"context_line":"        ignored_users \u003d cfg.get_ignored_users("},{"line_number":326,"context_line":"            instance.datastore_version.manager)"},{"line_number":327,"context_line":"        context.notification \u003d notification.DBaaSUserCreate(context,"},{"line_number":328,"context_line":"                                                            request\u003dreq)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c745ed5b_dc410a69","line":325,"updated":"2026-09-16 11:58:48.000000000","message":"Probably all these changes is also redundant, since this check is performed in `User.load`","commit_id":"55714ae29b3e5776aea2a7347dca651dde60e772"}],"trove/instance/service.py":[{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"erkin.mussurmankulov@ps.kz","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"f42715a7faf4e25a385c2c2d94734e53be4f5926","unresolved":true,"context_lines":[{"line_number":454,"context_line":"        databases \u003d populate_validated_databases("},{"line_number":455,"context_line":"            body[\u0027instance\u0027].get(\u0027databases\u0027, []))"},{"line_number":456,"context_line":"        database_names \u003d [database.get(\u0027_name\u0027, \u0027\u0027) for database in databases]"},{"line_number":457,"context_line":"        ignored_users \u003d cfg.get_ignored_users(datastore_version.manager)"},{"line_number":458,"context_line":"        users \u003d None"},{"line_number":459,"context_line":"        try:"},{"line_number":460,"context_line":"            users \u003d populate_users(body[\u0027instance\u0027].get(\u0027users\u0027, []),"}],"source_content_type":"text/x-python","patch_set":1,"id":"d3319600_9bacd432","line":457,"updated":"2026-09-16 11:58:48.000000000","message":"Oh, I see now where populate users is called, but I\u0027m not sure if it\u0027s required; probably checks in `User.load()` would be enough?","commit_id":"55714ae29b3e5776aea2a7347dca651dde60e772"}],"trove/tests/unittests/mysql/test_common.py":[{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"erkin.mussurmankulov@ps.kz","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"f42715a7faf4e25a385c2c2d94734e53be4f5926","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        self.assertThat(result[0][\u0027_name\u0027], Equals(\u0027bob\u0027))"},{"line_number":64,"context_line":"        self.assertThat(result[0][\u0027_password\u0027], Equals(\u0027x\u0027))"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def test_populate_users_uses_ignored_users(self):"},{"line_number":67,"context_line":"        users \u003d [{\u0027name\u0027: \u0027bob\u0027, \u0027password\u0027: \u0027x\u0027}]"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        self.assertRaises("}],"source_content_type":"text/x-python","patch_set":1,"id":"eb9ed831_503b5b43","line":66,"updated":"2026-09-16 11:58:48.000000000","message":"We may clean unnecessary unit tests after cleanup","commit_id":"55714ae29b3e5776aea2a7347dca651dde60e772"}]}
