)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":39300,"name":"Olessya Khussainova","display_name":"Olessya Khussainova","email":"olessya.khussainova@ps.kz","username":"Cellofun"},"change_message_id":"5a99a9dc083d953a59cc7bb2adfb2ac1d610a0b9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"6751f383_fc6caf0c","updated":"2026-08-17 09:29:37.000000000","message":"LGTM","commit_id":"59c0ce0f4e91ff3a564f61fc1656034d366126cc"},{"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":"182a1ed0af1894ab141715c465aac9ffd9464d1a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"5743c278_c0207cdf","updated":"2026-08-17 08:03:09.000000000","message":"recheck","commit_id":"59c0ce0f4e91ff3a564f61fc1656034d366126cc"}],"api-ref/source/databases.inc":[{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"c2faa0fad02f346a766d6c0a0bdd6ea05b2ae234","unresolved":true,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"List instance databases for a user"},{"line_number":188,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":".. rest_method::  POST /v1.0/{project_id}/instances/{instanceId}/users/access/action"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":3,"id":"436bd2d5_1f0c9c69","line":188,"updated":"2026-08-11 14:42:30.000000000","message":"```suggestion\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~```","commit_id":"aebbb4055875d3c8e660cd78053d3a8c39b456e4"},{"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":"636b138acfee719b9f37fd960a57604d4c803b05","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"List instance databases for a user"},{"line_number":188,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":".. rest_method::  POST /v1.0/{project_id}/instances/{instanceId}/users/access/action"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":3,"id":"765cd019_e561739a","line":188,"in_reply_to":"436bd2d5_1f0c9c69","updated":"2026-08-11 14:45:32.000000000","message":"Done, thnx","commit_id":"aebbb4055875d3c8e660cd78053d3a8c39b456e4"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":39300,"name":"Olessya Khussainova","display_name":"Olessya Khussainova","email":"olessya.khussainova@ps.kz","username":"Cellofun"},"change_message_id":"23e07dbdaf1b33e38bc3527d3b3d332a13f1184b","unresolved":true,"context_lines":[{"line_number":310,"context_line":"  type: string"},{"line_number":311,"context_line":"database_action_object:"},{"line_number":312,"context_line":"  description: |"},{"line_number":313,"context_line":"    Object containing database_name paremeter."},{"line_number":314,"context_line":"  in: body"},{"line_number":315,"context_line":"  required: true"},{"line_number":316,"context_line":"  type: object"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"ef10cfb7_3ed5801e","line":313,"updated":"2026-08-14 13:55:14.000000000","message":"A tiny typo: parameter","commit_id":"114391a7c80e60d89267c0a4524d9bf79f6dcf59"},{"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":"e73281235c4679a17de887ca798a0af12bb70e9c","unresolved":false,"context_lines":[{"line_number":310,"context_line":"  type: string"},{"line_number":311,"context_line":"database_action_object:"},{"line_number":312,"context_line":"  description: |"},{"line_number":313,"context_line":"    Object containing database_name paremeter."},{"line_number":314,"context_line":"  in: body"},{"line_number":315,"context_line":"  required: true"},{"line_number":316,"context_line":"  type: object"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"ad6e70f7_a288ee0f","line":313,"in_reply_to":"ef10cfb7_3ed5801e","updated":"2026-08-15 12:18:27.000000000","message":"Done","commit_id":"114391a7c80e60d89267c0a4524d9bf79f6dcf59"}],"api-ref/source/users.inc":[{"author":{"_account_id":39300,"name":"Olessya Khussainova","display_name":"Olessya Khussainova","email":"olessya.khussainova@ps.kz","username":"Cellofun"},"change_message_id":"23e07dbdaf1b33e38bc3527d3b3d332a13f1184b","unresolved":true,"context_lines":[{"line_number":176,"context_line":"   - instanceId: instanceId"},{"line_number":177,"context_line":"   - show: user_action_object"},{"line_number":178,"context_line":"   - show.user_name: user_name1"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"Request Example"},{"line_number":182,"context_line":"----------------"}],"source_content_type":"text/x-c++src","patch_set":8,"id":"64f0398e_290e7468","line":179,"updated":"2026-08-14 13:55:14.000000000","message":"Seems like `show.user_host: user_host` is missing","commit_id":"114391a7c80e60d89267c0a4524d9bf79f6dcf59"},{"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":"e73281235c4679a17de887ca798a0af12bb70e9c","unresolved":false,"context_lines":[{"line_number":176,"context_line":"   - instanceId: instanceId"},{"line_number":177,"context_line":"   - show: user_action_object"},{"line_number":178,"context_line":"   - show.user_name: user_name1"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"Request Example"},{"line_number":182,"context_line":"----------------"}],"source_content_type":"text/x-c++src","patch_set":8,"id":"de648728_a13c2c9b","line":179,"in_reply_to":"64f0398e_290e7468","updated":"2026-08-15 12:18:27.000000000","message":"Done","commit_id":"114391a7c80e60d89267c0a4524d9bf79f6dcf59"},{"author":{"_account_id":39300,"name":"Olessya Khussainova","display_name":"Olessya Khussainova","email":"olessya.khussainova@ps.kz","username":"Cellofun"},"change_message_id":"23e07dbdaf1b33e38bc3527d3b3d332a13f1184b","unresolved":true,"context_lines":[{"line_number":247,"context_line":"   - update: user_action_object"},{"line_number":248,"context_line":"   - update.user_name: user_name1"},{"line_number":249,"context_line":"   - update.user_host: user_host"},{"line_number":250,"context_line":"   - update.user: users"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"Request Example"},{"line_number":253,"context_line":"---------------"}],"source_content_type":"text/x-c++src","patch_set":8,"id":"0d41a585_d0bbd35a","line":250,"updated":"2026-08-14 13:55:14.000000000","message":"In `parameters.yaml`, `users` is defined as an array, while `update.user` is an object. Shouldn\u0027t a separate object parameter be added here?","commit_id":"114391a7c80e60d89267c0a4524d9bf79f6dcf59"},{"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":"e73281235c4679a17de887ca798a0af12bb70e9c","unresolved":false,"context_lines":[{"line_number":247,"context_line":"   - update: user_action_object"},{"line_number":248,"context_line":"   - update.user_name: user_name1"},{"line_number":249,"context_line":"   - update.user_host: user_host"},{"line_number":250,"context_line":"   - update.user: users"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"Request Example"},{"line_number":253,"context_line":"---------------"}],"source_content_type":"text/x-c++src","patch_set":8,"id":"5e9df03d_c527fd3e","line":250,"in_reply_to":"0d41a585_d0bbd35a","updated":"2026-08-15 12:18:27.000000000","message":"Done","commit_id":"114391a7c80e60d89267c0a4524d9bf79f6dcf59"}],"trove/common/apischema.py":[{"author":{"_account_id":39300,"name":"Olessya Khussainova","display_name":"Olessya Khussainova","email":"olessya.khussainova@ps.kz","username":"Cellofun"},"change_message_id":"23e07dbdaf1b33e38bc3527d3b3d332a13f1184b","unresolved":true,"context_lines":[{"line_number":744,"context_line":"    }"},{"line_number":745,"context_line":"}"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"database \u003d {"},{"line_number":748,"context_line":"    \"action\": {"},{"line_number":749,"context_line":"        \"oneOf\": ["},{"line_number":750,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":8,"id":"26ea45c4_50583be3","line":747,"updated":"2026-08-14 13:55:14.000000000","message":"Looks like this new database `delete` action schema isn\u0027t wired into `SchemaController`, it still uses `apischema.dbschema`","commit_id":"114391a7c80e60d89267c0a4524d9bf79f6dcf59"},{"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":"e73281235c4679a17de887ca798a0af12bb70e9c","unresolved":false,"context_lines":[{"line_number":744,"context_line":"    }"},{"line_number":745,"context_line":"}"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"database \u003d {"},{"line_number":748,"context_line":"    \"action\": {"},{"line_number":749,"context_line":"        \"oneOf\": ["},{"line_number":750,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":8,"id":"0982a282_237cc1fb","line":747,"in_reply_to":"26ea45c4_50583be3","updated":"2026-08-15 12:18:27.000000000","message":"Done","commit_id":"114391a7c80e60d89267c0a4524d9bf79f6dcf59"},{"author":{"_account_id":39300,"name":"Olessya Khussainova","display_name":"Olessya Khussainova","email":"olessya.khussainova@ps.kz","username":"Cellofun"},"change_message_id":"c209b9cd3c5fce6846f1fc265de25d911f78118c","unresolved":true,"context_lines":[{"line_number":687,"context_line":"        }"},{"line_number":688,"context_line":"    },"},{"line_number":689,"context_line":"    \"action\": {"},{"line_number":690,"context_line":"        \"oneOf\": ["},{"line_number":691,"context_line":"            {"},{"line_number":692,"context_line":"                \"type\": \"object\","},{"line_number":693,"context_line":"                \"required\": [\"show\"],"}],"source_content_type":"text/x-python","patch_set":11,"id":"d46a0fac_1aa2a094","line":690,"updated":"2026-10-20 05:54:54.000000000","message":"This new `oneOf` can produce an error with an empty `error.path`, while `format_validation_msg()` accesses `path[0]`. So `{\"show\": {}}` raises `IndexError` and returns HTTP 500 instead of 400.","commit_id":"583d6df50a2e974ad9f81b3cb83358ef3f27fcfd"}],"trove/common/db/mysql/models.py":[{"author":{"_account_id":39300,"name":"Olessya Khussainova","display_name":"Olessya Khussainova","email":"olessya.khussainova@ps.kz","username":"Cellofun"},"change_message_id":"23e07dbdaf1b33e38bc3527d3b3d332a13f1184b","unresolved":true,"context_lines":[{"line_number":134,"context_line":"    def _is_valid_user_name(self, value):"},{"line_number":135,"context_line":"        return self._is_valid_string(value)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def _is_valid_password(self, value):"},{"line_number":138,"context_line":"        return self._is_valid_string(value)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _is_valid_host_name(self, value):"}],"source_content_type":"text/x-python","patch_set":8,"id":"4b1f96d4_88c3d924","side":"PARENT","line":137,"updated":"2026-08-14 13:55:14.000000000","message":"This removes validation not only for usernames but also for passwords, is that intentional?","commit_id":"af8ebb3604d092b522d9376afe50ac01e58f1e31"},{"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":"e73281235c4679a17de887ca798a0af12bb70e9c","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    def _is_valid_user_name(self, value):"},{"line_number":135,"context_line":"        return self._is_valid_string(value)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def _is_valid_password(self, value):"},{"line_number":138,"context_line":"        return self._is_valid_string(value)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _is_valid_host_name(self, value):"}],"source_content_type":"text/x-python","patch_set":8,"id":"646e3085_109de637","side":"PARENT","line":137,"in_reply_to":"4b1f96d4_88c3d924","updated":"2026-08-15 12:18:27.000000000","message":"IMO, the password should be an arbitrary value and not be limited by some internal Trove logic. In addition, the restrictions on passwords aren\u0027t documented anywhere, so I think it is legitimate to introduce these changes in the current MR.\n\nBTW, thank you for the review; all your points hit the mark.","commit_id":"af8ebb3604d092b522d9376afe50ac01e58f1e31"},{"author":{"_account_id":39300,"name":"Olessya Khussainova","display_name":"Olessya Khussainova","email":"olessya.khussainova@ps.kz","username":"Cellofun"},"change_message_id":"c209b9cd3c5fce6846f1fc265de25d911f78118c","unresolved":true,"context_lines":[{"line_number":121,"context_line":"class MySQLUser(models.DatastoreUser):"},{"line_number":122,"context_line":"    \"\"\"Represents a MySQL User and its associated properties.\"\"\""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    not_supported_chars \u003d re.compile(r\"\"\"^\\s|\\s$|\u0027|\"|;|`|,|/|\\\\\"\"\")"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def _is_valid_string(self, value):"},{"line_number":127,"context_line":"        if (not value or"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f306e1d_a81a012b","side":"PARENT","line":124,"updated":"2026-10-20 05:54:54.000000000","message":"`_get_user()` still uses `\"User \u003d \u0027%s\u0027\" % username`, so without these checks `o\u0027reilly` produces `User \u003d \u0027o\u0027reilly\u0027` and a password like `pa\u0027ss123` also breaks the queries in `CreateUser`/`SetPassword`.","commit_id":"74be25394eb840da7ec5c914f6cb8ce8be16da68"}]}
