From be530a798dc45439954407f89fd32816d96de09c Mon Sep 17 00:00:00 2001 From: Marc-Andre Lemburg Date: Mon, 22 Jul 2019 09:23:42 +0200 Subject: [PATCH 1/3] Fix video script and ticket search apps (#1103) * Fix a couple more management commands. * Fix video_schedule_xlsx.py * Fix ticket search apps. * Fix ticket search app for EP2019. * Adjust speaker release form URL. --- p3/management/commands/video_schedule_xlsx.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/p3/management/commands/video_schedule_xlsx.py b/p3/management/commands/video_schedule_xlsx.py index 333f6c59c..a07d308f1 100644 --- a/p3/management/commands/video_schedule_xlsx.py +++ b/p3/management/commands/video_schedule_xlsx.py @@ -39,7 +39,7 @@ LICENSE = """ License: This video is licensed under the CC BY-NC-SA 3.0 license: https://creativecommons.org/licenses/by-nc-sa/3.0/ -Please see our speaker release agreement for details: https://ep2018.europython.eu/en/speaker-release-agreement/ +Please see our speaker release agreement for details: https://ep2019.europython.eu/events/speaker-release-agreement/ """ # Special handling of poster sessions From 05aa8279a672b091abc766c3e5c746a8b288d751 Mon Sep 17 00:00:00 2001 From: umgelurgel Date: Thu, 8 Aug 2019 20:24:25 +0200 Subject: [PATCH 2/3] Add support for submitting slide urls. --- conference/forms/talks.py | 4 +- .../migrations/0015_add_talk_url_fields.py | 28 +++++++++ conference/models.py | 2 + conference/talks.py | 3 +- templates/ep19/bs/talks/talk.html | 7 ++- tests/test_talks.py | 57 +++++++++++++++++-- 6 files changed, 90 insertions(+), 11 deletions(-) create mode 100644 conference/migrations/0015_add_talk_url_fields.py diff --git a/conference/forms/talks.py b/conference/forms/talks.py index d616b42fa..c5ba2b4f9 100644 --- a/conference/forms/talks.py +++ b/conference/forms/talks.py @@ -58,12 +58,10 @@ def save(self, user): class TalkSlidesForm(forms.ModelForm): - slides = forms.FileField(required=True) - class Meta: model = Talk fields = [ - "slides" + "slides", "slides_url", "repository_url" ] diff --git a/conference/migrations/0015_add_talk_url_fields.py b/conference/migrations/0015_add_talk_url_fields.py new file mode 100644 index 000000000..f206687c9 --- /dev/null +++ b/conference/migrations/0015_add_talk_url_fields.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.21 on 2019-08-08 17:55 +from __future__ import unicode_literals + +import conference.models +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('conference', '0014_stripe_charge_default_uuid'), + ] + + operations = [ + migrations.AddField( + model_name='talk', + name='repository_url', + field=models.URLField(blank=True), + ), + migrations.AddField( + model_name='talk', + name='slides_url', + field=models.URLField(blank=True), + ), + ] diff --git a/conference/models.py b/conference/models.py index 291fe5a3d..fd65ded1a 100644 --- a/conference/models.py +++ b/conference/models.py @@ -702,6 +702,8 @@ class Talk(models.Model, UrlMixin): ) slides = models.FileField(upload_to=_fs_upload_to("slides"), blank=True) + slides_url = models.URLField(blank=True) + repository_url = models.URLField(blank=True) video_type = models.CharField( max_length=30, choices=VIDEO_TYPE, blank=True ) diff --git a/conference/talks.py b/conference/talks.py index a3cde7ced..c27b6a6cf 100644 --- a/conference/talks.py +++ b/conference/talks.py @@ -150,7 +150,8 @@ def dump_relevant_talk_information_to_dict(talk: Talk): "tags": [t.name for t in talk.tags.all()], "speakers": [], "schedule_url": talk.get_schedule_url(), - "slides_url": talk.slides, + "slides_file_url": talk.slides, + "slides_remote_url": talk.slides_url, } for speaker in talk.get_all_speakers(): diff --git a/templates/ep19/bs/talks/talk.html b/templates/ep19/bs/talks/talk.html index e35c6360a..c7b7c0314 100644 --- a/templates/ep19/bs/talks/talk.html +++ b/templates/ep19/bs/talks/talk.html @@ -43,8 +43,11 @@
{% for speaker in talk_as_dict.speakers %} {% if talk_as_dict.schedule_url %} See in schedule {% endif %} - {% if talk_as_dict.slides_url %} - Slides + {% if talk_as_dict.slides_file_url %} + Download Slides + {% endif %} + {% if talk_as_dict.slides_remote_url %} + View Slides {% endif %}

{{ talk_as_dict.abstract|urlize|linebreaks }}

diff --git a/tests/test_talks.py b/tests/test_talks.py index df668e1be..bd4d131fe 100644 --- a/tests/test_talks.py +++ b/tests/test_talks.py @@ -183,6 +183,31 @@ def test_author_can_post_submit_slides(user_client): talk.refresh_from_db() assert talk.slides +def test_author_can_post_submit_slides_url(user_client): + setup_conference_with_typical_fares() + talk = TalkFactory(created_by=user_client.user, status=TALK_STATUS.accepted) + + url = reverse("talks:submit_slides", args=[talk.slug]) + payload = {"slides_url": "https://ep2019.europython.eu"} + response = user_client.post(url, data=payload) + + assert redirects_to(response, talk.get_absolute_url()) + talk.refresh_from_db() + assert talk.slides_url + + +def test_author_can_post_submit_repository_url(user_client): + setup_conference_with_typical_fares() + talk = TalkFactory(created_by=user_client.user, status=TALK_STATUS.accepted) + + url = reverse("talks:submit_slides", args=[talk.slug]) + payload = {"repository_url": "https://ep2019.europython.eu"} + response = user_client.post(url, data=payload) + + assert redirects_to(response, talk.get_absolute_url()) + talk.refresh_from_db() + assert talk.repository_url + def test_submit_slides_url_on_talk_detail_page(client): """ @@ -214,9 +239,9 @@ def test_submit_slides_url_on_talk_detail_page(client): assert submit_slides_url in response.content.decode() -def test_view_slides_url_on_talk_detail_page(client): +def test_view_slides_file_url_on_talk_detail_page(client): """ - The view slides button only appears if the slides have been uploaded. + The download slides button only appears if the slides have been uploaded. """ setup_conference_with_typical_fares() talk = TalkFactory(status=TALK_STATUS.accepted) @@ -226,7 +251,7 @@ def test_view_slides_url_on_talk_detail_page(client): response = client.get(url) assert not talk.slides - assert 'slides' not in response.content.decode() + assert 'download slides' not in response.content.decode().lower() # Slides URL does appear when the slides have been uploaded talk.slides = SimpleUploadedFile('slides.pdf', 'pdf content'.encode()) @@ -234,5 +259,27 @@ def test_view_slides_url_on_talk_detail_page(client): response = client.get(url) - assert talk.slides - assert 'slides' in response.content.decode() + assert 'download slides' in response.content.decode().lower() + + +def test_view_slides_remote_url_on_talk_detail_page(client): + """ + The view slides button only appears if the slides url has been uploaded. + """ + setup_conference_with_typical_fares() + talk = TalkFactory(status=TALK_STATUS.accepted) + url = talk.get_absolute_url() + + # Slides URL does not appear when the slides haven't been uploaded + response = client.get(url) + + assert not talk.slides_url + assert 'view slides' not in response.content.decode().lower() + + # Slides URL does appear when the slides have been uploaded + talk.slides_url = "ep2019.europython.eu" + talk.save() + + response = client.get(url) + + assert 'view slides' in response.content.decode().lower() From baef4f16035ccf4db6227faacc29542449dbeb80 Mon Sep 17 00:00:00 2001 From: umgelurgel Date: Mon, 12 Aug 2019 11:33:06 +0200 Subject: [PATCH 3/3] Prepare branch for ep2020 branch merge. --- ....py => 0016_mystery_migrations_maybe_2_to_3_bytes_to_str.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename conference/migrations/{0015_mystery_migrations_maybe_2_to_3_bytes_to_str.py => 0016_mystery_migrations_maybe_2_to_3_bytes_to_str.py} (99%) diff --git a/conference/migrations/0015_mystery_migrations_maybe_2_to_3_bytes_to_str.py b/conference/migrations/0016_mystery_migrations_maybe_2_to_3_bytes_to_str.py similarity index 99% rename from conference/migrations/0015_mystery_migrations_maybe_2_to_3_bytes_to_str.py rename to conference/migrations/0016_mystery_migrations_maybe_2_to_3_bytes_to_str.py index 5959c8f80..c5b6d8d01 100644 --- a/conference/migrations/0015_mystery_migrations_maybe_2_to_3_bytes_to_str.py +++ b/conference/migrations/0016_mystery_migrations_maybe_2_to_3_bytes_to_str.py @@ -11,7 +11,7 @@ class Migration(migrations.Migration): dependencies = [ - ('conference', '0014_stripe_charge_default_uuid'), + ('conference', '0015_add_talk_url_fields'), ] operations = [