37
37
from haystack .query import SearchQuerySet
38
38
from lxml import etree
39
39
import jwt
40
+ import pytz
40
41
# project imports
41
42
from dbdb .core .forms import CreateUserForm , SystemForm , SystemVersionForm , SystemVersionMetadataForm , SystemFeaturesForm , \
42
43
SystemVersionEditForm
@@ -782,12 +783,12 @@ def post(self, request):
782
783
return JsonResponse ({ 'status' :'bot' })
783
784
784
785
## Update the system's counter
785
- system = None
786
- with transaction .atomic ():
787
- system = System .objects .select_for_update ().get (pk = pk )
788
- system .view_count += 1
789
- system .save ()
790
- # pass
786
+ # system = None
787
+ # with transaction.atomic():
788
+ # system = System.objects.select_for_update().get(pk=pk)
789
+ # system.view_count += 1
790
+ # system.save()
791
+ # pass
791
792
792
793
# And add a SystemVisit entry
793
794
x_forwarded_for = request .META .get ('HTTP_X_FORWARDED_FOR' )
@@ -796,14 +797,18 @@ def post(self, request):
796
797
else :
797
798
ip = request .META .get ('REMOTE_ADDR' )
798
799
799
- system_visit = SystemVisit (system = system , ip_address = ip , user_agent = user_agent [:127 ])
800
- system_visit .save ()
801
-
800
+ # save visit
801
+ system_visit = SystemVisit .objects .create (
802
+ system_id = pk ,
803
+ ip_address = ip ,
804
+ user_agent = user_agent [:127 ]
805
+ )
806
+ pass
802
807
else :
803
- return JsonResponse ({ 'status' :('unrecognized counter: %r' % iss )}, status = 400 )
808
+ return JsonResponse ({ 'status' :('unrecognized counter: %r' % iss ) }, status = 400 )
804
809
pass
805
810
except jwt .ExpiredSignatureError :
806
- return JsonResponse ({ 'status' :'expired counter' }, status = 400 )
811
+ return JsonResponse ({ 'status' :'expired counter' }, status = 400 )
807
812
808
813
return JsonResponse ({ 'status' :'ok' })
809
814
@@ -1063,7 +1068,7 @@ def post(self, request, slug=None):
1063
1068
logo = system .current ().logo
1064
1069
pass
1065
1070
1066
- system .systemversion_set .update (is_current = False )
1071
+ system .versions .update (is_current = False )
1067
1072
db_version = system_version_form .save (commit = False )
1068
1073
db_version .creator = request .user
1069
1074
db_version .system = system
@@ -1198,7 +1203,7 @@ def post(self, request, slug):
1198
1203
1199
1204
system = System .objects .get (slug = slug )
1200
1205
version = SystemVersion .objects .get (id = request .POST ['ver' ])
1201
- system .systemversion_set .update (is_current = False )
1206
+ system .versions .update (is_current = False )
1202
1207
version .is_current = True
1203
1208
system .ver = version .ver
1204
1209
system .modified = timezone .now ()
@@ -1279,25 +1284,45 @@ def get(self, request):
1279
1284
# ==============================================
1280
1285
class HomeView (View ):
1281
1286
1287
+ ITEMS_TO_SHOW = 5
1288
+
1282
1289
template_name = 'core/home.html'
1283
1290
1284
1291
def get (self , request ):
1285
- items_to_show = 5
1286
-
1292
+ # calculate date window
1293
+ start_date = timezone .now ().astimezone (pytz .utc ) - datetime .timedelta (days = 30 ) # rolling 30 days
1294
+ start_date = datetime .datetime .combine (start_date .date (), datetime .time (0 , 0 , 0 ))
1295
+ start_date = pytz .utc .localize (start_date )
1296
+
1297
+ # get top systems by modified date
1298
+ most_recent = System .objects \
1299
+ .order_by ('-modified' )
1300
+ most_recent = most_recent [:HomeView .ITEMS_TO_SHOW ]
1301
+
1302
+ # get top systems by number of (windowed) versions
1303
+ most_versions = System .objects \
1304
+ .annotate (num_versions = Count ('versions__id' , filter = Q (versions__created__gte = start_date ))) \
1305
+ .order_by ('-num_versions' , 'name' ) \
1306
+ .filter (num_versions__gt = 0 )
1307
+ most_versions = most_versions [:HomeView .ITEMS_TO_SHOW ]
1308
+
1309
+ # get top systems by number of (windowed) visits
1310
+ most_visits = System .objects \
1311
+ .annotate (num_visits = Count ('visits__id' , filter = Q (visits__created__gte = start_date ))) \
1312
+ .order_by ('-num_visits' , 'name' ) \
1313
+ .filter (num_visits__gt = 0 )
1314
+ most_visits = most_visits [:HomeView .ITEMS_TO_SHOW ]
1315
+
1316
+ # count numb systems
1287
1317
num_systems = System .objects .all ().count ()
1288
1318
1289
-
1290
- most_edited = System .objects .order_by ('-ver' , '-name' )[:items_to_show ]
1291
- most_recent = System .objects .order_by ('-modified' )[:items_to_show ]
1292
- most_views = System .objects .order_by ('-view_count' )[:items_to_show ]
1293
-
1294
- return render (request , self .template_name , context = {
1295
- 'num_systems' : num_systems ,
1296
- 'most_edited' : most_edited ,
1319
+ return render (request , self .template_name , {
1297
1320
'most_recent' : most_recent ,
1298
- 'most_views' : most_views ,
1321
+ 'most_versions' : most_versions ,
1322
+ 'most_visits' : most_visits ,
1299
1323
1300
1324
'no_nav_search' : True ,
1325
+ 'num_systems' : num_systems ,
1301
1326
})
1302
1327
1303
1328
pass
0 commit comments