From f54ee24e8c1c185d55f4abb278cfb4366fd9017e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2025 16:46:08 +0000 Subject: [PATCH 1/4] [DEPENDABOT] Update: Bump django-simple-history from 3.7.0 to 3.8.0 Bumps [django-simple-history](https://github.com/jazzband/django-simple-history) from 3.7.0 to 3.8.0. - [Release notes](https://github.com/jazzband/django-simple-history/releases) - [Changelog](https://github.com/jazzband/django-simple-history/blob/master/CHANGES.rst) - [Commits](https://github.com/jazzband/django-simple-history/compare/3.7.0...3.8.0) --- updated-dependencies: - dependency-name: django-simple-history dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 82b4184b..491aaedd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -41,5 +41,5 @@ channels-redis==4.2.1 daphne==4.1.2 # React and Material UI will be handled via npm in the frontend directory -django-simple-history==3.7.0 +django-simple-history==3.8.0 django-tailwind-cli==2.21.1 From b3501599476071c53292fc33b2ab4047e15a0a02 Mon Sep 17 00:00:00 2001 From: "pixeebot[bot]" <104101892+pixeebot[bot]@users.noreply.github.com> Date: Tue, 28 Jan 2025 03:09:49 +0000 Subject: [PATCH 2/4] Add timeout to `requests` calls --- accounts/mixins.py | 2 +- accounts/signals.py | 2 +- email_service/management/commands/test_email_service.py | 4 ++-- email_service/services.py | 2 +- location/views.py | 8 ++++---- media/management/commands/download_photos.py | 4 ++-- parks/management/commands/seed_data.py | 2 +- parks/views.py | 4 ++-- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/accounts/mixins.py b/accounts/mixins.py index 850793c0..adf6260b 100644 --- a/accounts/mixins.py +++ b/accounts/mixins.py @@ -26,7 +26,7 @@ class TurnstileMixin: 'remoteip': request.META.get('REMOTE_ADDR'), } - response = requests.post(settings.TURNSTILE_VERIFY_URL, data=data) + response = requests.post(settings.TURNSTILE_VERIFY_URL, data=data, timeout=60) result = response.json() if not result.get('success'): diff --git a/accounts/signals.py b/accounts/signals.py index 49465665..d9440fee 100644 --- a/accounts/signals.py +++ b/accounts/signals.py @@ -31,7 +31,7 @@ def create_user_profile(sender, instance, created, **kwargs): if avatar_url: try: - response = requests.get(avatar_url) + response = requests.get(avatar_url, timeout=60) if response.status_code == 200: img_temp = NamedTemporaryFile(delete=True) img_temp.write(response.content) diff --git a/email_service/management/commands/test_email_service.py b/email_service/management/commands/test_email_service.py index aecf5e0a..9b6b45c0 100644 --- a/email_service/management/commands/test_email_service.py +++ b/email_service/management/commands/test_email_service.py @@ -146,8 +146,8 @@ class Command(BaseCommand): }, headers={ 'Content-Type': 'application/json', - } - ) + }, + timeout=60) if response.status_code == 200: self.stdout.write(self.style.SUCCESS('✓ API endpoint test successful')) diff --git a/email_service/services.py b/email_service/services.py index 0a592340..46b3b0dc 100644 --- a/email_service/services.py +++ b/email_service/services.py @@ -74,7 +74,7 @@ class EmailService: f"{settings.FORWARD_EMAIL_BASE_URL}/v1/emails", json=data, headers=headers, - ) + timeout=60) # Debug output print(f"Response Status: {response.status_code}") diff --git a/location/views.py b/location/views.py index 2af4b9dc..401551fe 100644 --- a/location/views.py +++ b/location/views.py @@ -52,8 +52,8 @@ class LocationSearchView(View): response = requests.get( 'https://nominatim.openstreetmap.org/search', params=params, - headers={'User-Agent': 'ThrillWiki/1.0'} - ) + headers={'User-Agent': 'ThrillWiki/1.0'}, + timeout=60) response.raise_for_status() results = response.json() except requests.RequestException as e: @@ -170,8 +170,8 @@ def reverse_geocode(request): 'format': 'json', 'addressdetails': 1 }, - headers={'User-Agent': 'ThrillWiki/1.0'} - ) + headers={'User-Agent': 'ThrillWiki/1.0'}, + timeout=60) response.raise_for_status() result = response.json() diff --git a/media/management/commands/download_photos.py b/media/management/commands/download_photos.py index 18d51a76..9309f7e8 100644 --- a/media/management/commands/download_photos.py +++ b/media/management/commands/download_photos.py @@ -33,7 +33,7 @@ class Command(BaseCommand): try: # Download image self.stdout.write(f'Downloading from URL: {photo_url}') - response = requests.get(photo_url) + response = requests.get(photo_url, timeout=60) if response.status_code == 200: # Delete any existing photos for this park Photo.objects.filter( @@ -74,7 +74,7 @@ class Command(BaseCommand): try: # Download image self.stdout.write(f'Downloading from URL: {photo_url}') - response = requests.get(photo_url) + response = requests.get(photo_url, timeout=60) if response.status_code == 200: # Delete any existing photos for this ride Photo.objects.filter( diff --git a/parks/management/commands/seed_data.py b/parks/management/commands/seed_data.py index d7d2a76f..b182e4d6 100644 --- a/parks/management/commands/seed_data.py +++ b/parks/management/commands/seed_data.py @@ -189,7 +189,7 @@ class Command(BaseCommand): def download_image(self, url): """Download image from URL and return as Django File object""" - response = requests.get(url) + response = requests.get(url, timeout=60) if response.status_code == 200: img_temp = NamedTemporaryFile(delete=True) img_temp.write(response.content) diff --git a/parks/views.py b/parks/views.py index 9b47623a..e930afb3 100644 --- a/parks/views.py +++ b/parks/views.py @@ -79,7 +79,7 @@ def location_search(request: HttpRequest) -> JsonResponse: "limit": 10, }, headers={"User-Agent": "ThrillWiki/1.0"}, - ) + timeout=60) if response.status_code == 200: results = response.json() @@ -128,7 +128,7 @@ def reverse_geocode(request: HttpRequest) -> JsonResponse: "accept-language": "en", }, headers={"User-Agent": "ThrillWiki/1.0"}, - ) + timeout=60) if response.status_code == 200: result = response.json() From 8dee13f0cc72ed6acc0fb7e8762dd0891331248e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 16:57:15 +0000 Subject: [PATCH 3/4] [DEPENDABOT] Update: Update isort requirement from ^5.13.0 to ^6.0.0 Updates the requirements on [isort](https://github.com/pycqa/isort) to permit the latest version. - [Release notes](https://github.com/pycqa/isort/releases) - [Changelog](https://github.com/PyCQA/isort/blob/main/CHANGELOG.md) - [Commits](https://github.com/pycqa/isort/compare/5.13.0...6.0.0) --- updated-dependencies: - dependency-name: isort dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a1d45e21..bc1964f5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ django-cors-headers = "^4.3.1" [tool.poetry.dev-dependencies] black = "^24.1.0" -isort = "^5.13.0" +isort = "^6.0.0" mypy = "^1.8.0" [build-system] From 58df9e484388d13082cbbad603a5414773dcf752 Mon Sep 17 00:00:00 2001 From: pacnpal <183241239+pacnpal@users.noreply.github.com> Date: Wed, 5 Feb 2025 17:58:40 -0500 Subject: [PATCH 4/4] Fix filter query in cleanup_test_data command to use correct field for reviews --- .../management/commands/cleanup_test_data.py | 2 +- globalLocators.js | 3 + uv.lock | 109 +++++++++++++++++- 3 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 globalLocators.js diff --git a/accounts/management/commands/cleanup_test_data.py b/accounts/management/commands/cleanup_test_data.py index c59380ae..a35702b2 100644 --- a/accounts/management/commands/cleanup_test_data.py +++ b/accounts/management/commands/cleanup_test_data.py @@ -20,7 +20,7 @@ class Command(BaseCommand): self.stdout.write(self.style.SUCCESS(f"Deleted {count} test users")) # Delete test reviews - reviews = Review.objects.filter(author__username__in=["testuser", "moderator"]) + reviews = Review.objects.filter(user__username__in=["testuser", "moderator"]) count = reviews.count() reviews.delete() self.stdout.write(self.style.SUCCESS(f"Deleted {count} test reviews")) diff --git a/globalLocators.js b/globalLocators.js new file mode 100644 index 00000000..a9e2075d --- /dev/null +++ b/globalLocators.js @@ -0,0 +1,3 @@ +const locators = {}; + +module.exports = { locators }; diff --git a/uv.lock b/uv.lock index 78a43ad9..f2747247 100644 --- a/uv.lock +++ b/uv.lock @@ -149,7 +149,7 @@ name = "click" version = "8.1.8" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "platform_system == 'Windows'" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 } wheels = [ @@ -404,6 +404,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d9/42/65004373ac4617464f35ed15931b30d764f53cdd30cc78d5aea349c8c050/flake8-7.1.1-py2.py3-none-any.whl", hash = "sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213", size = 57731 }, ] +[[package]] +name = "greenlet" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/ff/df5fede753cc10f6a5be0931204ea30c35fa2f2ea7a35b25bdaf4fe40e46/greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467", size = 186022 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/57/0db4940cd7bb461365ca8d6fd53e68254c9dbbcc2b452e69d0d41f10a85e/greenlet-3.1.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:05175c27cb459dcfc05d026c4232f9de8913ed006d42713cb8a5137bd49375f1", size = 272990 }, + { url = "https://files.pythonhosted.org/packages/1c/ec/423d113c9f74e5e402e175b157203e9102feeb7088cee844d735b28ef963/greenlet-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935e943ec47c4afab8965954bf49bfa639c05d4ccf9ef6e924188f762145c0ff", size = 649175 }, + { url = "https://files.pythonhosted.org/packages/a9/46/ddbd2db9ff209186b7b7c621d1432e2f21714adc988703dbdd0e65155c77/greenlet-3.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:667a9706c970cb552ede35aee17339a18e8f2a87a51fba2ed39ceeeb1004798a", size = 663425 }, + { url = "https://files.pythonhosted.org/packages/bc/f9/9c82d6b2b04aa37e38e74f0c429aece5eeb02bab6e3b98e7db89b23d94c6/greenlet-3.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8a678974d1f3aa55f6cc34dc480169d58f2e6d8958895d68845fa4ab566509e", size = 657736 }, + { url = "https://files.pythonhosted.org/packages/d9/42/b87bc2a81e3a62c3de2b0d550bf91a86939442b7ff85abb94eec3fc0e6aa/greenlet-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efc0f674aa41b92da8c49e0346318c6075d734994c3c4e4430b1c3f853e498e4", size = 660347 }, + { url = "https://files.pythonhosted.org/packages/37/fa/71599c3fd06336cdc3eac52e6871cfebab4d9d70674a9a9e7a482c318e99/greenlet-3.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0153404a4bb921f0ff1abeb5ce8a5131da56b953eda6e14b88dc6bbc04d2049e", size = 615583 }, + { url = "https://files.pythonhosted.org/packages/4e/96/e9ef85de031703ee7a4483489b40cf307f93c1824a02e903106f2ea315fe/greenlet-3.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:275f72decf9932639c1c6dd1013a1bc266438eb32710016a1c742df5da6e60a1", size = 1133039 }, + { url = "https://files.pythonhosted.org/packages/87/76/b2b6362accd69f2d1889db61a18c94bc743e961e3cab344c2effaa4b4a25/greenlet-3.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c4aab7f6381f38a4b42f269057aee279ab0fc7bf2e929e3d4abfae97b682a12c", size = 1160716 }, + { url = "https://files.pythonhosted.org/packages/1f/1b/54336d876186920e185066d8c3024ad55f21d7cc3683c856127ddb7b13ce/greenlet-3.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761", size = 299490 }, + { url = "https://files.pythonhosted.org/packages/5f/17/bea55bf36990e1638a2af5ba10c1640273ef20f627962cf97107f1e5d637/greenlet-3.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1695e76146579f8c06c1509c7ce4dfe0706f49c6831a817ac04eebb2fd02011", size = 643731 }, + { url = "https://files.pythonhosted.org/packages/78/d2/aa3d2157f9ab742a08e0fd8f77d4699f37c22adfbfeb0c610a186b5f75e0/greenlet-3.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7876452af029456b3f3549b696bb36a06db7c90747740c5302f74a9e9fa14b13", size = 649304 }, + { url = "https://files.pythonhosted.org/packages/f1/8e/d0aeffe69e53ccff5a28fa86f07ad1d2d2d6537a9506229431a2a02e2f15/greenlet-3.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ead44c85f8ab905852d3de8d86f6f8baf77109f9da589cb4fa142bd3b57b475", size = 646537 }, + { url = "https://files.pythonhosted.org/packages/05/79/e15408220bbb989469c8871062c97c6c9136770657ba779711b90870d867/greenlet-3.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8320f64b777d00dd7ccdade271eaf0cad6636343293a25074cc5566160e4de7b", size = 642506 }, + { url = "https://files.pythonhosted.org/packages/18/87/470e01a940307796f1d25f8167b551a968540fbe0551c0ebb853cb527dd6/greenlet-3.1.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6510bf84a6b643dabba74d3049ead221257603a253d0a9873f55f6a59a65f822", size = 602753 }, + { url = "https://files.pythonhosted.org/packages/e2/72/576815ba674eddc3c25028238f74d7b8068902b3968cbe456771b166455e/greenlet-3.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:04b013dc07c96f83134b1e99888e7a79979f1a247e2a9f59697fa14b5862ed01", size = 1122731 }, + { url = "https://files.pythonhosted.org/packages/ac/38/08cc303ddddc4b3d7c628c3039a61a3aae36c241ed01393d00c2fd663473/greenlet-3.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:411f015496fec93c1c8cd4e5238da364e1da7a124bcb293f085bf2860c32c6f6", size = 1142112 }, +] + [[package]] name = "hyperlink" version = "21.0.0" @@ -559,6 +583,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 }, ] +[[package]] +name = "playwright" +version = "1.49.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "greenlet" }, + { name = "pyee" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/be/01025581052e43eb698092c4328d7497ca62bcb5c83f15a611d4a71b4b92/playwright-1.49.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:1041ffb45a0d0bc44d698d3a5aa3ac4b67c9bd03540da43a0b70616ad52592b8", size = 39559859 }, + { url = "https://files.pythonhosted.org/packages/79/25/ef1010a42cc7d576282015d983c5451d73e369b198b6eb32a177fae281f8/playwright-1.49.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:9f38ed3d0c1f4e0a6d1c92e73dd9a61f8855133249d6f0cec28648d38a7137be", size = 38808973 }, + { url = "https://files.pythonhosted.org/packages/70/4b/3930cf10f303a10d493a382e4448aaff898b4065698b3b8d92f902e53e08/playwright-1.49.1-py3-none-macosx_11_0_universal2.whl", hash = "sha256:3be48c6d26dc819ca0a26567c1ae36a980a0303dcd4249feb6f59e115aaddfb8", size = 39559863 }, + { url = "https://files.pythonhosted.org/packages/9a/c1/ea765e72a746dc7ec2ce155ffea29d454e7171db78f3c09185e888387246/playwright-1.49.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:753ca90ee31b4b03d165cfd36e477309ebf2b4381953f2a982ff612d85b147d2", size = 44163300 }, + { url = "https://files.pythonhosted.org/packages/5a/52/95efac704bf36b770a2522d88a6dee298042845d10bfb35f7ca0fcc36d91/playwright-1.49.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd9bc8dab37aa25198a01f555f0a2e2c3813fe200fef018ac34dfe86b34994b9", size = 43744353 }, + { url = "https://files.pythonhosted.org/packages/f9/97/a3fccc9aaa6da83890772e9980703b0ea6b1e1ad42042fb50df3aef6c641/playwright-1.49.1-py3-none-win32.whl", hash = "sha256:43b304be67f096058e587dac453ece550eff87b8fbed28de30f4f022cc1745bb", size = 34060663 }, + { url = "https://files.pythonhosted.org/packages/71/a9/bd88ac0bd498c91aab3aba2e393d1fa59f72a7243e9265ccbf4861ca4f64/playwright-1.49.1-py3-none-win_amd64.whl", hash = "sha256:47b23cb346283278f5b4d1e1990bcb6d6302f80c0aa0ca93dd0601a1400191df", size = 34060667 }, +] + [[package]] name = "pluggy" version = "1.5.0" @@ -634,6 +676,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, ] +[[package]] +name = "pyee" +version = "12.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d2/a7/8faaa62a488a2a1e0d56969757f087cbd2729e9bcfa508c230299f366b4c/pyee-12.0.0.tar.gz", hash = "sha256:c480603f4aa2927d4766eb41fa82793fe60a82cbfdb8d688e0d08c55a534e145", size = 29675 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl", hash = "sha256:7b14b74320600049ccc7d0e0b1becd3b4bd0a03c745758225e31a59f4095c990", size = 14831 }, +] + [[package]] name = "pyflakes" version = "3.2.0" @@ -679,6 +733,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", size = 343083 }, ] +[[package]] +name = "pytest-base-url" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/1a/b64ac368de6b993135cb70ca4e5d958a5c268094a3a2a4cac6f0021b6c4f/pytest_base_url-2.1.0.tar.gz", hash = "sha256:02748589a54f9e63fcbe62301d6b0496da0d10231b753e950c63e03aee745d45", size = 6702 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/1c/b00940ab9eb8ede7897443b771987f2f4a76f06be02f1b3f01eb7567e24a/pytest_base_url-2.1.0-py3-none-any.whl", hash = "sha256:3ad15611778764d451927b2a53240c1a7a591b521ea44cebfe45849d2d2812e6", size = 5302 }, +] + [[package]] name = "pytest-django" version = "4.9.0" @@ -691,6 +758,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/47/fe/54f387ee1b41c9ad59e48fb8368a361fad0600fe404315e31a12bacaea7d/pytest_django-4.9.0-py3-none-any.whl", hash = "sha256:1d83692cb39188682dbb419ff0393867e9904094a549a7d38a3154d5731b2b99", size = 23723 }, ] +[[package]] +name = "pytest-playwright" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "playwright" }, + { name = "pytest" }, + { name = "pytest-base-url" }, + { name = "python-slugify" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a7/19/ae0252d2c36f518733cca294bfcd41c18dad32c2d8aff424d6d1531f1827/pytest_playwright-0.6.2.tar.gz", hash = "sha256:ff4054b19aa05df096ac6f74f0572591566aaf0f6d97f6cb9674db8a4d4ed06c", size = 16293 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/38/e95090d0a26114a650f7d8847425f21757fc740de965df94de47b439fe67/pytest_playwright-0.6.2-py3-none-any.whl", hash = "sha256:0eff73bebe497b0158befed91e2f5fe94cfa17181f8b3acf575beed84e7e9043", size = 16436 }, +] + [[package]] name = "python-dotenv" version = "1.0.1" @@ -700,6 +782,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863 }, ] +[[package]] +name = "python-slugify" +version = "8.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "text-unidecode" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/c7/5e1547c44e31da50a460df93af11a535ace568ef89d7a811069ead340c4a/python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856", size = 10921 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", size = 10051 }, +] + [[package]] name = "redis" version = "5.2.1" @@ -766,6 +860,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl", hash = "sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca", size = 44415 }, ] +[[package]] +name = "text-unidecode" +version = "1.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size = 76885 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size = 78154 }, +] + [[package]] name = "thrillwiki" version = "0.1.0" @@ -790,11 +893,13 @@ dependencies = [ { name = "djangorestframework" }, { name = "flake8" }, { name = "pillow" }, + { name = "playwright" }, { name = "psycopg2-binary" }, { name = "pycountry" }, { name = "pyjwt" }, { name = "pytest" }, { name = "pytest-django" }, + { name = "pytest-playwright" }, { name = "python-dotenv" }, { name = "requests" }, { name = "whitenoise" }, @@ -821,11 +926,13 @@ requires-dist = [ { name = "djangorestframework", specifier = ">=3.14.0" }, { name = "flake8", specifier = ">=7.1.1" }, { name = "pillow", specifier = ">=10.2.0" }, + { name = "playwright", specifier = ">=1.41.0" }, { name = "psycopg2-binary", specifier = ">=2.9.9" }, { name = "pycountry", specifier = ">=24.6.1" }, { name = "pyjwt", specifier = ">=2.10.1" }, { name = "pytest", specifier = ">=8.3.4" }, { name = "pytest-django", specifier = ">=4.9.0" }, + { name = "pytest-playwright", specifier = ">=0.4.3" }, { name = "python-dotenv", specifier = ">=1.0.1" }, { name = "requests", specifier = ">=2.32.3" }, { name = "whitenoise", specifier = ">=6.6.0" },