# -*- coding: utf-8 -*-
|
"""
|
@File : filter_by_time_range.py
|
@Time : 2023/12/25 09:49
|
@Author : geekbing
|
@LastEditTime : -
|
@LastEditors : -
|
@Description : -
|
"""
|
|
from ast import literal_eval
|
from datetime import datetime, timedelta
|
from typing import Optional
|
|
|
from django.db.models import QuerySet
|
|
from apps.exceptions.error import RelationNotFound
|
from lunarlink.models import Relation
|
from lunarlink.utils.tree import find_all_children_ids
|
|
|
def filter_by_time_range(
|
queryset: QuerySet,
|
start_time: Optional[str],
|
end_time: Optional[str],
|
) -> QuerySet:
|
"""
|
根据提供的开始时间和结束时间过滤查询集
|
|
:param queryset: 要过滤的原始查询集
|
:param start_time: 过滤记录的开始时间(字符串格式,例如 'YYYY-MM-DD')
|
:param end_time: 过滤记录的结束时间(字符串格式,例如 'YYYY-MM-DD'
|
:return QuerySet: 过滤后的查询集
|
"""
|
if start_time and end_time:
|
end_time = (
|
datetime.strptime(end_time, "%Y-%m-%d")
|
+ timedelta(days=1)
|
- timedelta(seconds=1)
|
)
|
return queryset.filter(create_time__range=[start_time, end_time])
|
elif start_time:
|
return queryset.filter(create_time__gte=start_time)
|
elif end_time:
|
end_time = (
|
datetime.strptime(end_time, "%Y-%m-%d")
|
+ timedelta(days=1)
|
- timedelta(seconds=1)
|
)
|
return queryset.filter(create_time__lte=end_time)
|
return queryset
|
|
|
def filter_by_node(
|
queryset: QuerySet,
|
project: int,
|
node: int,
|
tree_type: int,
|
) -> QuerySet:
|
"""
|
根据提供的节点过滤查询集
|
|
:param queryset: 要过滤的原始查询集
|
:param project: 项目id
|
:param node: 目录id
|
:param tree_type: 树的类型(例如 TreeType.CASE 或 TreeType.API)
|
:return QuerySet: 更新后的查询集,根据指定的节点进行了过滤
|
"""
|
if node is not None:
|
try:
|
tree_obj = Relation.objects.get(project=project, type=tree_type)
|
except Relation.DoesNotExist:
|
raise RelationNotFound("指定的目录不存在")
|
|
tree = literal_eval(tree_obj.tree) if tree_obj else []
|
node_ids = find_all_children_ids(tree, node)
|
node_ids.append(node)
|
return queryset.filter(relation__in=node_ids)
|
|
return queryset
|