1+ from datetime import datetime
2+ from functools import wraps
3+ from zoneinfo import ZoneInfo
4+
15from accounts .models import ExecutiveMember
26from config .models import ModuleConfiguration
37from django .contrib import messages
48from django .shortcuts import redirect
9+ from django .shortcuts import render
10+ from django .utils import timezone
511
612
713def module_enabled (module_name ):
@@ -77,11 +83,14 @@ def wrapper(request, *args, **kwargs):
7783
7884 return decorator
7985
86+
8087def ensure_view_current_envision ():
8188 def decorator (view_func ):
8289 @wraps (view_func )
8390 def wrapper (request , * args , ** kwargs ):
84- config = ModuleConfiguration .objects .get (module_name = "virtual_expo" ).module_config
91+ config = ModuleConfiguration .objects .get (
92+ module_name = "virtual_expo"
93+ ).module_config
8594
8695 try :
8796 ExecutiveMember .objects .get (user = request .user .id )
@@ -90,8 +99,40 @@ def wrapper(request, *args, **kwargs):
9099 exec_member = False
91100
92101 can_view_current_envision = exec_member or config .get (
93- "view_current_envision" )
94- kwargs ['can_view_current_envision ' ] = can_view_current_envision
102+ "view_current_envision"
103+ )
104+ kwargs ["can_view_current_envision" ] = can_view_current_envision
95105 return view_func (request , * args , ** kwargs )
106+
96107 return wrapper
108+
109+ return decorator
110+
111+
112+ def event_time_gate (
113+ start_time ,
114+ end_time = None ,
115+ pre_template = "tlm/403.html" ,
116+ post_template = "tlm/event_ended.html" ,
117+ context = None ,
118+ ):
119+ def decorator (view_func ):
120+ @wraps (view_func )
121+ def wrapper (request , * args , ** kwargs ):
122+ now = timezone .now ()
123+ ctx = context or {}
124+
125+ # Before launch
126+ if now < start_time :
127+ return render (request , pre_template , ctx , status = 403 )
128+
129+ # After event end
130+ if end_time and now > end_time :
131+ return render (request , post_template , ctx , status = 403 )
132+
133+ # During event
134+ return view_func (request , * args , ** kwargs )
135+
136+ return wrapper
137+
97138 return decorator
0 commit comments