Skip to content

Commit

Permalink
feat: 新增get_template_list接口支持标签过滤能力 #7603 (#7610)
Browse files Browse the repository at this point in the history
* feat: 新增get_template_list接口支持标签过滤能力 #7603

* fix: 修复测试错误 #7603

* fix: 修复参数拼接错误 #7603

* fix: 修正获取参数 #7603

* fix: 修正参数命名问题 #7603

* fix: 修复返回协议问题 #7603

* fix: 修复测试问题 #7603
  • Loading branch information
guohelu authored Nov 29, 2024
1 parent fad6be2 commit c87a4ba
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions gcloud/apigw/views/get_template_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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:
Expand All @@ -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
Expand All @@ -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}

0 comments on commit c87a4ba

Please sign in to comment.