diff --git a/gcloud/apigw/views/get_template_list.py b/gcloud/apigw/views/get_template_list.py index 654b35028..6bbfe94e0 100644 --- a/gcloud/apigw/views/get_template_list.py +++ b/gcloud/apigw/views/get_template_list.py @@ -26,6 +26,7 @@ from gcloud.iam_auth.utils import get_flow_allowed_actions_for_user from gcloud.iam_auth.view_interceptors.apigw import ProjectViewInterceptor from apigw_manager.apigw.decorators import apigw_require +from gcloud.label.models import TemplateLabelRelation, Label @login_exempt @@ -40,6 +41,7 @@ def get_template_list(request, project_id): template_source = request.GET.get("template_source", PROJECT) id_in = request.GET.get("id_in", None) name_keyword = request.GET.get("name_keyword", None) + label_names = request.GET.get("label_names", None) if id_in: try: @@ -48,6 +50,19 @@ def get_template_list(request, project_id): id_in = None logger.exception("[API] id_in[{}] resolve fail, ignore.".format(id_in)) + if label_names: + try: + label_names = label_names.split(",") + label_ids = Label.objects.filter(name__in=label_names, project_id=project_id).values_list("id", flat=True) + template_ids = TemplateLabelRelation.objects.fetch_template_ids_using_labels(label_ids) + template_ids = list(map(str, template_ids)) + if id_in is None: + id_in = template_ids + else: + id_in = list(set(id_in + template_ids)) + except Exception: + logger.exception("[API] label_names[{}] resolve fail, ignore.".format(label_names)) + filter_kwargs = dict(is_deleted=False) if id_in: filter_kwargs["id__in"] = id_in @@ -72,4 +87,9 @@ def get_template_list(request, project_id): if allowed: template_info["auth_actions"].append(action) + if label_names: + templates_labels = TemplateLabelRelation.objects.fetch_templates_labels(template_id_list) + for obj in template_list: + obj["template_labels"] = templates_labels.get(obj["id"], []) + return {"result": True, "data": template_list, "code": err_code.SUCCESS.code}