chore: remove deprecated_api_upload_bluesheet method (#8443)
* chore: remove deprecated_api_upload_bluesheet() * test: remove test of removed method
This commit is contained in:
parent
65a96948dc
commit
3ec94225e3
|
@ -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)
|
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))
|
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):
|
def test_api_upload_bluesheet(self):
|
||||||
url = urlreverse("ietf.meeting.views.api_upload_bluesheet")
|
url = urlreverse("ietf.meeting.views.api_upload_bluesheet")
|
||||||
recmanrole = RoleFactory(group__type_id="ietf", name_id="recman")
|
recmanrole = RoleFactory(group__type_id="ietf", name_id="recman")
|
||||||
|
|
|
@ -4666,11 +4666,6 @@ def api_upload_bluesheet(request):
|
||||||
content="Method not allowed", content_type="text/plain", permitted_methods=('POST',)
|
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)
|
session_id = request.POST.get('session_id', None)
|
||||||
if session_id is None:
|
if session_id is None:
|
||||||
return err(400, 'Missing session_id parameter')
|
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')
|
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):
|
def important_dates(request, num=None, output_format=None):
|
||||||
assert num is None or num.isdigit()
|
assert num is None or num.isdigit()
|
||||||
preview_roles = ['Area Director', 'Secretariat', 'IETF Chair', 'IAD', ]
|
preview_roles = ['Area Director', 'Secretariat', 'IETF Chair', 'IAD', ]
|
||||||
|
|
Loading…
Reference in a new issue