From 3ec94225e36d8caa6ee3c516499874455d51b088 Mon Sep 17 00:00:00 2001 From: Jennifer Richards Date: Tue, 21 Jan 2025 10:59:40 -0400 Subject: [PATCH] chore: remove deprecated_api_upload_bluesheet method (#8443) * chore: remove deprecated_api_upload_bluesheet() * test: remove test of removed method --- ietf/api/tests.py | 92 ------------------------------------------- ietf/meeting/views.py | 64 ------------------------------ 2 files changed, 156 deletions(-) diff --git a/ietf/api/tests.py b/ietf/api/tests.py index 6e7fb374f..d195f49b9 100644 --- a/ietf/api/tests.py +++ b/ietf/api/tests.py @@ -554,98 +554,6 @@ class CustomApiTests(TestCase): newdoccontent = get_unicode_document_content(newdoc.name, Path(session.meeting.get_materials_path()) / type_id / newdoc.uploaded_filename) self.assertEqual(json.loads(content), json.loads(newdoccontent)) - def test_deprecated_api_upload_bluesheet(self): - url = urlreverse('ietf.meeting.views.api_upload_bluesheet') - recmanrole = RoleFactory(group__type_id='ietf', name_id='recman') - recman = recmanrole.person - meeting = MeetingFactory(type_id='ietf') - session = SessionFactory(group__type_id='wg', meeting=meeting) - group = session.group - apikey = PersonalApiKeyFactory(endpoint=url, person=recman) - - people = [ - {"name": "Andrea Andreotti", "affiliation": "Azienda"}, - {"name": "Bosse Bernadotte", "affiliation": "Bolag"}, - {"name": "Charles Charlemagne", "affiliation": "Compagnie"}, - ] - for i in range(3): - faker = random_faker() - people.append(dict(name=faker.name(), affiliation=faker.company())) - bluesheet = json.dumps(people) - - # error cases - r = self.client.post(url, {}) - self.assertContains(r, "Missing apikey parameter", status_code=400) - - badrole = RoleFactory(group__type_id='ietf', name_id='ad') - badapikey = PersonalApiKeyFactory(endpoint=url, person=badrole.person) - badrole.person.user.last_login = timezone.now() - badrole.person.user.save() - r = self.client.post(url, {'apikey': badapikey.hash()}) - self.assertContains(r, "Restricted to roles: Recording Manager, Secretariat", status_code=403) - - r = self.client.post(url, {'apikey': apikey.hash()}) - self.assertContains(r, "Too long since last regular login", status_code=400) - recman.user.last_login = timezone.now() - recman.user.save() - - r = self.client.get(url, {'apikey': apikey.hash()}) - self.assertContains(r, "Method not allowed", status_code=405) - - r = self.client.post(url, {'apikey': apikey.hash(), 'group': group.acronym}) - self.assertContains(r, "Missing meeting parameter", status_code=400) - - r = self.client.post(url, {'apikey': apikey.hash(), 'meeting': meeting.number, }) - self.assertContains(r, "Missing group parameter", status_code=400) - - r = self.client.post(url, {'apikey': apikey.hash(), 'meeting': meeting.number, 'group': group.acronym}) - self.assertContains(r, "Missing item parameter", status_code=400) - - r = self.client.post(url, - {'apikey': apikey.hash(), 'meeting': meeting.number, 'group': group.acronym, 'item': '1'}) - self.assertContains(r, "Missing bluesheet parameter", status_code=400) - - r = self.client.post(url, {'apikey': apikey.hash(), 'meeting': '1', 'group': group.acronym, - 'item': '1', 'bluesheet': bluesheet, }) - self.assertContains(r, "No sessions found for meeting", status_code=400) - - r = self.client.post(url, {'apikey': apikey.hash(), 'meeting': meeting.number, 'group': 'bogous', - 'item': '1', 'bluesheet': bluesheet, }) - self.assertContains(r, "No sessions found in meeting '%s' for group 'bogous'" % meeting.number, status_code=400) - - r = self.client.post(url, {'apikey': apikey.hash(), 'meeting': meeting.number, 'group': group.acronym, - 'item': '1', 'bluesheet': "foobar", }) - self.assertContains(r, "Invalid json value: 'foobar'", status_code=400) - - r = self.client.post(url, {'apikey': apikey.hash(), 'meeting': meeting.number, 'group': group.acronym, - 'item': '5', 'bluesheet': bluesheet, }) - self.assertContains(r, "No item '5' found in list of sessions for group", status_code=400) - - r = self.client.post(url, {'apikey': apikey.hash(), 'meeting': meeting.number, 'group': group.acronym, - 'item': 'foo', 'bluesheet': bluesheet, }) - self.assertContains(r, "Expected a numeric value for 'item', found 'foo'", status_code=400) - - r = self.client.post(url, {'apikey': apikey.hash(), 'meeting': meeting.number, 'group': group.acronym, - 'item': '1', 'bluesheet': bluesheet, }) - self.assertContains(r, "Done", status_code=200) - - # Submit again, with slightly different content, as an updated version - people[1]['affiliation'] = 'Bolaget AB' - bluesheet = json.dumps(people) - r = self.client.post(url, {'apikey': apikey.hash(), 'meeting': meeting.number, 'group': group.acronym, - 'item': '1', 'bluesheet': bluesheet, }) - self.assertContains(r, "Done", status_code=200) - - bluesheet = session.presentations.filter(document__type__slug='bluesheets').first().document - # We've submitted an update; check that the rev is right - self.assertEqual(bluesheet.rev, '01') - # Check the content - with open(bluesheet.get_file_name()) as file: - text = file.read() - for p in people: - self.assertIn(p['name'], html.unescape(text)) - self.assertIn(p['affiliation'], html.unescape(text)) - def test_api_upload_bluesheet(self): url = urlreverse("ietf.meeting.views.api_upload_bluesheet") recmanrole = RoleFactory(group__type_id="ietf", name_id="recman") diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index f386f8932..feb14f730 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -4666,11 +4666,6 @@ def api_upload_bluesheet(request): content="Method not allowed", content_type="text/plain", permitted_methods=('POST',) ) - # Temporary: fall back to deprecated interface if we have old-style parameters. - # Do away with this once meetecho is using the new pk-based interface. - if any(k in request.POST for k in ['meeting', 'group', 'item']): - return deprecated_api_upload_bluesheet(request) - session_id = request.POST.get('session_id', None) if session_id is None: return err(400, 'Missing session_id parameter') @@ -4707,65 +4702,6 @@ def api_upload_bluesheet(request): return HttpResponse("Done", status=200, content_type='text/plain') -def deprecated_api_upload_bluesheet(request): - def err(code, text): - return HttpResponse(text, status=code, content_type='text/plain') - if request.method == 'POST': - # parameters: - # apikey: the poster's personal API key - # meeting: number as string, i.e., '101', or 'interim-2018-quic-02' - # group: acronym or special, i.e., 'quic' or 'plenary' - # item: '1', '2', '3' (the group's first, second, third etc. - # session during the week) - # bluesheet: json blob with - # [{'name': 'Name', 'affiliation': 'Organization', }, ...] - for item in ['meeting', 'group', 'item', 'bluesheet',]: - value = request.POST.get(item) - if not value: - return err(400, "Missing %s parameter" % item) - number = request.POST.get('meeting') - sessions = Session.objects.filter(meeting__number=number) - if not sessions.exists(): - return err(400, "No sessions found for meeting '%s'" % (number, )) - acronym = request.POST.get('group') - sessions = sessions.filter(group__acronym=acronym) - if not sessions.exists(): - return err(400, "No sessions found in meeting '%s' for group '%s'" % (number, acronym)) - session_times = [ (s.official_timeslotassignment().timeslot.time, s.id, s) for s in sessions if s.official_timeslotassignment() ] - session_times.sort() - item = request.POST.get('item') - if not item.isdigit(): - return err(400, "Expected a numeric value for 'item', found '%s'" % (item, )) - n = int(item)-1 # change 1-based to 0-based - try: - time, __, session = session_times[n] - except IndexError: - return err(400, "No item '%s' found in list of sessions for group" % (item, )) - bjson = request.POST.get('bluesheet') - try: - data = json.loads(bjson) - except json.decoder.JSONDecodeError: - return err(400, "Invalid json value: '%s'" % (bjson, )) - - text = render_to_string('meeting/bluesheet.txt', { - 'data': data, - 'session': session, - }) - - fd, name = tempfile.mkstemp(suffix=".txt", text=True) - os.close(fd) - with open(name, "w") as file: - file.write(text) - with open(name, "br") as file: - save_err = save_bluesheet(request, session, file) - if save_err: - return err(400, save_err) - else: - return err(405, "Method not allowed") - - return HttpResponse("Done", status=200, content_type='text/plain') - - def important_dates(request, num=None, output_format=None): assert num is None or num.isdigit() preview_roles = ['Area Director', 'Secretariat', 'IETF Chair', 'IAD', ]