Merged in [13125] from rcross@amsl.com:

Add REST API endpoint to notify Datatracker that new recording files are available.
 - Legacy-Id: 13158
Note: SVN reference [13125] has been migrated to Git commit a50b09b152
This commit is contained in:
Henrik Levkowetz 2017-03-27 21:51:55 +00:00
commit 69c9d25022
3 changed files with 34 additions and 2 deletions

View file

@ -6,6 +6,7 @@ from importlib import import_module
from django.apps import apps
from django.test import Client
from django.conf import settings
from django.urls import reverse as urlreverse
from tastypie.exceptions import BadRequest
from tastypie.test import ResourceTestCaseMixin
@ -13,6 +14,7 @@ from tastypie.test import ResourceTestCaseMixin
import debug # pyflakes:ignore
from ietf.utils.test_utils import TestCase
from ietf.meeting.test_data import make_meeting_test_data
OMITTED_APPS = (
'ietf.secr.meetings',
@ -20,6 +22,18 @@ OMITTED_APPS = (
'ietf.ipr',
)
class CustomApiTestCase(TestCase):
def test_notify_meeting_import_audio_files(self):
meeting = make_meeting_test_data()
client = Client(Accept='application/json')
# try invalid method GET
url = urlreverse('ietf.meeting.views.api_import_recordings', kwargs={'number':meeting.number})
r = client.get(url)
self.assertEqual(r.status_code, 405)
# try valid method POST
r = client.post(url)
self.assertEqual(r.status_code, 201)
class TastypieApiTestCase(ResourceTestCaseMixin, TestCase):
def __init__(self, *args, **kwargs):
self.apps = {}

View file

@ -31,7 +31,7 @@ from django.template.loader import render_to_string
from django.utils.functional import curry
from django.views.decorators.cache import cache_page
from django.utils.text import slugify
from django.views.decorators.csrf import ensure_csrf_cookie
from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt
from django.views.generic import RedirectView
from django.template.defaultfilters import filesizeformat
@ -58,7 +58,7 @@ from ietf.meeting.helpers import send_interim_approval_request
from ietf.meeting.helpers import send_interim_announcement_request
from ietf.meeting.utils import finalize
from ietf.secr.proceedings.utils import handle_upload_file
from ietf.secr.proceedings.proc_utils import get_progress_stats, post_process
from ietf.secr.proceedings.proc_utils import get_progress_stats, post_process, import_audio_files
from ietf.utils import log
from ietf.utils.mail import send_mail_message
from ietf.utils.pipe import pipe
@ -2162,3 +2162,15 @@ def proceedings_progress_report(request, num=None):
class OldUploadRedirect(RedirectView):
def get_redirect_url(self, **kwargs):
return reverse_lazy('ietf.meeting.views.session_details',kwargs=self.kwargs)
@csrf_exempt
def api_import_recordings(request, number):
'''REST API to check for recording files and import'''
if request.method == 'POST':
meeting = get_meeting(number)
import_audio_files(meeting)
return HttpResponse(status=201)
else:
return HttpResponse(status=405)

View file

@ -16,6 +16,7 @@ from ietf.doc import views_search
from ietf.help import views as help_views
from ietf.ipr.sitemaps import IPRMap
from ietf.liaisons.sitemaps import LiaisonMap
from ietf.meeting import views as meeting_views
from ietf.utils.urls import url
admin.autodiscover()
@ -82,6 +83,11 @@ for n,a in api._api_list:
url(r'^api/v1/', include(a.urls)),
]
# Custom API endpoints
urlpatterns += [
url(r'^api/notify/meeting/import_recordings/(?P<number>[a-z0-9-]+)/?$', meeting_views.api_import_recordings),
]
# This is needed to serve files during testing
if settings.SERVER_MODE in ('development', 'test'):
save_debug = settings.DEBUG