A Django content management system focused on flexibility and user experience
This report summarizes scanner evidence for wagtail/wagtail, a Python project with 20,549 GitHub stars. SynthScan examined 466,818 lines of code across 2437 source files, recording 6206 pattern matches distributed across 19 syntactic categories. The legacy adjusted pattern signal is 14.9 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 5467 finding(s).
Are imports declared and package/API names verified? 589 finding(s).
Are wrappers, guards, and repeated structures necessary? 5231 finding(s).
Which changes need focused human review? 6206 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 6206 distinct pattern matches across 19 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | wagtail/tasks.py | 11 | def update_reference_index_task(app_label, model_name, pk): | CODE |
| LOW | wagtail/tasks.py | 37 | def delete_file_from_storage_task(deconstructed_storage, path): | CODE |
| LOW | wagtail/fields.py | 299 | def get_block_by_content_path(self, value, path_elements): | CODE |
| LOW | wagtail/query.py | 613 | def annotate_approved_schedule(self): | CODE |
| LOW | wagtail/query.py | 643 | def annotate_has_untranslated_locale(self): | CODE |
| LOW | wagtail/coreutils.py | 286 | def get_supported_content_language_variant(lang_code, strict=False): | CODE |
| LOW | wagtail/coreutils.py | 293 | def _get_supported_content_language_variant(lang_code, strict=False): | CODE |
| LOW | wagtail/coreutils.py | 327 | def get_locales_display_names() -> dict: | CODE |
| LOW | wagtail/coreutils.py | 561 | def make_wagtail_template_fragment_key(fragment_name, page, site, vary_on=None): | CODE |
| LOW⚡ | wagtail/wagtail_hooks.py | 103 | def register_workflow_permissions(): | CODE |
| LOW⚡ | wagtail/wagtail_hooks.py | 110 | def register_task_permissions(): | CODE |
| LOW⚡ | wagtail/wagtail_hooks.py | 118 | def describe_collection_children(collection): | CODE |
| LOW | wagtail/wagtail_hooks.py | 135 | def register_core_log_actions(actions): | CODE |
| LOW | wagtail/wagtail_hooks.py | 396 | def _field_label_from_content_path(model, content_path): | CODE |
| LOW | wagtail/wagtail_hooks.py | 523 | def register_workflow_log_actions(actions): | CODE |
| LOW | wagtail/permissions.py | 79 | def register_permission_policy( | CODE |
| LOW | wagtail/log_actions.py | 148 | def get_log_model_for_instance(self, instance): | CODE |
| LOW⚡ | wagtail/signal_handlers.py | 25 | def post_save_site_signal_handler(instance, update_fields=None, **kwargs): | CODE |
| LOW⚡ | wagtail/signal_handlers.py | 29 | def post_delete_site_signal_handler(instance, **kwargs): | CODE |
| LOW⚡ | wagtail/signal_handlers.py | 33 | def pre_delete_page_unpublish(sender, instance, **kwargs): | CODE |
| LOW⚡ | wagtail/signal_handlers.py | 40 | def post_delete_page_log_deletion(sender, instance, **kwargs): | CODE |
| LOW⚡ | wagtail/signal_handlers.py | 44 | def reset_locales_display_names_cache(sender, instance, **kwargs): | CODE |
| LOW⚡ | wagtail/signal_handlers.py | 52 | def disable_reference_index_auto_update(): | CODE |
| LOW | wagtail/signal_handlers.py | 68 | def update_reference_index_on_save(instance, **kwargs): | CODE |
| LOW⚡ | wagtail/signal_handlers.py | 81 | def remove_reference_index_on_delete(instance, **kwargs): | CODE |
| LOW⚡ | wagtail/signal_handlers.py | 90 | def connect_reference_index_signal_handlers_for_model(model): | CODE |
| LOW⚡ | wagtail/signal_handlers.py | 95 | def connect_reference_index_signal_handlers(**kwargs): | CODE |
| LOW⚡ | wagtail/signal_handlers.py | 100 | def disconnect_reference_index_signal_handlers_for_model(model): | CODE |
| LOW⚡ | wagtail/signal_handlers.py | 105 | def disconnect_reference_index_signal_handlers(**kwargs): | CODE |
| LOW | wagtail/views.py | 38 | def authenticate_with_password(request, page_view_restriction_id, page_id): | CODE |
| LOW | wagtail/blocks/list_block.py | 206 | def defer_required_validation(self): | CODE |
| LOW | wagtail/blocks/list_block.py | 258 | def restore_deferred_validation(self): | CODE |
| LOW | wagtail/blocks/list_block.py | 419 | def get_block_by_content_path(self, value, path_elements): | CODE |
| LOW | wagtail/blocks/struct_block.py | 151 | def unique_children_and_settings(self): | CODE |
| LOW | wagtail/blocks/struct_block.py | 305 | def defer_required_validation(self): | CODE |
| LOW | wagtail/blocks/struct_block.py | 325 | def restore_deferred_validation(self): | CODE |
| LOW | wagtail/blocks/struct_block.py | 443 | def get_block_by_content_path(self, value, path_elements): | CODE |
| LOW | wagtail/blocks/stream_block.py | 164 | def defer_required_validation(self): | CODE |
| LOW | wagtail/blocks/stream_block.py | 247 | def restore_deferred_validation(self): | CODE |
| LOW | wagtail/blocks/stream_block.py | 434 | def get_block_by_content_path(self, value, path_elements): | CODE |
| LOW | wagtail/blocks/stream_block.py | 831 | def _deserialize_pickle_value(app_label, model_name, field_name, field_value): | CODE |
| LOW | wagtail/blocks/base.py | 175 | def defer_required_validation(self): | CODE |
| LOW | wagtail/blocks/base.py | 199 | def restore_deferred_validation(self): | CODE |
| LOW | wagtail/blocks/base.py | 435 | def get_block_by_content_path(self, value, path_elements): | CODE |
| LOW | wagtail/blocks/field_block.py | 66 | def defer_required_validation(self): | CODE |
| LOW | wagtail/blocks/field_block.py | 77 | def restore_deferred_validation(self): | CODE |
| LOW⚡ | wagtail/templatetags/wagtailcore_tags.py | 92 | def wagtail_documentation_path(): | CODE |
| LOW⚡ | wagtail/templatetags/wagtailcore_tags.py | 101 | def wagtail_release_notes_path(): | CODE |
| LOW⚡ | wagtail/templatetags/wagtailcore_tags.py | 106 | def wagtail_feature_release_whats_new_link(): | CODE |
| LOW⚡ | wagtail/templatetags/wagtailcore_tags.py | 114 | def wagtail_feature_release_editor_guide_link(): | CODE |
| LOW | wagtail/snippets/models.py | 37 | def get_workflow_enabled_models(): | CODE |
| LOW | wagtail/snippets/models.py | 66 | def _register_snippet_immediately(registerable, viewset=None): | CODE |
| LOW | wagtail/snippets/models.py | 95 | def register_deferred_snippets(): | CODE |
| LOW | wagtail/snippets/wagtail_hooks.py | 36 | def register_snippets_menu_item(): | CODE |
| LOW | wagtail/snippets/action_menu.py | 242 | def get_base_snippet_action_menu_items(model): | CODE |
| LOW | wagtail/snippets/permissions.py | 14 | def user_can_edit_snippet_type(user, model): | CODE |
| LOW | wagtail/snippets/tests/test_unpublish_view.py | 36 | def test_unpublish_view_invalid_pk(self): | CODE |
| LOW | wagtail/snippets/tests/test_unpublish_view.py | 51 | def test_unpublish_view_get_bad_permissions(self): | CODE |
| LOW | wagtail/snippets/tests/test_unpublish_view.py | 70 | def test_unpublish_view_post_bad_permissions(self): | CODE |
| LOW | wagtail/snippets/tests/test_unpublish_view.py | 104 | def test_unpublish_view_post_with_publish_permission(self): | CODE |
| 5013 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | wagtail/fields.py | 275 | # This method is used for serialization using django.core.serializers, | COMMENT |
| MEDIUM | wagtail/snippets/tests/test_history_view.py | 173 | # Create a new revision with a new isolated context | COMMENT |
| MEDIUM | wagtail/snippets/tests/test_history_view.py | 179 | # Create a new log context for each iteration to simulate multiple | COMMENT |
| MEDIUM | wagtail/snippets/tests/test_usage.py | 108 | # Create a user with basic admin backend access | COMMENT |
| MEDIUM | wagtail/snippets/tests/test_usage.py | 133 | # Create a user with edit access to snippets but not pages | COMMENT |
| MEDIUM | wagtail/snippets/tests/test_permissions.py | 16 | # Create a user with add_advert permission but not change_advert | COMMENT |
| MEDIUM | wagtail/snippets/tests/test_permissions.py | 70 | # Create a user with change_advert permission but not add_advert | COMMENT |
| MEDIUM | wagtail/snippets/tests/test_permissions.py | 124 | # Create a user with delete_advert permission | COMMENT |
| MEDIUM | wagtail/permission_policies/pages.py | 230 | # This method is used all around the admin, | COMMENT |
| MEDIUM | wagtail/test/dummy_external_storage.py | 1 | # This file contains a file storage backend that imitates behaviours of | COMMENT |
| MEDIUM | wagtail/test/utils/wagtail_tests.py | 23 | # Create a user | COMMENT |
| MEDIUM | wagtail/test/utils/wagtail_factories/builder.py | 115 | # Create a new StreamBlockFactory subclass, with a declaration for each block the user | COMMENT |
| MEDIUM⚡ | wagtail/images/models.py | 457 | # Create a bounding box around all faces | COMMENT |
| MEDIUM⚡ | wagtail/images/models.py | 466 | # Create a bounding box around all features | COMMENT |
| MEDIUM⚡ | wagtail/images/tests/test_jinja2_svg.py | 17 | # Create a real test engine | COMMENT |
| MEDIUM⚡ | wagtail/images/tests/test_jinja2_svg.py | 22 | # Create a raster image | COMMENT |
| MEDIUM⚡ | wagtail/images/tests/test_jinja2_svg.py | 28 | # Create an SVG image | COMMENT |
| MEDIUM | wagtail/images/tests/utils.py | 76 | # Create an image with a missing file, by deserializing from a python object | STRING |
| MEDIUM | wagtail/images/tests/test_models.py | 73 | # Create an image for running tests on | COMMENT |
| MEDIUM | wagtail/images/tests/test_models.py | 212 | # Create an image for running tests on | COMMENT |
| MEDIUM | wagtail/images/tests/test_models.py | 319 | # Create an image for running tests on | COMMENT |
| MEDIUM | wagtail/images/tests/test_models.py | 390 | # Create an image for running tests on | COMMENT |
| MEDIUM | wagtail/images/tests/test_models.py | 476 | # Create an image for running tests on | STRING |
| MEDIUM | wagtail/images/tests/test_models.py | 573 | # Create an image for running tests on | STRING |
| MEDIUM | wagtail/images/tests/test_models.py | 1381 | # Create an image with a big filename and focal point | STRING |
| MEDIUM | wagtail/images/tests/test_models.py | 1437 | # Create an image to edit | STRING |
| MEDIUM | wagtail/images/tests/test_models.py | 1519 | # Create an image | STRING |
| MEDIUM | wagtail/images/tests/test_models.py | 1549 | # Create an image with a big filename and no extension | STRING |
| MEDIUM | wagtail/images/tests/test_models.py | 1566 | # Create an image with a big filename and extensions | STRING |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 1415 | # Create an image to edit | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 1776 | # Create an image to edit | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 1809 | # Create an image to edit | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 1838 | # Create an image to edit | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 1940 | # Create an image to edit | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 2001 | # Create a user with change_image permission but not add_image | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 2033 | # Create a user with add_image permission but not change_image | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 2162 | # Create a new user in the Bakers group, and log in as them. | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 2563 | # Create an image to edit | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 3093 | # Create an image for running tests on | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 3628 | # Create an image for running tests on | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 3909 | # Create an UploadedFile for running tests on | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 4140 | # Create an image for running tests on | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 4339 | # Create an image for running tests on | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 4882 | # Create an image to edit | COMMENT |
| MEDIUM | wagtail/images/tests/test_admin_views.py | 4888 | # Create a user with change_image permission but not add_image | COMMENT |
| MEDIUM⚡ | wagtail/images/tests/tests.py | 343 | # Create an image for running tests on | COMMENT |
| MEDIUM | wagtail/images/tests/tests.py | 54 | # Create an image for running tests on | COMMENT |
| MEDIUM | wagtail/images/tests/test_templatetags.py | 22 | # Create an image for running tests on | COMMENT |
| MEDIUM | wagtail/images/tests/test_templatetags.py | 138 | # Create an image for running tests on | COMMENT |
| MEDIUM | …tests/test_bulk_actions/test_bulk_add_to_collection.py | 110 | # Create a group with image permissions on the source collection only | COMMENT |
| MEDIUM | …management/commands/wagtail_update_image_renditions.py | 84 | # Create a new one | COMMENT |
| MEDIUM | wagtail/tests/test_page_queryset.py | 542 | # Create a translation of the homepage | COMMENT |
| MEDIUM | wagtail/tests/test_page_queryset.py | 568 | # Create a translation of the homepage | COMMENT |
| MEDIUM | wagtail/tests/test_page_queryset.py | 1036 | # Create a ContentType that doesn't correspond to a real model | COMMENT |
| MEDIUM | wagtail/tests/test_signals.py | 113 | # Create a subpage | COMMENT |
| MEDIUM | wagtail/tests/test_blocks.py | 2834 | # Create a deep copy of the parent's form layout to include the | COMMENT |
| MEDIUM⚡ | wagtail/tests/test_page_model.py | 3799 | # Create a page that does not have the default init | COMMENT |
| MEDIUM⚡ | wagtail/tests/test_page_model.py | 3806 | # Create a page that does have the default init | COMMENT |
| MEDIUM | wagtail/tests/test_page_model.py | 1693 | # Create a child event | COMMENT |
| MEDIUM | wagtail/tests/test_page_model.py | 3419 | # Create a singleton page | COMMENT |
| 120 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | wagtail/fields.py | 4 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/blocks/list_block.py | 5 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/blocks/struct_block.py | 6 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/blocks/stream_block.py | 8 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/locales/api/v3/router.py | 1 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/test/testapp/models.py | 13 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/test/demosite/models.py | 4 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/images/fields.py | 6 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/images/blocks.py | 2 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/tests/test_sites.py | 1 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/tests/test_blocks.py | 11 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/tests/test_audit_log.py | 7 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/tests/test_date_validators.py | 4 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/tests/test_workflow.py | 8 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/admin/forms/tags.py | 1 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/admin/forms/collections.py | 6 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/admin/panels/title_field_panel.py | 59 | self.bound_field.field.widget.attrs.update(**self.get_attrs()) | CODE |
| CRITICAL | wagtail/admin/api/actions/delete.py | 1 | from django.core.exceptions import ValidationError as DjangoValidationError | CODE |
| CRITICAL | wagtail/admin/api/actions/create_alias.py | 2 | from django.core.exceptions import ValidationError as DjangoValidationError | CODE |
| CRITICAL | wagtail/admin/api/actions/convert_alias.py | 1 | from django.core.exceptions import ValidationError as DjangoValidationError | CODE |
| CRITICAL | wagtail/admin/api/actions/copy.py | 2 | from django.core.exceptions import ValidationError as DjangoValidationError | CODE |
| CRITICAL | wagtail/admin/api/actions/unpublish.py | 1 | from django.core.exceptions import ValidationError as DjangoValidationError | CODE |
| CRITICAL | wagtail/admin/api/actions/move.py | 2 | from django.core.exceptions import ValidationError as DjangoValidationError | CODE |
| CRITICAL | wagtail/admin/api/actions/revert_to_page_revision.py | 1 | from django.core.exceptions import ValidationError as DjangoValidationError | CODE |
| CRITICAL | wagtail/admin/api/actions/copy_for_translation.py | 1 | from django.core.exceptions import ValidationError as DjangoValidationError | CODE |
| CRITICAL | wagtail/admin/api/actions/publish.py | 1 | from django.core.exceptions import ValidationError as DjangoValidationError | CODE |
| CRITICAL | wagtail/admin/views/editing_sessions.py | 6 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/admin/views/reports/aging_pages.py | 4 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/admin/telepath/widgets.py | 8 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/utils/forms.py | 1 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/models/sites.py | 8 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/models/audit_log.py | 13 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/contrib/frontend_cache/backends/azure.py | 149 | from azure.core.exceptions import HttpResponseError as HttpError | CODE |
| CRITICAL | wagtail/contrib/forms/tests/test_models.py | 2 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/contrib/typed_table_block/tests.py | 1 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/contrib/typed_table_block/blocks.py | 2 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/contrib/table_block/blocks.py | 4 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/api/v2/filters.py | 3 | from django.core.exceptions import FieldError | CODE |
| CRITICAL | wagtail/api/v3/errors.py | 5 | from django.core.exceptions import ValidationError as DjangoValidationError | CODE |
| CRITICAL | wagtail/api/v3/form_data.py | 7 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/documents/models.py | 7 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/documents/fields.py | 2 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/documents/tests/test_document_field.py | 1 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/embeds/blocks.py | 1 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | wagtail/embeds/tests/test_embeds.py | 10 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | docs/advanced_topics/streamfield_validation.md | 17 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | docs/advanced_topics/streamfield_validation.md | 51 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | docs/advanced_topics/streamfield_validation.md | 75 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | docs/reference/contrib/typed_table_block.md | 92 | from django.core.exceptions import ValidationError | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | wagtail/coreutils.py | 310 | except KeyError: | CODE |
| HIGH | wagtail/blocks/field_block.py | 374 | except KeyError: | CODE |
| HIGH | wagtail/templatetags/wagtailcore_tags.py | 70 | except KeyError: | CODE |
| HIGH | wagtail/test/testapp/models.py | 602 | except (TypeError, ValueError): | CODE |
| HIGH | wagtail/bin/wagtail.py | 88 | except ImportError: | CODE |
| HIGH | wagtail/images/models.py | 501 | except (AttributeError, KeyError): | CODE |
| HIGH | wagtail/images/models.py | 505 | except AttributeError: | CODE |
| HIGH | wagtail/images/formats.py | 69 | except AttributeError: | CODE |
| HIGH | wagtail/images/tests/test_models.py | 1357 | except ValueError: | CODE |
| HIGH | wagtail/tests/test_workflow_model.py | 25 | except KeyError: | CODE |
| HIGH | wagtail/tests/test_page_assertions.py | 119 | except self.failureException: | CODE |
| HIGH | wagtail/tests/test_page_assertions.py | 128 | except self.failureException: | CODE |
| HIGH | wagtail/tests/test_streamfield.py | 193 | except KeyError: | CODE |
| HIGH | wagtail/tests/test_draft_model.py | 22 | except KeyError: | CODE |
| HIGH | wagtail/tests/test_lockable_model.py | 22 | except KeyError: | CODE |
| HIGH | wagtail/admin/site_summary.py | 45 | except (Site.DoesNotExist, Site.MultipleObjectsReturned): | CODE |
| HIGH | wagtail/admin/utils.py | 60 | except AttributeError: | CODE |
| HIGH | wagtail/admin/userbar.py | 316 | except AttributeError: | CODE |
| HIGH | wagtail/admin/forms/auth.py | 76 | except KeyError: | CODE |
| HIGH | wagtail/admin/forms/models.py | 160 | except KeyError: | CODE |
| HIGH | wagtail/admin/forms/workflows.py | 115 | except AttributeError: | CODE |
| HIGH | wagtail/admin/viewsets/pages.py | 600 | except KeyError: | CODE |
| HIGH | wagtail/admin/panels/field_panel.py | 105 | except FieldDoesNotExist: | CODE |
| HIGH | wagtail/admin/tests/test_menu.py | 347 | except AttributeError: | CODE |
| HIGH | wagtail/admin/tests/test_menu.py | 385 | except AttributeError: | CODE |
| HIGH | wagtail/admin/views/editing_sessions.py | 154 | except KeyError: | CODE |
| HIGH | wagtail/admin/views/generic/chooser.py | 89 | except KeyError: | CODE |
| HIGH | wagtail/admin/views/generic/chooser.py | 192 | except KeyError: | CODE |
| HIGH | wagtail/admin/views/pages/listing.py | 188 | except ValueError: | CODE |
| HIGH | wagtail/admin/views/pages/ordering.py | 26 | except (IndexError, ValueError): | CODE |
| HIGH | wagtail/utils/registry.py | 34 | except KeyError: | CODE |
| HIGH | wagtail/utils/file.py | 18 | except (AttributeError, UnsupportedOperation): | CODE |
| HIGH | wagtail/models/copying.py | 84 | except AttributeError: | CODE |
| HIGH | wagtail/models/pages.py | 1462 | except LookupError: | CODE |
| HIGH | wagtail/models/pages.py | 2146 | except KeyError: | CODE |
| HIGH | wagtail/models/sites.py | 183 | except Site.DoesNotExist: | CODE |
| HIGH | wagtail/models/sites.py | 202 | except Site.DoesNotExist: | CODE |
| HIGH | wagtail/models/i18n.py | 88 | except KeyError: | CODE |
| HIGH | wagtail/models/i18n.py | 92 | except KeyError: | CODE |
| HIGH | wagtail/contrib/routable_page/models.py | 161 | except Http404: | CODE |
| HIGH | wagtail/project_template/project_name/settings/dev.py | 17 | except ImportError: | CODE |
| HIGH | …l/project_template/project_name/settings/production.py | 13 | except ImportError: | CODE |
| HIGH | wagtail/users/views/users.py | 83 | except FieldDoesNotExist: | CODE |
| HIGH | wagtail/api/v2/views.py | 496 | except FieldDoesNotExist: | CODE |
| HIGH | wagtail/api/v2/views.py | 269 | except ValueError: | CODE |
| HIGH | wagtail/api/v2/views.py | 296 | except KeyError: | CODE |
| HIGH | wagtail/api/v3/schemas/pages.py | 38 | except FieldDoesNotExist: | CODE |
| HIGH | wagtail/documents/models.py | 169 | except NotImplementedError: | CODE |
| HIGH | wagtail/embeds/embeds.py | 32 | except Embed.DoesNotExist: | CODE |
| HIGH | wagtail/embeds/finders/oembed.py | 96 | except (KeyError, TypeError, ValueError): | CODE |
| HIGH | wagtail/rich_text/rewriters.py | 164 | except KeyError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | wagtail/compat.py | 19 | CODE | |
| LOW | wagtail/coreutils.py | 29 | CODE | |
| LOW | wagtail/apps.py | 4 | CODE | |
| LOW | wagtail/wagtail_hooks.py | 23 | CODE | |
| LOW | wagtail/blocks/__init__.py | 2 | CODE | |
| LOW | wagtail/blocks/__init__.py | 3 | CODE | |
| LOW | wagtail/blocks/__init__.py | 4 | CODE | |
| LOW | wagtail/blocks/__init__.py | 5 | CODE | |
| LOW | wagtail/blocks/__init__.py | 6 | CODE | |
| LOW | wagtail/blocks/__init__.py | 7 | CODE | |
| LOW | wagtail/snippets/bulk_actions/__init__.py | 1 | CODE | |
| LOW | wagtail/snippets/api/v3/__init__.py | 1 | CODE | |
| LOW | wagtail/locales/views.py | 17 | CODE | |
| LOW | wagtail/locales/views.py | 17 | CODE | |
| LOW | wagtail/locales/api/v3/__init__.py | 1 | CODE | |
| LOW | wagtail/permission_policies/__init__.py | 1 | CODE | |
| LOW | wagtail/test/settings_ui.py | 1 | CODE | |
| LOW | wagtail/test/customuser/models.py | 13 | CODE | |
| LOW | wagtail/test/customuser/models.py | 15 | CODE | |
| LOW | wagtail/test/utils/__init__.py | 1 | CODE | |
| LOW | wagtail/test/utils/__init__.py | 2 | CODE | |
| LOW | wagtail/test/utils/__init__.py | 3 | CODE | |
| LOW | wagtail/test/utils/wagtail_factories/__init__.py | 1 | CODE | |
| LOW | wagtail/test/utils/wagtail_factories/__init__.py | 2 | CODE | |
| LOW | wagtail/images/models.py | 1 | CODE | |
| LOW | wagtail/images/apps.py | 5 | CODE | |
| LOW | wagtail/images/tests/tests.py | 45 | CODE | |
| LOW | wagtail/images/views/bulk_actions/__init__.py | 1 | CODE | |
| LOW | wagtail/images/views/bulk_actions/__init__.py | 2 | CODE | |
| LOW | wagtail/images/views/bulk_actions/__init__.py | 3 | CODE | |
| LOW | wagtail/admin/apps.py | 5 | CODE | |
| LOW | wagtail/admin/apps.py | 24 | CODE | |
| LOW | wagtail/admin/blocks.py | 3 | CODE | |
| LOW | wagtail/admin/ui/components.py | 2 | CODE | |
| LOW | wagtail/admin/ui/components.py | 2 | CODE | |
| LOW | wagtail/admin/forms/__init__.py | 2 | CODE | |
| LOW | wagtail/admin/forms/__init__.py | 2 | CODE | |
| LOW | wagtail/admin/forms/__init__.py | 2 | CODE | |
| LOW | wagtail/admin/forms/__init__.py | 2 | CODE | |
| LOW | wagtail/admin/forms/__init__.py | 2 | CODE | |
| LOW | wagtail/admin/forms/__init__.py | 9 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 4 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 4 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 9 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 10 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 11 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 12 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 13 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 14 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 15 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 16 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 17 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 18 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 19 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 20 | CODE | |
| LOW | wagtail/admin/panels/__init__.py | 21 | CODE | |
| LOW | wagtail/admin/rich_text/__init__.py | 4 | CODE | |
| LOW | wagtail/admin/views/bulk_action/__init__.py | 1 | CODE | |
| LOW | wagtail/admin/views/bulk_action/__init__.py | 2 | CODE | |
| LOW | wagtail/admin/views/generic/__init__.py | 1 | CODE | |
| 222 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | wagtail/tasks.py | 28 | # parent is null, so there is no valid object to record references against | COMMENT |
| HIGH | …/tests/permission_policies/test_permission_policies.py | 577 | # in order for user_has_any_permission to return true | COMMENT |
| HIGH | …/tests/permission_policies/test_permission_policies.py | 591 | # should return false | COMMENT |
| HIGH | …/tests/permission_policies/test_permission_policies.py | 703 | # in order for user_has_any_permission to return true | COMMENT |
| HIGH | …/tests/permission_policies/test_permission_policies.py | 716 | # should return false | COMMENT |
| HIGH | …/tests/permission_policies/test_permission_policies.py | 967 | # in order for user_has_any_permission to return true | COMMENT |
| HIGH | …/tests/permission_policies/test_permission_policies.py | 978 | # should return false | COMMENT |
| HIGH | …/tests/permission_policies/test_permission_policies.py | 1176 | # in order for user_has_any_permission to return true | COMMENT |
| HIGH | …/tests/permission_policies/test_permission_policies.py | 1189 | # should return false | COMMENT |
| HIGH | wagtail/admin/wagtail_hooks.py | 730 | # Keep pasted links with http/https protocol, and not-pasted links (href = undefined). | COMMENT |
| HIGH | wagtail/admin/userbar.py | 215 | # The runOnly has to be omitted (instead of set to an empty list or null) | COMMENT |
| HIGH | wagtail/admin/panels/field_panel.py | 64 | # - it corresponds to a non-null, non-text-typed model field (in which case a blank value | COMMENT |
| HIGH⚡ | wagtail/admin/tests/test_edit_handlers.py | 1222 | expected_js = 'new PageChooser("{id}", {{"modelNames": ["{model}"], "canChooseRoot": false, "userPerms": null, " | CODE |
| HIGH | wagtail/admin/tests/test_edit_handlers.py | 1246 | expected_js = 'new PageChooser("{id}", {{"modelNames": ["{model}"], "canChooseRoot": true, "userPerms": null, "m | CODE |
| HIGH | wagtail/admin/tests/test_edit_handlers.py | 1304 | expected_js = 'new PageChooser("{id}", {{"modelNames": ["{model}"], "canChooseRoot": false, "userPerms": null, " | CODE |
| HIGH | wagtail/admin/tests/test_edit_handlers.py | 1324 | expected_js = 'new PageChooser("{id}", {{"modelNames": ["{model}"], "canChooseRoot": false, "userPerms": null, " | CODE |
| HIGH⚡ | wagtail/admin/tests/test_widgets.py | 112 | f'new PageChooser("test-id", {{"modelNames": ["{page_model_name}"], "canChooseRoot": false, "userPerms": nul | CODE |
| HIGH⚡ | wagtail/admin/tests/test_widgets.py | 121 | 'new PageChooser("test-id", {"modelNames": ["tests.simplepage"], "canChooseRoot": false, "userPerms": null, | CODE |
| HIGH⚡ | wagtail/admin/tests/test_widgets.py | 133 | 'new PageChooser("test-id", {"modelNames": ["tests.simplepage"], "canChooseRoot": false, "userPerms": null, | CODE |
| HIGH⚡ | wagtail/admin/tests/test_widgets.py | 145 | 'new PageChooser("test-id", {"modelNames": ["tests.simplepage"], "canChooseRoot": false, "userPerms": null, | CODE |
| HIGH⚡ | wagtail/admin/tests/test_widgets.py | 158 | 'new PageChooser("test-id", {"modelNames": ["tests.simplepage", "tests.eventpage"], "canChooseRoot": false, | CODE |
| HIGH⚡ | wagtail/admin/tests/test_widgets.py | 170 | f'new PageChooser("test-id", {{"modelNames": ["{page_model_name}"], "canChooseRoot": true, "userPerms": null | CODE |
| HIGH | wagtail/admin/tests/test_widgets.py | 86 | f'new PageChooser("test-id", {{"modelNames": ["{page_model_name}"], "canChooseRoot": false, "userPerms": nul | CODE |
| HIGH | …ail/admin/rich_text/converters/html_to_contentstate.py | 92 | state.push() | CODE |
| HIGH | wagtail/admin/views/generic/models.py | 108 | # is returned anyway (even if list_filter is undefined), so the locale | COMMENT |
| HIGH | wagtail/management/commands/convert_mariadb_uuids.py | 25 | old_field = models.CharField(null=null, max_length=36) | CODE |
| HIGH | wagtail/management/commands/convert_mariadb_uuids.py | 28 | new_field = models.UUIDField(null=null) | CODE |
| HIGH | wagtail/models/pages.py | 440 | # If non-null, this page is an alias of the linked page | COMMENT |
| HIGH | wagtail/models/pages.py | 1947 | # fall back on latest_revision_created_at if last_published_at is null | COMMENT |
| HIGH | wagtail/contrib/settings/models.py | 77 | If the field value is null, or links to something other | STRING |
| HIGH | wagtail/contrib/table_block/tests.py | 339 | expected_json = '{"first_row_is_table_header": false, "first_col_is_header": false, "data": [["Foo", 1, null], [ | STRING |
| HIGH | wagtail/contrib/sitemaps/sitemap_generator.py | 24 | # fall back on latest_revision_created_at if last_published_at is null | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | wagtail/blocks/list_block.py | 459 | icon = "placeholder" | CODE |
| LOW | wagtail/blocks/struct_block.py | 93 | icon="placeholder", | CODE |
| LOW | wagtail/blocks/struct_block.py | 591 | icon = "placeholder" | CODE |
| LOW | wagtail/blocks/stream_block.py | 491 | icon = "placeholder" | CODE |
| LOW | wagtail/blocks/base.py | 64 | icon = "placeholder" | CODE |
| LOW | wagtail/blocks/field_block.py | 98 | icon = "placeholder" | CODE |
| LOW | wagtail/blocks/field_block.py | 497 | icon = "placeholder" | CODE |
| LOW | wagtail/blocks/field_block.py | 612 | icon = "placeholder" | CODE |
| LOW | wagtail/blocks/field_block.py | 984 | icon = "placeholder" | CODE |
| LOW | wagtail/test/utils/form_data.py | 140 | 'body': rich_text('<p>Lorem ipsum dolor sit amet</p>'), | STRING |
| LOW | wagtail/test/utils/form_data.py | 140 | 'body': rich_text('<p>Lorem ipsum dolor sit amet</p>'), | STRING |
| LOW | wagtail/tests/test_form_data_utils.py | 16 | <input type="text" name="name" value="Jane Doe" placeholder=""> | CODE |
| LOW | wagtail/tests/test_form_data_utils.py | 134 | ("name", ["Jane Doe"]), | STRING |
| LOW⚡ | wagtail/tests/test_blocks.py | 988 | "icon": "placeholder", | CODE |
| LOW⚡ | wagtail/tests/test_blocks.py | 1484 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 194 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 346 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 2150 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 2438 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 2476 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 2555 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 2613 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 2644 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 3636 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 3663 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 3842 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 3872 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 4670 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 5607 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 5706 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 6270 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 6295 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 6319 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 6344 | "icon": "placeholder", | CODE |
| LOW | wagtail/tests/test_blocks.py | 6369 | "icon": "placeholder", | CODE |
| LOW⚡ | wagtail/tests/test_tests.py | 189 | {"title": "Simple Lorem Page", "content": "Lorem ipsum dolor sit amet"}, | CODE |
| LOW⚡ | wagtail/tests/test_tests.py | 189 | {"title": "Simple Lorem Page", "content": "Lorem ipsum dolor sit amet"}, | CODE |
| LOW | wagtail/admin/filters.py | 26 | AdminDateInput(attrs={"placeholder": _("Date from")}), | CODE |
| LOW | wagtail/admin/filters.py | 27 | AdminDateInput(attrs={"placeholder": _("Date to")}), | CODE |
| LOW | wagtail/admin/filters.py | 47 | forms.NumberInput(attrs={"placeholder": _("Minimum"), "min": "0"}), | CODE |
| LOW | wagtail/admin/filters.py | 48 | forms.NumberInput(attrs={"placeholder": _("Maximum"), "min": "0"}), | CODE |
| LOW | wagtail/admin/forms/auth.py | 14 | "placeholder": gettext_lazy("Enter password"), | CODE |
| LOW | wagtail/admin/forms/auth.py | 31 | self.fields["username"].widget.attrs["placeholder"] = gettext_lazy( | CODE |
| LOW | wagtail/admin/forms/choosers.py | 75 | widget=forms.TextInput(attrs={"placeholder": _("Search")}), | CODE |
| LOW | wagtail/admin/forms/search.py | 8 | placeholder = kwargs.pop("placeholder", _("Search…")) | CODE |
| LOW | wagtail/admin/forms/search.py | 11 | "placeholder": placeholder, | CODE |
| LOW | wagtail/admin/forms/workflows.py | 30 | placeholder = kwargs.pop("placeholder", _("Search…")) | CODE |
| LOW | wagtail/admin/forms/workflows.py | 32 | self.fields["q"].widget.attrs = {"placeholder": placeholder} | CODE |
| LOW | wagtail/admin/panels/title_field_panel.py | 46 | "placeholder": self.placeholder, | CODE |
| LOW | wagtail/admin/panels/title_field_panel.py | 88 | if placeholder and "placeholder" not in widget.attrs: | CODE |
| LOW | wagtail/admin/panels/title_field_panel.py | 89 | attrs["placeholder"] = placeholder | CODE |
| LOW⚡ | wagtail/admin/tests/test_edit_handlers.py | 2388 | self.assertEqual(attrs["placeholder"], "Page title*") | CODE |
| LOW⚡ | wagtail/admin/tests/test_edit_handlers.py | 2604 | self.assertNotIn("placeholder", attrs) | CODE |
| LOW⚡ | wagtail/admin/tests/test_edit_handlers.py | 2615 | self.assertNotIn("placeholder", attrs) | CODE |
| LOW⚡ | wagtail/admin/tests/test_edit_handlers.py | 2626 | self.assertNotIn("placeholder", attrs) | CODE |
| LOW⚡ | wagtail/admin/tests/test_edit_handlers.py | 2635 | attrs={"placeholder": "My custom placeholder"} | CODE |
| LOW⚡ | wagtail/admin/tests/test_edit_handlers.py | 2647 | self.assertEqual(attrs["placeholder"], "My custom placeholder") | CODE |
| LOW⚡ | wagtail/admin/tests/test_edit_handlers.py | 2657 | attrs={"placeholder": "WIDGET placeholder"} | CODE |
| LOW⚡ | wagtail/admin/tests/test_edit_handlers.py | 2669 | self.assertEqual(attrs["placeholder"], "WIDGET placeholder") | CODE |
| LOW⚡ | wagtail/admin/tests/test_edit_handlers.py | 2679 | attrs={"placeholder": "WIDGET placeholder"} | CODE |
| 166 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | wagtail/fields.py | 0 | given a list of elements from a content path, retrieve the block at that path as a boundblock object, or none if the pat | STRING |
| HIGH | wagtail/blocks/list_block.py | 0 | given a list of elements from a content path, retrieve the block at that path as a boundblock object, or none if the pat | STRING |
| HIGH | wagtail/blocks/struct_block.py | 0 | given a list of elements from a content path, retrieve the block at that path as a boundblock object, or none if the pat | STRING |
| HIGH | wagtail/blocks/stream_block.py | 0 | given a list of elements from a content path, retrieve the block at that path as a boundblock object, or none if the pat | STRING |
| HIGH | wagtail/blocks/base.py | 0 | given a list of elements from a content path, retrieve the block at that path as a boundblock object, or none if the pat | STRING |
| HIGH | wagtail/blocks/struct_block.py | 0 | always deconstruct typedtableblock instances as if they were plain typedtableblock with all of the field definitions pas | STRING |
| HIGH | wagtail/blocks/stream_block.py | 0 | always deconstruct typedtableblock instances as if they were plain typedtableblock with all of the field definitions pas | STRING |
| HIGH | wagtail/contrib/typed_table_block/blocks.py | 0 | always deconstruct typedtableblock instances as if they were plain typedtableblock with all of the field definitions pas | STRING |
| HIGH | wagtail/snippets/tests/test_unpublish_view.py | 0 | this tests that the unpublish view responds with an unpublish confirm page | STRING |
| HIGH | wagtail/admin/tests/pages/test_unpublish_page.py | 0 | this tests that the unpublish view responds with an unpublish confirm page | STRING |
| HIGH | …n/tests/pages/test_bulk_actions/test_bulk_unpublish.py | 0 | this tests that the unpublish view responds with an unpublish confirm page | STRING |
| HIGH | wagtail/snippets/tests/test_unpublish_view.py | 0 | this tests that the unpublish view doesn't allow users without unpublish permissions | STRING |
| HIGH | wagtail/admin/tests/pages/test_unpublish_page.py | 0 | this tests that the unpublish view doesn't allow users without unpublish permissions | STRING |
| HIGH | …n/tests/pages/test_bulk_actions/test_bulk_unpublish.py | 0 | this tests that the unpublish view doesn't allow users without unpublish permissions | STRING |
| HIGH | wagtail/snippets/tests/test_create_view.py | 0 | template[data-controller="w-teleport"][data-w-teleport-target-value="[data-edit-form]"] #schedule-publishing-dialog | STRING |
| HIGH | wagtail/snippets/tests/test_edit_view.py | 0 | template[data-controller="w-teleport"][data-w-teleport-target-value="[data-edit-form]"] #schedule-publishing-dialog | STRING |
| HIGH | wagtail/admin/tests/pages/test_edit_page.py | 0 | template[data-controller="w-teleport"][data-w-teleport-target-value="[data-edit-form]"] #schedule-publishing-dialog | STRING |
| HIGH | wagtail/snippets/tests/test_create_view.py | 0 | if a form is reshown due to a validation error elsewhere, fields whose validation was deferred should still show the req | STRING |
| HIGH | wagtail/snippets/tests/test_edit_view.py | 0 | if a form is reshown due to a validation error elsewhere, fields whose validation was deferred should still show the req | STRING |
| HIGH | wagtail/admin/tests/pages/test_edit_page.py | 0 | if a form is reshown due to a validation error elsewhere, fields whose validation was deferred should still show the req | STRING |
| HIGH | wagtail/admin/tests/pages/test_create_page.py | 0 | if a form is reshown due to a validation error elsewhere, fields whose validation was deferred should still show the req | STRING |
| HIGH | wagtail/permission_policies/collections.py | 0 | return whether the given user has permission to perform any of the given actions on some or all instances of this model. | STRING |
| HIGH | wagtail/permission_policies/sites.py | 0 | return whether the given user has permission to perform any of the given actions on some or all instances of this model. | STRING |
| HIGH | wagtail/permission_policies/base.py | 0 | return whether the given user has permission to perform any of the given actions on some or all instances of this model. | STRING |
| HIGH | wagtail/permission_policies/collections.py | 0 | return a queryset of users who have permission to perform the given action on some or all instances of this model. | STRING |
| HIGH | wagtail/permission_policies/sites.py | 0 | return a queryset of users who have permission to perform the given action on some or all instances of this model. | STRING |
| HIGH | wagtail/permission_policies/base.py | 0 | return a queryset of users who have permission to perform the given action on some or all instances of this model. | STRING |
| HIGH | wagtail/permission_policies/collections.py | 0 | return a queryset of all instances of this model for which the given user has permission to perform the given action. | STRING |
| HIGH | wagtail/permission_policies/sites.py | 0 | return a queryset of all instances of this model for which the given user has permission to perform the given action. | STRING |
| HIGH | wagtail/permission_policies/base.py | 0 | return a queryset of all instances of this model for which the given user has permission to perform the given action. | STRING |
| HIGH | wagtail/admin/tests/pages/test_revisions.py | 0 | this tests that the publish view returns an error if the page id is invalid | STRING |
| HIGH | wagtail/admin/tests/pages/test_unpublish_page.py | 0 | this tests that the publish view returns an error if the page id is invalid | STRING |
| HIGH | …n/tests/pages/test_bulk_actions/test_bulk_unpublish.py | 0 | this tests that the publish view returns an error if the page id is invalid | STRING |
| HIGH | …min/tests/pages/test_bulk_actions/test_bulk_publish.py | 0 | this tests that the publish view returns an error if the page id is invalid | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | runtests.py | 38 | CODE | |
| LOW | wagtail/fields.py | 143 | CODE | |
| LOW | wagtail/query.py | 656 | CODE | |
| LOW | wagtail/whitelist.py | 34 | CODE | |
| LOW | wagtail/whitelist.py | 46 | CODE | |
| LOW | wagtail/coreutils.py | 354 | CODE | |
| LOW | wagtail/wagtail_hooks.py | 36 | CODE | |
| LOW | wagtail/wagtail_hooks.py | 37 | CODE | |
| LOW | wagtail/blocks/struct_block.py | 37 | CODE | |
| LOW | wagtail/blocks/stream_block.py | 36 | CODE | |
| LOW | wagtail/blocks/field_block.py | 614 | CODE | |
| LOW | wagtail/blocks/field_block.py | 668 | CODE | |
| LOW | wagtail/blocks/field_block.py | 727 | CODE | |
| LOW | wagtail/snippets/action_menu.py | 275 | CODE | |
| LOW | wagtail/snippets/views/snippets.py | 199 | CODE | |
| LOW | wagtail/permission_policies/collections.py | 292 | CODE | |
| LOW | wagtail/permission_policies/base.py | 404 | CODE | |
| LOW | wagtail/test/numberformat.py | 78 | CODE | |
| LOW | wagtail/test/utils/form_data.py | 147 | CODE | |
| LOW | wagtail/bin/wagtail.py | 203 | CODE | |
| LOW | wagtail/bin/wagtail.py | 331 | CODE | |
| LOW | wagtail/bin/wagtail.py | 354 | CODE | |
| LOW | wagtail/images/models.py | 654 | CODE | |
| LOW | wagtail/images/models.py | 1061 | CODE | |
| LOW | wagtail/images/templatetags/wagtailimages_tags.py | 13 | CODE | |
| LOW | …management/commands/wagtail_update_image_renditions.py | 40 | CODE | |
| LOW | wagtail/tests/test_utils.py | 364 | CODE | |
| LOW | wagtail/tests/test_page_queryset.py | 603 | CODE | |
| LOW | wagtail/tests/test_blocks.py | 69 | CODE | |
| LOW | wagtail/tests/test_hooks.py | 125 | CODE | |
| LOW | wagtail/tests/streamfield_migrations/test_migrations.py | 51 | CODE | |
| LOW | wagtail/admin/mail.py | 236 | CODE | |
| LOW | wagtail/admin/models.py | 24 | CODE | |
| LOW | wagtail/admin/checks.py | 106 | CODE | |
| LOW | wagtail/admin/localization.py | 121 | CODE | |
| LOW | wagtail/admin/wagtail_hooks.py | 310 | CODE | |
| LOW | wagtail/admin/action_menu.py | 274 | CODE | |
| LOW | wagtail/admin/messages.py | 38 | CODE | |
| LOW | wagtail/admin/userbar.py | 339 | CODE | |
| LOW | wagtail/admin/compare.py | 98 | CODE | |
| LOW | wagtail/admin/compare.py | 798 | CODE | |
| LOW | wagtail/admin/compare.py | 280 | CODE | |
| LOW | wagtail/admin/compare.py | 447 | CODE | |
| LOW | wagtail/admin/compare.py | 493 | CODE | |
| LOW | wagtail/admin/compare.py | 543 | CODE | |
| LOW | wagtail/admin/compare.py | 776 | CODE | |
| LOW | wagtail/admin/filters.py | 165 | CODE | |
| LOW | wagtail/admin/forms/models.py | 190 | CODE | |
| LOW | wagtail/admin/viewsets/model.py | 530 | CODE | |
| LOW | wagtail/admin/viewsets/pages.py | 631 | CODE | |
| LOW | wagtail/admin/panels/model_utils.py | 56 | CODE | |
| LOW | wagtail/admin/panels/group.py | 27 | CODE | |
| LOW | wagtail/admin/tests/pages/test_page_search.py | 344 | CODE | |
| LOW | wagtail/admin/views/editing_sessions.py | 21 | CODE | |
| LOW | wagtail/admin/views/collection_privacy.py | 11 | CODE | |
| LOW | wagtail/admin/views/chooser.py | 612 | CODE | |
| LOW | wagtail/admin/views/workflows.py | 865 | CODE | |
| LOW | wagtail/admin/views/account.py | 305 | CODE | |
| LOW | wagtail/admin/views/generic/mixins.py | 454 | CODE | |
| LOW | wagtail/admin/views/generic/models.py | 166 | CODE | |
| 55 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | wagtail/blocks/definition_lookup.py | 72 | # Check if we've already seen this block definition | COMMENT |
| LOW⚡ | wagtail/snippets/tests/test_reordering.py | 243 | # Check if obj3 is now the first item by taking obj1's sort_order and | COMMENT |
| LOW⚡ | wagtail/snippets/tests/test_reordering.py | 253 | # Check if obj1 is now the second item by taking obj2's sort_order | COMMENT |
| LOW | wagtail/snippets/tests/test_reordering.py | 317 | # Check if obj1 is now the second item by taking obj2's sort_order | COMMENT |
| LOW | wagtail/images/models.py | 184 | # Open file if it is closed | COMMENT |
| LOW | wagtail/images/models.py | 759 | # Read file contents into memory | COMMENT |
| LOW | wagtail/images/models.py | 982 | # Check if segment has braces to expand | COMMENT |
| LOW | wagtail/images/forms.py | 29 | # Check if this is the file field | COMMENT |
| LOW | wagtail/images/tests/test_models.py | 890 | # Check if get_rendition returns the rendition from cache | STRING |
| LOW | wagtail/tests/test_reference_index.py | 959 | # Check if reference remains (pointing to dead target) | COMMENT |
| LOW | wagtail/tests/test_management_commands.py | 67 | # Check if its fixed | COMMENT |
| LOW | wagtail/tests/test_management_commands.py | 91 | # Check if its fixed | COMMENT |
| LOW⚡ | wagtail/admin/tests/test_account_management.py | 378 | # Check if the default title does not exist | COMMENT |
| LOW | wagtail/admin/tests/test_account_management.py | 308 | # Check if the default title exists | COMMENT |
| LOW⚡ | wagtail/admin/tests/viewsets/test_model_viewset.py | 2113 | # Check if obj3 is now the first item by taking obj1's sort_order and | COMMENT |
| LOW⚡ | wagtail/admin/tests/viewsets/test_model_viewset.py | 2122 | # Check if obj1 is now the second item by taking obj2's sort_order | COMMENT |
| LOW | wagtail/admin/tests/viewsets/test_model_viewset.py | 2174 | # Check if obj1 is now the second item by taking obj2's sort_order | COMMENT |
| LOW | wagtail/admin/tests/pages/test_copy_page.py | 1092 | # Check if slug is hello-world-2 | COMMENT |
| LOW | wagtail/admin/views/workflows.py | 491 | # Set workflow to active if inactive | COMMENT |
| LOW | wagtail/admin/views/workflows.py | 820 | # Set workflow to active if inactive | COMMENT |
| LOW | wagtail/models/pages.py | 844 | # Check if this is a root page of any sites and clear the 'wagtail_site_root_paths' key if so | COMMENT |
| LOW | wagtail/models/i18n.py | 345 | # Check if the object has any parental keys to another translatable model | COMMENT |
| LOW | wagtail/contrib/settings/models.py | 207 | # Check if we already have this in the cache and return it if so. | COMMENT |
| LOW⚡ | wagtail/contrib/frontend_cache/signal_handlers.py | 35 | # Loop through list and register signal handlers for each one | COMMENT |
| LOW | wagtail/contrib/simple_translation/models.py | 37 | # Check if the source tree needs to be synchronised into any other trees | COMMENT |
| LOW | …contrib/simple_translation/tests/test_wagtail_hooks.py | 239 | # Check if fr and de blog post parent ids are in the translated list | COMMENT |
| LOW | …contrib/simple_translation/tests/test_wagtail_hooks.py | 265 | # Check if the new pages exist under their respective translated homepages | COMMENT |
| LOW | …contrib/simple_translation/tests/test_wagtail_hooks.py | 324 | # Check if the fr and de pages exist under their original parent page (/blog/) | COMMENT |
| LOW | wagtail/api/querysets.py | 30 | # Check if we have a specific site to look for | COMMENT |
| LOW | wagtail/api/v3/schemas/generators/write.py | 226 | # Check if existing meta type is optional, and if so, make the new meta | COMMENT |
| LOW | wagtail/documents/models.py | 95 | # Open file if it is closed | COMMENT |
| LOW | wagtail/embeds/finders/oembed.py | 72 | # Check if 'type' is missing | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | wagtail/signals.py | 61 | COMMENT | |
| LOW | wagtail/fields.py | 221 | ): | COMMENT |
| LOW | wagtail/blocks/list_block.py | 21 | COMMENT | |
| LOW | wagtail/blocks/base.py | 601 | # surname = CharBlock() | COMMENT |
| LOW | wagtail/snippets/bulk_actions/delete.py | 21 | @cached_property | COMMENT |
| LOW | wagtail/snippets/views/snippets.py | 521 | COMMENT | |
| LOW | wagtail/permission_policies/collections.py | 301 | # on any instance | COMMENT |
| LOW | wagtail/tests/test_blocks.py | 5901 | [ | COMMENT |
| LOW | wagtail/admin/menu.py | 161 | #: The icon used for the menu item that appears in Wagtail's sidebar. | COMMENT |
| LOW | wagtail/admin/templatetags/wagtailadmin_tags.py | 221 | request = context.get("request") | COMMENT |
| LOW | wagtail/admin/viewsets/model.py | 81 | #: | COMMENT |
| LOW | wagtail/admin/tests/test_audit_log.py | 221 | # 3 edits without UUID | COMMENT |
| LOW | wagtail/admin/tests/test_menu.py | 421 | # automatically generated from the label, which is translatable. | COMMENT |
| LOW | wagtail/admin/tests/test_editing_sessions.py | 1781 | self.assertLessEqual( | COMMENT |
| LOW | wagtail/admin/views/editing_sessions.py | 161 | and not users_other_session["revision_id"] | COMMENT |
| LOW | wagtail/admin/views/generic/multiple_upload.py | 21 | COMMENT | |
| LOW | wagtail/models/pages.py | 1201 | ) | COMMENT |
| LOW | wagtail/models/reference_index.py | 161 | # For example, say we have a StreamField called 'body' which has a struct block type | COMMENT |
| LOW | wagtail/models/reference_index.py | 901 | COMMENT | |
| LOW | wagtail/api/v3/registry.py | 141 | COMMENT | |
| LOW | wagtail/api/v3/form_data.py | 341 | elif hasattr(field.widget, "converter"): | COMMENT |
| LOW | wagtail/rich_text/feature_registry.py | 21 | # of feature names to 'plugin' objects that define how to implement that feature | COMMENT |
| LOW | docs/conf.py | 1 | # | COMMENT |
| LOW | docs/conf.py | 141 | project = "Wagtail Documentation" | COMMENT |
| LOW | docs/conf.py | 161 | # today_fmt = '%B %d, %Y' | COMMENT |
| LOW | docs/conf.py | 241 | # https://myst-parser.readthedocs.io/en/latest/syntax/cross-referencing.html#customising-external-url-resolution | COMMENT |
| LOW | docs/conf.py | 261 | # of the sidebar. | COMMENT |
| LOW | docs/conf.py | 281 | # html_last_updated_fmt = '%b %d, %Y' | COMMENT |
| LOW | docs/conf.py | 301 | html_use_index = False | COMMENT |
| LOW | docs/conf.py | 321 | # html_file_suffix = None | COMMENT |
| LOW | docs/conf.py | 361 | # If true, show page references after internal links. | COMMENT |
| LOW | .github/workflows/test.yml | 21 | # DISABLE_TIMEZONE=yes and WAGTAIL_CHECK_TEMPLATE_NUMBER_FORMAT=1 | COMMENT |
| LOW | client/scss/components/_preview-panel.scss | 41 | // Ensure that sites without a background show with a fallback, only when iframe has loaded | COMMENT |
| LOW | client/src/components/Sidebar/menu/SubMenuItem.tsx | 41 | // to finish before making it invisible | COMMENT |
| LOW | …/src/components/StreamField/blocks/StructBlock.test.js | 921 | // group(root): | COMMENT |
| LOW | …ypoints/contrib/typed_table_block/typed_table_block.js | 21 | // * id: the unique ID number assigned to this column, used in field name prefixes | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | wagtail/coreutils.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | wagtail/blocks/list_block.py | 22 | __all__ = ["ListBlock", "ListBlockValidationError"] | CODE |
| LOW | wagtail/blocks/static_block.py | 11 | __all__ = ["StaticBlock"] | CODE |
| LOW | wagtail/blocks/struct_block.py | 27 | __all__ = [ | CODE |
| LOW | wagtail/blocks/stream_block.py | 27 | __all__ = [ | CODE |
| LOW⚡ | wagtail/blocks/base.py | 23 | __all__ = [ | CODE |
| LOW | wagtail/blocks/field_block.py | 1100 | __all__ = [cls.__name__ for cls in block_classes] | CODE |
| LOW | wagtail/snippets/bulk_actions/__init__.py | 3 | __all__ = ["DeleteBulkAction"] | CODE |
| LOW | wagtail/snippets/api/v3/__init__.py | 3 | __all__ = [ | CODE |
| LOW | wagtail/locales/api/v3/__init__.py | 3 | __all__ = [ | CODE |
| LOW | wagtail/test/utils/wagtail_factories/factories.py | 16 | __all__ = [ | CODE |
| LOW | wagtail/test/utils/wagtail_factories/blocks.py | 18 | __all__ = [ | CODE |
| LOW | …management/commands/wagtail_update_image_renditions.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | wagtail/images/views/bulk_actions/__init__.py | 5 | __all__ = ["AddToCollectionBulkAction", "AddTagsBulkAction", "DeleteBulkAction"] | CODE |
| LOW | wagtail/admin/views/bulk_action/__init__.py | 4 | __all__ = ["BulkAction", "index"] | CODE |
| LOW | wagtail/admin/views/pages/bulk_actions/__init__.py | 6 | __all__ = [ | CODE |
| LOW | wagtail/contrib/settings/models.py | 12 | __all__ = [ | CODE |
| LOW | wagtail/contrib/frontend_cache/backends/azure.py | 14 | __all__ = ["AzureBaseBackend", "AzureFrontDoorBackend", "AzureCdnBackend"] | CODE |
| LOW | wagtail/contrib/frontend_cache/backends/cloudflare.py | 11 | __all__ = ["CloudflareBackend"] | CODE |
| LOW | wagtail/contrib/frontend_cache/backends/http.py | 13 | __all__ = ["PurgeRequest", "HTTPBackend"] | CODE |
| LOW | wagtail/contrib/frontend_cache/backends/cloudfront.py | 13 | __all__ = ["CloudfrontBackend"] | CODE |
| LOW | wagtail/contrib/frontend_cache/backends/base.py | 8 | __all__ = ["BaseBackend"] | CODE |
| LOW | wagtail/contrib/redirects/signal_handlers.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | wagtail/contrib/redirects/api/__init__.py | 4 | __all__ = [ | CODE |
| LOW | wagtail/contrib/redirects/api/v3/__init__.py | 3 | __all__ = [ | CODE |
| LOW | wagtail/users/tests/__init__.py | 5 | __all__ = [ | CODE |
| LOW | wagtail/users/views/bulk_actions/__init__.py | 5 | __all__ = ["AssignRoleBulkAction", "DeleteBulkAction", "SetActiveStateBulkAction"] | CODE |
| LOW | wagtail/actions/__init__.py | 27 | __all__ = [ | CODE |
| LOW | wagtail/api/v3/urls.py | 18 | __all__ = ["api"] | CODE |
| LOW | wagtail/api/v3/form_data.py | 317 | def _set_field_value(field: Field, name: str, value: Any, data: MultiValueDict) -> None: | CODE |
| LOW | wagtail/api/v3/schemas/__init__.py | 21 | __all__ = [ | CODE |
| LOW | wagtail/api/v3/schemas/generators/__init__.py | 4 | __all__ = [ | CODE |
| LOW | wagtail/documents/views/bulk_actions/__init__.py | 5 | __all__ = ["AddToCollectionBulkAction", "AddTagsBulkAction", "DeleteBulkAction"] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | setup.py | 12 | print("Error compiling assets: " + str(e)) # noqa: T201 | CODE |
| LOW | wagtail/blocks/base.py | 718 | except Exception as e: # noqa: BLE001 | CODE |
| MEDIUM | wagtail/blocks/base.py | 710 | def | CODE |
| LOW | wagtail/test/dummy_external_storage.py | 88 | except Exception as e: # noqa: BLE001 | CODE |
| MEDIUM | wagtail/test/dummy_external_storage.py | 85 | def size(self): | CODE |
| LOW | wagtail/test/utils/page_tests.py | 262 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | wagtail/test/utils/page_tests.py | 338 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | wagtail/test/utils/page_tests.py | 369 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | wagtail/test/utils/page_tests.py | 424 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | wagtail/test/utils/page_tests.py | 440 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | wagtail/test/utils/decorators.py | 22 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | wagtail/images/models.py | 170 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | wagtail/images/fields.py | 186 | except Exception as exc: # noqa: BLE001 | CODE |
| MEDIUM | wagtail/images/fields.py | 120 | def check_image_pixel_size(self, f): | CODE |
| LOW | wagtail/images/tests/test_management_commands.py | 41 | except Exception: # noqa: BLE001 | CODE |
| MEDIUM | wagtail/tests/test_utils.py | 183 | def test_pickleability(self): | CODE |
| LOW | wagtail/tests/test_utils.py | 186 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | wagtail/tests/test_utils.py | 193 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | wagtail/admin/mail.py | 131 | except Exception: | CODE |
| LOW | wagtail/admin/mail.py | 274 | except Exception: | CODE |
| LOW | …nagement/commands/create_log_entries_from_revisions.py | 48 | except Exception: # noqa: BLE001 | CODE |
| LOW | …nagement/commands/create_log_entries_from_revisions.py | 60 | except Exception: # noqa: BLE001 | CODE |
| LOW⚡ | …ail/contrib/settings/tests/site_specific/test_model.py | 85 | except Exception as e: # noqa: BLE001 | CODE |
| LOW⚡ | …ail/contrib/settings/tests/site_specific/test_model.py | 93 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | wagtail/contrib/redirects/views.py | 278 | except Exception as e: # noqa: BLE001 ; pragma: no cover | CODE |
| LOW | wagtail/documents/models.py | 124 | except Exception: # noqa: BLE001 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | wagtail/query.py | 524 | # Assuming the situation is the latter, just return the root node. | COMMENT |
| LOW | wagtail/blocks/base.py | 572 | # In the base implementation, no substitutions happen, so we ignore the lookup and just call | COMMENT |
| MEDIUM | wagtail/snippets/tests/test_locking.py | 492 | """A user needs to unlock a snippet that's locked by another user in order to edit it.""" | STRING |
| LOW | wagtail/snippets/views/snippets.py | 262 | # Hook response is not suitable for a JSON response, so ignore it and just use | COMMENT |
| LOW | wagtail/snippets/views/snippets.py | 330 | # Hook response is not suitable for a JSON response, so ignore it and just use | COMMENT |
| MEDIUM | wagtail/images/models.py | 751 | # utilize QuerySet.get_or_create(), which has better handling of | COMMENT |
| LOW | wagtail/images/forms.py | 40 | # For all other fields, just call its formfield() method. | COMMENT |
| MEDIUM | wagtail/admin/userbar.py | 105 | #: Should be used in conjunction with ``axe_custom_rules``. | COMMENT |
| LOW | wagtail/admin/templatetags/wagtailadmin_tags.py | 230 | # users having to log in again. So we just return the URL unchanged. | COMMENT |
| LOW | wagtail/admin/tests/pages/test_edit_page.py | 1514 | # Without TZ support, just use the submitted timestamp as-is | COMMENT |
| LOW | wagtail/admin/views/pages/create.py | 295 | # Hook response is not suitable for a JSON response, so ignore it and just use | COMMENT |
| LOW | wagtail/admin/views/pages/edit.py | 664 | # Hook response is not suitable for a JSON response, so ignore it and just use | COMMENT |
| LOW | wagtail/management/commands/fixtree.py | 77 | # Deleting only the *actual* orphans is a bit silly (since it'll just create | COMMENT |
| LOW | wagtail/models/pages.py | 1520 | # ``current_site`` is purposefully undocumented, as one can simply pass the request and get | COMMENT |
| MEDIUM | wagtail/users/tests/test_admin_views.py | 2102 | # Tests that use this method are testing the aforementioned | COMMENT |
| MEDIUM | wagtail/api/v3/tests/test_auth.py | 125 | # schema is the comprehensive source of truth for what is served. | COMMENT |
| LOW | wagtail/documents/forms.py | 35 | # For all other fields, just call its formfield() method. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | wagtail/blocks/base.py | 33 | # ========================================= | COMMENT |
| MEDIUM⚡ | wagtail/blocks/base.py | 35 | # ========================================= | COMMENT |
| MEDIUM | wagtail/blocks/base.py | 699 | # ======================== | COMMENT |
| MEDIUM | wagtail/blocks/base.py | 701 | # ======================== | COMMENT |
| MEDIUM | wagtail/test/demosite/models.py | 26 | # ============================= | COMMENT |
| MEDIUM | wagtail/test/demosite/models.py | 158 | # ============================= | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | wagtail/blocks/field_block.py | 747 | CODE | |
| LOW | wagtail/admin/templatetags/wagtailadmin_tags.py | 1186 | CODE | |
| LOW | wagtail/admin/ui/side_panels.py | 68 | CODE | |
| LOW | wagtail/admin/ui/tables/__init__.py | 271 | CODE | |
| LOW | wagtail/models/pages.py | 1785 | CODE | |
| LOW | wagtail/models/pages.py | 1819 | CODE | |
| LOW | wagtail/actions/create_alias.py | 58 | CODE | |
| LOW | wagtail/actions/copy_page.py | 40 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/advanced_topics/i18n.md | 546 | ###### Step 1: Add `BootstrapTranslatableMixin` to the model | COMMENT |
| LOW | docs/advanced_topics/i18n.md | 571 | ###### Step 2: Create a data migration | COMMENT |
| LOW | docs/advanced_topics/i18n.md | 602 | ###### Step 3: Change `BootstrapTranslatableMixin` to `TranslatableMixin` | COMMENT |
| LOW | docs/advanced_topics/i18n.md | 622 | ###### Step 4: Run `makemigrations` to generate schema migrations, then migrate! | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/packages/index.md | 17 | We recommend the [cookiecutter-wagtail-package](https://github.com/wagtail/cookiecutter-wagtail-package) template to sca | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | wagtail/admin/views/generic/preview.py | 214 | # make sure to update the docs for `Block.get_preview_context`. | COMMENT |