Skip to content

Commit

Permalink
feat: 提供 Agent 包管理后台基础接口 (closed #1683)
Browse files Browse the repository at this point in the history
  • Loading branch information
ping15 committed Jan 16, 2025
1 parent 5c95c7d commit d8b59fe
Showing 1 changed file with 5 additions and 19 deletions.
24 changes: 5 additions & 19 deletions apps/node_man/views/package_manage.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,6 @@ def filter_queryset(self, request, queryset, view):
class PackageManageFilterClass(FilterSet):
os = django_filters.BaseInFilter(field_name="os", lookup_expr="in")
cpu_arch = django_filters.BaseInFilter(field_name="cpu_arch", lookup_expr="in")
os_cpu_arch = django_filters.BaseInFilter(field_name="os_cpu_arch", method="filter_os_cpu_arch")
tag_names = django_filters.BaseInFilter(lookup_expr="in", method="filter_tag_names")
created_by = django_filters.BaseInFilter(field_name="created_by", lookup_expr="in")
is_ready = django_filters.CharFilter(field_name="is_ready", method="filter_is_ready")
Expand All @@ -99,40 +98,27 @@ def filter_tag_names(self, queryset, name, tag_names):
raise ValidationError(_("筛选tag_names时必须传入project"))
return gse_package_handler.filter_tags(queryset, self.request.data["project"], tag_names=tag_names)

@staticmethod
def filter_os_cpu_arch(queryset, name, os_cpu_archs):
package_query = Q()
for os_cpu_arch in os_cpu_archs:
try:
os, cpu_arch = os_cpu_arch.split("_", 1)
except ValueError:
raise ValidationError(_("筛选格式应该为{os}_{cpu_arch}"))

package_query |= Q(os=os, cpu_arch=cpu_arch)

return queryset.filter(package_query)

def filter_condition(self, queryset, name, query_list):
if not isinstance(query_list, list):
return queryset

fields_to_search = ["os", "cpu_arch", "created_by", "is_ready", "version"]

model_field_query, tag_query = Q(), Q()
tag_names: List[str] = []

# 筛选非tag字段
for query_info in query_list:
if not isinstance(query_info, dict) or query_info.get("key") != "query" or "value" not in query_info:
continue

tag_names.append(query_info["value"])

for field in fields_to_search:
for field in ["os", "cpu_arch", "created_by", "is_ready", "version"]:
model_field_query |= Q(**{f"{field}__icontains": query_info["value"]})

# 筛选tag字段
if "project" in self.request.data and tag_names:
tag_query = Q(
id__in=gse_package_handler.filter_tags(
queryset, self.request.data["project"], tag_names=tag_names
queryset=queryset, project=self.request.data["project"], tag_names=tag_names
).values_list("id", flat=True)
)

Expand Down

0 comments on commit d8b59fe

Please sign in to comment.