)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"28b26bee465e566c6580855d6f5aad35c83e98da","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"f00b123d_26084795","updated":"2024-09-17 10:41:50.000000000","message":"This looks pretty good and is passing CI now. -1 for the two potential issues. I also have a question around potential simplification.","commit_id":"6a3306513df4f553f3f3441d86a3093b8a52ff09"}],"keystone/catalog/schema.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"28b26bee465e566c6580855d6f5aad35c83e98da","unresolved":true,"context_lines":[{"line_number":71,"context_line":"}"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"# Common schema of `Service` resource"},{"line_number":74,"context_line":"service_schema: dict[str, Any] \u003d {"},{"line_number":75,"context_line":"    \"type\": \"object\","},{"line_number":76,"context_line":"    \"description\": \"A service object\","},{"line_number":77,"context_line":"    \"properties\": {"}],"source_content_type":"text/x-python","patch_set":8,"id":"5e0d2a25_580c0ddf","line":74,"range":{"start_line":74,"start_character":16,"end_line":74,"end_character":30},"updated":"2024-09-17 10:41:50.000000000","message":"fyi, dicts are only subscriptable in Python 3.9+. Since Keystone technically still supports Python 3.8 (see `python_requires` in `setup.cfg`) I think you need to do\n\n\n```suggestion\nservice_schema: Dict[str, Any] \u003d {\n```\n\nor\n\n```\nservice_schema: ty.Dict[str, ty.Any]\n```","commit_id":"6a3306513df4f553f3f3441d86a3093b8a52ff09"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"664cd6810e17f4d36c339f9eda4427691a170156","unresolved":true,"context_lines":[{"line_number":71,"context_line":"}"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"# Common schema of `Service` resource"},{"line_number":74,"context_line":"service_schema: dict[str, Any] \u003d {"},{"line_number":75,"context_line":"    \"type\": \"object\","},{"line_number":76,"context_line":"    \"description\": \"A service object\","},{"line_number":77,"context_line":"    \"properties\": {"}],"source_content_type":"text/x-python","patch_set":8,"id":"90f660af_d2bf426c","line":74,"range":{"start_line":74,"start_character":16,"end_line":74,"end_character":30},"in_reply_to":"02e841c6_932aacbc","updated":"2024-09-17 16:36:19.000000000","message":"we are going to drop py3.8 asap (as you already landed in keystoneauth) so this is not an issue","commit_id":"6a3306513df4f553f3f3441d86a3093b8a52ff09"},{"author":{"_account_id":35548,"name":"Antonia Gaete","email":"antoniagaete@osuosl.org","username":"antoniagaete"},"change_message_id":"ea6e11e7ea9f6f9e15c816eaa94117419aceeebb","unresolved":true,"context_lines":[{"line_number":71,"context_line":"}"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"# Common schema of `Service` resource"},{"line_number":74,"context_line":"service_schema: dict[str, Any] \u003d {"},{"line_number":75,"context_line":"    \"type\": \"object\","},{"line_number":76,"context_line":"    \"description\": \"A service object\","},{"line_number":77,"context_line":"    \"properties\": {"}],"source_content_type":"text/x-python","patch_set":8,"id":"02e841c6_932aacbc","line":74,"range":{"start_line":74,"start_character":16,"end_line":74,"end_character":30},"in_reply_to":"5e0d2a25_580c0ddf","updated":"2024-09-17 16:21:45.000000000","message":"That makes sense. I can do it that way, was just following Artem\u0027s changes https://review.opendev.org/c/openstack/keystone/+/923324/8/keystone/credential/schema.py","commit_id":"6a3306513df4f553f3f3441d86a3093b8a52ff09"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2bf92d4c95eed9cfe9418536cb0a3557f04854c7","unresolved":false,"context_lines":[{"line_number":71,"context_line":"}"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"# Common schema of `Service` resource"},{"line_number":74,"context_line":"service_schema: dict[str, Any] \u003d {"},{"line_number":75,"context_line":"    \"type\": \"object\","},{"line_number":76,"context_line":"    \"description\": \"A service object\","},{"line_number":77,"context_line":"    \"properties\": {"}],"source_content_type":"text/x-python","patch_set":8,"id":"283e8d2e_6b65c7ca","line":74,"range":{"start_line":74,"start_character":16,"end_line":74,"end_character":30},"in_reply_to":"90f660af_d2bf426c","updated":"2024-09-17 18:11:31.000000000","message":"Ack, thanks for confirming.","commit_id":"6a3306513df4f553f3f3441d86a3093b8a52ff09"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"28b26bee465e566c6580855d6f5aad35c83e98da","unresolved":true,"context_lines":[{"line_number":82,"context_line":"                \"The UUID of the service to which the endpoint belongs.\""},{"line_number":83,"context_line":"            ),"},{"line_number":84,"context_line":"        },"},{"line_number":85,"context_line":"        \"name\": {"},{"line_number":86,"context_line":"            \"type\": \"string\","},{"line_number":87,"context_line":"            \"description\": \"The service name.\","},{"line_number":88,"context_line":"        },"},{"line_number":89,"context_line":"        \"links\": response_types.resource_links,"},{"line_number":90,"context_line":"        **_service_properties,"},{"line_number":91,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":8,"id":"f2f80a89_a69639a2","line":88,"range":{"start_line":85,"start_character":0,"end_line":88,"end_character":10},"updated":"2024-09-17 10:41:50.000000000","message":"Ah, I\u0027m guessing this is what you and @artem.goncharov@gmail.com were talking about recently? Namely, that there is a limit on the name in requests but not in responses. Do we care? The 255 limit looks like a DB-enforced limit so realistically the response field will *always* be \u003c 255 anyway. Might as well keep them the same (and combine `_service_name_properties` back into `_service_properties`), no?","commit_id":"6a3306513df4f553f3f3441d86a3093b8a52ff09"},{"author":{"_account_id":35548,"name":"Antonia Gaete","email":"antoniagaete@osuosl.org","username":"antoniagaete"},"change_message_id":"736824c8e0fbb85cacb31606eaf5843b8c67da91","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                \"The UUID of the service to which the endpoint belongs.\""},{"line_number":83,"context_line":"            ),"},{"line_number":84,"context_line":"        },"},{"line_number":85,"context_line":"        \"name\": {"},{"line_number":86,"context_line":"            \"type\": \"string\","},{"line_number":87,"context_line":"            \"description\": \"The service name.\","},{"line_number":88,"context_line":"        },"},{"line_number":89,"context_line":"        \"links\": response_types.resource_links,"},{"line_number":90,"context_line":"        **_service_properties,"},{"line_number":91,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":8,"id":"ccd620c6_d2493674","line":88,"range":{"start_line":85,"start_character":0,"end_line":88,"end_character":10},"in_reply_to":"02da4046_a3880ec4","updated":"2024-11-01 19:52:04.000000000","message":"Done","commit_id":"6a3306513df4f553f3f3441d86a3093b8a52ff09"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2bf92d4c95eed9cfe9418536cb0a3557f04854c7","unresolved":true,"context_lines":[{"line_number":82,"context_line":"                \"The UUID of the service to which the endpoint belongs.\""},{"line_number":83,"context_line":"            ),"},{"line_number":84,"context_line":"        },"},{"line_number":85,"context_line":"        \"name\": {"},{"line_number":86,"context_line":"            \"type\": \"string\","},{"line_number":87,"context_line":"            \"description\": \"The service name.\","},{"line_number":88,"context_line":"        },"},{"line_number":89,"context_line":"        \"links\": response_types.resource_links,"},{"line_number":90,"context_line":"        **_service_properties,"},{"line_number":91,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":8,"id":"02da4046_a3880ec4","line":88,"range":{"start_line":85,"start_character":0,"end_line":88,"end_character":10},"in_reply_to":"23d27fbf_f8d35a79","updated":"2024-09-17 18:11:31.000000000","message":"Okay. That is unfortunate 😞 In this case, I guess we want:\n\n```\n        \"minLength\": 0,\n        \"maxLength\": 255,\n```\n\nhere?\n\nWe can probably also be a bit cleverer and de-dupe here but that\u0027s for later.","commit_id":"6a3306513df4f553f3f3441d86a3093b8a52ff09"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"664cd6810e17f4d36c339f9eda4427691a170156","unresolved":true,"context_lines":[{"line_number":82,"context_line":"                \"The UUID of the service to which the endpoint belongs.\""},{"line_number":83,"context_line":"            ),"},{"line_number":84,"context_line":"        },"},{"line_number":85,"context_line":"        \"name\": {"},{"line_number":86,"context_line":"            \"type\": \"string\","},{"line_number":87,"context_line":"            \"description\": \"The service name.\","},{"line_number":88,"context_line":"        },"},{"line_number":89,"context_line":"        \"links\": response_types.resource_links,"},{"line_number":90,"context_line":"        **_service_properties,"},{"line_number":91,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":8,"id":"69f70c6d_191cbfa4","line":88,"range":{"start_line":85,"start_character":0,"end_line":88,"end_character":10},"in_reply_to":"3a681a9f_08d5a75d","updated":"2024-09-17 16:36:19.000000000","message":"no, we should not remove any of the known constraints. It may sound useless and logical, but the idea of the whole work is to expose ALL available information (independent on what is it useful for). I am honestly sick of all \"assumptions\" done across the code base and I want us to be as explicit as possible. On the other side we should also keep this validation to prevent DB write failures which would be absolutely unclear to users.","commit_id":"6a3306513df4f553f3f3441d86a3093b8a52ff09"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"46711a165e2952380d85b39400e6318aa8ac0d24","unresolved":true,"context_lines":[{"line_number":82,"context_line":"                \"The UUID of the service to which the endpoint belongs.\""},{"line_number":83,"context_line":"            ),"},{"line_number":84,"context_line":"        },"},{"line_number":85,"context_line":"        \"name\": {"},{"line_number":86,"context_line":"            \"type\": \"string\","},{"line_number":87,"context_line":"            \"description\": \"The service name.\","},{"line_number":88,"context_line":"        },"},{"line_number":89,"context_line":"        \"links\": response_types.resource_links,"},{"line_number":90,"context_line":"        **_service_properties,"},{"line_number":91,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f2f25d0_5b410c15","line":88,"range":{"start_line":85,"start_character":0,"end_line":88,"end_character":10},"in_reply_to":"69f70c6d_191cbfa4","updated":"2024-09-17 17:39:05.000000000","message":"I\u0027m not suggestiong to remove constraints: I\u0027m suggesting to add it.\n\nThis schema is used for response bodies. As there is no way to create a service with 1 \u003e len(name) \u003e 255, there is no way to retrieve a service without these constraints. Ergo, we should use the same constraint across both, right?\n\nThis should be a good thing since it normalizes our schema *and* adds more constraints for code generation.","commit_id":"6a3306513df4f553f3f3441d86a3093b8a52ff09"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"73954ca48dd45e9e9a2dddbff61343282b8fcfb5","unresolved":true,"context_lines":[{"line_number":82,"context_line":"                \"The UUID of the service to which the endpoint belongs.\""},{"line_number":83,"context_line":"            ),"},{"line_number":84,"context_line":"        },"},{"line_number":85,"context_line":"        \"name\": {"},{"line_number":86,"context_line":"            \"type\": \"string\","},{"line_number":87,"context_line":"            \"description\": \"The service name.\","},{"line_number":88,"context_line":"        },"},{"line_number":89,"context_line":"        \"links\": response_types.resource_links,"},{"line_number":90,"context_line":"        **_service_properties,"},{"line_number":91,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":8,"id":"23d27fbf_f8d35a79","line":88,"range":{"start_line":85,"start_character":0,"end_line":88,"end_character":10},"in_reply_to":"7f2f25d0_5b410c15","updated":"2024-09-17 17:44:24.000000000","message":"ok, then both Antonia and I misunderstood your comment. Unfortunately there is way to create service with `1 \u003e len(name) \u003e 255` - you do not specify the name in the create request and keystone will return \u0027\u0027 once you fetch such. So on create request the field is 1\u003ename\u003e255 but optional, on response you get empty or 1\u003ename\u003e255","commit_id":"6a3306513df4f553f3f3441d86a3093b8a52ff09"},{"author":{"_account_id":35548,"name":"Antonia Gaete","email":"antoniagaete@osuosl.org","username":"antoniagaete"},"change_message_id":"ea6e11e7ea9f6f9e15c816eaa94117419aceeebb","unresolved":true,"context_lines":[{"line_number":82,"context_line":"                \"The UUID of the service to which the endpoint belongs.\""},{"line_number":83,"context_line":"            ),"},{"line_number":84,"context_line":"        },"},{"line_number":85,"context_line":"        \"name\": {"},{"line_number":86,"context_line":"            \"type\": \"string\","},{"line_number":87,"context_line":"            \"description\": \"The service name.\","},{"line_number":88,"context_line":"        },"},{"line_number":89,"context_line":"        \"links\": response_types.resource_links,"},{"line_number":90,"context_line":"        **_service_properties,"},{"line_number":91,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a681a9f_08d5a75d","line":88,"range":{"start_line":85,"start_character":0,"end_line":88,"end_character":10},"in_reply_to":"f2f80a89_a69639a2","updated":"2024-09-17 16:21:45.000000000","message":"Yes, though the issue we found was the limit being \u003c 1 in the response when the request is made with an empty (\u003c 1) string. For that reason I had to split up `_service_name_properties` from `_service_properties`. However following your logic I could remove the 255 limit since the DB enforces it anyway.","commit_id":"6a3306513df4f553f3f3441d86a3093b8a52ff09"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"28b26bee465e566c6580855d6f5aad35c83e98da","unresolved":true,"context_lines":[{"line_number":129,"context_line":"        \"service\": {"},{"line_number":130,"context_line":"            \"type\": \"object\","},{"line_number":131,"context_line":"            \"properties\": {"},{"line_number":132,"context_line":"                \"id\": {"},{"line_number":133,"context_line":"                    \"type\": \"string\","},{"line_number":134,"context_line":"                    \"description\": ("},{"line_number":135,"context_line":"                        \"The UUID of the service to which the \""},{"line_number":136,"context_line":"                        \"endpoint belongs.\""},{"line_number":137,"context_line":"                    ),"},{"line_number":138,"context_line":"                },"},{"line_number":139,"context_line":"                **_service_properties,"},{"line_number":140,"context_line":"                **_service_name_properties,"},{"line_number":141,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":8,"id":"9edbfe24_22610d53","line":138,"range":{"start_line":132,"start_character":0,"end_line":138,"end_character":18},"updated":"2024-09-17 10:41:50.000000000","message":"Is this supposed to be here? It wasn\u0027t in `service_create`","commit_id":"6a3306513df4f553f3f3441d86a3093b8a52ff09"},{"author":{"_account_id":35548,"name":"Antonia Gaete","email":"antoniagaete@osuosl.org","username":"antoniagaete"},"change_message_id":"ea6e11e7ea9f6f9e15c816eaa94117419aceeebb","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        \"service\": {"},{"line_number":130,"context_line":"            \"type\": \"object\","},{"line_number":131,"context_line":"            \"properties\": {"},{"line_number":132,"context_line":"                \"id\": {"},{"line_number":133,"context_line":"                    \"type\": \"string\","},{"line_number":134,"context_line":"                    \"description\": ("},{"line_number":135,"context_line":"                        \"The UUID of the service to which the \""},{"line_number":136,"context_line":"                        \"endpoint belongs.\""},{"line_number":137,"context_line":"                    ),"},{"line_number":138,"context_line":"                },"},{"line_number":139,"context_line":"                **_service_properties,"},{"line_number":140,"context_line":"                **_service_name_properties,"},{"line_number":141,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a4af797_8bb174c8","line":138,"range":{"start_line":132,"start_character":0,"end_line":138,"end_character":18},"in_reply_to":"9edbfe24_22610d53","updated":"2024-09-17 16:21:45.000000000","message":"Done","commit_id":"6a3306513df4f553f3f3441d86a3093b8a52ff09"}]}
