From aec062b8b6de8d8486a2c174cf9242f5d28c02f4 Mon Sep 17 00:00:00 2001 From: Ryan Cross Date: Wed, 14 Oct 2015 00:06:03 +0000 Subject: [PATCH] Clean up bluesheets upload page. Add display of uploaded files. Commit ready for merge - Legacy-Id: 10206 --- ietf/secr/meetings/tests.py | 49 ++++++++++++----- ietf/secr/meetings/views.py | 16 ++++-- ietf/secr/templates/meetings/blue_sheet.html | 57 ++++++++++++++++---- 3 files changed, 97 insertions(+), 25 deletions(-) diff --git a/ietf/secr/meetings/tests.py b/ietf/secr/meetings/tests.py index 5e8eb6bbe..329962674 100644 --- a/ietf/secr/meetings/tests.py +++ b/ietf/secr/meetings/tests.py @@ -1,21 +1,29 @@ -from django.conf import settings -from django.core.urlresolvers import reverse -from ietf.utils.test_utils import TestCase - -from ietf.person.models import Person -from ietf.group.models import Group, GroupEvent -from ietf.meeting.models import Meeting, Room, TimeSlot, ScheduledSession -from ietf.utils.mail import outbox -from ietf.meeting.test_data import make_meeting_test_data - -from pyquery import PyQuery - import datetime import os import shutil +from pyquery import PyQuery +from StringIO import StringIO + +from django.conf import settings +from django.core.urlresolvers import reverse + +from ietf.doc.models import Document +from ietf.group.models import Group, GroupEvent +from ietf.meeting.models import Meeting, Room, TimeSlot, ScheduledSession +from ietf.meeting.test_data import make_meeting_test_data +from ietf.person.models import Person +from ietf.utils.mail import outbox +from ietf.utils.test_utils import TestCase + class MainTestCase(TestCase): def setUp(self): + self.proceedings_dir = os.path.abspath("tmp-proceedings-dir") + if not os.path.exists(self.proceedings_dir): + os.mkdir(self.proceedings_dir) + settings.SECR_PROCEEDINGS_DIR = self.proceedings_dir + settings.AGENDA_PATH = self.proceedings_dir + self.bluesheet_dir = os.path.abspath(settings.TEST_BLUESHEET_DIR) self.bluesheet_path = os.path.join(self.bluesheet_dir,'blue_sheet.rtf') if not os.path.exists(self.bluesheet_dir): @@ -27,6 +35,7 @@ class MainTestCase(TestCase): os.mkdir(self.materials_dir) def tearDown(self): + shutil.rmtree(self.proceedings_dir) shutil.rmtree(self.bluesheet_dir) shutil.rmtree(self.materials_dir) @@ -85,14 +94,28 @@ class MainTestCase(TestCase): meeting = Meeting.objects.get(number=1) self.assertEqual(meeting.city,'Toronto') - def test_blue_sheets(self): + def test_blue_sheets_upload(self): "Test Bluesheets" meeting = make_meeting_test_data() + os.makedirs(os.path.join(self.proceedings_dir,str(meeting.number),'bluesheets')) + url = reverse('meetings_blue_sheet',kwargs={'meeting_id':meeting.number}) self.client.login(username="secretary", password="secretary+password") response = self.client.get(url) self.assertEqual(response.status_code, 200) + + # test upload + group = Group.objects.filter(type='wg',state='active').first() + file = StringIO('dummy bluesheet') + file.name = "bluesheets-%s-%s.pdf" % (meeting.number,group.acronym) + files = {'file':file} + response = self.client.post(url, files) + self.assertEqual(response.status_code, 302) + path = os.path.join(settings.SECR_PROCEEDINGS_DIR,str(meeting.number),'bluesheets') + self.assertEqual(len(os.listdir(path)),1) + def test_blue_sheets_generate(self): + meeting = make_meeting_test_data() url = reverse('meetings_blue_sheet_generate',kwargs={'meeting_id':meeting.number}) self.client.login(username="secretary", password="secretary+password") response = self.client.get(url) diff --git a/ietf/secr/meetings/views.py b/ietf/secr/meetings/views.py index 7a66eb622..3353264b5 100644 --- a/ietf/secr/meetings/views.py +++ b/ietf/secr/meetings/views.py @@ -1,5 +1,7 @@ import datetime import json +import os +import time from django.conf import settings from django.contrib import messages @@ -334,9 +336,15 @@ def blue_sheet(request, meeting_id): Blue Sheet view. The user can generate blue sheets or upload scanned bluesheets ''' meeting = get_object_or_404(Meeting, number=meeting_id) - url = settings.SECR_BLUE_SHEET_URL - + blank_sheets_path = settings.SECR_BLUE_SHEET_PATH + try: + last_run = time.ctime(os.stat(blank_sheets_path).st_ctime) + except OSError: + last_run = None + uploaded_sheets_path = os.path.join(settings.SECR_PROCEEDINGS_DIR,meeting.number,'bluesheets') + uploaded_files = sorted(os.listdir(uploaded_sheets_path)) + if request.method == 'POST': form = UploadBlueSheetForm(request.POST,request.FILES) if form.is_valid(): @@ -350,7 +358,9 @@ def blue_sheet(request, meeting_id): return render_to_response('meetings/blue_sheet.html', { 'meeting': meeting, 'url': url, - 'form': form}, + 'form': form, + 'last_run': last_run, + 'uploaded_files': uploaded_files}, RequestContext(request, {}), ) diff --git a/ietf/secr/templates/meetings/blue_sheet.html b/ietf/secr/templates/meetings/blue_sheet.html index c2722736c..0172a070f 100644 --- a/ietf/secr/templates/meetings/blue_sheet.html +++ b/ietf/secr/templates/meetings/blue_sheet.html @@ -16,13 +16,27 @@ {% block content %}
-

Blue Sheet

-

Meeting {{ meeting.number }}

+

IETF {{ meeting.number }} - Blue Sheet

-

- Generate Blue Sheets
- Download latest Blue Sheets. -

+

Use this to generate blue sheets for meeting sessions.

+ +

Use this to download the blue sheets from the server.

+ +

Use the form below to upload individual scanned blue sheet documents. @@ -32,16 +46,41 @@ {{ form.as_table }} - -

    -
  • +
  • +
+
+{% if uploaded_files %} +
+
+

Uploaded Files

+ +
+ +{% endif %} + + {% endblock %}