diff --git a/fabfile.py b/fabfile.py index f2ac16def..9079be090 100644 --- a/fabfile.py +++ b/fabfile.py @@ -1,11 +1,12 @@ import datetime import os -import subprocess from shlex import quote +import subprocess from invoke import run as local from invoke.tasks import task + # Process .env file if os.path.exists(".env"): with open(".env") as f: @@ -137,15 +138,11 @@ def psql(c, command=None): @task def delete_docker_database(c, local_database_name=LOCAL_DATABASE_NAME): dexec( - "dropdb --if-exists --host db --username={project_name} {database_name}".format( - project_name=PROJECT_NAME, database_name=LOCAL_DATABASE_NAME - ), + f"dropdb --if-exists --host db --username={PROJECT_NAME} {LOCAL_DATABASE_NAME}", "db", ) dexec( - "createdb --host db --username={project_name} {database_name}".format( - project_name=PROJECT_NAME, database_name=LOCAL_DATABASE_NAME - ), + f"createdb --host db --username={PROJECT_NAME} {LOCAL_DATABASE_NAME}", "db", ) psql(c, "CREATE SCHEMA heroku_ext;") @@ -160,12 +157,8 @@ def import_data(c, database_filename): delete_docker_database(c) # Import the database file to the db container dexec( - "pg_restore --clean --no-acl --if-exists --no-owner --host db \ - --username={project_name} -d {database_name} {database_filename}".format( - project_name=PROJECT_NAME, - database_name=LOCAL_DATABASE_NAME, - database_filename=database_filename, - ), + f"pg_restore --clean --no-acl --if-exists --no-owner --host db \ + --username={PROJECT_NAME} -d {LOCAL_DATABASE_NAME} {database_filename}", service="db", ) print( @@ -275,12 +268,8 @@ def delete_local_database(c, local_database_name=LOCAL_DATABASE_NAME): def aws(c, command, aws_access_key_id, aws_secret_access_key): return local( - "AWS_ACCESS_KEY_ID={access_key_id} AWS_SECRET_ACCESS_KEY={secret_key} " - "aws {command}".format( - access_key_id=aws_access_key_id, - secret_key=aws_secret_access_key, - command=command, - ) + f"AWS_ACCESS_KEY_ID={aws_access_key_id} AWS_SECRET_ACCESS_KEY={aws_secret_access_key} " + f"aws {command}" ) @@ -291,10 +280,7 @@ def pull_media_from_s3( aws_storage_bucket_name, local_media_dir=LOCAL_MEDIA_DIR, ): - aws_cmd = "s3 sync --delete s3://{bucket_name} {local_media}".format( - bucket_name=aws_storage_bucket_name, - local_media=local_media_dir, - ) + aws_cmd = f"s3 sync --delete s3://{aws_storage_bucket_name} {local_media_dir}" aws(c, aws_cmd, aws_access_key_id, aws_secret_access_key) @@ -318,11 +304,7 @@ def pull_images_from_s3( aws_storage_bucket_name, local_images_dir=LOCAL_IMAGES_DIR, ): - aws_cmd = ( - "s3 sync --delete s3://{bucket_name}/original_images {local_media}".format( - bucket_name=aws_storage_bucket_name, local_media=local_images_dir - ) - ) + aws_cmd = f"s3 sync --delete s3://{aws_storage_bucket_name}/original_images {local_images_dir}" aws(c, aws_cmd, aws_access_key_id, aws_secret_access_key) # The above command just syncs the original images, so we need to drop the wagtailimages_renditions # table so that the renditions will be re-created when requested on the local build. @@ -351,18 +333,13 @@ def pull_database_from_heroku(c, app_instance, anonymise=False): datestamp = datetime.datetime.now().strftime("%Y%m%d-%H%M%S") local( - "heroku pg:backups:download --output={dump_folder}/{datestamp}.dump --app {app}".format( - app=app_instance, dump_folder=LOCAL_DUMP_DIR, datestamp=datestamp - ), + f"heroku pg:backups:download --output={LOCAL_DUMP_DIR}/{datestamp}.dump --app {app_instance}", ) import_data(c, f"/app/{LOCAL_DUMP_DIR}/{datestamp}.dump") local( - "rm {dump_folder}/{datestamp}.dump".format( - dump_folder=LOCAL_DUMP_DIR, - datestamp=datestamp, - ), + f"rm {LOCAL_DUMP_DIR}/{datestamp}.dump", ) if anonymise: @@ -394,13 +371,9 @@ def make_bold(msg): def dellar_snapshot(c, filename): """Snapshot the database, files will be stored in the db container""" dexec( - "pg_dump -d {database_name} -U {database_username} > {filename}.psql".format( - database_name=LOCAL_DATABASE_NAME, - database_username=LOCAL_DATABASE_USERNAME, - filename=filename, - ), + f"pg_dump -d {LOCAL_DATABASE_NAME} -U {LOCAL_DATABASE_USERNAME} > {filename}.psql", service="db", - ), + ) print("Database snapshot created") @@ -409,14 +382,12 @@ def dellar_restore(c, filename): """Restore the database from a snapshot in the db container""" delete_docker_database(c) - dexec( - "psql -U {database_username} -d {database_name} < {filename}.psql".format( - database_name=LOCAL_DATABASE_NAME, - database_username=LOCAL_DATABASE_USERNAME, - filename=filename, + ( + dexec( + f"psql -U {LOCAL_DATABASE_USERNAME} -d {LOCAL_DATABASE_NAME} < {filename}.psql", + service="db", ), - service="db", - ), + ) print("Database restored.") @@ -426,10 +397,10 @@ def dellar_list(c): print("Database snapshots:") dexec( """for f in *.psql; do - printf ' - %s\n' "${f%.psql}" - done""", + printf ' - %s\n' "${f%.psql}" + done""", service="db", - ), + ) print("Restore with `dellar-restore `") @@ -439,7 +410,7 @@ def dellar_remove(c, filename): dexec( f"rm {filename}.psql", service="db", - ), + ) print(f"Snapshot {filename} removed") diff --git a/gunicorn-conf.py b/gunicorn-conf.py index 377ae809d..6170b6dce 100644 --- a/gunicorn-conf.py +++ b/gunicorn-conf.py @@ -1,4 +1,5 @@ # Replace gunicorn's 'Server' HTTP header to avoid leaking info to attackers import gunicorn + gunicorn.SERVER_SOFTWARE = "" diff --git a/manage.py b/manage.py index b662475c9..3ffdfb721 100755 --- a/manage.py +++ b/manage.py @@ -2,6 +2,7 @@ import os import sys + if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tbx.settings.production") diff --git a/tbx/blog/factories.py b/tbx/blog/factories.py index 70f77cc1f..ce8abb259 100644 --- a/tbx/blog/factories.py +++ b/tbx/blog/factories.py @@ -1,5 +1,6 @@ import factory import wagtail_factories + from tbx.blog.models import BlogIndexPage, BlogPage from tbx.core.factories import StoryBlockFactory diff --git a/tbx/blog/feeds.py b/tbx/blog/feeds.py index 9006a5ef6..818dc7fc2 100644 --- a/tbx/blog/feeds.py +++ b/tbx/blog/feeds.py @@ -6,6 +6,7 @@ from .models import BlogPage + # Main blog feed diff --git a/tbx/blog/migrations/0001_initial.py b/tbx/blog/migrations/0001_initial.py index 5f2d17e13..feb6f6fdf 100644 --- a/tbx/blog/migrations/0001_initial.py +++ b/tbx/blog/migrations/0001_initial.py @@ -2,18 +2,20 @@ from django.db import migrations, models import django.db.models.deletion + import modelcluster.fields -import tbx.core.blocks import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks +import tbx.core.blocks -class Migration(migrations.Migration): +class Migration(migrations.Migration): initial = True dependencies = [ diff --git a/tbx/blog/migrations/0002_remove_blogindexpage_call_to_action_and_more.py b/tbx/blog/migrations/0002_remove_blogindexpage_call_to_action_and_more.py index 22b8f39d9..41d5007c9 100644 --- a/tbx/blog/migrations/0002_remove_blogindexpage_call_to_action_and_more.py +++ b/tbx/blog/migrations/0002_remove_blogindexpage_call_to_action_and_more.py @@ -1,17 +1,19 @@ # Generated by Django 4.2.9 on 2024-01-15 10:16 from django.db import migrations -import tbx.core.blocks + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks +import tbx.core.blocks -class Migration(migrations.Migration): +class Migration(migrations.Migration): dependencies = [ ("blog", "0001_initial"), ] diff --git a/tbx/blog/migrations/0003_add_new_image_block_to_body_streamfield.py b/tbx/blog/migrations/0003_add_new_image_block_to_body_streamfield.py index a4d7a8b46..5fd5d3273 100644 --- a/tbx/blog/migrations/0003_add_new_image_block_to_body_streamfield.py +++ b/tbx/blog/migrations/0003_add_new_image_block_to_body_streamfield.py @@ -1,16 +1,17 @@ # Generated by Django 4.2.9 on 2024-01-15 11:14 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("blog", "0002_remove_blogindexpage_call_to_action_and_more"), ] diff --git a/tbx/blog/migrations/0003_alter_blogpage_body.py b/tbx/blog/migrations/0003_alter_blogpage_body.py index 796b864b8..36121db5a 100644 --- a/tbx/blog/migrations/0003_alter_blogpage_body.py +++ b/tbx/blog/migrations/0003_alter_blogpage_body.py @@ -1,17 +1,19 @@ # Generated by Django 4.2.9 on 2024-01-15 12:25 from django.db import migrations -import tbx.core.blocks + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks +import tbx.core.blocks -class Migration(migrations.Migration): +class Migration(migrations.Migration): dependencies = [ ("blog", "0002_remove_blogindexpage_call_to_action_and_more"), ] diff --git a/tbx/blog/migrations/0004_alter_blogpage_body.py b/tbx/blog/migrations/0004_alter_blogpage_body.py index 30887545a..5fb083337 100644 --- a/tbx/blog/migrations/0004_alter_blogpage_body.py +++ b/tbx/blog/migrations/0004_alter_blogpage_body.py @@ -1,17 +1,19 @@ # Generated by Django 4.2.9 on 2024-01-16 13:44 from django.db import migrations -import tbx.core.blocks + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks +import tbx.core.blocks -class Migration(migrations.Migration): +class Migration(migrations.Migration): dependencies = [ ("blog", "0003_alter_blogpage_body"), ] diff --git a/tbx/blog/migrations/0004_data_migration_aligned_and_wide_images.py b/tbx/blog/migrations/0004_data_migration_aligned_and_wide_images.py index b5d25336f..2a0291af4 100644 --- a/tbx/blog/migrations/0004_data_migration_aligned_and_wide_images.py +++ b/tbx/blog/migrations/0004_data_migration_aligned_and_wide_images.py @@ -1,6 +1,7 @@ # Generated by Django 4.2.9 on 2024-01-15 11:15 from django.db import migrations + from wagtail.blocks.migrations.migrate_operation import MigrateStreamData from wagtail.blocks.migrations.operations import RenameStreamChildrenOperation diff --git a/tbx/blog/migrations/0005_remove_aligned_and_wide_image_blocks_from_body_streamfield.py b/tbx/blog/migrations/0005_remove_aligned_and_wide_image_blocks_from_body_streamfield.py index 99eb1cb42..a81a2760f 100644 --- a/tbx/blog/migrations/0005_remove_aligned_and_wide_image_blocks_from_body_streamfield.py +++ b/tbx/blog/migrations/0005_remove_aligned_and_wide_image_blocks_from_body_streamfield.py @@ -1,16 +1,17 @@ # Generated by Django 4.2.9 on 2024-01-15 11:53 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("blog", "0004_data_migration_aligned_and_wide_images"), ] diff --git a/tbx/blog/migrations/0006_merge_20240117_1530.py b/tbx/blog/migrations/0006_merge_20240117_1530.py index a69c4290c..aee6c4aba 100644 --- a/tbx/blog/migrations/0006_merge_20240117_1530.py +++ b/tbx/blog/migrations/0006_merge_20240117_1530.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("blog", "0004_alter_blogpage_body"), ("blog", "0005_remove_aligned_and_wide_image_blocks_from_body_streamfield"), diff --git a/tbx/blog/migrations/0007_alter_blogpage_body.py b/tbx/blog/migrations/0007_alter_blogpage_body.py index cb0024a88..bb60cfc64 100644 --- a/tbx/blog/migrations/0007_alter_blogpage_body.py +++ b/tbx/blog/migrations/0007_alter_blogpage_body.py @@ -1,16 +1,17 @@ # Generated by Django 4.2.9 on 2024-01-18 13:49 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("blog", "0006_merge_20240117_1530"), ] diff --git a/tbx/blog/migrations/0008_alter_blogpage_body.py b/tbx/blog/migrations/0008_alter_blogpage_body.py index a3965f54d..612a79463 100644 --- a/tbx/blog/migrations/0008_alter_blogpage_body.py +++ b/tbx/blog/migrations/0008_alter_blogpage_body.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-01-18 14:11 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("blog", "0007_alter_blogpage_body"), ] diff --git a/tbx/blog/migrations/0009_delete_blogpagerelatedlink.py b/tbx/blog/migrations/0009_delete_blogpagerelatedlink.py index c66c010f6..880b88457 100644 --- a/tbx/blog/migrations/0009_delete_blogpagerelatedlink.py +++ b/tbx/blog/migrations/0009_delete_blogpagerelatedlink.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("blog", "0008_alter_blogpage_body"), ] diff --git a/tbx/blog/migrations/0010_add_help_text_to_alt_text_field_in_image_block.py b/tbx/blog/migrations/0010_add_help_text_to_alt_text_field_in_image_block.py index 70626fd1d..7bc385261 100644 --- a/tbx/blog/migrations/0010_add_help_text_to_alt_text_field_in_image_block.py +++ b/tbx/blog/migrations/0010_add_help_text_to_alt_text_field_in_image_block.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-01-19 13:09 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("blog", "0009_delete_blogpagerelatedlink"), ] diff --git a/tbx/blog/migrations/0011_remove_blogpagetagselect_page_and_more.py b/tbx/blog/migrations/0011_remove_blogpagetagselect_page_and_more.py index eac900a1d..5ef7e2d27 100644 --- a/tbx/blog/migrations/0011_remove_blogpagetagselect_page_and_more.py +++ b/tbx/blog/migrations/0011_remove_blogpagetagselect_page_and_more.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("blog", "0010_add_help_text_to_alt_text_field_in_image_block"), ] diff --git a/tbx/blog/migrations/0012_alter_blogpage_body.py b/tbx/blog/migrations/0012_alter_blogpage_body.py index 2bde8ed8e..291f8f350 100644 --- a/tbx/blog/migrations/0012_alter_blogpage_body.py +++ b/tbx/blog/migrations/0012_alter_blogpage_body.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-01-24 10:12 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("blog", "0011_remove_blogpagetagselect_page_and_more"), ] diff --git a/tbx/blog/migrations/0012_alter_blogpageauthor_page.py b/tbx/blog/migrations/0012_alter_blogpageauthor_page.py index 2d3b4241e..24dad3ce2 100644 --- a/tbx/blog/migrations/0012_alter_blogpageauthor_page.py +++ b/tbx/blog/migrations/0012_alter_blogpageauthor_page.py @@ -2,11 +2,11 @@ from django.db import migrations import django.db.models.deletion + import modelcluster.fields class Migration(migrations.Migration): - dependencies = [ ("blog", "0011_remove_blogpagetagselect_page_and_more"), ] diff --git a/tbx/blog/migrations/0014_delete_blogpageauthor.py b/tbx/blog/migrations/0014_delete_blogpageauthor.py index d266f5736..25698c057 100644 --- a/tbx/blog/migrations/0014_delete_blogpageauthor.py +++ b/tbx/blog/migrations/0014_delete_blogpageauthor.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("blog", "0013_data_migration_page_authors"), ] diff --git a/tbx/blog/migrations/0015_merge_20240126_0816.py b/tbx/blog/migrations/0015_merge_20240126_0816.py index 2c288b74f..c2b188e93 100644 --- a/tbx/blog/migrations/0015_merge_20240126_0816.py +++ b/tbx/blog/migrations/0015_merge_20240126_0816.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("blog", "0012_alter_blogpage_body"), ("blog", "0014_delete_blogpageauthor"), diff --git a/tbx/blog/migrations/0016_alter_blogpage_body.py b/tbx/blog/migrations/0016_alter_blogpage_body.py index 26ac054f3..fbe91dc17 100644 --- a/tbx/blog/migrations/0016_alter_blogpage_body.py +++ b/tbx/blog/migrations/0016_alter_blogpage_body.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-01-26 10:39 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("blog", "0015_merge_20240126_0816"), ] diff --git a/tbx/blog/migrations/0017_blogindexpage_theme_blogpage_theme.py b/tbx/blog/migrations/0017_blogindexpage_theme_blogpage_theme.py index 9c0c5ef6d..2ca0e86e1 100644 --- a/tbx/blog/migrations/0017_blogindexpage_theme_blogpage_theme.py +++ b/tbx/blog/migrations/0017_blogindexpage_theme_blogpage_theme.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("blog", "0016_alter_blogpage_body"), ] diff --git a/tbx/blog/migrations/0018_blogpage_related_sectors.py b/tbx/blog/migrations/0018_blogpage_related_sectors.py index bb4c58fe9..251ca6931 100644 --- a/tbx/blog/migrations/0018_blogpage_related_sectors.py +++ b/tbx/blog/migrations/0018_blogpage_related_sectors.py @@ -1,11 +1,11 @@ # Generated by Django 4.2.9 on 2024-02-06 10:33 from django.db import migrations + import modelcluster.fields class Migration(migrations.Migration): - dependencies = [ ("taxonomy", "0002_sector_team_remove_service_contact_reasons_and_more"), ("blog", "0017_blogindexpage_theme_blogpage_theme"), diff --git a/tbx/blog/migrations/0019_add_contact_mixin_to_all_page_models.py b/tbx/blog/migrations/0019_add_contact_mixin_to_all_page_models.py index 8278fe334..91c033d6a 100644 --- a/tbx/blog/migrations/0019_add_contact_mixin_to_all_page_models.py +++ b/tbx/blog/migrations/0019_add_contact_mixin_to_all_page_models.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("people", "0006_add_contact_mixin_to_all_page_models"), ("blog", "0018_blogpage_related_sectors"), diff --git a/tbx/blog/migrations/0020_alter_blogpage_related_sectors.py b/tbx/blog/migrations/0020_alter_blogpage_related_sectors.py index aecb2440b..a6e04de56 100644 --- a/tbx/blog/migrations/0020_alter_blogpage_related_sectors.py +++ b/tbx/blog/migrations/0020_alter_blogpage_related_sectors.py @@ -1,11 +1,11 @@ # Generated by Django 4.2.9 on 2024-02-19 14:46 from django.db import migrations + import modelcluster.fields class Migration(migrations.Migration): - dependencies = [ ("taxonomy", "0002_sector_team_remove_service_contact_reasons_and_more"), ("blog", "0019_add_contact_mixin_to_all_page_models"), diff --git a/tbx/blog/migrations/0021_alter_blogpage_body.py b/tbx/blog/migrations/0021_alter_blogpage_body.py index 996e44a86..5b64a4a30 100644 --- a/tbx/blog/migrations/0021_alter_blogpage_body.py +++ b/tbx/blog/migrations/0021_alter_blogpage_body.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-02-26 09:50 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("blog", "0020_alter_blogpage_related_sectors"), ] diff --git a/tbx/blog/migrations/0022_add_wide_image_block.py b/tbx/blog/migrations/0022_add_wide_image_block.py index b6917ea38..0d6792b43 100644 --- a/tbx/blog/migrations/0022_add_wide_image_block.py +++ b/tbx/blog/migrations/0022_add_wide_image_block.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-02-27 14:14 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("blog", "0021_alter_blogpage_body"), ] diff --git a/tbx/blog/migrations/0023_add_wide_image_block.py b/tbx/blog/migrations/0023_add_wide_image_block.py index f32a9785f..a1ffa8c5f 100644 --- a/tbx/blog/migrations/0023_add_wide_image_block.py +++ b/tbx/blog/migrations/0023_add_wide_image_block.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-02-28 08:44 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("blog", "0022_add_wide_image_block"), ] diff --git a/tbx/blog/migrations/0024_use_custom_streamfield.py b/tbx/blog/migrations/0024_use_custom_streamfield.py index 77472d132..7136e47a8 100644 --- a/tbx/blog/migrations/0024_use_custom_streamfield.py +++ b/tbx/blog/migrations/0024_use_custom_streamfield.py @@ -1,11 +1,11 @@ # Generated by Django 4.2.9 on 2024-03-11 19:43 from django.db import migrations + import tbx.core.utils.fields class Migration(migrations.Migration): - dependencies = [ ("blog", "0023_add_wide_image_block"), ] diff --git a/tbx/blog/migrations/0025_add_navigation_title_override.py b/tbx/blog/migrations/0025_add_navigation_title_override.py index 54eacaa78..976ef173b 100644 --- a/tbx/blog/migrations/0025_add_navigation_title_override.py +++ b/tbx/blog/migrations/0025_add_navigation_title_override.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("blog", "0024_use_custom_streamfield"), ] diff --git a/tbx/blog/migrations/0026_add_earth_colour_theme.py b/tbx/blog/migrations/0026_add_earth_colour_theme.py index 9b6fd0105..308e9857d 100644 --- a/tbx/blog/migrations/0026_add_earth_colour_theme.py +++ b/tbx/blog/migrations/0026_add_earth_colour_theme.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("blog", "0025_add_navigation_title_override"), ] diff --git a/tbx/blog/models.py b/tbx/blog/models.py index 325a1e228..f75dda0bc 100644 --- a/tbx/blog/models.py +++ b/tbx/blog/models.py @@ -1,6 +1,6 @@ +from itertools import chain import math import string -from itertools import chain from django import forms from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator @@ -10,8 +10,14 @@ from django.utils.functional import cached_property from django.utils.http import urlencode -from bs4 import BeautifulSoup from modelcluster.fields import ParentalManyToManyField +from wagtail.admin.panels import FieldPanel, InlinePanel, MultiFieldPanel +from wagtail.models import Page +from wagtail.search import index +from wagtail.signals import page_published + +from bs4 import BeautifulSoup + from tbx.core.blocks import StoryBlock from tbx.core.utils.fields import StreamField from tbx.core.utils.models import ( @@ -22,10 +28,6 @@ from tbx.images.models import CustomImage from tbx.people.models import ContactMixin from tbx.taxonomy.models import Sector, Service -from wagtail.admin.panels import FieldPanel, InlinePanel, MultiFieldPanel -from wagtail.models import Page -from wagtail.search import index -from wagtail.signals import page_published class BlogIndexPage( diff --git a/tbx/blog/tests/test_models.py b/tbx/blog/tests/test_models.py index 569338039..4b73e8202 100644 --- a/tbx/blog/tests/test_models.py +++ b/tbx/blog/tests/test_models.py @@ -1,12 +1,15 @@ from django.core.paginator import Page as PaginatorPage +from wagtail.coreutils import get_dummy_request +from wagtail.models import PageViewRestriction +from wagtail.test.utils import WagtailPageTestCase + from faker import Faker + from tbx.blog.factories import BlogIndexPageFactory, BlogPageFactory from tbx.blog.models import BlogPage from tbx.taxonomy.factories import SectorFactory, ServiceFactory -from wagtail.coreutils import get_dummy_request -from wagtail.models import PageViewRestriction -from wagtail.test.utils import WagtailPageTestCase + fake = Faker(["en_GB"]) @@ -25,14 +28,12 @@ def setUpTestData(cls): PageViewRestriction.objects.create( page=cls.private_blog_post, restriction_type="password", - password="password123", + password="password123", # noqa: S106 ) def test_get_context(self): context = self.blog_index.get_context(get_dummy_request()) blog_posts = context["blog_posts"] - print("blog_posts") - print(blog_posts) self.assertIsInstance(blog_posts, PaginatorPage) self.assertEqual(blog_posts.object_list.first(), self.blog_post) diff --git a/tbx/core/blocks.py b/tbx/core/blocks.py index 9c013c2de..3cdb0c4aa 100644 --- a/tbx/core/blocks.py +++ b/tbx/core/blocks.py @@ -1,6 +1,6 @@ -import logging from collections import defaultdict from datetime import datetime +import logging from django.core.exceptions import ValidationError from django.db import models @@ -9,7 +9,6 @@ from django.utils.functional import cached_property from django.utils.safestring import mark_safe -from tbx.images.models import CustomImage from wagtail import blocks from wagtail.blocks.struct_block import StructBlockValidationError from wagtail.contrib.typed_table_block.blocks import ( @@ -22,9 +21,13 @@ from wagtail.images.blocks import ImageChooserBlock from wagtail.models import Page from wagtail.snippets.blocks import SnippetChooserBlock + from wagtailmarkdown.blocks import MarkdownBlock from wagtailmedia.blocks import VideoChooserBlock +from tbx.images.models import CustomImage + + logger = logging.getLogger(__name__) @@ -101,8 +104,6 @@ class ImageFormatChoiceBlock(blocks.FieldBlock): See https://github.com/wagtail/wagtail/issues/3710 for more details. """ - pass - class AltTextStructValue(blocks.StructValue): def image_alt_text(self): @@ -373,22 +374,23 @@ def featured_case_study_logo(self): """ if logo := self.get("logo"): return logo - elif page := self.get("link"): - if page.content_type.model_class().__name__ == "WorkPage": - return page.specific.logo + elif ( + page := self.get("link") + ) and page.content_type.model_class().__name__ == "WorkPage": + return page.specific.logo return None class NumericResultBlock(blocks.StructBlock): label = blocks.CharBlock( max_length=255, - help_text=mark_safe( + help_text=mark_safe( # noqa: S308 "Short text to describe the change e.g. Raised over" ), ) headline_number = blocks.CharBlock( max_length=255, - help_text=mark_safe("A numerical value e.g. £600k"), + help_text=mark_safe("A numerical value e.g. £600k"), # noqa: S308 ) @@ -629,7 +631,7 @@ def clean(self, value): result = super().clean(value) errors = {} - for i in range(0, len(result)): + for i in range(len(result)): button_values = { "button_link": result[i]["button_link"], "button_text": result[i]["button_text"], @@ -796,16 +798,16 @@ class Meta: class NumericStatisticsBlock(blocks.StructBlock): headline_number = blocks.CharBlock( max_length=255, - help_text=mark_safe("A numerical value e.g. 30%"), + help_text=mark_safe("A numerical value e.g. 30%"), # noqa: S308 ) description = blocks.TextBlock( - help_text=mark_safe( + help_text=mark_safe( # noqa: S308 "Text to describe the change e.g. Reduction in accessibility errors" ) ) further_details = blocks.TextBlock( required=False, - help_text=mark_safe( + help_text=mark_safe( # noqa: S308 "Text to give more information, e.g. Over 80% of pages" ), ) @@ -817,13 +819,13 @@ class Meta: class TextualStatisticsBlock(blocks.StructBlock): headline_text = blocks.CharBlock( max_length=255, - help_text=mark_safe( + help_text=mark_safe( # noqa: S308 "Describe a general improvement, e.g. Reduction in accessibility issues" ), ) further_details = blocks.TextBlock( required=False, - help_text=mark_safe( + help_text=mark_safe( # noqa: S308 "Text to give more information, e.g. Over 80% of pages" ), ) diff --git a/tbx/core/context_processors.py b/tbx/core/context_processors.py index b0c37514f..e8966730a 100644 --- a/tbx/core/context_processors.py +++ b/tbx/core/context_processors.py @@ -6,7 +6,6 @@ def global_vars(request): - # Read the mode cookie to determine the user's saved preference for light or dark mode, if it exists # Ensure it is one of the allowed values mode = request.COOKIES.get("torchbox-mode", "dark") diff --git a/tbx/core/errors.py b/tbx/core/errors.py index 5a5a6cebe..d2cd5687a 100644 --- a/tbx/core/errors.py +++ b/tbx/core/errors.py @@ -1,4 +1,2 @@ class UnauthorizedHTTPError(Exception): """Raised when the user is not authorized to access a resource and the request accepts HTML.""" - - pass diff --git a/tbx/core/factories.py b/tbx/core/factories.py index ef7cf28b6..41da713c2 100644 --- a/tbx/core/factories.py +++ b/tbx/core/factories.py @@ -1,8 +1,10 @@ +from wagtail.blocks import RichTextBlock + import factory import wagtail_factories + from tbx.core.blocks import StoryBlock from tbx.core.models import HomePage, StandardPage -from wagtail.blocks import RichTextBlock class RichTextBlockFactory(wagtail_factories.blocks.BlockFactory): diff --git a/tbx/core/fields.py b/tbx/core/fields.py index 3832c17d2..41d0ea834 100644 --- a/tbx/core/fields.py +++ b/tbx/core/fields.py @@ -4,6 +4,7 @@ from django.db import models from django.utils.translation import gettext_lazy as _ + color_re = re.compile(r"^[A-Fa-f0-9]{6}$") color_validator = RegexValidator(color_re, _("Enter a valid color."), "invalid") diff --git a/tbx/core/management/commands/update_youtube_embeds.py b/tbx/core/management/commands/update_youtube_embeds.py index 464c359fa..cb9703e27 100644 --- a/tbx/core/management/commands/update_youtube_embeds.py +++ b/tbx/core/management/commands/update_youtube_embeds.py @@ -6,6 +6,7 @@ from wagtail.embeds.exceptions import EmbedException from wagtail.embeds.models import Embed + logger = logging.getLogger(__name__) @@ -17,7 +18,6 @@ class Command(BaseCommand): """ def handle(self, *args, **options): - youtube_embeds = Embed.objects.filter(provider_name="YouTube") urls = list(youtube_embeds.values_list("url", flat=True)) diff --git a/tbx/core/migrations/0001_initial.py b/tbx/core/migrations/0001_initial.py index d79ea4107..c29e13798 100644 --- a/tbx/core/migrations/0001_initial.py +++ b/tbx/core/migrations/0001_initial.py @@ -2,19 +2,21 @@ from django.db import migrations, models import django.db.models.deletion + import modelcluster.fields -import tbx.core.blocks -import tbx.core.fields import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks +import tbx.core.blocks +import tbx.core.fields -class Migration(migrations.Migration): +class Migration(migrations.Migration): initial = True dependencies = [ diff --git a/tbx/core/migrations/0002_remove_jobindexpagejob_page_delete_jobindexpage_and_more.py b/tbx/core/migrations/0002_remove_jobindexpagejob_page_delete_jobindexpage_and_more.py index a0fc78102..036543426 100644 --- a/tbx/core/migrations/0002_remove_jobindexpagejob_page_delete_jobindexpage_and_more.py +++ b/tbx/core/migrations/0002_remove_jobindexpagejob_page_delete_jobindexpage_and_more.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0001_initial"), ] diff --git a/tbx/core/migrations/0003_remove_standardpage_additional_content_and_more.py b/tbx/core/migrations/0003_remove_standardpage_additional_content_and_more.py index 65aaed460..f2471ccb4 100644 --- a/tbx/core/migrations/0003_remove_standardpage_additional_content_and_more.py +++ b/tbx/core/migrations/0003_remove_standardpage_additional_content_and_more.py @@ -1,17 +1,19 @@ # Generated by Django 4.2.8 on 2024-01-11 11:47 from django.db import migrations -import tbx.core.blocks + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks +import tbx.core.blocks -class Migration(migrations.Migration): +class Migration(migrations.Migration): dependencies = [ ("torchbox", "0002_remove_jobindexpagejob_page_delete_jobindexpage_and_more"), ] diff --git a/tbx/core/migrations/0004_alter_standardpage_body.py b/tbx/core/migrations/0004_alter_standardpage_body.py index 0977376f6..329ca51e4 100644 --- a/tbx/core/migrations/0004_alter_standardpage_body.py +++ b/tbx/core/migrations/0004_alter_standardpage_body.py @@ -1,17 +1,19 @@ # Generated by Django 4.2.8 on 2024-01-11 14:35 from django.db import migrations -import tbx.core.blocks + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks +import tbx.core.blocks -class Migration(migrations.Migration): +class Migration(migrations.Migration): dependencies = [ ("torchbox", "0003_remove_standardpage_additional_content_and_more"), ] diff --git a/tbx/core/migrations/0005_remove_advert_page_remove_advertplacement_advert_and_more.py b/tbx/core/migrations/0005_remove_advert_page_remove_advertplacement_advert_and_more.py index fb0ea86b2..f075fd0a8 100644 --- a/tbx/core/migrations/0005_remove_advert_page_remove_advertplacement_advert_and_more.py +++ b/tbx/core/migrations/0005_remove_advert_page_remove_advertplacement_advert_and_more.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0004_alter_standardpage_body"), ] diff --git a/tbx/core/migrations/0006_add_new_image_block_to_body_streamfield.py b/tbx/core/migrations/0006_add_new_image_block_to_body_streamfield.py index cbf9bb7ef..efe753856 100644 --- a/tbx/core/migrations/0006_add_new_image_block_to_body_streamfield.py +++ b/tbx/core/migrations/0006_add_new_image_block_to_body_streamfield.py @@ -1,16 +1,17 @@ # Generated by Django 4.2.9 on 2024-01-15 11:14 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0005_remove_advert_page_remove_advertplacement_advert_and_more"), ] diff --git a/tbx/core/migrations/0006_alter_standardpage_body.py b/tbx/core/migrations/0006_alter_standardpage_body.py index 14eac8e04..b9e4d7790 100644 --- a/tbx/core/migrations/0006_alter_standardpage_body.py +++ b/tbx/core/migrations/0006_alter_standardpage_body.py @@ -1,17 +1,19 @@ # Generated by Django 4.2.9 on 2024-01-15 12:42 from django.db import migrations -import tbx.core.blocks + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks +import tbx.core.blocks -class Migration(migrations.Migration): +class Migration(migrations.Migration): dependencies = [ ("torchbox", "0005_remove_advert_page_remove_advertplacement_advert_and_more"), ] diff --git a/tbx/core/migrations/0007_alter_standardpage_body.py b/tbx/core/migrations/0007_alter_standardpage_body.py index 1408cf2f2..e3b70c76e 100644 --- a/tbx/core/migrations/0007_alter_standardpage_body.py +++ b/tbx/core/migrations/0007_alter_standardpage_body.py @@ -1,17 +1,19 @@ # Generated by Django 4.2.9 on 2024-01-16 13:44 from django.db import migrations -import tbx.core.blocks + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks +import tbx.core.blocks -class Migration(migrations.Migration): +class Migration(migrations.Migration): dependencies = [ ("torchbox", "0006_alter_standardpage_body"), ] diff --git a/tbx/core/migrations/0007_data_migration_aligned_and_wide_images.py b/tbx/core/migrations/0007_data_migration_aligned_and_wide_images.py index 0e804e9fa..ab3bdee1c 100644 --- a/tbx/core/migrations/0007_data_migration_aligned_and_wide_images.py +++ b/tbx/core/migrations/0007_data_migration_aligned_and_wide_images.py @@ -1,6 +1,7 @@ # Generated by Django 4.2.9 on 2024-01-15 11:15 from django.db import migrations + from wagtail.blocks.migrations.migrate_operation import MigrateStreamData from wagtail.blocks.migrations.operations import RenameStreamChildrenOperation diff --git a/tbx/core/migrations/0008_remove_aligned_and_wide_image_blocks_from_body_streamfield.py b/tbx/core/migrations/0008_remove_aligned_and_wide_image_blocks_from_body_streamfield.py index d1677244d..0348fea82 100644 --- a/tbx/core/migrations/0008_remove_aligned_and_wide_image_blocks_from_body_streamfield.py +++ b/tbx/core/migrations/0008_remove_aligned_and_wide_image_blocks_from_body_streamfield.py @@ -1,16 +1,17 @@ # Generated by Django 4.2.9 on 2024-01-15 11:53 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0007_data_migration_aligned_and_wide_images"), ] diff --git a/tbx/core/migrations/0009_merge_20240117_1530.py b/tbx/core/migrations/0009_merge_20240117_1530.py index 9db6240c0..91f55c517 100644 --- a/tbx/core/migrations/0009_merge_20240117_1530.py +++ b/tbx/core/migrations/0009_merge_20240117_1530.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0007_alter_standardpage_body"), ("torchbox", "0008_remove_aligned_and_wide_image_blocks_from_body_streamfield"), diff --git a/tbx/core/migrations/0010_alter_standardpage_body.py b/tbx/core/migrations/0010_alter_standardpage_body.py index ff6ade62a..c86a02b4f 100644 --- a/tbx/core/migrations/0010_alter_standardpage_body.py +++ b/tbx/core/migrations/0010_alter_standardpage_body.py @@ -1,16 +1,17 @@ # Generated by Django 4.2.9 on 2024-01-17 15:31 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0009_merge_20240117_1530"), ] diff --git a/tbx/core/migrations/0011_alter_standardpage_body.py b/tbx/core/migrations/0011_alter_standardpage_body.py index 17ca108da..54808705f 100644 --- a/tbx/core/migrations/0011_alter_standardpage_body.py +++ b/tbx/core/migrations/0011_alter_standardpage_body.py @@ -1,16 +1,17 @@ # Generated by Django 4.2.9 on 2024-01-18 13:49 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0010_alter_standardpage_body"), ] diff --git a/tbx/core/migrations/0012_alter_standardpage_body.py b/tbx/core/migrations/0012_alter_standardpage_body.py index 6050e2570..4a1ca93c4 100644 --- a/tbx/core/migrations/0012_alter_standardpage_body.py +++ b/tbx/core/migrations/0012_alter_standardpage_body.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-01-18 14:11 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0011_alter_standardpage_body"), ] diff --git a/tbx/core/migrations/0013_add_help_text_to_alt_text_field_in_image_block.py b/tbx/core/migrations/0013_add_help_text_to_alt_text_field_in_image_block.py index d799a5402..7579a6d3e 100644 --- a/tbx/core/migrations/0013_add_help_text_to_alt_text_field_in_image_block.py +++ b/tbx/core/migrations/0013_add_help_text_to_alt_text_field_in_image_block.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-01-19 13:09 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0012_alter_standardpage_body"), ] diff --git a/tbx/core/migrations/0014_alter_standardpage_body.py b/tbx/core/migrations/0014_alter_standardpage_body.py index c391e85c5..d41eab847 100644 --- a/tbx/core/migrations/0014_alter_standardpage_body.py +++ b/tbx/core/migrations/0014_alter_standardpage_body.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-01-24 10:12 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0013_add_help_text_to_alt_text_field_in_image_block"), ] diff --git a/tbx/core/migrations/0014_data_migration_pageauthor.py b/tbx/core/migrations/0014_data_migration_pageauthor.py index 4d691cb11..d15a3a2d9 100644 --- a/tbx/core/migrations/0014_data_migration_pageauthor.py +++ b/tbx/core/migrations/0014_data_migration_pageauthor.py @@ -2,11 +2,11 @@ from django.db import migrations, models import django.db.models.deletion + import modelcluster.fields class Migration(migrations.Migration): - dependencies = [ ("people", "0003_remove_personindexpage_call_to_action_and_more"), ("wagtailcore", "0089_log_entry_data_json_null_to_object"), diff --git a/tbx/core/migrations/0015_merge_20240126_0816.py b/tbx/core/migrations/0015_merge_20240126_0816.py index 2351ade2e..b5d3bba66 100644 --- a/tbx/core/migrations/0015_merge_20240126_0816.py +++ b/tbx/core/migrations/0015_merge_20240126_0816.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0014_alter_standardpage_body"), ("torchbox", "0014_data_migration_pageauthor"), diff --git a/tbx/core/migrations/0016_alter_standardpage_body.py b/tbx/core/migrations/0016_alter_standardpage_body.py index 332fca6a4..1f1266f86 100644 --- a/tbx/core/migrations/0016_alter_standardpage_body.py +++ b/tbx/core/migrations/0016_alter_standardpage_body.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-01-26 10:39 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0015_merge_20240126_0816"), ] diff --git a/tbx/core/migrations/0017_homepage_theme_standardpage_theme.py b/tbx/core/migrations/0017_homepage_theme_standardpage_theme.py index 1881a5c38..4554d9f3f 100644 --- a/tbx/core/migrations/0017_homepage_theme_standardpage_theme.py +++ b/tbx/core/migrations/0017_homepage_theme_standardpage_theme.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0016_alter_standardpage_body"), ] diff --git a/tbx/core/migrations/0018_add_contact_mixin_to_all_page_models.py b/tbx/core/migrations/0018_add_contact_mixin_to_all_page_models.py index 6871403ac..ddc25bd47 100644 --- a/tbx/core/migrations/0018_add_contact_mixin_to_all_page_models.py +++ b/tbx/core/migrations/0018_add_contact_mixin_to_all_page_models.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("people", "0006_add_contact_mixin_to_all_page_models"), ("torchbox", "0017_homepage_theme_standardpage_theme"), diff --git a/tbx/core/migrations/0019_alter_standardpage_body.py b/tbx/core/migrations/0019_alter_standardpage_body.py index c06f1f72a..72d3ab062 100644 --- a/tbx/core/migrations/0019_alter_standardpage_body.py +++ b/tbx/core/migrations/0019_alter_standardpage_body.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-02-26 09:50 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0018_add_contact_mixin_to_all_page_models"), ] diff --git a/tbx/core/migrations/0020_homepagepartnerlogo_remove_homepageheroimage_image_and_more.py b/tbx/core/migrations/0020_homepagepartnerlogo_remove_homepageheroimage_image_and_more.py index 65d30a4c3..581256307 100644 --- a/tbx/core/migrations/0020_homepagepartnerlogo_remove_homepageheroimage_image_and_more.py +++ b/tbx/core/migrations/0020_homepagepartnerlogo_remove_homepageheroimage_image_and_more.py @@ -2,18 +2,19 @@ from django.db import migrations, models import django.db.models.deletion + import modelcluster.fields import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("images", "0001_initial"), ("torchbox", "0019_alter_standardpage_body"), diff --git a/tbx/core/migrations/0021_update_label_names.py b/tbx/core/migrations/0021_update_label_names.py index 96984e1df..60022172f 100644 --- a/tbx/core/migrations/0021_update_label_names.py +++ b/tbx/core/migrations/0021_update_label_names.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-02-26 16:31 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ( "torchbox", diff --git a/tbx/core/migrations/0022_add_promo_block_to_homepage_body.py b/tbx/core/migrations/0022_add_promo_block_to_homepage_body.py index 73557f727..6c4fd3c2e 100644 --- a/tbx/core/migrations/0022_add_promo_block_to_homepage_body.py +++ b/tbx/core/migrations/0022_add_promo_block_to_homepage_body.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-02-27 10:25 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0021_update_label_names"), ] diff --git a/tbx/core/migrations/0023_add_wide_image_block.py b/tbx/core/migrations/0023_add_wide_image_block.py index bdebfa809..483435834 100644 --- a/tbx/core/migrations/0023_add_wide_image_block.py +++ b/tbx/core/migrations/0023_add_wide_image_block.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-02-27 14:14 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0022_add_promo_block_to_homepage_body"), ] diff --git a/tbx/core/migrations/0024_add_wide_image_block.py b/tbx/core/migrations/0024_add_wide_image_block.py index 6731781ac..670108476 100644 --- a/tbx/core/migrations/0024_add_wide_image_block.py +++ b/tbx/core/migrations/0024_add_wide_image_block.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-02-28 08:44 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0023_add_wide_image_block"), ] diff --git a/tbx/core/migrations/0025_add_tabbed_paragraph_block.py b/tbx/core/migrations/0025_add_tabbed_paragraph_block.py index 69c281704..22717a301 100644 --- a/tbx/core/migrations/0025_add_tabbed_paragraph_block.py +++ b/tbx/core/migrations/0025_add_tabbed_paragraph_block.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-02-29 08:09 from django.db import migrations + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0024_add_wide_image_block"), ] diff --git a/tbx/core/migrations/0026_add_event_block_to_homepage_body.py b/tbx/core/migrations/0026_add_event_block_to_homepage_body.py index 4e9dc8aee..999d8a1a2 100644 --- a/tbx/core/migrations/0026_add_event_block_to_homepage_body.py +++ b/tbx/core/migrations/0026_add_event_block_to_homepage_body.py @@ -1,17 +1,18 @@ # Generated by Django 4.2.9 on 2024-02-29 09:01 from django.db import migrations, models + import wagtail.blocks import wagtail.embeds.blocks import wagtail.fields import wagtail.images.blocks import wagtail.snippets.blocks + import wagtailmarkdown.blocks import wagtailmedia.blocks class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0025_add_tabbed_paragraph_block"), ] diff --git a/tbx/core/migrations/0027_remove_unneeded_homepage_field.py b/tbx/core/migrations/0027_remove_unneeded_homepage_field.py index cc9e39398..30a928646 100644 --- a/tbx/core/migrations/0027_remove_unneeded_homepage_field.py +++ b/tbx/core/migrations/0027_remove_unneeded_homepage_field.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0026_add_event_block_to_homepage_body"), ] diff --git a/tbx/core/migrations/0028_remove_unwanted_blocks_on_homepage.py b/tbx/core/migrations/0028_remove_unwanted_blocks_on_homepage.py index d58979a77..91b5fc89a 100644 --- a/tbx/core/migrations/0028_remove_unwanted_blocks_on_homepage.py +++ b/tbx/core/migrations/0028_remove_unwanted_blocks_on_homepage.py @@ -1,6 +1,7 @@ # Generated by Django 4.2.9 on 2024-03-04 15:22 from django.db import migrations + import wagtail.blocks import wagtail.fields import wagtail.images.blocks @@ -8,7 +9,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0027_remove_unneeded_homepage_field"), ] diff --git a/tbx/core/migrations/0029_update_button_link_on_photocollageblock.py b/tbx/core/migrations/0029_update_button_link_on_photocollageblock.py index aed6ca19e..ed25cb903 100644 --- a/tbx/core/migrations/0029_update_button_link_on_photocollageblock.py +++ b/tbx/core/migrations/0029_update_button_link_on_photocollageblock.py @@ -1,6 +1,7 @@ # Generated by Django 4.2.9 on 2024-03-05 18:53 from django.db import migrations + import wagtail.blocks import wagtail.fields import wagtail.images.blocks @@ -8,7 +9,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0028_remove_unwanted_blocks_on_homepage"), ] diff --git a/tbx/core/migrations/0030_remove_featured_case_study_tagline.py b/tbx/core/migrations/0030_remove_featured_case_study_tagline.py index 76567f69a..6b938d127 100644 --- a/tbx/core/migrations/0030_remove_featured_case_study_tagline.py +++ b/tbx/core/migrations/0030_remove_featured_case_study_tagline.py @@ -1,6 +1,7 @@ # Generated by Django 4.2.9 on 2024-03-11 12:55 from django.db import migrations + import wagtail.blocks import wagtail.fields import wagtail.images.blocks @@ -8,7 +9,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0029_update_button_link_on_photocollageblock"), ] diff --git a/tbx/core/migrations/0030_use_custom_streamfield.py b/tbx/core/migrations/0030_use_custom_streamfield.py index 78bf82fc4..06e7e259d 100644 --- a/tbx/core/migrations/0030_use_custom_streamfield.py +++ b/tbx/core/migrations/0030_use_custom_streamfield.py @@ -1,11 +1,11 @@ # Generated by Django 4.2.9 on 2024-03-11 19:43 from django.db import migrations + import tbx.core.utils.fields class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0029_update_button_link_on_photocollageblock"), ] diff --git a/tbx/core/migrations/0031_merge_20240315_1052.py b/tbx/core/migrations/0031_merge_20240315_1052.py index c157677b3..f82da5dab 100644 --- a/tbx/core/migrations/0031_merge_20240315_1052.py +++ b/tbx/core/migrations/0031_merge_20240315_1052.py @@ -1,11 +1,11 @@ # Generated by Django 4.2.9 on 2024-03-15 10:52 from django.db import migrations + import tbx.core.utils.fields class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0030_remove_featured_case_study_tagline"), ("torchbox", "0030_use_custom_streamfield"), diff --git a/tbx/core/migrations/0032_alter_socialmediasettings_site_name.py b/tbx/core/migrations/0032_alter_socialmediasettings_site_name.py index 777add619..dae203d79 100644 --- a/tbx/core/migrations/0032_alter_socialmediasettings_site_name.py +++ b/tbx/core/migrations/0032_alter_socialmediasettings_site_name.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0031_merge_20240315_1052"), ] diff --git a/tbx/core/migrations/0033_add_navigation_title_override.py b/tbx/core/migrations/0033_add_navigation_title_override.py index 1ee30d75e..4de809199 100644 --- a/tbx/core/migrations/0033_add_navigation_title_override.py +++ b/tbx/core/migrations/0033_add_navigation_title_override.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0032_alter_socialmediasettings_site_name"), ] diff --git a/tbx/core/migrations/0034_add_earth_colour_theme.py b/tbx/core/migrations/0034_add_earth_colour_theme.py index 5d32b5566..c28326480 100644 --- a/tbx/core/migrations/0034_add_earth_colour_theme.py +++ b/tbx/core/migrations/0034_add_earth_colour_theme.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0033_add_navigation_title_override"), ] diff --git a/tbx/core/migrations/0035_add_important_page_settings.py b/tbx/core/migrations/0035_add_important_page_settings.py index f88b6290e..e93ac3630 100644 --- a/tbx/core/migrations/0035_add_important_page_settings.py +++ b/tbx/core/migrations/0035_add_important_page_settings.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("wagtailcore", "0091_remove_revision_submitted_for_moderation"), ("torchbox", "0034_add_earth_colour_theme"), diff --git a/tbx/core/migrations/0035_remove_address_settings.py b/tbx/core/migrations/0035_remove_address_settings.py index 8f48af674..4b8410f8c 100644 --- a/tbx/core/migrations/0035_remove_address_settings.py +++ b/tbx/core/migrations/0035_remove_address_settings.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0034_add_earth_colour_theme"), ] diff --git a/tbx/core/migrations/0036_delete_unused_tag_snippet.py b/tbx/core/migrations/0036_delete_unused_tag_snippet.py index d98f8b6b2..9e67a44d5 100644 --- a/tbx/core/migrations/0036_delete_unused_tag_snippet.py +++ b/tbx/core/migrations/0036_delete_unused_tag_snippet.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0035_remove_address_settings"), ] diff --git a/tbx/core/migrations/0037_merge_20240725_1000.py b/tbx/core/migrations/0037_merge_20240725_1000.py index 55f4e55bc..b02eedea9 100644 --- a/tbx/core/migrations/0037_merge_20240725_1000.py +++ b/tbx/core/migrations/0037_merge_20240725_1000.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("torchbox", "0035_add_important_page_settings"), ("torchbox", "0036_delete_unused_tag_snippet"), diff --git a/tbx/core/models.py b/tbx/core/models.py index c2303796c..8af14912e 100644 --- a/tbx/core/models.py +++ b/tbx/core/models.py @@ -2,13 +2,6 @@ from django.utils.functional import cached_property from modelcluster.fields import ParentalKey -from tbx.core.utils.fields import StreamField -from tbx.core.utils.models import ( - ColourThemeMixin, - NavigationFields, - SocialFields, -) -from tbx.people.models import ContactMixin from wagtail.admin.panels import FieldPanel, InlinePanel, MultiFieldPanel from wagtail.blocks import PageChooserBlock, StreamBlock, StructBlock from wagtail.contrib.settings.models import BaseSiteSetting, register_setting @@ -17,6 +10,14 @@ from wagtail.search import index from wagtail.snippets.models import register_snippet +from tbx.core.utils.fields import StreamField +from tbx.core.utils.models import ( + ColourThemeMixin, + NavigationFields, + SocialFields, +) +from tbx.people.models import ContactMixin + from .blocks import HomePageStoryBlock, StandardPageStoryBlock @@ -57,15 +58,6 @@ class LinkFields(models.Model): related_name="+", ) - @property - def link(self): - if self.link_page: - return self.link_page.url - elif self.link_document: - return self.link_document.url - else: - return self.link_external - panels = [ FieldPanel("link_external"), FieldPanel("link_page"), @@ -75,6 +67,15 @@ def link(self): class Meta: abstract = True + @property + def link(self): + if self.link_page_id: + return self.link_page.url + elif self.link_document: + return self.link_document.url + else: + return self.link_external + # Carousel items class CarouselItem(LinkFields): @@ -196,7 +197,7 @@ class StandardPage( # No longer in use but kept for migration history -class Tag(models.Model): +class Tag(models.Model): # noqa: DJ008 pass diff --git a/tbx/core/templatetags/reading_time_tags.py b/tbx/core/templatetags/reading_time_tags.py index ac7557693..417c5470c 100644 --- a/tbx/core/templatetags/reading_time_tags.py +++ b/tbx/core/templatetags/reading_time_tags.py @@ -3,8 +3,10 @@ from django import template from bs4 import BeautifulSoup + from tbx.core.blocks import ImageBlock + register = template.Library() # Using value of 275 words per minute. diff --git a/tbx/core/templatetags/torchbox_tags.py b/tbx/core/templatetags/torchbox_tags.py index 649325cc7..cf88756be 100644 --- a/tbx/core/templatetags/torchbox_tags.py +++ b/tbx/core/templatetags/torchbox_tags.py @@ -4,6 +4,7 @@ from tbx.blog.models import BlogPage from tbx.core.models import MainMenu + register = template.Library() @@ -95,16 +96,10 @@ def time_display(time): hour_string = str(hour) # Minute string - if minute != 0: - minute_string = "." + str(minute) - else: - minute_string = "" + minute_string = "." + str(minute) if minute != 0 else "" # PM string - if pm: - pm_string = "pm" - else: - pm_string = "am" + pm_string = "pm" if pm else "am" # Join and return return "".join([hour_string, minute_string, pm_string]) diff --git a/tbx/core/templatetags/util_tags.py b/tbx/core/templatetags/util_tags.py index 75dc15f30..3bdfdb194 100644 --- a/tbx/core/templatetags/util_tags.py +++ b/tbx/core/templatetags/util_tags.py @@ -1,9 +1,11 @@ from django import template from django.utils.text import camel_case_to_spaces, slugify -from tbx.core.utils.models import SocialMediaSettings from wagtail.blocks import StreamValue +from tbx.core.utils.models import SocialMediaSettings + + register = template.Library() diff --git a/tbx/core/tests/test_colour_theme.py b/tbx/core/tests/test_colour_theme.py index 240f4fa17..a83f7798b 100644 --- a/tbx/core/tests/test_colour_theme.py +++ b/tbx/core/tests/test_colour_theme.py @@ -1,6 +1,10 @@ from django.utils.text import slugify +from wagtail.models import Site +from wagtail.test.utils import WagtailPageTestCase + from bs4 import BeautifulSoup + from tbx.blog.factories import BlogIndexPageFactory, BlogPageFactory from tbx.core.factories import HomePageFactory, StandardPageFactory from tbx.core.utils.models import ColourTheme @@ -9,8 +13,6 @@ WorkIndexPageFactory, WorkPageFactory, ) -from wagtail.models import Site -from wagtail.test.utils import WagtailPageTestCase class TestColourTheme(WagtailPageTestCase): diff --git a/tbx/core/tests/test_models.py b/tbx/core/tests/test_models.py index d80226088..11cc55291 100644 --- a/tbx/core/tests/test_models.py +++ b/tbx/core/tests/test_models.py @@ -1,5 +1,3 @@ -from tbx.core.factories import HomePageFactory, StandardPageFactory -from tbx.core.models import HomePage, StandardPage from wagtail.models import Site from wagtail.test.utils import WagtailPageTestCase from wagtail.test.utils.form_data import ( @@ -8,6 +6,9 @@ streamfield, ) +from tbx.core.factories import HomePageFactory, StandardPageFactory +from tbx.core.models import HomePage, StandardPage + class TestHomePageFactory(WagtailPageTestCase): def test_create(self): diff --git a/tbx/core/tests/test_views.py b/tbx/core/tests/test_views.py index ab9c2ff9d..d10de9b3b 100644 --- a/tbx/core/tests/test_views.py +++ b/tbx/core/tests/test_views.py @@ -1,9 +1,10 @@ from django.test import TestCase, override_settings from django.urls import reverse -from tbx.core.factories import HomePageFactory from wagtail.models import Site +from tbx.core.factories import HomePageFactory + class SecurityViewTestCase(TestCase): url = reverse("security-txt") @@ -24,20 +25,20 @@ def test_accessible(self) -> None: class TestModeSwitcherView(TestCase): def test_view_sets_cookie(self): resp = self.client.get( - reverse("switch_mode"), data=dict(switch_mode=mode, next_url="/") + reverse("switch_mode"), data={"switch_mode": mode, "next_url": "/"} ) self.assertEqual(resp.cookies["torchbox-mode"].value, mode) def test_view_redirects_to_original_url(self): resp = self.client.get( - reverse("switch_mode"), data=dict(switch_mode=mode, next_url="/") + reverse("switch_mode"), data={"switch_mode": mode, "next_url": "/"} ) self.assertRedirects(resp, "/") def test_mode_is_set_on_subsequent_requests(self): self.client.get( reverse("switch_mode"), - data=dict(switch_mode=mode, next_url="/"), + data={"switch_mode": mode, "next_url": "/"}, headers={"accept": "text/html"}, ) @@ -47,7 +48,7 @@ def test_mode_is_set_on_subsequent_requests(self): def test_mode_cannot_be_outside_of_specific_values(self): resp = self.client.get( reverse("switch_mode"), - data=dict(switch_mode="some random value", next_url="/"), + data={"switch_mode": "some random value", "next_url": "/"}, headers={"accept": "text/html"}, ) @@ -61,14 +62,14 @@ def test_setting_random_mode_doesnt_work(self): # set valid mode self.client.get( reverse("switch_mode"), - data=dict(switch_mode=mode, next_url="/"), + data={"switch_mode": mode, "next_url": "/"}, headers={"accept": "text/html"}, ) # set invalid mode self.client.get( reverse("switch_mode"), - data=dict(switch_mode="some random value", next_url="/"), + data={"switch_mode": "some random value", "next_url": "/"}, headers={"accept": "text/html"}, ) @@ -96,7 +97,7 @@ def test_setting_theme_on_one_site_sets_it_on_multiple_sites(self): # set theme on default site self.client.get( reverse("switch_mode"), - data=dict(switch_mode=mode, next_url="/"), + data={"switch_mode": mode, "next_url": "/"}, ) # check theme is set on default site diff --git a/tbx/core/urls.py b/tbx/core/urls.py index d5a5e4b5e..f2a4d0ccd 100644 --- a/tbx/core/urls.py +++ b/tbx/core/urls.py @@ -3,6 +3,7 @@ from tbx.blog.feeds import BlogFeed from tbx.core import views + urlpatterns = [ path("blog/feed/", BlogFeed(), name="blog_feed"), path("newsletter-subscribe", views.newsletter_subsribe), diff --git a/tbx/core/utils/__init__.py b/tbx/core/utils/__init__.py index ea57dc815..dae93b0e5 100644 --- a/tbx/core/utils/__init__.py +++ b/tbx/core/utils/__init__.py @@ -1,5 +1,5 @@ -import hashlib from datetime import datetime, time, timedelta +import hashlib from itertools import cycle, islice @@ -27,14 +27,10 @@ def export_event(event, format="ical"): date = event.date_from + timedelta(days=day) # Get times - if event.time_from is not None: - start_time = event.time_from - else: - start_time = datetime.time.min - if event.time_to is not None: - end_time = event.time_to - else: - end_time = time.max + start_time = ( + event.time_from if event.time_from is not None else datetime.time.min + ) + end_time = event.time_to if event.time_to is not None else time.max # Combine dates and times start_datetime = datetime.combine(date, start_time) @@ -49,8 +45,13 @@ def add_slashes(string): string.replace("\n", "\\n") return string - # Make a uid - uid = hashlib.sha1(event.url + str(start_datetime)).hexdigest() + "@wagtaildemo" + # Make an uid + uid = ( + hashlib.sha1( + event.url + str(start_datetime), usedforsecurity=False + ).hexdigest() + + "@torchbox.com" + ) # Make event ical_components.extend( diff --git a/tbx/core/utils/migrations.py b/tbx/core/utils/migrations.py index 693a6249b..a2da95d30 100644 --- a/tbx/core/utils/migrations.py +++ b/tbx/core/utils/migrations.py @@ -1,5 +1,5 @@ -import json from functools import wraps +import json from django.core.exceptions import FieldError diff --git a/tbx/core/utils/models.py b/tbx/core/utils/models.py index 32f0e5b78..826465a58 100644 --- a/tbx/core/utils/models.py +++ b/tbx/core/utils/models.py @@ -7,6 +7,7 @@ from wagtail.contrib.settings.models import BaseSiteSetting, register_setting from wagtail.models import Orderable + SEARCH_DESCRIPTION_LABEL = "Meta description" # NOTE changing this requires migrations @@ -111,6 +112,11 @@ class ColourThemeMixin(models.Model): ), ) + promote_panels = [FieldPanel("theme")] + + class Meta: + abstract = True + @property def theme_class(self): if theme := self.theme: @@ -124,8 +130,3 @@ def theme_class(self): ) except StopIteration: return ColourTheme.NONE - - promote_panels = [FieldPanel("theme")] - - class Meta: - abstract = True diff --git a/tbx/core/utils/scripts/run_flightpath.py b/tbx/core/utils/scripts/run_flightpath.py index af06ae726..cbde44b9f 100644 --- a/tbx/core/utils/scripts/run_flightpath.py +++ b/tbx/core/utils/scripts/run_flightpath.py @@ -20,14 +20,14 @@ def get_flightpath_args_from_env(): "flightpath_url": os.environ["FLIGHTPATH_URL"], } - except KeyError: + except KeyError as err: raise KeyError( "You need the following environment variables to run flightpath: " "FLIGHTPATH_URL, HEROKU_APP_NAME_PRODUCTION, " "HEROKU_APP_NAME_STAGING, FLIGHTPATH_AUTH_KEY, " "DEPLOYMENT_KEY. This should be set on GitHub " "secrets if running as GitHub Actions." - ) + ) from err return args @@ -52,6 +52,7 @@ def post_to_flightpath( headers={ "Authorization": f"Token {flightpath_auth_key}", }, + timeout=30, ) response.raise_for_status() diff --git a/tbx/core/utils/scripts/run_flightpath_status_check.py b/tbx/core/utils/scripts/run_flightpath_status_check.py index fce391179..7718d2abf 100644 --- a/tbx/core/utils/scripts/run_flightpath_status_check.py +++ b/tbx/core/utils/scripts/run_flightpath_status_check.py @@ -18,12 +18,12 @@ def get_flightpath_args_from_env(): "flightpath_url": os.environ["FLIGHTPATH_URL"], } - except KeyError: + except KeyError as err: raise KeyError( "You need the following environment variables to run flightpath: " "FLIGHTPATH_URL, FLIGHTPATH_AUTH_KEY. " "This should be set on GitHub secrets if running as GitHub Actions." - ) + ) from err return args @@ -38,6 +38,7 @@ def get_flightpath_job_status(flightpath_url, flightpath_auth_key, job_id): headers={ "Authorization": f"Token {flightpath_auth_key}", }, + timeout=30, ) response.raise_for_status() return response diff --git a/tbx/core/views.py b/tbx/core/views.py index 47fdec635..a3e80e54f 100644 --- a/tbx/core/views.py +++ b/tbx/core/views.py @@ -1,5 +1,5 @@ -import logging from datetime import timedelta +import logging from django.conf import settings from django.http import HttpResponse, HttpResponseNotFound @@ -11,9 +11,11 @@ from django.views.generic import TemplateView import requests + from tbx.core.errors import UnauthorizedHTTPError from tbx.core.forms import ModeSwitcherForm + logger = logging.getLogger(__name__) @@ -28,6 +30,7 @@ def newsletter_subsribe(request): "id": settings.MAILCHIMP_MAILING_LIST_ID, "email": {"email": request.GET.get("email")}, }, + timeout=20, ) return HttpResponse() diff --git a/tbx/core/wagtail_hooks.py b/tbx/core/wagtail_hooks.py index d439c160e..dbed8f654 100644 --- a/tbx/core/wagtail_hooks.py +++ b/tbx/core/wagtail_hooks.py @@ -6,13 +6,14 @@ from django.utils.html import format_html from django.utils.safestring import mark_safe -from PIL import ImageEnhance -from storages.backends.s3 import S3Storage from wagtail import hooks from wagtail.documents import get_document_model from wagtail.documents.models import document_served from wagtail.images.image_operations import FilterOperation +from PIL import ImageEnhance +from storages.backends.s3 import S3Storage + @hooks.register("before_serve_document", order=100) def serve_document_from_s3(document, request): @@ -51,7 +52,7 @@ def hotjar_admin_tracking(): if not hjid: return "" - return mark_safe( + return mark_safe( # noqa: S308 f"""