mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-08-14 12:27:09 +00:00
* perf: initial * perf: basic finished * perf: depend * perf: Update Dockerfile with new base image tag * perf: Add user report api * perf: Update Dockerfile with new base image tag * perf: Use user report api * perf: Update Dockerfile with new base image tag * perf: user login report * perf: Update Dockerfile with new base image tag * perf: user change password * perf: change password dashboard * perf: Update Dockerfile with new base image tag * perf: Translate * perf: asset api * perf: asset activity * perf: Asset report * perf: add charts_map * perf: account report * perf: Translate * perf: account automation * perf: Account automation * perf: title * perf: Update Dockerfile with new base image tag --------- Co-authored-by: ibuler <ibuler@qq.com> Co-authored-by: feng <1304903146@qq.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: wangruidong <940853815@qq.com> Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
from django.utils import timezone
|
|
from rest_framework.request import Request
|
|
|
|
from common.utils import lazyproperty
|
|
from common.utils.timezone import local_zero_hour, local_now
|
|
|
|
|
|
class DateRangeMixin:
|
|
request: Request
|
|
days_param = 'days'
|
|
default_days = 1
|
|
|
|
@lazyproperty
|
|
def days(self) -> int:
|
|
raw = self.request.query_params.get(self.days_param, self.default_days)
|
|
try:
|
|
return int(raw)
|
|
except (ValueError, TypeError):
|
|
return self.default_days
|
|
|
|
@property
|
|
def start_datetime(self):
|
|
if self.days == 1:
|
|
return local_zero_hour()
|
|
return local_now() - timezone.timedelta(days=self.days)
|
|
|
|
@property
|
|
def date_range_bounds(self) -> tuple:
|
|
start = self.start_datetime.date()
|
|
end = (local_now() + timezone.timedelta(days=1)).date()
|
|
return start, end
|
|
|
|
@lazyproperty
|
|
def date_range_list(self) -> list:
|
|
return [
|
|
(local_now() - timezone.timedelta(days=i)).date()
|
|
for i in range(self.days - 1, -1, -1)
|
|
]
|
|
|
|
def filter_by_date_range(self, queryset, field_name: str):
|
|
start, end = self.date_range_bounds
|
|
return queryset.filter(**{f'{field_name}__range': (start, end)})
|
|
|
|
@lazyproperty
|
|
def dates_metrics_date(self):
|
|
return [date.strftime('%m-%d') for date in self.date_range_list] or ['0']
|