Prepare remaining keystone schemas

query parameters start being duplicated due to the different naming
convention used from the extracted decorators and the ones hardcoded.
Adapt hardcoded names to be hopefully properly identified using openapi
construction.

Change-Id: Ifd6f120c7dd43323528e93c1d4216ede7525ebae
This commit is contained in:
Artem Goncharov
2024-12-06 09:16:40 +01:00
parent 5a7de340a3
commit e306626db0
7 changed files with 19 additions and 168 deletions

View File

@@ -70,19 +70,19 @@ ENDPOINTS_SCHEMA: dict[str, Any] = {
}
ENDPOINTS_LIST_PARAMETERS = {
"endpoint_service_id": {
"endpoints_service_id": {
"in": "query",
"name": "service_id",
"description": "Filters the response by a service ID.",
"schema": {"type": "string", "format": "uuid"},
},
"endpoint_region_id": {
"endpoints_region_id": {
"in": "query",
"name": "region",
"description": "Filters the response by a region ID.",
"schema": {"type": "string", "format": "uuid"},
},
"endpoint_interface": {
"endpoints_interface": {
"in": "query",
"name": "interface",
"description": "Filters the response by an interface.",

View File

@@ -84,13 +84,13 @@ IDENTITY_PROVIDERS_SCHEMA: dict[str, Any] = {
}
IDENTITY_PROVIDERS_LIST_PARAMETERS: dict[str, Any] = {
"idp_id": {
"idps_id": {
"in": "query",
"name": "id",
"description": "Filter for Identity Providers ID attribute",
"schema": {"type": "string"},
},
"idp_enabled": {
"idps_enabled": {
"in": "query",
"name": "enabled",
"description": "Filter for Identity Providers enabled attribute",

View File

@@ -38,7 +38,7 @@ GROUPS_SCHEMA: dict[str, Any] = {
}
GROUPS_LIST_PARAMETERS: dict[str, Any] = {
"group_domain_id": {
"groups_domain_id": {
"in": "query",
"name": "domain_id",
"description": "Filters the response by a domain ID.",
@@ -47,7 +47,7 @@ GROUPS_LIST_PARAMETERS: dict[str, Any] = {
}
GROUP_USERS_LIST_PARAMETERS: dict[str, Any] = {
"group_user_password_expires_at": {
"group_users_password_expires_at": {
"in": "query",
"name": "password_expires_at",
"description": "Filter results based on which user passwords have expired. The query should include an operator and a timestamp with a colon (:) separating the two, for example: `password_expires_at={operator}:{timestamp}`.\nValid operators are: `lt`, `lte`, `gt`, `gte`, `eq`, and `neq`.\nValid timestamps are of the form: YYYY-MM-DDTHH:mm:ssZ.",

View File

@@ -1,149 +0,0 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# from typing import Any
#
# from keystone.resource import schema as ks_schema
#
# from codegenerator.common.schema import TypeSchema
# from codegenerator.common.schema import ParameterSchema
# from codegenerator.openapi.keystone_schemas import common
#
#
# PROJECT_SCHEMA: dict[str, Any] = {
# "type": "object",
# "properties": {
# "id": {"type": "string", "format": "uuid", "readOnly": True},
# **ks_schema._project_properties,
# },
# "additionalProperties": True,
# }
#
# PROJECT_CONTAINER_SCHEMA: dict[str, Any] = {
# "type": "object",
# "properties": {
# "project": {
# "type": "object",
# "properties": {
# "id": {"type": "string", "format": "uuid", "readOnly": True},
# **ks_schema._project_properties,
# },
# "additionalProperties": True,
# }
# },
# }
#
# PROJECTS_SCHEMA: dict[str, Any] = {
# "type": "object",
# "properties": {"projects": {"type": "array", "items": PROJECT_SCHEMA}},
# }
#
# PROJECT_LIST_PARAMETERS = {
# "project_domain_id": {
# "in": "query",
# "name": "domain_id",
# "description": "Filters the response by a domain ID.",
# "schema": {"type": "string", "format": "uuid"},
# },
# "project_enabled": {
# "in": "query",
# "name": "enabled",
# "description": "If set to true, then only enabled projects will be returned. Any value other than 0 (including no value) will be interpreted as true.",
# "schema": {"type": "boolean"},
# },
# "project_is_domain": {
# "in": "query",
# "name": "is_domain",
# "description": "If this is specified as true, then only projects acting as a domain are included. Otherwise, only projects that are not acting as a domain are included.",
# "schema": {"type": "boolean"},
# "x-openstack": {"min-ver": "3.6"},
# },
# "project_name": {
# "in": "query",
# "name": "name",
# "description": "Filters the response by a resource name.",
# "schema": {"type": "string"},
# },
# "project_parent_id": {
# "in": "query",
# "name": "parent_id",
# "description": "Filters the response by a parent ID.",
# "schema": {"type": "string", "format": "uuid"},
# "x-openstack": {"min-ver": "3.4"},
# },
# }
#
#
# def _post_process_operation_hook(
# openapi_spec, operation_spec, path: str | None = None
# ):
# """Hook to allow service specific generator to modify details"""
# operationId = operation_spec.operationId
# if operationId == "projects:get":
# for key, val in PROJECT_LIST_PARAMETERS.items():
# openapi_spec.components.parameters.setdefault(
# key, ParameterSchema(**val)
# )
# ref = f"#/components/parameters/{key}"
# if ref not in [x.ref for x in operation_spec.parameters]:
# operation_spec.parameters.append(ParameterSchema(ref=ref))
#
#
# def _get_schema_ref(
# openapi_spec, name, description=None, schema_def=None, action_name=None
# ) -> tuple[str | None, str | None, bool]:
# mime_type: str = "application/json"
# ref: str
# # Projects
# if name in [
# "ProjectsPostRequest",
# "ProjectsPostResponse",
# "ProjectPatchRequest",
# "ProjectPatchResponse",
# "ProjectGetResponse",
# ]:
# openapi_spec.components.schemas.setdefault(
# "Project", TypeSchema(**PROJECT_CONTAINER_SCHEMA)
# )
# ref = "#/components/schemas/Project"
# elif name == "ProjectsGetResponse":
# openapi_spec.components.schemas.setdefault(
# name, TypeSchema(**PROJECTS_SCHEMA)
# )
# ref = f"#/components/schemas/{name}"
#
# # Project Tags
# elif name == "ProjectsTagPutRequest":
# openapi_spec.components.schemas.setdefault(
# name, TypeSchema(**ks_schema.project_tag_create)
# )
# ref = f"#/components/schemas/{name}"
# elif name == "ProjectsTagsPutRequest":
# openapi_spec.components.schemas.setdefault(
# name, TypeSchema(**ks_schema.project_tags_update)
# )
# ref = f"#/components/schemas/{name}"
# elif name == "ProjectsTagsGetResponse":
# openapi_spec.components.schemas.setdefault(
# name, TypeSchema(**common.TAGS_SCHEMA)
# )
# ref = f"#/components/schemas/{name}"
# elif name == "ProjectsTagsPutResponse":
# openapi_spec.components.schemas.setdefault(
# name, TypeSchema(**common.TAGS_SCHEMA)
# )
# ref = f"#/components/schemas/{name}"
#
# else:
# return (None, None, False)
#
# return (ref, mime_type, True)

View File

@@ -47,7 +47,7 @@ REGIONS_SCHEMA: dict[str, Any] = {
}
REGIONS_LIST_PARAMETERS = {
"region_parent_region_id": {
"regions_parent_region_id": {
"in": "query",
"name": "parent_region_id",
"description": "Filters the response by a parent region, by ID.",

View File

@@ -103,7 +103,7 @@ ROLES_INFO_SCHEMA: dict[str, Any] = {
# Role list specific query parameters
ROLE_LIST_PARAMETERS: dict[str, Any] = {
"role_domain_id": {
"roles_domain_id": {
"in": "query",
"name": "domain_id",
"description": "Filters the response by a domain ID.",
@@ -219,37 +219,37 @@ ROLE_ASSIGNMENTS_SCHEMA: dict[str, Any] = {
#: Role assignment query parameters common for LIST and HEAD
ROLE_ASSIGNMENTS_QUERY_PARAMETERS: dict[str, Any] = {
"role_assignment_group_id": {
"role_assignments_group_id": {
"in": "query",
"name": "group.id",
"description": "Filters the response by a group ID.",
"schema": {"type": "string", "format": "uuid"},
},
"role_assignment_role_id": {
"role_assignments_role_id": {
"in": "query",
"name": "role.id",
"description": "Filters the response by a role ID.",
"schema": {"type": "string", "format": "uuid"},
},
"role_assignment_user_id": {
"role_assignments_user_id": {
"in": "query",
"name": "user.id",
"description": "Filters the response by a user ID.",
"schema": {"type": "string", "format": "uuid"},
},
"role_assignment_scope_domain_id": {
"role_assignments_scope_domain_id": {
"in": "query",
"name": "scope.domain.id",
"description": "Filters the response by a domain ID.",
"schema": {"type": "string", "format": "uuid"},
},
"role_assignment_scope_project_id": {
"role_assignments_scope_project_id": {
"in": "query",
"name": "scope.project.id",
"description": "Filters the response by a project ID.",
"schema": {"type": "string", "format": "uuid"},
},
"role_assignment_inherit": {
"role_assignments_inherit": {
"in": "query",
"name": "scope.OS-INHERIT:inherited_to",
"description": "Filters based on role assignments that are inherited. The only value of inherited_to that is currently supported is projects.",
@@ -259,7 +259,7 @@ ROLE_ASSIGNMENTS_QUERY_PARAMETERS: dict[str, Any] = {
# Role assignments list specific query parameters
ROLE_ASSIGNMENT_LIST_PARAMETERS: dict[str, Any] = {
"role_assignment_effective": {
"role_assignments_effective": {
"in": "query",
"name": "effective",
"description": "Returns the effective assignments, including any assignments gained by virtue of group membership.",
@@ -267,7 +267,7 @@ ROLE_ASSIGNMENT_LIST_PARAMETERS: dict[str, Any] = {
"allowEmptyValue": True,
"x-openstack": {"is-flag": True},
},
"role_assignment_include_names": {
"role_assignments_include_names": {
"in": "query",
"name": "include_names",
"description": "If set, then the names of any entities returned will be include as well as their IDs. Any value other than 0 (including no value) will be interpreted as true.",
@@ -275,7 +275,7 @@ ROLE_ASSIGNMENT_LIST_PARAMETERS: dict[str, Any] = {
"allowEmptyValue": True,
"x-openstack": {"min-ver": "3.6", "is-flag": True},
},
"role_assignment_include_subtree": {
"role_assignments_include_subtree": {
"in": "query",
"name": "include_subtree",
"description": "If set, then relevant assignments in the project hierarchy below the project specified in the scope.project_id query parameter are also included in the response. Any value other than 0 (including no value) for include_subtree will be interpreted as true.",

View File

@@ -52,7 +52,7 @@ SERVICES_SCHEMA: dict[str, Any] = {
}
SERVICES_LIST_PARAMETERS = {
"service_type": {
"services_type": {
"in": "query",
"name": "service",
"description": "Filters the response by a domain ID.",