def view_logs(request): # Exclude logs about the logged in user (moderator) logs = ( ModerationLogMsg.objects.exclude(pertains_to=request.user) .order_by("-msg_datetime") .select_related("pertains_to", "logged_by") ) form = FilterLogsForm() # TODO: Get logged in user's timezone # TODO: Apply activate() to logged in user's timezone # TODO: Get user's preferred timezone local_tz = timezone.get_current_timezone() today = timezone.now().astimezone(local_tz) if request.method == "GET": form = FilterLogsForm(request.GET) if form.is_valid(): msg_type = form.cleaned_data["msg_type"] period = form.cleaned_data["period"] if period == "TODAY": start, end = get_date_limits(start_date=today) elif period == "YESTERDAY": yesterday = today - timezone.timedelta(days=1) start, end = get_date_limits(start_date=yesterday) elif period == "THIS_WEEK": start_date = today - timezone.timedelta(days=7) end_date = today start, end = get_date_limits(start_date, end_date) elif period == "CUSTOM": start_date = form.cleaned_data["start_date"] end_date = form.cleaned_data["end_date"] start, end = get_date_limits(start_date, end_date) # Filter Logs if msg_type != "ALL": logs = logs.filter(msg_type=msg_type) if period != "ALL": logs = logs.filter(msg_datetime__gte=start, msg_datetime__lte=end) context = {"form": form, "logs": logs} return render(request, "moderation/logs.html", context)
def test_date_limits_with_one_date(self): date = datetime.datetime(2011, 8, 15, 8, 15, 12, 0, pytz.UTC) expected_start = datetime.datetime(2011, 8, 15, 0, 0, 0, 0, pytz.UTC) expected_end = datetime.datetime(2011, 8, 15, 23, 59, 59, 999999, pytz.UTC) start, end = get_date_limits(date) self.assertEqual(start, expected_start) self.assertEqual(end, expected_end)
def test_date_limits_with_two_dates(self): day_1 = datetime.datetime(2011, 8, 15, 8, 15, 12, 0, pytz.UTC) day_2 = datetime.datetime(2011, 9, 1, 8, 15, 12, 0, pytz.UTC) expected_start = datetime.datetime(2011, 8, 15, 0, 0, 0, 0, pytz.UTC) expected_end = datetime.datetime(2011, 9, 1, 23, 59, 59, 999999, pytz.UTC) start, end = get_date_limits(day_1, day_2) self.assertEqual(start, expected_start) self.assertEqual(end, expected_end)
def test_date_limits_with_non_UTC_timezone(self): london = pytz.timezone('Europe/London') # 1st August in London is equal to UTC+1 due to DST day = london.localize(datetime.datetime(2014, 8, 1, 8, 15, 12, 0)) expected_start = datetime.datetime(2014, 7, 31, 23, 0, 0, 0, pytz.UTC) expected_end = datetime.datetime(2014, 8, 1, 22, 59, 59, 999999, pytz.UTC) start, end = get_date_limits(day) self.assertEqual(start, expected_start) self.assertEqual(end, expected_end)
def view_logs(request): # Exclude logs about the logged in user (moderator) logs = ModerationLogMsg.objects.exclude( pertains_to=request.user ).order_by( '-msg_datetime' ).select_related( 'pertains_to', 'logged_by', ) form = FilterLogsForm() # TODO: Get logged in user's timezone # TODO: Apply activate() to logged in user's timezone # TODO: Get user's preferred timezone local_tz = timezone.get_current_timezone() today = timezone.now().astimezone(local_tz) if request.method == 'GET': form = FilterLogsForm(request.GET) if form.is_valid(): msg_type = form.cleaned_data['msg_type'] period = form.cleaned_data['period'] if period == 'TODAY': start, end = get_date_limits(start_date=today) elif period == 'YESTERDAY': yesterday = today - timezone.timedelta(days=1) start, end = get_date_limits(start_date=yesterday) elif period == 'THIS_WEEK': start_date = today - timezone.timedelta(days=7) end_date = today start, end = get_date_limits(start_date, end_date) elif period == 'CUSTOM': start_date = form.cleaned_data['start_date'] end_date = form.cleaned_data['end_date'] start, end = get_date_limits(start_date, end_date) # Filter Logs if msg_type != 'ALL': logs = logs.filter(msg_type=msg_type) if period != 'ALL': logs = logs.filter(msg_datetime__gte=start, msg_datetime__lte=end) context = { 'form': form, 'logs': logs, } return render(request, 'moderation/logs.html', context)