Skip to content

Commit e3f083e

Browse files
committed
Merged in [16515] from rjsparks@nostrum.com:
Save files correctly when updates to an existing set of slides are proposed. Fixes ietf-tools#2748. - Legacy-Id: 16517 Note: SVN reference [16515] has been migrated to Git commit 41fd67c
1 parent fb3d4dd commit e3f083e

2 files changed

Lines changed: 54 additions & 2 deletions

File tree

ietf/meeting/tests_views.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2101,6 +2101,53 @@ def test_approve_proposed_slides_multisession_apply_all(self):
21012101
self.assertEqual(session1.sessionpresentation_set.count(),1)
21022102
self.assertEqual(session2.sessionpresentation_set.count(),1)
21032103

2104+
def test_submit_and_approve_multiple_versions(self):
2105+
session = SessionFactory(meeting__type_id='ietf')
2106+
chair = RoleFactory(group=session.group,name_id='chair').person
2107+
session.meeting.importantdate_set.create(name_id='revsub',date=datetime.date.today()+datetime.timedelta(days=20))
2108+
newperson = PersonFactory()
2109+
2110+
propose_url = urlreverse('ietf.meeting.views.propose_session_slides', kwargs={'session_id':session.pk, 'num': session.meeting.number})
2111+
2112+
login_testing_unauthorized(self,newperson.user.username,propose_url)
2113+
test_file = BytesIO(b'this is not really a slide')
2114+
test_file.name = 'not_really.txt'
2115+
r = self.client.post(propose_url,dict(file=test_file,title='a test slide file',apply_to_all=True))
2116+
self.assertEqual(r.status_code, 302)
2117+
self.client.logout()
2118+
2119+
submission = SlideSubmission.objects.get(session = session)
2120+
2121+
approve_url = urlreverse('ietf.meeting.views.approve_proposed_slides', kwargs={'slidesubmission_id':submission.pk,'num':submission.session.meeting.number})
2122+
login_testing_unauthorized(self, chair.user.username, approve_url)
2123+
r = self.client.post(approve_url,dict(title=submission.title,approve='approve'))
2124+
self.assertEqual(r.status_code,302)
2125+
self.client.logout()
2126+
2127+
self.assertEqual(session.sessionpresentation_set.first().document.rev,'00')
2128+
2129+
login_testing_unauthorized(self,newperson.user.username,propose_url)
2130+
test_file = BytesIO(b'this is not really a slide, but it is another version of it')
2131+
test_file.name = 'not_really.txt'
2132+
r = self.client.post(propose_url,dict(file=test_file,title='a test slide file',apply_to_all=True))
2133+
self.assertEqual(r.status_code, 302)
2134+
self.client.logout()
2135+
2136+
submission = SlideSubmission.objects.get(session = session)
2137+
2138+
approve_url = urlreverse('ietf.meeting.views.approve_proposed_slides', kwargs={'slidesubmission_id':submission.pk,'num':submission.session.meeting.number})
2139+
login_testing_unauthorized(self, chair.user.username, approve_url)
2140+
r = self.client.post(approve_url,dict(title=submission.title,approve='approve'))
2141+
self.assertEqual(r.status_code,302)
2142+
self.client.logout()
2143+
2144+
self.assertEqual(session.sessionpresentation_set.first().document.rev,'01')
2145+
path = os.path.join(submission.session.meeting.get_materials_path(),'slides')
2146+
filename = os.path.join(path,session.sessionpresentation_set.first().document.name+'-01.txt')
2147+
self.assertTrue(os.path.exists(filename))
2148+
contents = open(filename,'r').read()
2149+
self.assertIn('another version', contents)
2150+
21042151

21052152
class SessionTests(TestCase):
21062153

ietf/meeting/views.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1588,7 +1588,10 @@ def propose_session_slides(request, session_id, num):
15881588
else:
15891589
name = 'slides-%s-%s' % (session.meeting.number, session.docname_token())
15901590
name = name + '-' + slugify(title).replace('_', '-')[:128]
1591-
filename = '%s-00%s'% (name, ext)
1591+
rev = '00'
1592+
if Document.objects.filter(name=name).exists():
1593+
rev ='%02s' % (int(Document.objects.get(name=name).rev) + 1)
1594+
filename = '%s-%s%s'% (name, rev, ext)
15921595
destination = io.open(os.path.join(settings.SLIDE_STAGING_PATH, filename),'wb+')
15931596
for chunk in file.chunks():
15941597
destination.write(chunk)
@@ -2476,7 +2479,9 @@ def approve_proposed_slides(request, slidesubmission_id, num):
24762479
path = os.path.join(submission.session.meeting.get_materials_path(),'slides')
24772480
if not os.path.exists(path):
24782481
os.makedirs(path)
2479-
os.rename(submission.staged_filepath(), os.path.join(path, submission.filename))
2482+
sub_name, sub_ext = os.path.splitext(submission.filename)
2483+
target_filename = '%s-%s%s' % (sub_name[:-3],doc.rev,sub_ext)
2484+
os.rename(submission.staged_filepath(), os.path.join(path, target_filename))
24802485
acronym = submission.session.group.acronym
24812486
submission.delete()
24822487
return redirect('ietf.meeting.views.session_details',num=num,acronym=acronym)

0 commit comments

Comments
 (0)