From 6711d34a5f3a92632940e182fdde2da42bab1242 Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Tue, 2 Jul 2024 15:55:23 +1000 Subject: [PATCH 01/15] storage upgraded, path() overridden --- poetry.lock | 13 ++++++------- pyproject.toml | 4 +++- signbank/video/models.py | 4 ++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/poetry.lock b/poetry.lock index f20e31dc..c3ee2955 100644 --- a/poetry.lock +++ b/poetry.lock @@ -339,23 +339,22 @@ files = [ [[package]] name = "gunicorn" -version = "22.0.0" +version = "21.2.0" description = "WSGI HTTP Server for UNIX" optional = false -python-versions = ">=3.7" +python-versions = ">=3.5" files = [ - {file = "gunicorn-22.0.0-py3-none-any.whl", hash = "sha256:350679f91b24062c86e386e198a15438d53a7a8207235a78ba1b53df4c4378d9"}, - {file = "gunicorn-22.0.0.tar.gz", hash = "sha256:4a0b436239ff76fb33f11c07a16482c521a7e09c1ce3cc293c2330afe01bec63"}, + {file = "gunicorn-21.2.0-py3-none-any.whl", hash = "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0"}, + {file = "gunicorn-21.2.0.tar.gz", hash = "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033"}, ] [package.dependencies] packaging = "*" [package.extras] -eventlet = ["eventlet (>=0.24.1,!=0.36.0)"] +eventlet = ["eventlet (>=0.24.1)"] gevent = ["gevent (>=1.4.0)"] setproctitle = ["setproctitle"] -testing = ["coverage", "eventlet", "gevent", "pytest", "pytest-cov"] tornado = ["tornado (>=0.2)"] [[package]] @@ -627,4 +626,4 @@ brotli = ["brotli"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "dc92f61547a417a8de65de388cfccf773ad58934105b683222c50bd363e1c493" +content-hash = "500f510a0376578d5515202ac8aebddc7c7ac60ce4dbbb699a17b6b403fada42" diff --git a/pyproject.toml b/pyproject.toml index f94589a5..7218ea03 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,9 @@ django-tagging = "*" boto3 = "*" certifi = "*" dj-database-url = "*" -gunicorn = "*" +# gunicorn 22.* has Worker (no URI read) issue +# https://github.com/benoitc/gunicorn/issues/3207 +gunicorn = "~21.2.0" psycopg2 = "*" sentry-sdk = "*" whitenoise = "*" diff --git a/signbank/video/models.py b/signbank/video/models.py index 1aa8ede0..f65e05b5 100644 --- a/signbank/video/models.py +++ b/signbank/video/models.py @@ -34,6 +34,10 @@ def url(self, name): class GlossVideoDynamicStorage(import_string(settings.GLOSS_VIDEO_FILE_STORAGE)): + + def path(self, name): + return name + def public_url(self, name): """ Return the public URL to the object in S3 or local storage. This is NOT a presigned URL, use #url for that. From 7ec97a73c05357213b77179a140475dc84b055c9 Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Wed, 3 Jul 2024 12:01:06 +1000 Subject: [PATCH 02/15] Mock test changes to accomodate s3 boto update --- signbank/dictionary/tests/tests_tasks.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/signbank/dictionary/tests/tests_tasks.py b/signbank/dictionary/tests/tests_tasks.py index 02cfca8a..41b7aa96 100644 --- a/signbank/dictionary/tests/tests_tasks.py +++ b/signbank/dictionary/tests/tests_tasks.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals import random +import tempfile from unittest import mock from django.conf import settings @@ -35,24 +36,22 @@ def setUp(self): @override_settings(MEDIA_ROOT="") def test_retrieve_videos_for_glosses(self): + video_details = [ { "url": "/kiwifruit_1.mp4", - "file_name": ( - f"{settings.MEDIA_ROOT}/glossvideo/" - f"{self.gloss.pk}-{self.gloss.idgloss}_finalexample_1.png" - ), + "file_name": f"{self.gloss.pk}-{self.gloss.idgloss}_finalexample_1.png", "gloss_pk": self.gloss.pk, "video_type": "finalexample1", "version": 0 } ] - dummy_file = SimpleUploadedFile( - video_details[0]["file_name"], b'data \x00\x01', content_type="video/mp4") + dummy_file = tempfile.NamedTemporaryFile() + dummy_file.write(b'data \x00\x01') with mock.patch("signbank.dictionary.tasks.urlretrieve") as mock_retrieve: with mock.patch("signbank.dictionary.tasks.connection.close") as mock_close_connection: - mock_retrieve.return_value = (dummy_file, None) + mock_retrieve.return_value = (dummy_file.name, None) mock_close_connection.return_value = None retrieve_videos_for_glosses(video_details) mock_retrieve.assert_called_once() From ccf5ff1a0f059269907eae3ef306e6ac48bee276 Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:03:09 +1000 Subject: [PATCH 03/15] Pushing debug to test CI --- signbank/video/tests/test_views.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/signbank/video/tests/test_views.py b/signbank/video/tests/test_views.py index fd154308..1f3f9c27 100644 --- a/signbank/video/tests/test_views.py +++ b/signbank/video/tests/test_views.py @@ -179,6 +179,9 @@ def test_upload_glossvideo(self): """Test that the user can upload the glossvideo""" response = self.client.post(reverse('video:upload_glossvideo_gloss'), { 'videofile': self.testfile, 'gloss': self.testgloss.pk, 'video_type': self.video_type.machine_value}) + from pprint import pprint + pprint(reverse('video:upload_glossvideo_gloss')) + pprint({'videofile': self.testfile, 'gloss': self.testgloss.pk, 'video_type': self.video_type.machine_value}) self.assertEqual(response.status_code, 302) # Make sure that the response redirect url is correct. self.assertEqual(response.url, "/") From bb25fe25c2d652cb1b5bce56618cacd45b99193c Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:20:57 +1000 Subject: [PATCH 04/15] debug --- signbank/video/tests/test_views.py | 1 + signbank/video/views.py | 1 + 2 files changed, 2 insertions(+) diff --git a/signbank/video/tests/test_views.py b/signbank/video/tests/test_views.py index 1f3f9c27..ad255331 100644 --- a/signbank/video/tests/test_views.py +++ b/signbank/video/tests/test_views.py @@ -180,6 +180,7 @@ def test_upload_glossvideo(self): response = self.client.post(reverse('video:upload_glossvideo_gloss'), { 'videofile': self.testfile, 'gloss': self.testgloss.pk, 'video_type': self.video_type.machine_value}) from pprint import pprint + print("DEBUG MARKER") pprint(reverse('video:upload_glossvideo_gloss')) pprint({'videofile': self.testfile, 'gloss': self.testgloss.pk, 'video_type': self.video_type.machine_value}) self.assertEqual(response.status_code, 302) diff --git a/signbank/video/views.py b/signbank/video/views.py index fb3de37e..7565f647 100644 --- a/signbank/video/views.py +++ b/signbank/video/views.py @@ -43,6 +43,7 @@ def upload_glossvideo(request): if request.method == 'POST': form = GlossVideoForm(request.POST, request.FILES) if form.is_valid(): + print("UPLOAD_GLOSSVIDEO: FORM.ISVALID()") videofile = form.cleaned_data['videofile'] glossvideo = GlossVideo(videofile=videofile) From d0b99273de1121f25b6e836ffc2ab9b914c2280d Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:22:16 +1000 Subject: [PATCH 05/15] debug --- signbank/video/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/signbank/video/views.py b/signbank/video/views.py index 7565f647..5b9b0a1b 100644 --- a/signbank/video/views.py +++ b/signbank/video/views.py @@ -40,6 +40,7 @@ def get_signed_video_url_from_glossvideotoken(request, token, videoid): def upload_glossvideo(request): """Add a video from form and process the upload""" + print("UPLOAD_GLOSSVIDEO()") if request.method == 'POST': form = GlossVideoForm(request.POST, request.FILES) if form.is_valid(): From 9008df52dd075913b775d02189e35c9619009f5f Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:25:56 +1000 Subject: [PATCH 06/15] debug --- signbank/video/views.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/signbank/video/views.py b/signbank/video/views.py index 5b9b0a1b..fefeabcd 100644 --- a/signbank/video/views.py +++ b/signbank/video/views.py @@ -40,12 +40,9 @@ def get_signed_video_url_from_glossvideotoken(request, token, videoid): def upload_glossvideo(request): """Add a video from form and process the upload""" - print("UPLOAD_GLOSSVIDEO()") if request.method == 'POST': form = GlossVideoForm(request.POST, request.FILES) if form.is_valid(): - print("UPLOAD_GLOSSVIDEO: FORM.ISVALID()") - videofile = form.cleaned_data['videofile'] glossvideo = GlossVideo(videofile=videofile) title = form.cleaned_data['title'] @@ -72,8 +69,10 @@ def upload_glossvideo(request): def upload_glossvideo_gloss(request): """Add a video from form and process the upload""" if request.method == 'POST': + print("UPLOAD_GLOSSVIDEO()") form = GlossVideoForGlossForm(request.POST, request.FILES) if form.is_valid(): + print("UPLOAD_GLOSSVIDEO: FORM.ISVALID()") gloss = form.cleaned_data['gloss'] if 'view_dataset' not in get_perms(request.user, gloss.dataset): From 1c674965699fb2607bdd2bede082f0f6eeca62ff Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:31:20 +1000 Subject: [PATCH 07/15] debug --- signbank/video/views.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/signbank/video/views.py b/signbank/video/views.py index fefeabcd..7323a0af 100644 --- a/signbank/video/views.py +++ b/signbank/video/views.py @@ -81,17 +81,23 @@ def upload_glossvideo_gloss(request): messages.error(request, msg) raise PermissionDenied(msg) + print("ATTEMPTING VIDEOFILE CLEAN") videofile = form.cleaned_data['videofile'] + print("DONE VIDEOFILE CLEAN") video_type = form.cleaned_data['video_type'] video = GlossVideo( gloss=gloss, videofile=videofile, video_type=video_type) + print("ATTEMPTING VIDEOFILE TITLE") video_title = form.cleaned_data['title'] + print("DONE VIDEOFILE TITLE") if video_title: # if video_title was provided in the form, use it video.title = video_title else: # Otherwise use the videos filename as the title. video.title = videofile.name + print("ATTEMPTING VIDEO SAVE") video.save() + print("DONE VIDEO SAVE") redirect_url = form.cleaned_data['redirect'] if redirect_url: From ca69033ccbfe24b67b7261f879c17313f27b42de Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:34:54 +1000 Subject: [PATCH 08/15] debug --- signbank/video/views.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/signbank/video/views.py b/signbank/video/views.py index 7323a0af..217c51cf 100644 --- a/signbank/video/views.py +++ b/signbank/video/views.py @@ -96,7 +96,11 @@ def upload_glossvideo_gloss(request): else: # Otherwise use the videos filename as the title. video.title = videofile.name print("ATTEMPTING VIDEO SAVE") - video.save() + try: + video.save() + except Exception as exc: + print(exc) + raise exc print("DONE VIDEO SAVE") redirect_url = form.cleaned_data['redirect'] From 2ed163ac755175818872f4552fc45c52f5eb6f21 Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:38:59 +1000 Subject: [PATCH 09/15] Revert "debug" This reverts commit ca69033ccbfe24b67b7261f879c17313f27b42de. --- signbank/video/views.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/signbank/video/views.py b/signbank/video/views.py index 217c51cf..7323a0af 100644 --- a/signbank/video/views.py +++ b/signbank/video/views.py @@ -96,11 +96,7 @@ def upload_glossvideo_gloss(request): else: # Otherwise use the videos filename as the title. video.title = videofile.name print("ATTEMPTING VIDEO SAVE") - try: - video.save() - except Exception as exc: - print(exc) - raise exc + video.save() print("DONE VIDEO SAVE") redirect_url = form.cleaned_data['redirect'] From 9954f10bab81bb90365ec23f6020da2f0c1a3304 Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:39:06 +1000 Subject: [PATCH 10/15] Revert "debug" This reverts commit 1c674965699fb2607bdd2bede082f0f6eeca62ff. --- signbank/video/views.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/signbank/video/views.py b/signbank/video/views.py index 7323a0af..fefeabcd 100644 --- a/signbank/video/views.py +++ b/signbank/video/views.py @@ -81,23 +81,17 @@ def upload_glossvideo_gloss(request): messages.error(request, msg) raise PermissionDenied(msg) - print("ATTEMPTING VIDEOFILE CLEAN") videofile = form.cleaned_data['videofile'] - print("DONE VIDEOFILE CLEAN") video_type = form.cleaned_data['video_type'] video = GlossVideo( gloss=gloss, videofile=videofile, video_type=video_type) - print("ATTEMPTING VIDEOFILE TITLE") video_title = form.cleaned_data['title'] - print("DONE VIDEOFILE TITLE") if video_title: # if video_title was provided in the form, use it video.title = video_title else: # Otherwise use the videos filename as the title. video.title = videofile.name - print("ATTEMPTING VIDEO SAVE") video.save() - print("DONE VIDEO SAVE") redirect_url = form.cleaned_data['redirect'] if redirect_url: From 1ab6051489a021b2f4a1bc451129f753f5ad6df9 Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:39:19 +1000 Subject: [PATCH 11/15] Revert "debug" This reverts commit 9008df52dd075913b775d02189e35c9619009f5f. --- signbank/video/views.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/signbank/video/views.py b/signbank/video/views.py index fefeabcd..5b9b0a1b 100644 --- a/signbank/video/views.py +++ b/signbank/video/views.py @@ -40,9 +40,12 @@ def get_signed_video_url_from_glossvideotoken(request, token, videoid): def upload_glossvideo(request): """Add a video from form and process the upload""" + print("UPLOAD_GLOSSVIDEO()") if request.method == 'POST': form = GlossVideoForm(request.POST, request.FILES) if form.is_valid(): + print("UPLOAD_GLOSSVIDEO: FORM.ISVALID()") + videofile = form.cleaned_data['videofile'] glossvideo = GlossVideo(videofile=videofile) title = form.cleaned_data['title'] @@ -69,10 +72,8 @@ def upload_glossvideo(request): def upload_glossvideo_gloss(request): """Add a video from form and process the upload""" if request.method == 'POST': - print("UPLOAD_GLOSSVIDEO()") form = GlossVideoForGlossForm(request.POST, request.FILES) if form.is_valid(): - print("UPLOAD_GLOSSVIDEO: FORM.ISVALID()") gloss = form.cleaned_data['gloss'] if 'view_dataset' not in get_perms(request.user, gloss.dataset): From 2f4e7faa4fb78e36de4c5e62e3d3421aec247cd8 Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:39:20 +1000 Subject: [PATCH 12/15] Revert "debug" This reverts commit d0b99273de1121f25b6e836ffc2ab9b914c2280d. --- signbank/video/views.py | 1 - 1 file changed, 1 deletion(-) diff --git a/signbank/video/views.py b/signbank/video/views.py index 5b9b0a1b..7565f647 100644 --- a/signbank/video/views.py +++ b/signbank/video/views.py @@ -40,7 +40,6 @@ def get_signed_video_url_from_glossvideotoken(request, token, videoid): def upload_glossvideo(request): """Add a video from form and process the upload""" - print("UPLOAD_GLOSSVIDEO()") if request.method == 'POST': form = GlossVideoForm(request.POST, request.FILES) if form.is_valid(): From ce7b8b92cb593555a974f742aa0800493d9ef2d5 Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:39:21 +1000 Subject: [PATCH 13/15] Revert "debug" This reverts commit bb25fe25c2d652cb1b5bce56618cacd45b99193c. --- signbank/video/tests/test_views.py | 1 - signbank/video/views.py | 1 - 2 files changed, 2 deletions(-) diff --git a/signbank/video/tests/test_views.py b/signbank/video/tests/test_views.py index ad255331..1f3f9c27 100644 --- a/signbank/video/tests/test_views.py +++ b/signbank/video/tests/test_views.py @@ -180,7 +180,6 @@ def test_upload_glossvideo(self): response = self.client.post(reverse('video:upload_glossvideo_gloss'), { 'videofile': self.testfile, 'gloss': self.testgloss.pk, 'video_type': self.video_type.machine_value}) from pprint import pprint - print("DEBUG MARKER") pprint(reverse('video:upload_glossvideo_gloss')) pprint({'videofile': self.testfile, 'gloss': self.testgloss.pk, 'video_type': self.video_type.machine_value}) self.assertEqual(response.status_code, 302) diff --git a/signbank/video/views.py b/signbank/video/views.py index 7565f647..fb3de37e 100644 --- a/signbank/video/views.py +++ b/signbank/video/views.py @@ -43,7 +43,6 @@ def upload_glossvideo(request): if request.method == 'POST': form = GlossVideoForm(request.POST, request.FILES) if form.is_valid(): - print("UPLOAD_GLOSSVIDEO: FORM.ISVALID()") videofile = form.cleaned_data['videofile'] glossvideo = GlossVideo(videofile=videofile) From 98586ca5c79c9e11dd88617e5d918ee956d2f6cc Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:39:23 +1000 Subject: [PATCH 14/15] Revert "Pushing debug to test CI" This reverts commit ccf5ff1a0f059269907eae3ef306e6ac48bee276. --- signbank/video/tests/test_views.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/signbank/video/tests/test_views.py b/signbank/video/tests/test_views.py index 1f3f9c27..fd154308 100644 --- a/signbank/video/tests/test_views.py +++ b/signbank/video/tests/test_views.py @@ -179,9 +179,6 @@ def test_upload_glossvideo(self): """Test that the user can upload the glossvideo""" response = self.client.post(reverse('video:upload_glossvideo_gloss'), { 'videofile': self.testfile, 'gloss': self.testgloss.pk, 'video_type': self.video_type.machine_value}) - from pprint import pprint - pprint(reverse('video:upload_glossvideo_gloss')) - pprint({'videofile': self.testfile, 'gloss': self.testgloss.pk, 'video_type': self.video_type.machine_value}) self.assertEqual(response.status_code, 302) # Make sure that the response redirect url is correct. self.assertEqual(response.url, "/") From e2f7c34da2fe1a5c86fdce5636eeb75cf673766a Mon Sep 17 00:00:00 2001 From: jonholdsworth <82071930+jonholdsworth@users.noreply.github.com> Date: Wed, 3 Jul 2024 15:52:51 +1000 Subject: [PATCH 15/15] reverting path() change --- signbank/video/models.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/signbank/video/models.py b/signbank/video/models.py index f65e05b5..623f11e0 100644 --- a/signbank/video/models.py +++ b/signbank/video/models.py @@ -35,9 +35,6 @@ def url(self, name): class GlossVideoDynamicStorage(import_string(settings.GLOSS_VIDEO_FILE_STORAGE)): - def path(self, name): - return name - def public_url(self, name): """ Return the public URL to the object in S3 or local storage. This is NOT a presigned URL, use #url for that.