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/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() diff --git a/signbank/video/models.py b/signbank/video/models.py index 1aa8ede0..623f11e0 100644 --- a/signbank/video/models.py +++ b/signbank/video/models.py @@ -34,6 +34,7 @@ def url(self, name): class GlossVideoDynamicStorage(import_string(settings.GLOSS_VIDEO_FILE_STORAGE)): + 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.