1
+ import datetime
1
2
import json
2
3
import math
3
4
import random
9
10
from django .db .models import Q
10
11
from django .http import Http404 , HttpResponse
11
12
from django .shortcuts import redirect , get_object_or_404
12
- from django .utils import timezone
13
13
from django .utils .functional import cached_property
14
14
from django .utils .translation import ugettext as _
15
15
from django .views .generic import ListView , TemplateView , View
@@ -98,7 +98,7 @@ def _local_date_at_midnight(self, timestamp):
98
98
# cast timestamp into local timezone
99
99
localized = timestamp .astimezone (self .request_timezone )
100
100
# create a new date object starting at midnight in that timezone
101
- return timezone .datetime (localized .year ,
101
+ return datetime .datetime (localized .year ,
102
102
localized .month ,
103
103
localized .day ,
104
104
tzinfo = localized .tzinfo )
@@ -123,7 +123,7 @@ def _get_next_date(self):
123
123
date = None
124
124
try :
125
125
ts = (self ._get_base_queryset ()
126
- .filter (timestamp__gte = timezone .timedelta (days = 1 ) + self .date )
126
+ .filter (timestamp__gte = datetime .timedelta (days = 1 ) + self .date )
127
127
.order_by ('timestamp' )[0 ].timestamp )
128
128
date = self ._local_date_at_midnight (ts )
129
129
except IndexError :
@@ -133,7 +133,7 @@ def _get_next_date(self):
133
133
def _date_query_set (self , date ):
134
134
qs = self ._get_base_queryset ()
135
135
return qs .filter (timestamp__gte = date ,
136
- timestamp__lt = date + timezone .timedelta (days = 1 ))
136
+ timestamp__lt = date + datetime .timedelta (days = 1 ))
137
137
138
138
class LogStream (ChannelMixin , View ):
139
139
def get (self , request , channel_slug , bot_slug ):
@@ -144,6 +144,9 @@ def get(self, request, channel_slug, bot_slug):
144
144
response ['Last-Event-ID' ] = request .META ['HTTP_LAST_EVENT_ID' ]
145
145
return response
146
146
147
+ def _utc_now ():
148
+ return datetime .datetime .now (tz = pytz .timezone ('UTC' ))
149
+
147
150
def _find_pk (pk , queryset ):
148
151
"""Find a PK in a queryset in memory"""
149
152
found = None
@@ -162,19 +165,19 @@ def _timeline_context(timeline):
162
165
if not timeline :
163
166
return {}
164
167
165
- today = timezone . now ().date ()
166
- last_monday = today - timezone .timedelta (days = today .weekday ())
167
- last_week = last_monday - timezone .timedelta (days = 7 )
168
+ today = _utc_now ().date ()
169
+ last_monday = today - datetime .timedelta (days = today .weekday ())
170
+ last_week = last_monday - datetime .timedelta (days = 7 )
168
171
169
172
# the last month in the timeline needs special treatment so it
170
173
# doesn't get ordered ahead of the last/current weeks
171
174
last_month = timeline [timeline .keyOrder [- 1 ]].pop ()
172
175
if last_month >= last_week :
173
176
last_month_adjusted = (last_week -
174
- timezone .timedelta (days = 1 ))
177
+ datetime .timedelta (days = 1 ))
175
178
elif last_month >= last_monday :
176
179
last_month_adjusted = (last_monday -
177
- timezone .timedelta (days = 1 ))
180
+ datetime .timedelta (days = 1 ))
178
181
else :
179
182
last_month_adjusted = last_month
180
183
@@ -349,7 +352,7 @@ def get_queryset(self):
349
352
qs = self .channel .filtered_logs ()
350
353
qs = self .get_ordered_queryset (qs )
351
354
start = self .date
352
- end = start + timezone .timedelta (days = 1 )
355
+ end = start + datetime .timedelta (days = 1 )
353
356
return qs .filter (timestamp__gte = start , timestamp__lt = end )
354
357
355
358
def _date_paginator (self , date ):
@@ -414,7 +417,7 @@ def get_next_page_link(self, page):
414
417
def get_current_page_link (self , page ):
415
418
# copy, to maintain any params that came in to original request.
416
419
params = self .request .GET .copy ()
417
- date = timezone . now ()
420
+ date = _utc_now ()
418
421
url = self .channel_date_url (date )
419
422
params ['page' ] = page .number
420
423
return '{0}?{1}' .format (url , params .urlencode ())
@@ -433,16 +436,15 @@ def request_timezone(self):
433
436
def set_view_date (self ):
434
437
"""Determine start date for queryset"""
435
438
if all ([field in self .kwargs for field in ['year' , 'month' , 'day' ]]):
436
- self .date = timezone .datetime (
437
- year = int (self .kwargs ['year' ]),
438
- month = int (self .kwargs ['month' ]),
439
- day = int (self .kwargs ['day' ]))
440
439
# localize date so logs start at local time
441
- return self .request_timezone .localize (self .date )
440
+ return datetime .datetime (year = int (self .kwargs ['year' ]),
441
+ month = int (self .kwargs ['month' ]),
442
+ day = int (self .kwargs ['day' ]),
443
+ tzinfo = self .request_timezone )
442
444
443
445
# Use the last page.
444
446
self .kwargs ['page' ] = 'last'
445
- return timezone . now ().date ()
447
+ return _utc_now ().date ()
446
448
447
449
448
450
class SearchLogViewer (PaginatorPageLinksMixin , LogViewer , ListView ):
@@ -563,7 +565,7 @@ def get_queryset(self):
563
565
date_filter = {'timestamp__gte' : last_exit .timestamp }
564
566
# Only fetch results from when the user logged out.
565
567
self .fetch_after = (
566
- last_exit .timestamp - timezone .timedelta (milliseconds = 1 ))
568
+ last_exit .timestamp - datetime .timedelta (milliseconds = 1 ))
567
569
return queryset .filter (** date_filter )
568
570
569
571
0 commit comments