Skip to content

Commit 971a676

Browse files
committed
Merged in [10206] from rcross@amsl.com:
Clean up bluesheets upload page. Add display of uploaded files. - Legacy-Id: 10223 Note: SVN reference [10206] has been migrated to Git commit aec062b
2 parents 067d742 + aec062b commit 971a676

3 files changed

Lines changed: 92 additions & 21 deletions

File tree

ietf/secr/meetings/tests.py

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
1+
import datetime
2+
import os
3+
import shutil
4+
from pyquery import PyQuery
5+
from StringIO import StringIO
6+
17
from django.conf import settings
28
from django.core.urlresolvers import reverse
3-
from ietf.utils.test_utils import TestCase
49

5-
from ietf.person.models import Person
610
from ietf.group.models import Group, GroupEvent
711
from ietf.meeting.models import Meeting, Room, TimeSlot, ScheduledSession
8-
from ietf.utils.mail import outbox
912
from ietf.meeting.test_data import make_meeting_test_data
13+
from ietf.person.models import Person
14+
from ietf.utils.mail import outbox
15+
from ietf.utils.test_utils import TestCase
1016

11-
from pyquery import PyQuery
12-
13-
import datetime
14-
import os
15-
import shutil
1617

1718
class MainTestCase(TestCase):
1819
def setUp(self):
20+
self.proceedings_dir = os.path.abspath("tmp-proceedings-dir")
21+
if not os.path.exists(self.proceedings_dir):
22+
os.mkdir(self.proceedings_dir)
23+
settings.SECR_PROCEEDINGS_DIR = self.proceedings_dir
24+
settings.AGENDA_PATH = self.proceedings_dir
25+
1926
self.bluesheet_dir = os.path.abspath(settings.TEST_BLUESHEET_DIR)
2027
self.bluesheet_path = os.path.join(self.bluesheet_dir,'blue_sheet.rtf')
2128
if not os.path.exists(self.bluesheet_dir):
@@ -27,6 +34,7 @@ def setUp(self):
2734
os.mkdir(self.materials_dir)
2835

2936
def tearDown(self):
37+
shutil.rmtree(self.proceedings_dir)
3038
shutil.rmtree(self.bluesheet_dir)
3139
shutil.rmtree(self.materials_dir)
3240

@@ -85,14 +93,28 @@ def test_edit_meeting(self):
8593
meeting = Meeting.objects.get(number=1)
8694
self.assertEqual(meeting.city,'Toronto')
8795

88-
def test_blue_sheets(self):
96+
def test_blue_sheets_upload(self):
8997
"Test Bluesheets"
9098
meeting = make_meeting_test_data()
99+
os.makedirs(os.path.join(self.proceedings_dir,str(meeting.number),'bluesheets'))
100+
91101
url = reverse('meetings_blue_sheet',kwargs={'meeting_id':meeting.number})
92102
self.client.login(username="secretary", password="secretary+password")
93103
response = self.client.get(url)
94104
self.assertEqual(response.status_code, 200)
105+
106+
# test upload
107+
group = Group.objects.filter(type='wg',state='active').first()
108+
file = StringIO('dummy bluesheet')
109+
file.name = "bluesheets-%s-%s.pdf" % (meeting.number,group.acronym)
110+
files = {'file':file}
111+
response = self.client.post(url, files)
112+
self.assertEqual(response.status_code, 302)
113+
path = os.path.join(settings.SECR_PROCEEDINGS_DIR,str(meeting.number),'bluesheets')
114+
self.assertEqual(len(os.listdir(path)),1)
95115

116+
def test_blue_sheets_generate(self):
117+
meeting = make_meeting_test_data()
96118
url = reverse('meetings_blue_sheet_generate',kwargs={'meeting_id':meeting.number})
97119
self.client.login(username="secretary", password="secretary+password")
98120
response = self.client.get(url)

ietf/secr/meetings/views.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import datetime
22
import json
3+
import os
4+
import time
35

46
from django.conf import settings
57
from django.contrib import messages
@@ -332,9 +334,15 @@ def blue_sheet(request, meeting_id):
332334
Blue Sheet view. The user can generate blue sheets or upload scanned bluesheets
333335
'''
334336
meeting = get_object_or_404(Meeting, number=meeting_id)
335-
336337
url = settings.SECR_BLUE_SHEET_URL
337-
338+
blank_sheets_path = settings.SECR_BLUE_SHEET_PATH
339+
try:
340+
last_run = time.ctime(os.stat(blank_sheets_path).st_ctime)
341+
except OSError:
342+
last_run = None
343+
uploaded_sheets_path = os.path.join(settings.SECR_PROCEEDINGS_DIR,meeting.number,'bluesheets')
344+
uploaded_files = sorted(os.listdir(uploaded_sheets_path))
345+
338346
if request.method == 'POST':
339347
form = UploadBlueSheetForm(request.POST,request.FILES)
340348
if form.is_valid():
@@ -348,7 +356,9 @@ def blue_sheet(request, meeting_id):
348356
return render_to_response('meetings/blue_sheet.html', {
349357
'meeting': meeting,
350358
'url': url,
351-
'form': form},
359+
'form': form,
360+
'last_run': last_run,
361+
'uploaded_files': uploaded_files},
352362
RequestContext(request, {}),
353363
)
354364

ietf/secr/templates/meetings/blue_sheet.html

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,27 @@
1616
{% block content %}
1717

1818
<div class="module">
19-
<h2>Blue Sheet</h2>
20-
<h1> Meeting {{ meeting.number }}</h1>
19+
<h2>IETF {{ meeting.number }} - Blue Sheet</h2>
2120

22-
<p>
23-
<a href="{% url "meetings_blue_sheet_generate" meeting_id=meeting.number%}">Generate Blue Sheets</a><br />
24-
<a href="{{ url }}">Download</a> latest Blue Sheets.
25-
</p>
21+
<p>Use this to generate blue sheets for meeting sessions.</p>
22+
<ul class="none">
23+
<li>
24+
<button onclick="window.location='{% url "meetings_blue_sheet_generate" meeting_id=meeting.number%}'">Generate Blue Sheets</button>
25+
&nbsp;&nbsp;Last run:
26+
{% if last_run %}
27+
{{ last_run }}
28+
{% else %}
29+
Never
30+
{% endif %}
31+
</li>
32+
</ul>
33+
<p>Use this to download the blue sheets from the server.</p>
34+
<ul class="none">
35+
<li>
36+
<button onclick="window.location='{{ url }}'">Download Blue Sheets</button>
37+
</li>
38+
</ul>
39+
2640
<hr />
2741
<p>
2842
Use the form below to upload individual scanned blue sheet documents.
@@ -32,16 +46,41 @@ <h1> Meeting {{ meeting.number }}</h1>
3246
<col width="200">
3347
{{ form.as_table }}
3448
</table>
35-
<input type="submit" value="Submit" />
36-
</form>
3749

3850
<div class="button-group">
3951
<ul>
40-
<li><button onclick="window.location='../'">Back</button></li>
52+
<li><button type="submit" name="submit" value="Submit">Submit</button></li>
53+
<li><button type="button" onclick="window.location='../'">Back</button></li>
4154
</ul>
4255
</div> <!-- button-group -->
4356

57+
</form>
4458
</div> <!-- module -->
4559

60+
{% if uploaded_files %}
61+
<br>
62+
<div class="module interim-container">
63+
<h2>Uploaded Files</h2>
64+
<div class="inline-related last-related">
65+
<table class="full-width">
66+
<thead>
67+
<tr>
68+
<th>Filename</th>
69+
</tr>
70+
</thead>
71+
<tbody>
72+
{% for file in uploaded_files %}
73+
<tr class="{% cycle 'row1' 'row2' %}">
74+
<td>{{ file }}</td>
75+
</tr>
76+
{% endfor %}
77+
</tbody>
78+
</table>
79+
</div> <!-- inline-related -->
80+
</div> <!-- module -->
81+
82+
{% endif %}
83+
84+
4685
{% endblock %}
4786

0 commit comments

Comments
 (0)