Skip to content

Commit fcbbe08

Browse files
committed
Removed video url import from youtube, which is not needed any more given the /api/meeting/session/video/url API endpoint. This also prevents duplicate video URLs.
- Legacy-Id: 15424
1 parent caa3ec9 commit fcbbe08

4 files changed

Lines changed: 2 additions & 97 deletions

File tree

ietf/api/tests.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ class CustomApiTestCase(TestCase):
3535
# Using mock to patch the import functions in ietf.meeting.views, where
3636
# api_import_recordings() are using them:
3737
@patch('ietf.meeting.views.import_audio_files')
38-
@patch('ietf.meeting.views.import_youtube_video_urls')
39-
def test_notify_meeting_import_audio_files(self, mock_import_youtube, mock_import_audio):
38+
def test_notify_meeting_import_audio_files(self, mock_import_audio):
4039
meeting = make_meeting_test_data()
4140
client = Client(Accept='application/json')
4241
# try invalid method GET

ietf/meeting/views.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
from ietf.meeting.utils import finalize
6262
from ietf.secr.proceedings.utils import handle_upload_file
6363
from ietf.secr.proceedings.proc_utils import (get_progress_stats, post_process, import_audio_files,
64-
import_youtube_video_urls, create_recording)
64+
create_recording)
6565
from ietf.utils.decorators import require_api_key
6666
from ietf.utils.mail import send_mail_message, send_mail_text
6767
from ietf.utils.pipe import pipe
@@ -2183,7 +2183,6 @@ def api_import_recordings(request, number):
21832183
if request.method == 'POST':
21842184
meeting = get_meeting(number)
21852185
import_audio_files(meeting)
2186-
import_youtube_video_urls(meeting)
21872186
return HttpResponse(status=201)
21882187
else:
21892188
return HttpResponse(status=405)

ietf/secr/proceedings/proc_utils.py

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@
44
This module contains all the functions for generating static proceedings pages
55
'''
66
import datetime
7-
import httplib2
87
import os
98
import re
109
import subprocess
1110
from urllib import urlencode
1211

1312
import debug # pyflakes:ignore
1413

15-
from apiclient.discovery import build
1614
from django.conf import settings
1715
from django.core.exceptions import ObjectDoesNotExist
1816

@@ -27,52 +25,6 @@
2725
VIDEO_TITLE_RE = re.compile(r'IETF(?P<number>[\d]+)-(?P<name>.*)-(?P<date>\d{8})-(?P<time>\d{4})')
2826

2927

30-
31-
def import_youtube_video_urls(meeting, http=httplib2.Http()):
32-
'''Create Document and set external_url for session videos'''
33-
youtube = build(settings.YOUTUBE_API_SERVICE_NAME, settings.YOUTUBE_API_VERSION,
34-
developerKey=settings.YOUTUBE_API_KEY, http=http)
35-
playlistid = get_youtube_playlistid(youtube, 'IETF' + meeting.number)
36-
if playlistid is None:
37-
return None
38-
for video in get_youtube_videos(youtube, playlistid):
39-
match = VIDEO_TITLE_RE.match(video['title'])
40-
if match:
41-
session = _get_session(**match.groupdict())
42-
if session:
43-
url = video['url']
44-
get_or_create_recording_document(url,session)
45-
46-
def get_youtube_playlistid(youtube, title, http=httplib2.Http()):
47-
'''Returns the youtube playlistId matching title string, a string'''
48-
request = youtube.search().list(
49-
q=title,
50-
part='id,snippet',
51-
channelId=settings.YOUTUBE_IETF_CHANNEL_ID,
52-
type='playlist',
53-
maxResults=1
54-
)
55-
search_response = request.execute(http=http)
56-
57-
try:
58-
playlistid = search_response['items'][0]['id']['playlistId']
59-
except (KeyError, IndexError):
60-
return None
61-
return playlistid
62-
63-
def get_youtube_videos(youtube, playlistid, http=httplib2.Http()):
64-
'''Returns list of dictionaries with title, urls keys'''
65-
videos = []
66-
kwargs = dict(part="snippet",playlistId=playlistid,maxResults=50)
67-
playlistitems = youtube.playlistItems()
68-
request = playlistitems.list(**kwargs)
69-
# handle pagination
70-
while request is not None:
71-
playlistitems_doc = request.execute(http=http)
72-
videos.extend(_get_urls_from_json(playlistitems_doc))
73-
request = playlistitems.list_next(request, playlistitems_doc)
74-
return videos
75-
7628
def _get_session(number,name,date,time):
7729
'''Lookup session using data from video title'''
7830
meeting = Meeting.objects.get(number=number)

ietf/secr/proceedings/tests.py

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22
import json
33
import os
44
import shutil
5-
from apiclient.discovery import build
6-
from apiclient.http import HttpMock
7-
from mock import patch
85

96
from django.conf import settings
107
from django.urls import reverse
@@ -21,7 +18,6 @@
2118
from ietf.secr.proceedings.proc_utils import (import_audio_files,
2219
get_timeslot_for_filename, normalize_room_name, send_audio_import_warning,
2320
get_or_create_recording_document, create_recording, get_next_sequence,
24-
get_youtube_playlistid, get_youtube_videos, import_youtube_video_urls,
2521
_get_session, _get_urls_from_json)
2622

2723

@@ -43,47 +39,6 @@ def test_main(self):
4339

4440

4541
class VideoRecordingTestCase(TestCase):
46-
@patch('ietf.secr.proceedings.proc_utils.get_youtube_videos')
47-
@patch('ietf.secr.proceedings.proc_utils.get_youtube_playlistid')
48-
def test_import_youtube_video_urls(self, mock_playlistid, mock_videos):
49-
meeting = make_meeting_test_data()
50-
session = Session.objects.filter(meeting=meeting, group__acronym='mars').first()
51-
title = self._get_video_title_for_session(session)
52-
url = 'https://youtube.com?v=test'
53-
mock_playlistid.return_value = 'PLC86T-6ZTP5g87jdxNqdWV5475U-yEE8M'
54-
mock_videos.return_value = [{'title':title,'url':url}]
55-
discovery = os.path.join(settings.BASE_DIR, "../test/data/youtube-discovery.json")
56-
http = HttpMock(discovery, {'status': '200'})
57-
import_youtube_video_urls(meeting=meeting, http=http)
58-
doc = Document.objects.get(external_url=url)
59-
self.assertTrue(doc in session.materials.all())
60-
61-
def _get_video_title_for_session(self, session):
62-
'''Returns the youtube video title of a session recording given session'''
63-
timeslot = session.official_timeslotassignment().timeslot
64-
return "{prefix}-{group}-{date}".format(
65-
prefix=session.meeting.type.slug + session.meeting.number,
66-
group=session.group.acronym,
67-
date=timeslot.time.strftime('%Y%m%d-%H%M')).upper()
68-
69-
def test_get_youtube_playlistid(self):
70-
discovery = os.path.join(settings.BASE_DIR, "../test/data/youtube-discovery.json")
71-
http = HttpMock(discovery, {'status': '200'})
72-
youtube = build(settings.YOUTUBE_API_SERVICE_NAME, settings.YOUTUBE_API_VERSION,
73-
developerKey='',http=http)
74-
path = os.path.join(settings.BASE_DIR, "../test/data/youtube-playlistid.json")
75-
http = HttpMock(path, {'status': '200'})
76-
self.assertEqual(get_youtube_playlistid(youtube, 'IETF98', http=http),'PLC86T-test')
77-
78-
def test_get_youtube_videos(self):
79-
discovery = os.path.join(settings.BASE_DIR, "../test/data/youtube-discovery.json")
80-
http = HttpMock(discovery, {'status': '200'})
81-
youtube = build(settings.YOUTUBE_API_SERVICE_NAME, settings.YOUTUBE_API_VERSION,
82-
developerKey='',http=http)
83-
path = os.path.join(settings.BASE_DIR, "../test/data/youtube-playlistitems.json")
84-
http = HttpMock(path, {'status': '200'})
85-
videos = get_youtube_videos(youtube, 'PLC86T', http=http)
86-
self.assertEqual(len(videos),2)
8742

8843
def test_get_session(self):
8944
meeting = make_meeting_test_data()

0 commit comments

Comments
 (0)