)]}'
{"keystone/api/validation/parameter_types.py":[{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"6456542acf0e814361e813f9b2c7060a9c96a5ad","unresolved":true,"context_lines":[{"line_number":36,"context_line":"    ],"},{"line_number":37,"context_line":"}"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# FIXME(0weng): I found the extra restrictions (min/maxLength and pattern)"},{"line_number":40,"context_line":"# from id_string in keystone.common.validation.parameter_types,"},{"line_number":41,"context_line":"# which is what was originally used - should the restrictions be kept here"},{"line_number":42,"context_line":"# since I\u0027m trying to migrate things away from using that?"}],"source_content_type":"text/x-python","patch_set":12,"id":"58521a3a_7d5836d6","line":39,"updated":"2024-10-11 12:17:00.000000000","message":"this is a shared location for parameters and all schemas should import such common things directly from here. That means that all global constraints should be also kept here. When certain API modifies such restrictions we should fix copy and overwrite schema there.","commit_id":"e34b8e56861dc444140256d85aac64d20d68930a"},{"author":{"_account_id":36482,"name":"Oria Weng","display_name":"0weng","email":"oweng@osuosl.org","username":"0weng"},"change_message_id":"d7fb6b4fe132d68236963f163a4d5144f827ac0d","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    ],"},{"line_number":37,"context_line":"}"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# FIXME(0weng): I found the extra restrictions (min/maxLength and pattern)"},{"line_number":40,"context_line":"# from id_string in keystone.common.validation.parameter_types,"},{"line_number":41,"context_line":"# which is what was originally used - should the restrictions be kept here"},{"line_number":42,"context_line":"# since I\u0027m trying to migrate things away from using that?"}],"source_content_type":"text/x-python","patch_set":12,"id":"b9993509_18d95b7b","line":39,"in_reply_to":"58521a3a_7d5836d6","updated":"2024-10-11 16:16:50.000000000","message":"Acknowledged","commit_id":"e34b8e56861dc444140256d85aac64d20d68930a"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"6456542acf0e814361e813f9b2c7060a9c96a5ad","unresolved":true,"context_lines":[{"line_number":41,"context_line":"# which is what was originally used - should the restrictions be kept here"},{"line_number":42,"context_line":"# since I\u0027m trying to migrate things away from using that?"},{"line_number":43,"context_line":"domain_id: dict[str, Any] \u003d {"},{"line_number":44,"context_line":"    \"type\": \"string\","},{"line_number":45,"context_line":"    \"minLength\": 1,"},{"line_number":46,"context_line":"    \"maxLength\": 64,"},{"line_number":47,"context_line":"    \"pattern\": r\"^[a-zA-Z0-9-]+$\","}],"source_content_type":"text/x-python","patch_set":12,"id":"63acbe16_748b2119","line":44,"updated":"2024-10-11 12:17:00.000000000","message":"great. Let\u0027s add also description strings here","commit_id":"e34b8e56861dc444140256d85aac64d20d68930a"},{"author":{"_account_id":36482,"name":"Oria Weng","display_name":"0weng","email":"oweng@osuosl.org","username":"0weng"},"change_message_id":"d7fb6b4fe132d68236963f163a4d5144f827ac0d","unresolved":false,"context_lines":[{"line_number":41,"context_line":"# which is what was originally used - should the restrictions be kept here"},{"line_number":42,"context_line":"# since I\u0027m trying to migrate things away from using that?"},{"line_number":43,"context_line":"domain_id: dict[str, Any] \u003d {"},{"line_number":44,"context_line":"    \"type\": \"string\","},{"line_number":45,"context_line":"    \"minLength\": 1,"},{"line_number":46,"context_line":"    \"maxLength\": 64,"},{"line_number":47,"context_line":"    \"pattern\": r\"^[a-zA-Z0-9-]+$\","}],"source_content_type":"text/x-python","patch_set":12,"id":"29d74e9c_1ceeb380","line":44,"in_reply_to":"63acbe16_748b2119","updated":"2024-10-11 16:16:50.000000000","message":"Done","commit_id":"e34b8e56861dc444140256d85aac64d20d68930a"}],"keystone/limit/schema.py":[{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"6456542acf0e814361e813f9b2c7060a9c96a5ad","unresolved":true,"context_lines":[{"line_number":28,"context_line":"        \u0027minimum\u0027: -1,"},{"line_number":29,"context_line":"        \u0027maximum\u0027: 0x7FFFFFFF,  # The maximum value a signed INT may have"},{"line_number":30,"context_line":"    },"},{"line_number":31,"context_line":"    \u0027description\u0027: validation.nullable(old_parameter_types.description),"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"_registered_limit_create \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"9068ac19_43ae5a60","line":31,"updated":"2024-10-11 12:17:00.000000000","message":"since you anyway touch parameter_types I suggest copy the description there and add string description directly.","commit_id":"e34b8e56861dc444140256d85aac64d20d68930a"},{"author":{"_account_id":36482,"name":"Oria Weng","display_name":"0weng","email":"oweng@osuosl.org","username":"0weng"},"change_message_id":"d7fb6b4fe132d68236963f163a4d5144f827ac0d","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \u0027minimum\u0027: -1,"},{"line_number":29,"context_line":"        \u0027maximum\u0027: 0x7FFFFFFF,  # The maximum value a signed INT may have"},{"line_number":30,"context_line":"    },"},{"line_number":31,"context_line":"    \u0027description\u0027: validation.nullable(old_parameter_types.description),"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"_registered_limit_create \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"1fd2fb5e_20be6e5f","line":31,"in_reply_to":"9068ac19_43ae5a60","updated":"2024-10-11 16:16:50.000000000","message":"Done","commit_id":"e34b8e56861dc444140256d85aac64d20d68930a"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"6456542acf0e814361e813f9b2c7060a9c96a5ad","unresolved":true,"context_lines":[{"line_number":65,"context_line":"        \"type\": ["},{"line_number":66,"context_line":"            \"string\","},{"line_number":67,"context_line":"            \"null\","},{"line_number":68,"context_line":"        ],  # FIXME(0weng): Are there any constraints on this?"},{"line_number":69,"context_line":"        \"description\": ("},{"line_number":70,"context_line":"            \"The ID of the region that contains the service endpoint. \""},{"line_number":71,"context_line":"            \"The value can be None.\""}],"source_content_type":"text/x-python","patch_set":12,"id":"76e8e278_dbbd96f6","line":68,"updated":"2024-10-11 12:17:00.000000000","message":"when it is a string it \"should\" be uuid. So overall you can convert it into\n```\nregion_id: {\n  anyOf: [\n    {type: string, format: uuid},\n    {type: null}\n  ],\n  ...\n```\n\nThat would be general pattern to deal with params with different \"constraints\" based on the type. HOWEVER, since it is \"null\" you can just do\n```\ntype: [\"string\", \"null\"]\nformat: uuid\n```\ntype:null is only specifying that the field can be empty (in which case format is not applicable)","commit_id":"e34b8e56861dc444140256d85aac64d20d68930a"},{"author":{"_account_id":36482,"name":"Oria Weng","display_name":"0weng","email":"oweng@osuosl.org","username":"0weng"},"change_message_id":"1e4aea6c7a53aef07fb3ccf3745bcf162b619fea","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        \"type\": ["},{"line_number":66,"context_line":"            \"string\","},{"line_number":67,"context_line":"            \"null\","},{"line_number":68,"context_line":"        ],  # FIXME(0weng): Are there any constraints on this?"},{"line_number":69,"context_line":"        \"description\": ("},{"line_number":70,"context_line":"            \"The ID of the region that contains the service endpoint. \""},{"line_number":71,"context_line":"            \"The value can be None.\""}],"source_content_type":"text/x-python","patch_set":12,"id":"b506c058_2301cc78","line":68,"in_reply_to":"6a77074c_75cd7abe","updated":"2024-10-11 19:31:43.000000000","message":"Done","commit_id":"e34b8e56861dc444140256d85aac64d20d68930a"},{"author":{"_account_id":36482,"name":"Oria Weng","display_name":"0weng","email":"oweng@osuosl.org","username":"0weng"},"change_message_id":"9733cc2da717ae3f99e51d75f93fe5b9f8c3cf1f","unresolved":true,"context_lines":[{"line_number":65,"context_line":"        \"type\": ["},{"line_number":66,"context_line":"            \"string\","},{"line_number":67,"context_line":"            \"null\","},{"line_number":68,"context_line":"        ],  # FIXME(0weng): Are there any constraints on this?"},{"line_number":69,"context_line":"        \"description\": ("},{"line_number":70,"context_line":"            \"The ID of the region that contains the service endpoint. \""},{"line_number":71,"context_line":"            \"The value can be None.\""}],"source_content_type":"text/x-python","patch_set":12,"id":"6a77074c_75cd7abe","line":68,"in_reply_to":"76e8e278_dbbd96f6","updated":"2024-10-11 16:19:51.000000000","message":"As discussed during the meeting today (10/11/2024), this is not necessarily a UUID, but there is the constraint that the string can\u0027t be longer than 255 characters - I will add this.","commit_id":"e34b8e56861dc444140256d85aac64d20d68930a"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"6456542acf0e814361e813f9b2c7060a9c96a5ad","unresolved":true,"context_lines":[{"line_number":220,"context_line":"        },"},{"line_number":221,"context_line":"        **_limit_properties,"},{"line_number":222,"context_line":"    },"},{"line_number":223,"context_line":"    \"allOf\": ["},{"line_number":224,"context_line":"        {"},{"line_number":225,"context_line":"            \"required\": ["},{"line_number":226,"context_line":"                \"service_id\","}],"source_content_type":"text/x-python","patch_set":12,"id":"81f3d8db_599e73ad","line":223,"updated":"2024-10-11 12:17:00.000000000","message":"uhm, I need to check whether codegenerator would support such nesting. It is correct from jsonschema pov, but is nearly impossible to decompose into useful info for sdk/cli. Alternatively you could specify common \"required\" not under the \"allOf\" but on the normal level and add oneOf which overrides it repeating common props adding project_id in one case and domain_id in other case. In such case it is pretty easy to identify that service_id, resource_name and resource_limit are mandatory in every case leaving one extra not required by sdk/cli\nbtw, every oneOf/anyOf/etc overwrites others. Means if in the oneOf you have required: domain_id it becomes that domain_id is the only required param","commit_id":"e34b8e56861dc444140256d85aac64d20d68930a"},{"author":{"_account_id":36482,"name":"Oria Weng","display_name":"0weng","email":"oweng@osuosl.org","username":"0weng"},"change_message_id":"6c8b39ecaedadf40474375e7f30174e09e390f0c","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        },"},{"line_number":221,"context_line":"        **_limit_properties,"},{"line_number":222,"context_line":"    },"},{"line_number":223,"context_line":"    \"allOf\": ["},{"line_number":224,"context_line":"        {"},{"line_number":225,"context_line":"            \"required\": ["},{"line_number":226,"context_line":"                \"service_id\","}],"source_content_type":"text/x-python","patch_set":12,"id":"fcc23f58_4de3021c","line":223,"in_reply_to":"81f3d8db_599e73ad","updated":"2024-10-11 19:34:40.000000000","message":"Done","commit_id":"e34b8e56861dc444140256d85aac64d20d68930a"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"d5a9af887085174896b6c681b35670bb5cbfb42f","unresolved":true,"context_lines":[{"line_number":142,"context_line":"            \"items\": limit_schema,"},{"line_number":143,"context_line":"            \"description\": \"A list of limits objects.\","},{"line_number":144,"context_line":"        },"},{"line_number":145,"context_line":"    },"},{"line_number":146,"context_line":"    \"additionalProperties\": False,"},{"line_number":147,"context_line":"}"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"722117cf_93abfcd8","line":145,"updated":"2024-10-21 15:35:57.000000000","message":"there can be additional attribute \"truncated: boolean\" once the global limit is reached","commit_id":"d69806fbf9c5ac3af18a1145574e8ad7f01703bd"},{"author":{"_account_id":36482,"name":"Oria Weng","display_name":"0weng","email":"oweng@osuosl.org","username":"0weng"},"change_message_id":"dbbc1844aa5e8aa13ccbedf20330754b01492d02","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            \"items\": limit_schema,"},{"line_number":143,"context_line":"            \"description\": \"A list of limits objects.\","},{"line_number":144,"context_line":"        },"},{"line_number":145,"context_line":"    },"},{"line_number":146,"context_line":"    \"additionalProperties\": False,"},{"line_number":147,"context_line":"}"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"a21b16a0_93a02963","line":145,"in_reply_to":"722117cf_93abfcd8","updated":"2024-10-21 23:15:09.000000000","message":"Done","commit_id":"d69806fbf9c5ac3af18a1145574e8ad7f01703bd"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"d5a9af887085174896b6c681b35670bb5cbfb42f","unresolved":true,"context_lines":[{"line_number":183,"context_line":"        \"domain_id\": validation.nullable(parameter_types.domain_id),"},{"line_number":184,"context_line":"        **_limit_properties,"},{"line_number":185,"context_line":"    },"},{"line_number":186,"context_line":"    \"allOf\": ["},{"line_number":187,"context_line":"        {"},{"line_number":188,"context_line":"            \"required\": ["},{"line_number":189,"context_line":"                \"service_id\","}],"source_content_type":"text/x-python","patch_set":18,"id":"768bac43_57989838","line":186,"updated":"2024-10-21 15:35:57.000000000","message":"would you please place the common required service_id/resource_name/resource_limit unconditionally and in addition define the inner \"oneOf\" to help codegenerator to mark service_id/resource_name/resource_limit as unconditionally required while domain_id or project_id will stay not required (on the sdk/cli side)","commit_id":"d69806fbf9c5ac3af18a1145574e8ad7f01703bd"},{"author":{"_account_id":36482,"name":"Oria Weng","display_name":"0weng","email":"oweng@osuosl.org","username":"0weng"},"change_message_id":"9f8a78c3ad342a382ce151a265e0a3ac2ddd78a3","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        \"domain_id\": validation.nullable(parameter_types.domain_id),"},{"line_number":184,"context_line":"        **_limit_properties,"},{"line_number":185,"context_line":"    },"},{"line_number":186,"context_line":"    \"allOf\": ["},{"line_number":187,"context_line":"        {"},{"line_number":188,"context_line":"            \"required\": ["},{"line_number":189,"context_line":"                \"service_id\","}],"source_content_type":"text/x-python","patch_set":18,"id":"b569c6a6_ffe6b420","line":186,"in_reply_to":"768bac43_57989838","updated":"2024-10-21 23:10:55.000000000","message":"Done","commit_id":"d69806fbf9c5ac3af18a1145574e8ad7f01703bd"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"83f54d6fac4e416d44f92082017221156ccde764","unresolved":true,"context_lines":[{"line_number":193,"context_line":"        \"resource_name\","},{"line_number":194,"context_line":"        \"resource_limit\","},{"line_number":195,"context_line":"    ],"},{"line_number":196,"context_line":"    \"oneOf\": ["},{"line_number":197,"context_line":"        {"},{"line_number":198,"context_line":"            \"required\": ["},{"line_number":199,"context_line":"                \"service_id\","}],"source_content_type":"text/x-python","patch_set":23,"id":"703210d8_b6e5c6b8","line":196,"updated":"2024-10-31 16:01:03.000000000","message":"yes, exactly this way we should do it for now","commit_id":"a9ffd76d33b04749865ae6ec0430424b76926453"},{"author":{"_account_id":36482,"name":"Oria Weng","display_name":"0weng","email":"oweng@osuosl.org","username":"0weng"},"change_message_id":"726f45b43b3eda61cc7118890e17c25847c1f4a1","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        \"resource_name\","},{"line_number":194,"context_line":"        \"resource_limit\","},{"line_number":195,"context_line":"    ],"},{"line_number":196,"context_line":"    \"oneOf\": ["},{"line_number":197,"context_line":"        {"},{"line_number":198,"context_line":"            \"required\": ["},{"line_number":199,"context_line":"                \"service_id\","}],"source_content_type":"text/x-python","patch_set":23,"id":"2d35b396_3a850571","line":196,"in_reply_to":"703210d8_b6e5c6b8","updated":"2024-11-19 21:03:52.000000000","message":"Acknowledged","commit_id":"a9ffd76d33b04749865ae6ec0430424b76926453"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"f7a941acafa0063bf5cc16349db5de5b875bbea4","unresolved":true,"context_lines":[{"line_number":238,"context_line":"            \"items\": limit_schema,"},{"line_number":239,"context_line":"            \"description\": \"A list of limit objects.\","},{"line_number":240,"context_line":"        },"},{"line_number":241,"context_line":"        \"truncated\": response_types.truncated,"},{"line_number":242,"context_line":"    },"},{"line_number":243,"context_line":"    \"additionalProperties\": False,"},{"line_number":244,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":24,"id":"514d5bac_a6b01ff6","line":241,"updated":"2024-11-15 13:44:18.000000000","message":"nit: I checked that create operation will not truncate results, but this is not harmful since I am anyway reworking pagination globally and truncation will be dropped","commit_id":"d0a987bc422b2480814543624a625580ff9f5def"},{"author":{"_account_id":36482,"name":"Oria Weng","display_name":"0weng","email":"oweng@osuosl.org","username":"0weng"},"change_message_id":"726f45b43b3eda61cc7118890e17c25847c1f4a1","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            \"items\": limit_schema,"},{"line_number":239,"context_line":"            \"description\": \"A list of limit objects.\","},{"line_number":240,"context_line":"        },"},{"line_number":241,"context_line":"        \"truncated\": response_types.truncated,"},{"line_number":242,"context_line":"    },"},{"line_number":243,"context_line":"    \"additionalProperties\": False,"},{"line_number":244,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":24,"id":"d57bc521_a8eff9ff","line":241,"in_reply_to":"514d5bac_a6b01ff6","updated":"2024-11-19 21:03:52.000000000","message":"Done","commit_id":"d0a987bc422b2480814543624a625580ff9f5def"}]}
