@@ -401,6 +401,32 @@ def used_controllers():
401
401
402
402
def visible_contests_query (request ):
403
403
"""Returns materialized set of contests visible to the logged in user."""
404
+ if request .GET .get ('living' , 'safely' ) == 'dangerously' :
405
+ visible_query = Contest .objects .none ()
406
+ for controller_name in used_controllers ():
407
+ controller_class = import_string (controller_name )
408
+ # HACK: we pass None contest just to call visible_contests_query.
409
+ # This is a workaround for mixins not taking classmethods very well.
410
+ controller = controller_class (None )
411
+ subquery = Contest .objects .filter (controller_name = controller_name ).filter (
412
+ controller .registration_controller ().visible_contests_query (request )
413
+ )
414
+ visible_query = visible_query .union (subquery , all = False )
415
+ return set (visible_query )
416
+ visible_query = Q_always_false ()
417
+ for controller_name in used_controllers ():
418
+ controller_class = import_string (controller_name )
419
+ # HACK: we pass None contest just to call visible_contests_query.
420
+ # This is a workaround for mixins not taking classmethods very well.
421
+ controller = controller_class (None )
422
+ visible_query |= Q (
423
+ controller_name = controller_name
424
+ ) & controller .registration_controller ().visible_contests_query (request )
425
+ return Contest .objects .filter (visible_query ).distinct ()
426
+
427
+
428
+ def visible_contests_as_django_queryset (request ):
429
+ """Returns query set of contests visible to the logged in user."""
404
430
if request .GET .get ('living' , 'safely' ) == 'dangerously' :
405
431
visible_query = Contest .objects .none ()
406
432
for controller_name in used_controllers ():
@@ -424,23 +450,25 @@ def visible_contests_query(request):
424
450
) & controller .registration_controller ().visible_contests_query (request )
425
451
return Contest .objects .filter (visible_query ).distinct ()
426
452
453
+
427
454
@request_cached
428
455
def visible_contests (request ):
429
- contests = visible_contests_query (request )
456
+ contests = visible_contests_as_django_queryset (request )
430
457
return set (contests )
431
458
459
+
432
460
@request_cached_complex
433
461
def visible_contests_queryset (request , filter_value = None ):
434
- contests = visible_contests_query (request )
462
+ contests = visible_contests_as_django_queryset (request )
435
463
if filter_value is not None :
436
464
contests = contests .filter (Q (name__icontains = filter_value ) | Q (id__icontains = filter_value ) | Q (school_year = filter_value ))
437
465
return set (contests )
438
466
439
467
440
468
@request_cached_complex
441
- def visible_contests_as_django_queryset (request , filter_value = None ):
469
+ def visible_filtered_contests_as_django_queryset (request , filter_value = None ):
442
470
"""TODO: remove code duplication visible_contests_queryset/visible_contests_query"""
443
- contests = visible_contests_query (request )
471
+ contests = visible_contests_as_django_queryset (request )
444
472
if filter_value is not None :
445
473
contests = contests .filter (Q (name__icontains = filter_value ) | Q (id__icontains = filter_value ) | Q (school_year = filter_value ))
446
474
return contests
0 commit comments