wagtail 6.0.1__py3-none-any.whl → 6.1rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wagtail/__init__.py +1 -1
- wagtail/admin/checks.py +51 -0
- wagtail/admin/compare.py +1 -1
- wagtail/admin/filters.py +70 -1
- wagtail/admin/forms/account.py +1 -1
- wagtail/admin/forms/collections.py +15 -0
- wagtail/admin/forms/pages.py +49 -0
- wagtail/admin/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/ca/LC_MESSAGES/django.po +122 -0
- wagtail/admin/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/de/LC_MESSAGES/django.po +5 -5
- wagtail/admin/locale/en/LC_MESSAGES/django.po +474 -385
- wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +3 -3
- wagtail/admin/locale/es/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/es/LC_MESSAGES/django.po +6 -6
- wagtail/admin/locale/fr/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/fr/LC_MESSAGES/django.po +70 -3
- wagtail/admin/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/he_IL/LC_MESSAGES/django.po +2 -6
- wagtail/admin/locale/he_IL/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/he_IL/LC_MESSAGES/djangojs.po +2 -2
- wagtail/admin/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/hr_HR/LC_MESSAGES/django.po +4 -0
- wagtail/admin/locale/hu/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/hu/LC_MESSAGES/django.po +142 -2
- wagtail/admin/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/it/LC_MESSAGES/django.po +80 -8
- wagtail/admin/locale/it/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/it/LC_MESSAGES/djangojs.po +14 -2
- wagtail/admin/locale/lv/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/lv/LC_MESSAGES/django.po +154 -1
- wagtail/admin/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/pt_PT/LC_MESSAGES/django.po +73 -2
- wagtail/admin/locale/ro/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/ro/LC_MESSAGES/django.po +3 -3
- wagtail/admin/locale/sl/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/sl/LC_MESSAGES/django.po +145 -2
- wagtail/admin/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/sv/LC_MESSAGES/django.po +77 -3
- wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.po +17 -1
- wagtail/admin/panels/comment_panel.py +1 -1
- wagtail/admin/panels/field_panel.py +1 -1
- wagtail/admin/rich_text/converters/editor_html.py +3 -1
- wagtail/admin/rich_text/editors/draftail/__init__.py +28 -2
- wagtail/admin/static/wagtailadmin/css/core.css +1 -1
- wagtail/admin/static/wagtailadmin/css/panels/draftail.css +1 -1
- wagtail/admin/static/wagtailadmin/images/favicon.ico +0 -0
- wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
- wagtail/admin/static/wagtailadmin/js/chooser-modal.js +1 -1
- wagtail/admin/static/wagtailadmin/js/chooser-widget-telepath.js +1 -1
- wagtail/admin/static/wagtailadmin/js/chooser-widget.js +1 -1
- wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
- wagtail/admin/static/wagtailadmin/js/core.js +1 -1
- wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt +1 -1
- wagtail/admin/static/wagtailadmin/js/date-time-chooser.js +1 -1
- wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
- wagtail/admin/static/wagtailadmin/js/expanding-formset.js +1 -1
- wagtail/admin/static/wagtailadmin/js/filtered-select.js +1 -1
- wagtail/admin/static/wagtailadmin/js/modal-workflow.js +1 -1
- wagtail/admin/static/wagtailadmin/js/page-chooser-modal.js +1 -1
- wagtail/admin/static/wagtailadmin/js/page-chooser-telepath.js +1 -1
- wagtail/admin/static/wagtailadmin/js/page-chooser.js +1 -1
- wagtail/admin/static/wagtailadmin/js/preview-panel.js +1 -1
- wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
- wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
- wagtail/admin/static/wagtailadmin/js/task-chooser-modal.js +1 -1
- wagtail/admin/static/wagtailadmin/js/task-chooser.js +1 -1
- wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
- wagtail/admin/static/wagtailadmin/js/telepath/telepath.js +1 -1
- wagtail/admin/static/wagtailadmin/js/telepath/widgets.js +1 -1
- wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
- wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
- wagtail/admin/static/wagtailadmin/js/vendor.js.LICENSE.txt +4 -4
- wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
- wagtail/admin/static/wagtailadmin/js/workflow-action.js +1 -1
- wagtail/admin/staticfiles.py +1 -0
- wagtail/admin/templates/wagtailadmin/admin_base.html +1 -0
- wagtail/admin/templates/wagtailadmin/base.html +1 -0
- wagtail/admin/templates/wagtailadmin/collection_privacy/set_privacy.html +3 -1
- wagtail/admin/templates/wagtailadmin/collections/edit.html +0 -1
- wagtail/admin/templates/wagtailadmin/collections/index_results.html +10 -0
- wagtail/admin/templates/wagtailadmin/generic/base.html +1 -9
- wagtail/admin/templates/wagtailadmin/generic/form.html +4 -2
- wagtail/admin/templates/wagtailadmin/generic/history/action_cell.html +27 -0
- wagtail/admin/templates/wagtailadmin/generic/index_results.html +8 -0
- wagtail/admin/templates/wagtailadmin/home/workflow_objects_to_moderate.html +3 -4
- wagtail/admin/templates/wagtailadmin/icons/keyboard.svg +1 -0
- wagtail/admin/templates/wagtailadmin/page_privacy/set_privacy.html +3 -1
- wagtail/admin/templates/wagtailadmin/pages/_editor_js.html +0 -15
- wagtail/admin/templates/wagtailadmin/pages/action_menu/save_draft.html +3 -1
- wagtail/admin/templates/wagtailadmin/pages/choose_parent.html +17 -0
- wagtail/admin/templates/wagtailadmin/pages/explorable_index.html +8 -0
- wagtail/admin/templates/wagtailadmin/pages/history.html +1 -61
- wagtail/admin/templates/wagtailadmin/pages/index.html +1 -5
- wagtail/admin/templates/wagtailadmin/pages/listing/_locked_indicator.html +2 -2
- wagtail/admin/templates/wagtailadmin/pages/listing/_page_title_column_header.html +25 -27
- wagtail/admin/templates/wagtailadmin/pages/page_listing_header.html +2 -1
- wagtail/admin/templates/wagtailadmin/panels/multi_field_panel_child.html +1 -1
- wagtail/admin/templates/wagtailadmin/panels/publishing/schedule_publishing_panel.html +3 -1
- wagtail/admin/templates/wagtailadmin/panels/tabbed_interface.html +1 -1
- wagtail/admin/templates/wagtailadmin/shared/active_filters.html +2 -1
- wagtail/admin/templates/wagtailadmin/shared/breadcrumbs.html +8 -0
- wagtail/admin/templates/wagtailadmin/shared/forms/single_checkbox.html +1 -1
- wagtail/admin/templates/wagtailadmin/shared/headers/page_edit_header.html +1 -1
- wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html +21 -9
- wagtail/admin/templates/wagtailadmin/shared/human_readable_date.html +1 -1
- wagtail/admin/templates/wagtailadmin/shared/keyboard_shortcuts_dialog.html +29 -0
- wagtail/admin/templates/wagtailadmin/shared/side_panel_toggle.html +2 -1
- wagtail/admin/templates/wagtailadmin/skeleton.html +2 -1
- wagtail/admin/templates/wagtailadmin/tables/related_objects_cell.html +9 -0
- wagtail/admin/templates/wagtailadmin/tables/title_cell.html +9 -7
- wagtail/admin/templates/wagtailadmin/widgets/draftail_rich_text_area.html +1 -1
- wagtail/admin/templates/wagtailadmin/workflows/create.html +6 -23
- wagtail/admin/templates/wagtailadmin/workflows/create_task.html +6 -15
- wagtail/admin/templates/wagtailadmin/workflows/edit.html +6 -23
- wagtail/admin/templates/wagtailadmin/workflows/edit_task.html +6 -13
- wagtail/admin/templates/wagtailadmin/workflows/includes/task_usage_cell.html +4 -4
- wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_tasks_cell.html +18 -0
- wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_title_cell.html +7 -0
- wagtail/admin/templates/wagtailadmin/workflows/includes/workflow_used_by_cell.html +25 -0
- wagtail/admin/templates/wagtailadmin/workflows/index.html +0 -99
- wagtail/admin/templates/wagtailadmin/workflows/index_results.html +10 -0
- wagtail/admin/templates/wagtailadmin/workflows/task_index.html +0 -30
- wagtail/admin/templates/wagtailadmin/workflows/task_index_results.html +10 -0
- wagtail/admin/templates/wagtailadmin/workflows/usage.html +1 -1
- wagtail/admin/templatetags/wagtailadmin_tags.py +116 -39
- wagtail/admin/tests/api/test_pages.py +26 -10
- wagtail/admin/tests/pages/test_create_page.py +10 -4
- wagtail/admin/tests/pages/test_custom_listing.py +37 -0
- wagtail/admin/tests/pages/test_edit_page.py +6 -6
- wagtail/admin/tests/pages/test_explorer_view.py +19 -18
- wagtail/admin/tests/pages/test_move_page.py +1 -1
- wagtail/admin/tests/pages/test_page_usage.py +50 -2
- wagtail/admin/tests/pages/test_parent_page_chooser_view.py +119 -0
- wagtail/admin/tests/pages/test_preview.py +18 -4
- wagtail/admin/tests/test_account_management.py +20 -1
- wagtail/admin/tests/test_audit_log.py +172 -5
- wagtail/admin/tests/test_checks.py +92 -0
- wagtail/admin/tests/test_collections_views.py +19 -5
- wagtail/admin/tests/test_compare.py +6 -6
- wagtail/admin/tests/test_dashboard.py +404 -0
- wagtail/admin/tests/test_dbwhitelister.py +4 -5
- wagtail/admin/tests/test_edit_handlers.py +2 -2
- wagtail/admin/tests/test_keyboard_shortcuts.py +84 -0
- wagtail/admin/tests/test_page_chooser.py +31 -18
- wagtail/admin/tests/test_privacy.py +36 -2
- wagtail/admin/tests/test_rich_text.py +168 -23
- wagtail/admin/tests/test_templatetags.py +411 -43
- wagtail/admin/tests/test_views.py +4 -2
- wagtail/admin/tests/test_workflows.py +531 -9
- wagtail/admin/tests/tests.py +3 -1
- wagtail/admin/tests/ui/test_tables.py +48 -1
- wagtail/admin/tests/viewsets/test_model_viewset.py +130 -23
- wagtail/admin/ui/side_panels.py +3 -1
- wagtail/admin/ui/tables/__init__.py +13 -1
- wagtail/admin/ui/tables/pages.py +17 -6
- wagtail/admin/urls/__init__.py +8 -3
- wagtail/admin/urls/pages.py +5 -0
- wagtail/admin/urls/workflows.py +10 -0
- wagtail/admin/views/chooser.py +20 -24
- wagtail/admin/views/collections.py +17 -1
- wagtail/admin/views/generic/base.py +34 -4
- wagtail/admin/views/generic/history.py +220 -51
- wagtail/admin/views/generic/mixins.py +7 -4
- wagtail/admin/views/generic/models.py +54 -47
- wagtail/admin/views/generic/multiple_upload.py +17 -8
- wagtail/admin/views/generic/usage.py +17 -11
- wagtail/admin/views/home.py +15 -12
- wagtail/admin/views/mixins.py +30 -0
- wagtail/admin/views/pages/choose_parent.py +73 -0
- wagtail/admin/views/pages/history.py +54 -66
- wagtail/admin/views/pages/listing.py +187 -106
- wagtail/admin/views/pages/usage.py +6 -1
- wagtail/admin/views/pages/utils.py +70 -1
- wagtail/admin/views/workflows.py +150 -21
- wagtail/admin/viewsets/model.py +2 -2
- wagtail/admin/viewsets/pages.py +77 -0
- wagtail/admin/wagtail_hooks.py +40 -2
- wagtail/admin/widgets/button.py +10 -10
- wagtail/api/v2/filters.py +1 -1
- wagtail/api/v2/tests/test_pages.py +1 -1
- wagtail/blocks/base.py +18 -9
- wagtail/blocks/field_block.py +9 -7
- wagtail/blocks/list_block.py +16 -6
- wagtail/blocks/static_block.py +3 -0
- wagtail/blocks/stream_block.py +58 -23
- wagtail/blocks/struct_block.py +15 -9
- wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +39 -47
- wagtail/contrib/forms/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/forms/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/forms/models.py +5 -5
- wagtail/contrib/forms/templates/wagtailforms/list_submissions.html +44 -33
- wagtail/contrib/forms/templates/wagtailforms/submissions_index.html +2 -63
- wagtail/contrib/forms/tests/test_models.py +26 -0
- wagtail/contrib/forms/urls.py +6 -0
- wagtail/contrib/forms/views.py +52 -49
- wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.po +3 -3
- wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +34 -42
- wagtail/contrib/redirects/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/redirects/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/redirects/signal_handlers.py +1 -1
- wagtail/contrib/redirects/templates/wagtailredirects/index.html +1 -36
- wagtail/contrib/redirects/templates/wagtailredirects/index_results.html +18 -0
- wagtail/contrib/redirects/templates/wagtailredirects/redirect_target_cell.html +8 -0
- wagtail/contrib/redirects/tests/test_import_command.py +1 -1
- wagtail/contrib/redirects/tests/test_redirects.py +79 -8
- wagtail/contrib/redirects/urls.py +2 -1
- wagtail/contrib/redirects/views.py +85 -55
- wagtail/contrib/search_promotions/admin_urls.py +2 -1
- wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +41 -64
- wagtail/contrib/search_promotions/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/search_promotions/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/search_promotions/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/hr_HR/LC_MESSAGES/django.po +41 -2
- wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.po +9 -3
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/index.html +1 -16
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/index_results.html +11 -0
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/list.html +0 -51
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/results.html +3 -16
- wagtail/contrib/search_promotions/templates/wagtailsearchpromotions/search_promotion_column.html +15 -0
- wagtail/contrib/search_promotions/tests.py +122 -9
- wagtail/contrib/search_promotions/views.py +66 -65
- wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +3 -3
- wagtail/contrib/settings/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/settings/locale/tr/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/tr/LC_MESSAGES/django.po +6 -2
- wagtail/contrib/settings/registry.py +10 -5
- wagtail/contrib/settings/tests/generic/test_admin.py +9 -0
- wagtail/contrib/settings/tests/site_specific/test_admin.py +10 -1
- wagtail/contrib/settings/tests/site_specific/test_model.py +3 -3
- wagtail/contrib/settings/tests/site_specific/test_templates.py +1 -1
- wagtail/contrib/settings/views.py +3 -1
- wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/simple_translation/tests/test_wagtail_hooks.py +2 -2
- wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +7 -7
- wagtail/contrib/styleguide/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/styleguide/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/table_block/blocks.py +2 -2
- wagtail/contrib/table_block/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/ca/LC_MESSAGES/django.po +27 -2
- wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/table_block/locale/hu/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/hu/LC_MESSAGES/django.po +27 -2
- wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.po +27 -2
- wagtail/contrib/table_block/static/table_block/js/table.js +1 -1
- wagtail/contrib/table_block/tests.py +6 -0
- wagtail/contrib/typed_table_block/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/typed_table_block/locale/ca/LC_MESSAGES/django.po +12 -2
- wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/typed_table_block/locale/hu/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/typed_table_block/locale/hu/LC_MESSAGES/django.po +12 -2
- wagtail/contrib/typed_table_block/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/typed_table_block/locale/it/LC_MESSAGES/django.po +12 -2
- wagtail/contrib/typed_table_block/static/typed_table_block/js/typed_table_block.js +1 -1
- wagtail/coreutils.py +3 -2
- wagtail/documents/admin_urls.py +2 -2
- wagtail/documents/locale/en/LC_MESSAGES/django.po +22 -22
- wagtail/documents/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/documents/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/documents/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/hr_HR/LC_MESSAGES/django.po +19 -2
- wagtail/documents/locale/hu/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/hu/LC_MESSAGES/django.po +16 -2
- wagtail/documents/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/it/LC_MESSAGES/django.po +19 -2
- wagtail/documents/migrations/0013_delete_uploadeddocument.py +16 -0
- wagtail/documents/models.py +1 -20
- wagtail/documents/rich_text/__init__.py +11 -7
- wagtail/documents/static/wagtaildocs/js/document-chooser-modal.js +1 -1
- wagtail/documents/static/wagtaildocs/js/document-chooser-telepath.js +1 -1
- wagtail/documents/static/wagtaildocs/js/document-chooser.js +1 -1
- wagtail/documents/templates/wagtaildocs/documents/index.html +0 -16
- wagtail/documents/tests/test_admin_views.py +155 -23
- wagtail/documents/tests/test_collection_privacy.py +55 -1
- wagtail/documents/tests/test_rich_text.py +14 -0
- wagtail/documents/views/documents.py +25 -22
- wagtail/documents/views/multiple.py +6 -7
- wagtail/documents/views/serve.py +16 -1
- wagtail/documents/wagtail_hooks.py +20 -15
- wagtail/embeds/blocks.py +5 -0
- wagtail/embeds/locale/en/LC_MESSAGES/django.po +2 -2
- wagtail/embeds/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/embeds/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/embeds/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/embeds/rich_text/__init__.py +1 -1
- wagtail/embeds/tests/test_rich_text.py +14 -0
- wagtail/embeds/wagtail_hooks.py +4 -14
- wagtail/fields.py +3 -48
- wagtail/images/admin_urls.py +2 -2
- wagtail/images/check_files/wagtail.jpg +0 -0
- wagtail/images/check_files/wagtail.png +0 -0
- wagtail/images/fields.py +2 -0
- wagtail/images/image_operations.py +1 -1
- wagtail/images/locale/ca/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/ca/LC_MESSAGES/django.po +12 -0
- wagtail/images/locale/en/LC_MESSAGES/django.po +33 -45
- wagtail/images/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/images/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/images/locale/hu/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/hu/LC_MESSAGES/django.po +28 -2
- wagtail/images/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/it/LC_MESSAGES/django.po +14 -2
- wagtail/images/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/pt_PT/LC_MESSAGES/django.po +4 -0
- wagtail/images/migrations/0026_delete_uploadedimage.py +16 -0
- wagtail/images/models.py +49 -43
- wagtail/images/rich_text/__init__.py +18 -8
- wagtail/images/static/wagtailimages/js/image-chooser-modal.js +1 -1
- wagtail/images/static/wagtailimages/js/image-chooser-telepath.js +1 -1
- wagtail/images/static/wagtailimages/js/image-chooser.js +1 -1
- wagtail/images/templates/wagtailimages/images/image_listing_header.html +6 -0
- wagtail/images/templates/wagtailimages/images/index.html +11 -51
- wagtail/images/tests/test_admin_views.py +119 -62
- wagtail/images/tests/test_image_operations.py +10 -0
- wagtail/images/tests/test_models.py +35 -33
- wagtail/images/tests/test_rich_text.py +14 -0
- wagtail/images/tests/utils.py +1 -1
- wagtail/images/views/images.py +35 -64
- wagtail/images/views/multiple.py +6 -7
- wagtail/images/wagtail_hooks.py +4 -14
- wagtail/locale/en/LC_MESSAGES/django.po +150 -136
- wagtail/locale/es/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/es/LC_MESSAGES/django.po +3 -2
- wagtail/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/it/LC_MESSAGES/django.po +5 -5
- wagtail/locale/sl/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/sl/LC_MESSAGES/django.po +27 -2
- wagtail/locales/locale/ar/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/be/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/bg/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/ca/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/cs/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/cy/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/da/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/de/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/el/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/es/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/et/LC_MESSAGES/django.po +2 -2
- wagtail/locales/locale/fa/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/fi/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/fr/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/gl/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/he_IL/LC_MESSAGES/django.po +3 -3
- wagtail/locales/locale/hr_HR/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/hu/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/id_ID/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/is_IS/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/it/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/ja/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/ko/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/lt/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/lv/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/mi/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/mn/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/my/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/nb/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/nl/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/pl/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/pt_BR/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/pt_PT/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/ro/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/ru/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/sk_SK/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/sl/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/sv/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/tet/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/th/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/tr/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/tr_TR/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/uk/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/vi/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/zh/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/zh_Hans/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/zh_Hant/LC_MESSAGES/django.po +1 -1
- wagtail/locales/tests.py +18 -3
- wagtail/locales/views.py +0 -1
- wagtail/management/commands/rebuild_references_index.py +3 -1
- wagtail/migrations/0092_alter_collectionviewrestriction_password_and_more.py +33 -0
- wagtail/migrations/0093_uploadedfile.py +53 -0
- wagtail/models/__init__.py +147 -32
- wagtail/models/i18n.py +1 -1
- wagtail/models/{collections.py → media.py} +33 -2
- wagtail/models/reference_index.py +1 -1
- wagtail/models/view_restrictions.py +10 -3
- wagtail/project_template/project_name/settings/base.py +6 -0
- wagtail/project_template/requirements.txt +1 -1
- wagtail/rich_text/__init__.py +25 -8
- wagtail/rich_text/pages.py +19 -8
- wagtail/rich_text/rewriters.py +140 -68
- wagtail/search/backends/database/mysql/mysql.py +3 -3
- wagtail/search/backends/database/postgres/postgres.py +3 -3
- wagtail/search/backends/database/sqlite/sqlite.py +2 -2
- wagtail/search/backends/elasticsearch7.py +4 -0
- wagtail/search/locale/en/LC_MESSAGES/django.po +3 -3
- wagtail/search/tests/test_postgres_backend.py +50 -0
- wagtail/sites/locale/en/LC_MESSAGES/django.po +8 -8
- wagtail/sites/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/sites/locale/ro/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/ro/LC_MESSAGES/django.po +3 -2
- wagtail/sites/tests.py +35 -9
- wagtail/sites/views.py +3 -1
- wagtail/snippets/locale/de/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/de/LC_MESSAGES/django.po +7 -8
- wagtail/snippets/locale/en/LC_MESSAGES/django.po +16 -56
- wagtail/snippets/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/snippets/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/snippets/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/hr_HR/LC_MESSAGES/django.po +6 -2
- wagtail/snippets/locale/lv/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/lv/LC_MESSAGES/django.po +12 -0
- wagtail/snippets/locale/zh_Hant/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/zh_Hant/LC_MESSAGES/django.po +4 -0
- wagtail/snippets/static/wagtailsnippets/js/snippet-chooser-telepath.js +1 -1
- wagtail/snippets/static/wagtailsnippets/js/snippet-chooser.js +1 -1
- wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/publish.html +3 -1
- wagtail/snippets/templates/wagtailsnippets/snippets/action_menu/save.html +3 -1
- wagtail/snippets/templates/wagtailsnippets/snippets/create.html +2 -3
- wagtail/snippets/templates/wagtailsnippets/snippets/edit.html +2 -3
- wagtail/snippets/tests/test_preview.py +13 -2
- wagtail/snippets/tests/test_snippets.py +41 -16
- wagtail/snippets/tests/test_viewset.py +95 -18
- wagtail/snippets/tests/test_workflows.py +12 -0
- wagtail/snippets/views/snippets.py +1 -40
- wagtail/templatetags/wagtailcore_tags.py +1 -1
- wagtail/test/demosite/models.py +1 -1
- wagtail/test/middleware.py +14 -1
- wagtail/test/testapp/fixtures/test.json +20 -0
- wagtail/test/testapp/migrations/0001_squashed_0073_revisablechildmodel_secret_text.py +8 -8
- wagtail/test/testapp/migrations/0023_snippetchoosermodel_full_featured.py +1 -0
- wagtail/test/testapp/migrations/0034_custompermissionmodel.py +44 -0
- wagtail/test/testapp/migrations/0035_modelwithcustommanager.py +30 -0
- wagtail/test/testapp/migrations/0036_complexdefaultstreampage.py +28 -0
- wagtail/test/testapp/models.py +79 -2
- wagtail/test/testapp/templates/tests/custom_docs_password_required.html +10 -0
- wagtail/test/testapp/templates/tests/custom_page_password_required.html +10 -0
- wagtail/test/testapp/views.py +24 -2
- wagtail/test/testapp/wagtail_hooks.py +19 -0
- wagtail/test/utils/wagtail_tests.py +2 -2
- wagtail/tests/test_blocks.py +262 -1
- wagtail/tests/test_migrations.py +1 -1
- wagtail/tests/test_page_model.py +77 -0
- wagtail/tests/test_page_privacy.py +18 -1
- wagtail/tests/test_rich_text.py +95 -5
- wagtail/tests/test_streamfield.py +43 -0
- wagtail/tests/test_utils.py +8 -2
- wagtail/tests/test_views.py +52 -1
- wagtail/tests/test_whitelist.py +7 -7
- wagtail/users/forms.py +3 -1
- wagtail/users/locale/en/LC_MESSAGES/django.po +124 -96
- wagtail/users/locale/fr/LC_MESSAGES/django.po +2 -2
- wagtail/users/locale/he_IL/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/he_IL/LC_MESSAGES/django.po +2 -2
- wagtail/users/locale/hr_HR/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/hr_HR/LC_MESSAGES/django.po +13 -2
- wagtail/users/migrations/0013_userprofile_density.py +23 -0
- wagtail/users/models.py +14 -3
- wagtail/users/templates/wagtailusers/groups/create.html +1 -7
- wagtail/users/templates/wagtailusers/groups/edit.html +1 -13
- wagtail/users/templates/wagtailusers/groups/includes/formatted_permissions.html +46 -2
- wagtail/users/templates/wagtailusers/groups/includes/group_form_js.html +0 -3
- wagtail/users/templates/wagtailusers/users/create.html +1 -14
- wagtail/users/templates/wagtailusers/users/edit.html +1 -14
- wagtail/users/templates/wagtailusers/users/index.html +2 -5
- wagtail/users/templates/wagtailusers/users/index_results.html +3 -13
- wagtail/users/templates/wagtailusers/users/user_cell.html +9 -0
- wagtail/users/templatetags/wagtailusers_tags.py +107 -20
- wagtail/users/tests/test_admin_views.py +669 -90
- wagtail/users/views/groups.py +58 -61
- wagtail/users/views/users.py +211 -92
- wagtail/users/wagtail_hooks.py +6 -38
- wagtail/users/widgets.py +3 -5
- wagtail/utils/text.py +1 -1
- wagtail/views.py +5 -9
- wagtail/whitelist.py +1 -1
- {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/METADATA +5 -6
- {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/RECORD +496 -477
- wagtail/admin/static/wagtailadmin/js/page-editor.js +0 -1
- wagtail/admin/static/wagtailadmin/js/vendor/mousetrap.min.js +0 -1
- wagtail/admin/static/wagtailadmin/js/vendor/urlify.js +0 -1
- wagtail/admin/static/wagtailadmin/js/vendor/xregexp.min.js +0 -1
- wagtail/admin/templates/wagtailadmin/collections/index.html +0 -34
- wagtail/admin/templates/wagtailadmin/pages/revisions/_actions.html +0 -22
- wagtail/admin/templates/wagtailadmin/shared/page_breadcrumbs.html +0 -55
- wagtail/admin/tests/pages/test_dashboard.py +0 -172
- wagtail/contrib/redirects/templates/wagtailredirects/results.html +0 -23
- wagtail/documents/templates/wagtaildocs/documents/list.html +0 -2
- wagtail/search/tests/test_postgres_stemming.py +0 -40
- wagtail/sites/templates/wagtailsites/create.html +0 -7
- wagtail/sites/templates/wagtailsites/edit.html +0 -7
- wagtail/snippets/templates/wagtailsnippets/snippets/revisions/_actions.html +0 -36
- wagtail/users/templates/wagtailusers/users/list.html +0 -62
- wagtail/users/urls/users.py +0 -12
- {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/LICENSE +0 -0
- {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/WHEEL +0 -0
- {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/entry_points.txt +0 -0
- {wagtail-6.0.1.dist-info → wagtail-6.1rc1.dist-info}/top_level.txt +0 -0
|
@@ -20,8 +20,8 @@ msgstr ""
|
|
|
20
20
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
21
21
|
"Content-Transfer-Encoding: 8bit\n"
|
|
22
22
|
"Language: he_IL\n"
|
|
23
|
-
"Plural-Forms: nplurals=
|
|
24
|
-
"1 == 0) ? 1:
|
|
23
|
+
"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % "
|
|
24
|
+
"1 == 0) ? 1: 2;\n"
|
|
25
25
|
|
|
26
26
|
msgid "Collection"
|
|
27
27
|
msgstr "אוסף"
|
|
Binary file
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
# This file is distributed under the same license as the PACKAGE package.
|
|
4
4
|
#
|
|
5
5
|
# Translators:
|
|
6
|
-
# Dino Aljević <dino8890@protonmail.com>, 2020-
|
|
6
|
+
# Dino Aljević <dino8890@protonmail.com>, 2020-2024
|
|
7
7
|
msgid ""
|
|
8
8
|
msgstr ""
|
|
9
9
|
"Project-Id-Version: Wagtail\n"
|
|
10
10
|
"Report-Msgid-Bugs-To: \n"
|
|
11
11
|
"POT-Creation-Date: 2024-01-24 13:51+0000\n"
|
|
12
12
|
"PO-Revision-Date: 2014-02-20 21:06+0000\n"
|
|
13
|
-
"Last-Translator: Dino Aljević <dino8890@protonmail.com>, 2020-
|
|
13
|
+
"Last-Translator: Dino Aljević <dino8890@protonmail.com>, 2020-2024\n"
|
|
14
14
|
"Language-Team: Croatian (Croatia) (http://app.transifex.com/torchbox/wagtail/"
|
|
15
15
|
"language/hr_HR/)\n"
|
|
16
16
|
"MIME-Version: 1.0\n"
|
|
@@ -241,6 +241,23 @@ msgstr ""
|
|
|
241
241
|
"Nemate dokumenata. Zašto ne <a "
|
|
242
242
|
"href=\"%(wagtaildocs_add_document_url)s\">dodate jedan</a>?"
|
|
243
243
|
|
|
244
|
+
#, python-format
|
|
245
|
+
msgid ""
|
|
246
|
+
"<span>%(total)s</span> Document <span class=\"w-sr-only\">created in "
|
|
247
|
+
"%(site_name)s</span>"
|
|
248
|
+
msgid_plural ""
|
|
249
|
+
"<span>%(total)s</span> Documents <span class=\"w-sr-only\">created in "
|
|
250
|
+
"%(site_name)s</span>"
|
|
251
|
+
msgstr[0] ""
|
|
252
|
+
"<span>%(total)s</span> Dokument <span class=\"w-sr-only\">je stvoren u "
|
|
253
|
+
"%(site_name)s</span>"
|
|
254
|
+
msgstr[1] ""
|
|
255
|
+
"<span>%(total)s</span> Dokumenata <span class=\"w-sr-only\">je stvoreno u "
|
|
256
|
+
"%(site_name)s</span>"
|
|
257
|
+
msgstr[2] ""
|
|
258
|
+
"<span>%(total)s</span> Dokumenata <span class=\"w-sr-only\">je stvoreno u "
|
|
259
|
+
"%(site_name)s</span>"
|
|
260
|
+
|
|
244
261
|
msgid "Add multiple documents"
|
|
245
262
|
msgstr "Dodaj više dokumenata"
|
|
246
263
|
|
|
Binary file
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# This file is distributed under the same license as the PACKAGE package.
|
|
4
4
|
#
|
|
5
5
|
# Translators:
|
|
6
|
-
# Istvan Farkas <istvan.farkas@gmail.com>, 2019-2022
|
|
6
|
+
# Istvan Farkas <istvan.farkas@gmail.com>, 2019-2022,2024
|
|
7
7
|
# Laszlo Molnar <lazlowmiller@gmail.com>, 2016
|
|
8
8
|
msgid ""
|
|
9
9
|
msgstr ""
|
|
@@ -11,7 +11,7 @@ msgstr ""
|
|
|
11
11
|
"Report-Msgid-Bugs-To: \n"
|
|
12
12
|
"POT-Creation-Date: 2024-01-24 13:51+0000\n"
|
|
13
13
|
"PO-Revision-Date: 2014-02-20 21:06+0000\n"
|
|
14
|
-
"Last-Translator:
|
|
14
|
+
"Last-Translator: Istvan Farkas <istvan.farkas@gmail.com>, 2019-2022,2024\n"
|
|
15
15
|
"Language-Team: Hungarian (http://app.transifex.com/torchbox/wagtail/language/"
|
|
16
16
|
"hu/)\n"
|
|
17
17
|
"MIME-Version: 1.0\n"
|
|
@@ -231,6 +231,20 @@ msgstr ""
|
|
|
231
231
|
"Még nem töltött fel dokumentumot. Nem szeretne <a "
|
|
232
232
|
"href=\"%(wagtaildocs_add_document_url)s\">feltölteni egyet</a>?"
|
|
233
233
|
|
|
234
|
+
#, python-format
|
|
235
|
+
msgid ""
|
|
236
|
+
"<span>%(total)s</span> Document <span class=\"w-sr-only\">created in "
|
|
237
|
+
"%(site_name)s</span>"
|
|
238
|
+
msgid_plural ""
|
|
239
|
+
"<span>%(total)s</span> Documents <span class=\"w-sr-only\">created in "
|
|
240
|
+
"%(site_name)s</span>"
|
|
241
|
+
msgstr[0] ""
|
|
242
|
+
"<span>%(total)s</span> dokumentum létrehozva ezen az oldalon: <span "
|
|
243
|
+
"class=\"w-sr-only\">%(site_name)s</span>"
|
|
244
|
+
msgstr[1] ""
|
|
245
|
+
"<span>%(total)s</span> dokumentum létrehozva ezen az oldalon: <span "
|
|
246
|
+
"class=\"w-sr-only\">%(site_name)s</span>"
|
|
247
|
+
|
|
234
248
|
msgid "Add multiple documents"
|
|
235
249
|
msgstr "Több dokumentum hozzáadása"
|
|
236
250
|
|
|
Binary file
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# giammi <gian-maria.daffre@giammi.org>, 2018
|
|
8
8
|
# giammi <gian-maria.daffre@giammi.org>, 2018
|
|
9
9
|
# LB (Ben Johnston) <mail@lb.ee>, 2019
|
|
10
|
-
# Marco Badan <marco.badan@gmail.com>, 2021-
|
|
10
|
+
# Marco Badan <marco.badan@gmail.com>, 2021-2024
|
|
11
11
|
# Sandro Badalamenti <sandro@mailinator.com>, 2019
|
|
12
12
|
msgid ""
|
|
13
13
|
msgstr ""
|
|
@@ -15,7 +15,7 @@ msgstr ""
|
|
|
15
15
|
"Report-Msgid-Bugs-To: \n"
|
|
16
16
|
"POT-Creation-Date: 2024-01-24 13:51+0000\n"
|
|
17
17
|
"PO-Revision-Date: 2014-02-20 21:06+0000\n"
|
|
18
|
-
"Last-Translator: Marco Badan <marco.badan@gmail.com>, 2021-
|
|
18
|
+
"Last-Translator: Marco Badan <marco.badan@gmail.com>, 2021-2024\n"
|
|
19
19
|
"Language-Team: Italian (http://app.transifex.com/torchbox/wagtail/language/"
|
|
20
20
|
"it/)\n"
|
|
21
21
|
"MIME-Version: 1.0\n"
|
|
@@ -247,6 +247,23 @@ msgstr ""
|
|
|
247
247
|
"Non hai caricato alcun documento. Perché non <a "
|
|
248
248
|
"href=\"%(wagtaildocs_add_document_url)s\">ne carichi uno adesso</a>?"
|
|
249
249
|
|
|
250
|
+
#, python-format
|
|
251
|
+
msgid ""
|
|
252
|
+
"<span>%(total)s</span> Document <span class=\"w-sr-only\">created in "
|
|
253
|
+
"%(site_name)s</span>"
|
|
254
|
+
msgid_plural ""
|
|
255
|
+
"<span>%(total)s</span> Documents <span class=\"w-sr-only\">created in "
|
|
256
|
+
"%(site_name)s</span>"
|
|
257
|
+
msgstr[0] ""
|
|
258
|
+
"<span>%(total)s</span> documento <span class=\"w-sr-only\">creato in "
|
|
259
|
+
"%(site_name)s</span>"
|
|
260
|
+
msgstr[1] ""
|
|
261
|
+
"<span>%(total)s</span> documenti <span class=\"w-sr-only\">creati in "
|
|
262
|
+
"%(site_name)s</span>"
|
|
263
|
+
msgstr[2] ""
|
|
264
|
+
"<span>%(total)s</span> documenti <span class=\"w-sr-only\">creati in "
|
|
265
|
+
"%(site_name)s</span>"
|
|
266
|
+
|
|
250
267
|
msgid "Add multiple documents"
|
|
251
268
|
msgstr "Aggiungi documenti multipli"
|
|
252
269
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Generated by Django 5.0.1 on 2024-01-30 18:19
|
|
2
|
+
|
|
3
|
+
from django.db import migrations
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
('wagtaildocs', '0012_uploadeddocument'),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.DeleteModel(
|
|
14
|
+
name='UploadedDocument',
|
|
15
|
+
),
|
|
16
|
+
]
|
wagtail/documents/models.py
CHANGED
|
@@ -46,6 +46,7 @@ class AbstractDocument(CollectionMember, index.Indexed, models.Model):
|
|
|
46
46
|
search_fields = CollectionMember.search_fields + [
|
|
47
47
|
index.SearchField("title", boost=10),
|
|
48
48
|
index.AutocompleteField("title"),
|
|
49
|
+
index.FilterField("id"),
|
|
49
50
|
index.FilterField("title"),
|
|
50
51
|
index.RelatedFields(
|
|
51
52
|
"tags",
|
|
@@ -215,23 +216,3 @@ class Document(AbstractDocument):
|
|
|
215
216
|
|
|
216
217
|
# provides args: request
|
|
217
218
|
document_served = Signal()
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
class UploadedDocument(models.Model):
|
|
221
|
-
"""
|
|
222
|
-
Temporary storage for documents uploaded through the multiple doc uploader, when validation
|
|
223
|
-
rules (e.g. required metadata fields) prevent creating a Document object from the document file
|
|
224
|
-
alone. In this case, the document file is stored against this model, to be turned into a
|
|
225
|
-
Document object once the full form has been filled in.
|
|
226
|
-
"""
|
|
227
|
-
|
|
228
|
-
file = models.FileField(upload_to="uploaded_documents", max_length=200)
|
|
229
|
-
uploaded_by_user = models.ForeignKey(
|
|
230
|
-
settings.AUTH_USER_MODEL,
|
|
231
|
-
verbose_name=_("uploaded by user"),
|
|
232
|
-
null=True,
|
|
233
|
-
blank=True,
|
|
234
|
-
editable=False,
|
|
235
|
-
on_delete=models.SET_NULL,
|
|
236
|
-
)
|
|
237
|
-
uploaded_by_user.wagtail_reference_index_ignore = True
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
from
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
2
3
|
from django.utils.html import escape
|
|
3
4
|
|
|
4
5
|
from wagtail.documents import get_document_model
|
|
@@ -15,12 +16,15 @@ class DocumentLinkHandler(LinkHandler):
|
|
|
15
16
|
return get_document_model()
|
|
16
17
|
|
|
17
18
|
@classmethod
|
|
18
|
-
def expand_db_attributes(cls, attrs):
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
def expand_db_attributes(cls, attrs: dict) -> str:
|
|
20
|
+
return cls.expand_db_attributes_many([attrs])[0]
|
|
21
|
+
|
|
22
|
+
@classmethod
|
|
23
|
+
def expand_db_attributes_many(cls, attrs_list: List[dict]) -> List[str]:
|
|
24
|
+
return [
|
|
25
|
+
'<a href="%s">' % escape(doc.url) if doc else "<a>"
|
|
26
|
+
for doc in cls.get_many(attrs_list)
|
|
27
|
+
]
|
|
24
28
|
|
|
25
29
|
@classmethod
|
|
26
30
|
def extract_references(cls, attrs):
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var e,o={
|
|
1
|
+
(()=>{"use strict";var e,o={4186:(e,o,r)=>{var t=r(1669),n=r.n(t),a=r(2614);class l extends a.C4{ajaxifyLinks(e,o){super.ajaxifyLinks(e,o),n()("a.upload-one-now").on("click",(e=>{const o=n()("#id_collection_id").val();o&&n()("#id_document-chooser-upload-collection").val(o),e.preventDefault()}))}}window.DOCUMENT_CHOOSER_MODAL_ONLOAD_HANDLERS=new l({searchInputDelay:50,creationFormFileFieldSelector:"#id_document-chooser-upload-file",creationFormTitleFieldSelector:"#id_document-chooser-upload-title",creationFormTabSelector:"#tab-upload",creationFormEventName:"wagtail:documents-upload"}).getOnLoadHandlers();class i extends a.ZZ{onloadHandlers=window.DOCUMENT_CHOOSER_MODAL_ONLOAD_HANDLERS}window.DocumentChooserModal=i},1669:e=>{e.exports=jQuery}},r={};function t(e){var n=r[e];if(void 0!==n)return n.exports;var a=r[e]={id:e,loaded:!1,exports:{}};return o[e].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}t.m=o,e=[],t.O=(o,r,n,a)=>{if(!r){var l=1/0;for(s=0;s<e.length;s++){for(var[r,n,a]=e[s],i=!0,d=0;d<r.length;d++)(!1&a||l>=a)&&Object.keys(t.O).every((e=>t.O[e](r[d])))?r.splice(d--,1):(i=!1,a<l&&(l=a));if(i){e.splice(s--,1);var c=n();void 0!==c&&(o=c)}}return o}a=a||0;for(var s=e.length;s>0&&e[s-1][2]>a;s--)e[s]=e[s-1];e[s]=[r,n,a]},t.n=e=>{var o=e&&e.__esModule?()=>e.default:()=>e;return t.d(o,{a:o}),o},t.d=(e,o)=>{for(var r in o)t.o(o,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:o[r]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),t.j=884,(()=>{var e={884:0};t.O.j=o=>0===e[o];var o=(o,r)=>{var n,a,[l,i,d]=r,c=0;if(l.some((o=>0!==e[o]))){for(n in i)t.o(i,n)&&(t.m[n]=i[n]);if(d)var s=d(t)}for(o&&o(r);c<l.length;c++)a=l[c],t.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return t.O(s)},r=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];r.forEach(o.bind(null,0)),r.push=o.bind(null,r.push.bind(r))})();var n=t.O(void 0,[321],(()=>t(4186)));n=t.O(n)})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var e,o={
|
|
1
|
+
(()=>{"use strict";var e,o={3819:(e,o,r)=>{var t=r(9465);class n extends t.y{chooserModalClass=DocumentChooserModal}window.DocumentChooser=n;class a extends t._{widgetClass=n;chooserModalClass=DocumentChooserModal}window.telepath.register("wagtail.documents.widgets.DocumentChooser",a)},1669:e=>{e.exports=jQuery}},r={};function t(e){var n=r[e];if(void 0!==n)return n.exports;var a=r[e]={id:e,loaded:!1,exports:{}};return o[e].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}t.m=o,e=[],t.O=(o,r,n,a)=>{if(!r){var l=1/0;for(u=0;u<e.length;u++){for(var[r,n,a]=e[u],i=!0,s=0;s<r.length;s++)(!1&a||l>=a)&&Object.keys(t.O).every((e=>t.O[e](r[s])))?r.splice(s--,1):(i=!1,a<l&&(l=a));if(i){e.splice(u--,1);var d=n();void 0!==d&&(o=d)}}return o}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[r,n,a]},t.n=e=>{var o=e&&e.__esModule?()=>e.default:()=>e;return t.d(o,{a:o}),o},t.d=(e,o)=>{for(var r in o)t.o(o,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:o[r]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),t.j=556,(()=>{var e={556:0};t.O.j=o=>0===e[o];var o=(o,r)=>{var n,a,[l,i,s]=r,d=0;if(l.some((o=>0!==e[o]))){for(n in i)t.o(i,n)&&(t.m[n]=i[n]);if(s)var u=s(t)}for(o&&o(r);d<l.length;d++)a=l[d],t.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return t.O(u)},r=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];r.forEach(o.bind(null,0)),r.push=o.bind(null,r.push.bind(r))})();var n=t.O(void 0,[321],(()=>t(3819)));n=t.O(n)})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var e,r={
|
|
1
|
+
(()=>{"use strict";var e,r={7023:(e,r,o)=>{var t=o(9465);class n extends t.y{chooserModalClass=DocumentChooserModal}window.DocumentChooser=n,window.DocumentChooser=n},1669:e=>{e.exports=jQuery}},o={};function t(e){var n=o[e];if(void 0!==n)return n.exports;var a=o[e]={id:e,loaded:!1,exports:{}};return r[e].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}t.m=r,e=[],t.O=(r,o,n,a)=>{if(!o){var i=1/0;for(u=0;u<e.length;u++){for(var[o,n,a]=e[u],l=!0,s=0;s<o.length;s++)(!1&a||i>=a)&&Object.keys(t.O).every((e=>t.O[e](o[s])))?o.splice(s--,1):(l=!1,a<i&&(i=a));if(l){e.splice(u--,1);var d=n();void 0!==d&&(r=d)}}return r}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[o,n,a]},t.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return t.d(r,{a:r}),r},t.d=(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),t.j=844,(()=>{var e={844:0};t.O.j=r=>0===e[r];var r=(r,o)=>{var n,a,[i,l,s]=o,d=0;if(i.some((r=>0!==e[r]))){for(n in l)t.o(l,n)&&(t.m[n]=l[n]);if(s)var u=s(t)}for(r&&r(o);d<i.length;d++)a=i[d],t.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return t.O(u)},o=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];o.forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o))})();var n=t.O(void 0,[321],(()=>t(7023)));n=t.O(n)})();
|
|
@@ -9,22 +9,6 @@
|
|
|
9
9
|
<script defer src="{% versioned_static 'wagtailadmin/js/bulk-actions.js' %}"></script>
|
|
10
10
|
{% endblock %}
|
|
11
11
|
|
|
12
|
-
{% block listing %}
|
|
13
|
-
<div>
|
|
14
|
-
{% if collections %}
|
|
15
|
-
<form class="nice-padding" action="{{ index_url }}" method="GET" novalidate>
|
|
16
|
-
<ul class="fields">
|
|
17
|
-
<li>{% include "wagtailadmin/shared/collection_chooser.html" %}</li>
|
|
18
|
-
</ul>
|
|
19
|
-
</form>
|
|
20
|
-
{% endif %}
|
|
21
|
-
|
|
22
|
-
<div id="listing-results">
|
|
23
|
-
{% include "wagtaildocs/documents/index_results.html" %}
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
{% endblock %}
|
|
27
|
-
|
|
28
12
|
{% block bulk_actions %}
|
|
29
13
|
{% trans "Select all documents in listing" as select_all_text %}
|
|
30
14
|
{% include 'wagtailadmin/bulk_actions/footer.html' with select_all_obj_text=select_all_text app_label=model_opts.app_label model_name=model_opts.model_name objects=page_obj parent=current_collection.id %}
|
|
@@ -2,6 +2,7 @@ import json
|
|
|
2
2
|
from unittest import mock
|
|
3
3
|
|
|
4
4
|
from django.contrib.auth.models import Group, Permission
|
|
5
|
+
from django.contrib.contenttypes.models import ContentType
|
|
5
6
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
|
6
7
|
from django.test import TestCase, TransactionTestCase
|
|
7
8
|
from django.test.utils import override_settings
|
|
@@ -12,7 +13,13 @@ from django.utils.http import urlencode
|
|
|
12
13
|
from wagtail.admin.admin_url_finder import AdminURLFinder
|
|
13
14
|
from wagtail.documents import get_document_model, models
|
|
14
15
|
from wagtail.documents.tests.utils import get_test_document_file
|
|
15
|
-
from wagtail.models import
|
|
16
|
+
from wagtail.models import (
|
|
17
|
+
Collection,
|
|
18
|
+
GroupCollectionPermission,
|
|
19
|
+
Page,
|
|
20
|
+
ReferenceIndex,
|
|
21
|
+
UploadedFile,
|
|
22
|
+
)
|
|
16
23
|
from wagtail.test.testapp.models import (
|
|
17
24
|
CustomDocument,
|
|
18
25
|
CustomDocumentWithAuthor,
|
|
@@ -86,6 +93,9 @@ class TestDocumentIndexView(WagtailTestUtils, TestCase):
|
|
|
86
93
|
response = self.get()
|
|
87
94
|
self.assertNotContains(response, "<th>Collection</th>", html=True)
|
|
88
95
|
self.assertNotContains(response, "<td>Root</td>", html=True)
|
|
96
|
+
soup = self.get_soup(response.content)
|
|
97
|
+
collection_select = soup.select_one('select[name="collection_id"]')
|
|
98
|
+
self.assertIsNone(collection_select)
|
|
89
99
|
|
|
90
100
|
def test_index_with_collection(self):
|
|
91
101
|
root_collection = Collection.get_first_root_node()
|
|
@@ -97,8 +107,18 @@ class TestDocumentIndexView(WagtailTestUtils, TestCase):
|
|
|
97
107
|
response = self.get()
|
|
98
108
|
self.assertContains(response, "<th>Collection</th>", html=True)
|
|
99
109
|
self.assertContains(response, "<td>Root</td>", html=True)
|
|
110
|
+
|
|
111
|
+
response = self.get()
|
|
112
|
+
soup = self.get_soup(response.content)
|
|
113
|
+
collection_options = soup.select(
|
|
114
|
+
'select[name="collection_id"] option[value]:not(option[value=""])'
|
|
115
|
+
)
|
|
116
|
+
|
|
100
117
|
self.assertEqual(
|
|
101
|
-
[
|
|
118
|
+
[
|
|
119
|
+
collection.get_text(strip=True).lstrip("↳ ")
|
|
120
|
+
for collection in collection_options
|
|
121
|
+
],
|
|
102
122
|
["Root", "Evil plans", "Good plans"],
|
|
103
123
|
)
|
|
104
124
|
|
|
@@ -162,7 +182,7 @@ class TestDocumentIndexView(WagtailTestUtils, TestCase):
|
|
|
162
182
|
def test_search_form_rendered(self):
|
|
163
183
|
response = self.get()
|
|
164
184
|
html = response.content.decode()
|
|
165
|
-
search_url = reverse("wagtaildocs:
|
|
185
|
+
search_url = reverse("wagtaildocs:index_results")
|
|
166
186
|
|
|
167
187
|
# Search form in the header should be rendered.
|
|
168
188
|
self.assertTagInHTML(
|
|
@@ -172,6 +192,101 @@ class TestDocumentIndexView(WagtailTestUtils, TestCase):
|
|
|
172
192
|
allow_extra_attrs=True,
|
|
173
193
|
)
|
|
174
194
|
|
|
195
|
+
def test_tags(self):
|
|
196
|
+
document_two_tags = models.Document.objects.create(
|
|
197
|
+
title="Test document with two tags"
|
|
198
|
+
)
|
|
199
|
+
document_two_tags.tags.add("one", "two")
|
|
200
|
+
|
|
201
|
+
response = self.get()
|
|
202
|
+
self.assertEqual(response.status_code, 200)
|
|
203
|
+
|
|
204
|
+
soup = self.get_soup(response.content)
|
|
205
|
+
current_tags = soup.select("input[name=tag][checked]")
|
|
206
|
+
self.assertFalse(current_tags)
|
|
207
|
+
|
|
208
|
+
tags = soup.select("#id_tag label")
|
|
209
|
+
self.assertCountEqual(
|
|
210
|
+
[tags.get_text(strip=True) for tags in tags],
|
|
211
|
+
["one", "two"],
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
def test_tag_filtering(self):
|
|
215
|
+
models.Document.objects.create(title="Test document with no tags")
|
|
216
|
+
|
|
217
|
+
document_one_tag = models.Document.objects.create(
|
|
218
|
+
title="Test document with one tag"
|
|
219
|
+
)
|
|
220
|
+
document_one_tag.tags.add("one")
|
|
221
|
+
|
|
222
|
+
document_two_tags = models.Document.objects.create(
|
|
223
|
+
title="Test document with two tags"
|
|
224
|
+
)
|
|
225
|
+
document_two_tags.tags.add("one", "two")
|
|
226
|
+
|
|
227
|
+
document_unrelated_tag = models.Document.objects.create(
|
|
228
|
+
title="Test document with a different tag"
|
|
229
|
+
)
|
|
230
|
+
document_unrelated_tag.tags.add("unrelated")
|
|
231
|
+
|
|
232
|
+
# no filtering
|
|
233
|
+
response = self.get()
|
|
234
|
+
# four documents created above
|
|
235
|
+
self.assertEqual(response.context["page_obj"].paginator.count, 4)
|
|
236
|
+
|
|
237
|
+
# filter all documents with tag 'one'
|
|
238
|
+
response = self.get({"tag": "one"})
|
|
239
|
+
self.assertEqual(response.context["page_obj"].paginator.count, 2)
|
|
240
|
+
|
|
241
|
+
# filter all documents with tag 'two'
|
|
242
|
+
response = self.get({"tag": "two"})
|
|
243
|
+
self.assertEqual(response.context["page_obj"].paginator.count, 1)
|
|
244
|
+
|
|
245
|
+
# filter all documents with tag 'one' or 'unrelated'
|
|
246
|
+
response = self.get({"tag": ["one", "unrelated"]})
|
|
247
|
+
self.assertEqual(response.context["page_obj"].paginator.count, 3)
|
|
248
|
+
|
|
249
|
+
soup = self.get_soup(response.content)
|
|
250
|
+
|
|
251
|
+
# Should check the 'one' and 'unrelated' tags checkboxes
|
|
252
|
+
tags = soup.select("#id_tag label")
|
|
253
|
+
self.assertCountEqual(
|
|
254
|
+
[
|
|
255
|
+
tag.get_text(strip=True)
|
|
256
|
+
for tag in tags
|
|
257
|
+
if tag.select_one("input[checked]") is not None
|
|
258
|
+
],
|
|
259
|
+
["one", "unrelated"],
|
|
260
|
+
)
|
|
261
|
+
|
|
262
|
+
# Should render the active filter pills separately for each tag
|
|
263
|
+
active_filters = soup.select('[data-w-active-filter-id="id_tag"]')
|
|
264
|
+
self.assertCountEqual(
|
|
265
|
+
[filter.get_text(separator=" ", strip=True) for filter in active_filters],
|
|
266
|
+
["Tag: one", "Tag: unrelated"],
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
def test_tag_filtering_preserves_other_params(self):
|
|
270
|
+
for i in range(1, 130):
|
|
271
|
+
document = models.Document.objects.create(title="Test document %i" % i)
|
|
272
|
+
if i % 2 != 0:
|
|
273
|
+
document.tags.add("even")
|
|
274
|
+
document.save()
|
|
275
|
+
|
|
276
|
+
response = self.get({"tag": "even", "p": 2})
|
|
277
|
+
self.assertEqual(response.status_code, 200)
|
|
278
|
+
|
|
279
|
+
response_body = response.content.decode("utf8")
|
|
280
|
+
|
|
281
|
+
# prev link should exist and include tag
|
|
282
|
+
self.assertTrue(
|
|
283
|
+
"?p=1&tag=even" in response_body or "?tag=even&p=1" in response_body
|
|
284
|
+
)
|
|
285
|
+
# next link should exist and include tag
|
|
286
|
+
self.assertTrue(
|
|
287
|
+
"?p=3&tag=even" in response_body or "?tag=even&p=3" in response_body
|
|
288
|
+
)
|
|
289
|
+
|
|
175
290
|
|
|
176
291
|
class TestDocumentIndexViewSearch(WagtailTestUtils, TransactionTestCase):
|
|
177
292
|
def setUp(self):
|
|
@@ -225,6 +340,24 @@ class TestDocumentIndexViewSearch(WagtailTestUtils, TransactionTestCase):
|
|
|
225
340
|
self.assertTemplateUsed(response, "wagtaildocs/documents/index.html")
|
|
226
341
|
self.assertContains(response, "There are 50 matches")
|
|
227
342
|
|
|
343
|
+
def test_tag_filtering_with_search_term(self):
|
|
344
|
+
models.Document.objects.create(title="Test document with no tags")
|
|
345
|
+
|
|
346
|
+
document_one_tag = models.Document.objects.create(
|
|
347
|
+
title="Test document with one tag"
|
|
348
|
+
)
|
|
349
|
+
document_one_tag.tags.add("one")
|
|
350
|
+
|
|
351
|
+
document_two_tags = models.Document.objects.create(
|
|
352
|
+
title="Test document with two tags"
|
|
353
|
+
)
|
|
354
|
+
document_two_tags.tags.add("one", "two")
|
|
355
|
+
|
|
356
|
+
# The tag shouldn't be ignored, so the result should be the documents
|
|
357
|
+
# that have the "one" tag and "test" in the title.
|
|
358
|
+
response = self.get({"tag": "one", "q": "test"})
|
|
359
|
+
self.assertEqual(response.context["page_obj"].paginator.count, 2)
|
|
360
|
+
|
|
228
361
|
|
|
229
362
|
class TestDocumentIndexResultsView(WagtailTestUtils, TransactionTestCase):
|
|
230
363
|
def setUp(self):
|
|
@@ -1277,15 +1410,16 @@ class TestMultipleCustomDocumentUploaderWithRequiredField(TestMultipleDocumentUp
|
|
|
1277
1410
|
def setUp(self):
|
|
1278
1411
|
super().setUp()
|
|
1279
1412
|
|
|
1280
|
-
# Create an
|
|
1281
|
-
self.uploaded_document =
|
|
1413
|
+
# Create an UploadedFile for running tests on
|
|
1414
|
+
self.uploaded_document = UploadedFile.objects.create(
|
|
1415
|
+
for_content_type=ContentType.objects.get_for_model(get_document_model()),
|
|
1282
1416
|
file=get_test_document_file(),
|
|
1283
1417
|
uploaded_by_user=self.user,
|
|
1284
1418
|
)
|
|
1285
1419
|
|
|
1286
1420
|
def test_add_post(self):
|
|
1287
1421
|
"""
|
|
1288
|
-
This tests that a POST request to the add view saves the document as an
|
|
1422
|
+
This tests that a POST request to the add view saves the document as an UploadedFile
|
|
1289
1423
|
and returns an edit form
|
|
1290
1424
|
"""
|
|
1291
1425
|
response = self.client.post(
|
|
@@ -1326,11 +1460,11 @@ class TestMultipleCustomDocumentUploaderWithRequiredField(TestMultipleDocumentUp
|
|
|
1326
1460
|
|
|
1327
1461
|
# Check JSON
|
|
1328
1462
|
response_json = json.loads(response.content.decode())
|
|
1329
|
-
self.assertIn("
|
|
1463
|
+
self.assertIn("uploaded_file_id", response_json)
|
|
1330
1464
|
self.assertIn("form", response_json)
|
|
1331
1465
|
self.assertIn("success", response_json)
|
|
1332
1466
|
self.assertEqual(
|
|
1333
|
-
response_json["
|
|
1467
|
+
response_json["uploaded_file_id"],
|
|
1334
1468
|
response.context["uploaded_document"].id,
|
|
1335
1469
|
)
|
|
1336
1470
|
self.assertTrue(response_json["success"])
|
|
@@ -1363,10 +1497,10 @@ class TestMultipleCustomDocumentUploaderWithRequiredField(TestMultipleDocumentUp
|
|
|
1363
1497
|
|
|
1364
1498
|
# Check JSON
|
|
1365
1499
|
response_json = json.loads(response.content.decode())
|
|
1366
|
-
self.assertIn("
|
|
1500
|
+
self.assertIn("uploaded_file_id", response_json)
|
|
1367
1501
|
self.assertIn("form", response_json)
|
|
1368
1502
|
self.assertEqual(
|
|
1369
|
-
response_json["
|
|
1503
|
+
response_json["uploaded_file_id"],
|
|
1370
1504
|
response.context["uploaded_document"].id,
|
|
1371
1505
|
)
|
|
1372
1506
|
self.assertTrue(response_json["success"])
|
|
@@ -1419,11 +1553,11 @@ class TestMultipleCustomDocumentUploaderWithRequiredField(TestMultipleDocumentUp
|
|
|
1419
1553
|
|
|
1420
1554
|
# Check JSON
|
|
1421
1555
|
response_json = json.loads(response.content.decode())
|
|
1422
|
-
self.assertIn("
|
|
1556
|
+
self.assertIn("uploaded_file_id", response_json)
|
|
1423
1557
|
self.assertIn("form", response_json)
|
|
1424
1558
|
self.assertIn("success", response_json)
|
|
1425
1559
|
self.assertEqual(
|
|
1426
|
-
response_json["
|
|
1560
|
+
response_json["uploaded_file_id"],
|
|
1427
1561
|
response.context["uploaded_document"].id,
|
|
1428
1562
|
)
|
|
1429
1563
|
self.assertTrue(response_json["success"])
|
|
@@ -1438,10 +1572,10 @@ class TestMultipleCustomDocumentUploaderWithRequiredField(TestMultipleDocumentUp
|
|
|
1438
1572
|
def test_create_from_upload_invalid_post(self):
|
|
1439
1573
|
"""
|
|
1440
1574
|
Posting an invalid form to the create_from_uploaded_document view throws a validation error
|
|
1441
|
-
and leaves the
|
|
1575
|
+
and leaves the UploadedFile intact
|
|
1442
1576
|
"""
|
|
1443
1577
|
doc_count_before = CustomDocumentWithAuthor.objects.count()
|
|
1444
|
-
uploaded_doc_count_before =
|
|
1578
|
+
uploaded_doc_count_before = UploadedFile.objects.count()
|
|
1445
1579
|
|
|
1446
1580
|
# Send request
|
|
1447
1581
|
response = self.client.post(
|
|
@@ -1459,9 +1593,9 @@ class TestMultipleCustomDocumentUploaderWithRequiredField(TestMultipleDocumentUp
|
|
|
1459
1593
|
)
|
|
1460
1594
|
|
|
1461
1595
|
doc_count_after = CustomDocumentWithAuthor.objects.count()
|
|
1462
|
-
uploaded_doc_count_after =
|
|
1596
|
+
uploaded_doc_count_after = UploadedFile.objects.count()
|
|
1463
1597
|
|
|
1464
|
-
# no changes to document /
|
|
1598
|
+
# no changes to document / UploadedFile count
|
|
1465
1599
|
self.assertEqual(doc_count_after, doc_count_before)
|
|
1466
1600
|
self.assertEqual(uploaded_doc_count_after, uploaded_doc_count_before)
|
|
1467
1601
|
|
|
@@ -1497,7 +1631,7 @@ class TestMultipleCustomDocumentUploaderWithRequiredField(TestMultipleDocumentUp
|
|
|
1497
1631
|
Posting a valid form to the create_from_uploaded_document view will create the document
|
|
1498
1632
|
"""
|
|
1499
1633
|
doc_count_before = CustomDocumentWithAuthor.objects.count()
|
|
1500
|
-
uploaded_doc_count_before =
|
|
1634
|
+
uploaded_doc_count_before = UploadedFile.objects.count()
|
|
1501
1635
|
|
|
1502
1636
|
# Send request
|
|
1503
1637
|
response = self.client.post(
|
|
@@ -1519,7 +1653,7 @@ class TestMultipleCustomDocumentUploaderWithRequiredField(TestMultipleDocumentUp
|
|
|
1519
1653
|
)
|
|
1520
1654
|
|
|
1521
1655
|
doc_count_after = CustomDocumentWithAuthor.objects.count()
|
|
1522
|
-
uploaded_doc_count_after =
|
|
1656
|
+
uploaded_doc_count_after = UploadedFile.objects.count()
|
|
1523
1657
|
|
|
1524
1658
|
# Check response
|
|
1525
1659
|
self.assertEqual(response.status_code, 200)
|
|
@@ -1530,7 +1664,7 @@ class TestMultipleCustomDocumentUploaderWithRequiredField(TestMultipleDocumentUp
|
|
|
1530
1664
|
self.assertIn("doc_id", response_json)
|
|
1531
1665
|
self.assertTrue(response_json["success"])
|
|
1532
1666
|
|
|
1533
|
-
# Document should have been created,
|
|
1667
|
+
# Document should have been created, UploadedFile deleted
|
|
1534
1668
|
self.assertEqual(doc_count_after, doc_count_before + 1)
|
|
1535
1669
|
self.assertEqual(uploaded_doc_count_after, uploaded_doc_count_before - 1)
|
|
1536
1670
|
|
|
@@ -1544,7 +1678,7 @@ class TestMultipleCustomDocumentUploaderWithRequiredField(TestMultipleDocumentUp
|
|
|
1544
1678
|
|
|
1545
1679
|
def test_delete_uploaded_document(self):
|
|
1546
1680
|
"""
|
|
1547
|
-
This tests that a POST request to the delete view deletes the
|
|
1681
|
+
This tests that a POST request to the delete view deletes the UploadedFile
|
|
1548
1682
|
"""
|
|
1549
1683
|
# Send request
|
|
1550
1684
|
response = self.client.post(
|
|
@@ -1559,9 +1693,7 @@ class TestMultipleCustomDocumentUploaderWithRequiredField(TestMultipleDocumentUp
|
|
|
1559
1693
|
|
|
1560
1694
|
# Make sure the document is deleted
|
|
1561
1695
|
self.assertFalse(
|
|
1562
|
-
|
|
1563
|
-
id=self.uploaded_document.id
|
|
1564
|
-
).exists()
|
|
1696
|
+
UploadedFile.objects.filter(id=self.uploaded_document.id).exists()
|
|
1565
1697
|
)
|
|
1566
1698
|
|
|
1567
1699
|
# Check JSON
|