Skip to content

Commit faa6469

Browse files
committed
change session request lock to use new meeting field: session_request_lock_message instead of lock file. commit ready for merge
- Legacy-Id: 8320
1 parent 61668db commit faa6469

9 files changed

Lines changed: 382 additions & 51 deletions

File tree

ietf/meeting/migrations/0019_auto__add_field_meeting_session_request_lock_message.py

Lines changed: 339 additions & 0 deletions
Large diffs are not rendered by default.

ietf/meeting/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ class Meeting(models.Model):
6161
reg_area = models.CharField(blank=True, max_length=255)
6262
agenda_note = models.TextField(blank=True, help_text="Text in this field will be placed at the top of the html agenda page for the meeting. HTML can be used, but will not validated.")
6363
agenda = models.ForeignKey('Schedule',null=True,blank=True, related_name='+')
64-
64+
session_request_lock_message = models.CharField(blank=True,max_length=255) # locked if not empty
65+
6566
def __unicode__(self):
6667
if self.type_id == "ietf":
6768
return "IETF-%s" % (self.number)

ietf/secr/meetings/forms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def valid_value(self, value):
9090
class MeetingModelForm(forms.ModelForm):
9191
class Meta:
9292
model = Meeting
93-
exclude = ('type', 'agenda')
93+
exclude = ('type', 'agenda', 'session_request_lock_message')
9494

9595
def clean_number(self):
9696
number = self.cleaned_data['number']

ietf/secr/meetings/tests.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from ietf.person.models import Person
66
from ietf.group.models import Group, GroupEvent
7-
from ietf.meeting.models import Meeting, Schedule, Room, TimeSlot, ScheduledSession
7+
from ietf.meeting.models import Meeting, Room, TimeSlot, ScheduledSession
88
from ietf.utils.mail import outbox
99
from ietf.meeting.test_data import make_meeting_test_data
1010

@@ -43,15 +43,17 @@ def test_view(self):
4343

4444
def test_add_meeting(self):
4545
"Add Meeting"
46+
meeting = make_meeting_test_data()
47+
number = int(meeting.number) + 1
48+
count = Meeting.objects.count()
4649
url = reverse('meetings_add')
47-
post_data = dict(number=1,city='Toronto',date='2014-07-20',country='CA',
50+
post_data = dict(number=number,city='Toronto',date='2014-07-20',country='CA',
4851
time_zone='America/New_York',venue_name='Hilton',
4952
venue_addr='100 First Ave')
5053
self.client.login(username='secretary', password='secretary+password')
5154
response = self.client.post(url, post_data, follow=True)
5255
self.assertEqual(response.status_code, 200)
53-
self.assertEqual(Meeting.objects.count(),1)
54-
self.assertEqual(Schedule.objects.count(),1)
56+
self.assertEqual(Meeting.objects.count(),count + 1)
5557

5658
def test_edit_meeting(self):
5759
"Edit Meeting"

ietf/secr/meetings/views.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from django.utils.functional import curry
1414

1515
from ietf.utils.mail import send_mail
16+
from ietf.meeting.helpers import get_meeting
1617
from ietf.meeting.models import Meeting, Session, Room, TimeSlot, ScheduledSession, Schedule
1718
from ietf.group.models import Group, GroupEvent
1819
from ietf.person.models import Person
@@ -27,8 +28,6 @@
2728
from ietf.secr.utils.meeting import get_session, get_timeslot
2829

2930

30-
31-
3231
# prep for agenda changes
3332
# --------------------------------------------------
3433
# Helper Functions
@@ -295,6 +294,10 @@ def add(request):
295294
visible = True,
296295
public = True)
297296
meeting.agenda = schedule
297+
298+
# we want to carry session request lock status over from previous meeting
299+
previous_meeting = get_meeting( int(meeting.number) - 1 )
300+
meeting.session_request_lock_message = previous_meeting.session_request_lock_message
298301
meeting.save()
299302

300303
#Create Physical new meeting directory and subdirectories

ietf/secr/sreq/forms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,4 +133,4 @@ def clean(self):
133133

134134
class ToolStatusForm(forms.Form):
135135
message = forms.CharField(widget=forms.Textarea(attrs={'rows':'3','cols':'80'}))
136-
136+

ietf/secr/sreq/tests.py

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
import os
2-
import shutil
3-
41
from django.core.urlresolvers import reverse
5-
from django.conf import settings
62

73
from ietf.utils.test_utils import TestCase
84
from ietf.group.models import Group
@@ -66,19 +62,10 @@ def test_submit_request(self):
6662
"""
6763

6864
class LockAppTestCase(TestCase):
69-
def setUp(self):
70-
self.agenda_dir = os.path.abspath("tmp-agenda-dir")
71-
os.mkdir(self.agenda_dir)
72-
settings.AGENDA_PATH = self.agenda_dir
73-
path = os.path.join(self.agenda_dir,'session_request.lock')
74-
with open(path, 'w') as f:
75-
f.write('App is locked')
76-
77-
def tearDown(self):
78-
shutil.rmtree(self.agenda_dir)
79-
8065
def test_edit_request(self):
81-
make_test_data()
66+
meeting = make_test_data()
67+
meeting.session_request_lock_message='locked'
68+
meeting.save()
8269
group = Group.objects.get(acronym='mars')
8370
url = reverse('sessions_edit',kwargs={'acronym':group.acronym})
8471
self.client.login(username="secretary", password="secretary+password")
@@ -88,7 +75,9 @@ def test_edit_request(self):
8875
self.assertEqual(len(q(':disabled[name="submit"]')), 1)
8976

9077
def test_view_request(self):
91-
make_test_data()
78+
meeting = make_test_data()
79+
meeting.session_request_lock_message='locked'
80+
meeting.save()
9281
group = Group.objects.get(acronym='mars')
9382
url = reverse('sessions_view',kwargs={'acronym':group.acronym})
9483
self.client.login(username="secretary", password="secretary+password")
@@ -98,7 +87,9 @@ def test_view_request(self):
9887
self.assertEqual(len(q(':disabled[name="edit"]')), 1)
9988

10089
def test_new_request(self):
101-
make_test_data()
90+
meeting = make_test_data()
91+
meeting.session_request_lock_message='locked'
92+
meeting.save()
10293
group = Group.objects.get(acronym='mars')
10394
url = reverse('sessions_new',kwargs={'acronym':group.acronym})
10495
self.client.login(username="secretary", password="secretary+password")

ietf/secr/sreq/views.py

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import datetime
2-
import os
32

4-
from django.conf import settings
53
from django.contrib import messages
64
from django.db.models import Q
75
from django.http import Http404
@@ -24,16 +22,18 @@
2422
# Globals
2523
# -------------------------------------------------
2624
SESSION_REQUEST_EMAIL = 'session-request@ietf.org'
27-
LOCKFILE = os.path.join(settings.AGENDA_PATH,'session_request.lock')
25+
2826
# -------------------------------------------------
2927
# Helper Functions
3028
# -------------------------------------------------
3129

32-
def check_app_locked():
30+
def check_app_locked(meeting=None):
3331
'''
3432
This function returns True if the application is locked to non-secretariat users.
3533
'''
36-
return os.path.exists(LOCKFILE)
34+
if not meeting:
35+
meeting = get_meeting()
36+
return bool(meeting.session_request_lock_message)
3737

3838
def get_initial_session(sessions):
3939
'''
@@ -75,17 +75,13 @@ def get_initial_session(sessions):
7575
initial['bethere'] = bethere_email
7676
return initial
7777

78-
def get_lock_message():
78+
def get_lock_message(meeting=None):
7979
'''
8080
Returns the message to display to non-secretariat users when the tool is locked.
8181
'''
82-
try:
83-
f = open(LOCKFILE,'r')
84-
message = f.read()
85-
f.close()
86-
except IOError:
87-
message = "This application is currently locked."
88-
return message
82+
if not meeting:
83+
meeting = get_meeting()
84+
return meeting.session_request_lock_message
8985

9086
def get_requester_text(person,group):
9187
'''
@@ -356,7 +352,7 @@ def edit_mtg(request, num, acronym):
356352
initial['resources'] = [x.pk for x in initial['resources']]
357353

358354
# check if app is locked
359-
is_locked = check_app_locked()
355+
is_locked = check_app_locked(meeting=meeting)
360356
if is_locked:
361357
messages.warning(request, "The Session Request Tool is closed")
362358

@@ -654,27 +650,26 @@ def tool_status(request):
654650
'''
655651
This view handles locking and unlocking of the tool to the public.
656652
'''
657-
is_locked = check_app_locked()
658-
653+
meeting = get_meeting()
654+
is_locked = check_app_locked(meeting=meeting)
655+
659656
if request.method == 'POST':
660657
button_text = request.POST.get('submit', '')
661-
if button_text == 'Done':
658+
if button_text == 'Back':
662659
return redirect('sessions')
663660

664661
form = ToolStatusForm(request.POST)
665662

666663
if button_text == 'Lock':
667664
if form.is_valid():
668-
f = open(LOCKFILE,'w')
669-
f.write(form.cleaned_data['message'])
670-
f.close()
671-
665+
meeting.session_request_lock_message = form.cleaned_data['message']
666+
meeting.save()
672667
messages.success(request, 'Session Request Tool is now Locked')
673668
return redirect('sessions')
674669

675670
elif button_text == 'Unlock':
676-
os.remove(LOCKFILE)
677-
671+
meeting.session_request_lock_message = ''
672+
meeting.save()
678673
messages.success(request, 'Session Request Tool is now Unlocked')
679674
return redirect('sessions')
680675

ietf/secr/templates/sreq/tool_status.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ <h2>Sessions - Status</h2>
2727
{% else %}
2828
<li><button type="submit" name="submit" value="Lock">Lock</button></li>
2929
{% endif %}
30-
<li><button type="submit" name="submit" value="Done">Done</button></li>
30+
<li><button type="submit" name="submit" value="Back">Back</button></li>
3131
</ul>
3232
</div> <!-- button-group -->
3333

0 commit comments

Comments
 (0)