diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c152375762c73f05809dec49d022164e3c43fc4e..6766b5488426ae3dbcdde6f435d272ca142fdd87 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -35,3 +35,8 @@ repos: hooks: - id: black args: ["-t", "py310"] + - repo: https://github.com/PyCQA/autoflake + rev: v2.3.1 + hooks: + - id: autoflake + args: [--remove-all-unused-imports, --in-place] diff --git a/calendar_utils/icalevents/icalparser.py b/calendar_utils/icalevents/icalparser.py index ea02d4e1ff7bee082b5101c38f4d6f6f1084261c..4de4373e76423956b85c1d5f87330742308e4286 100644 --- a/calendar_utils/icalevents/icalparser.py +++ b/calendar_utils/icalevents/icalparser.py @@ -4,7 +4,6 @@ Parse iCal data to Events. from datetime import date, datetime, timedelta # for UID generation -from faulthandler import is_enabled from random import randint from typing import Optional from uuid import uuid4 diff --git a/district/blocks.py b/district/blocks.py index 366440ee84a7992540504a177653822bd5a6981e..e92cd4d47e3dfa5ad927a201931aecc4e4c519e8 100644 --- a/district/blocks.py +++ b/district/blocks.py @@ -303,21 +303,16 @@ class CardLinkWithHeadlineBlock(CardLinkWithHeadlineBlockMixin): label = "Karty odkazů s nadpisem" -class PersonCustomPositionBlock(PersonContactBlockMixin): - position = CharBlock(label="Název pozice", required=False) +class PersonContactBlock(PersonContactBlockMixin): person = PageChooserBlock( label="Osoba", page_type=["district.DistrictPersonPage"], ) - class Meta: - icon = "user" - label = "Osoba s volitelnou pozicí" - class CenterContactBlock(StructBlock): title = CharBlock(label="Titulek", required=True) - contact_list = ListBlock(PersonCustomPositionBlock()) + contact_list = ListBlock(PersonContactBlock()) class Meta: template = "district/blocks/contact_block.html" @@ -368,7 +363,7 @@ class PersonBadgeBlock(StructBlock): class PeopleGroupListBlock(StructBlock): group_title = CharBlock(label="Titulek", required=True) person_list = ListBlock( - PersonCustomPositionBlock(), + PersonContactBlock(), label="List osob", ) @@ -433,7 +428,7 @@ class InteractiveProgramBlock(StructBlock): class StaticProgramBlock(StructBlock): headline = CharBlock(label="Titulek bloku", required=True) perex = TextBlock(label="Krátký text pod nadpisem", required=True) - person = PersonCustomPositionBlock() + person = PersonContactBlock() completion_percentage = IntegerBlock(label="Procento dokončení", required=True) program_items = ListBlock(ProgramItemBlock(), label="Seznam bodů") @@ -446,7 +441,7 @@ class StaticProgramBlock(StructBlock): class RedmineProgramBlock(StructBlock): headline = CharBlock(label="Titulek bloku", required=True) perex = TextBlock(label="Krátký text pod nadpisem", required=True) - person = PersonCustomPositionBlock() + person = PersonContactBlock() redmine_issue = IntegerBlock(label="Číslo Redmine issue", required=True) completion_percentage = IntegerBlock( label="Procento dokončení - bude doplněno automaticky", diff --git a/district/migrations/0005_auto_20211108_2126.py b/district/migrations/0005_auto_20211108_2126.py index 0cabe15ef2ab7b1729c34ddd1d06a19abd80e9aa..6baaec416f55dc305ec50d217c59964b66863ae5 100644 --- a/district/migrations/0005_auto_20211108_2126.py +++ b/district/migrations/0005_auto_20211108_2126.py @@ -9,7 +9,6 @@ import wagtail.images.blocks import wagtailmetadata.models from django.db import migrations, models -import district.blocks import shared.models diff --git a/district/migrations/0131_migrate_headers.py b/district/migrations/0131_migrate_headers.py index 359d42fceadbbc2cb00ac7af7e8be7b2600f7fac..8ab03a5a599ab26871d1debea456ebded8977a89 100644 --- a/district/migrations/0131_migrate_headers.py +++ b/district/migrations/0131_migrate_headers.py @@ -3,7 +3,6 @@ import wagtail from django.db import migrations -from wagtail.fields import StreamField from wagtail.models import Page from district.blocks import FullscreenHeaderBlock diff --git a/district/migrations/0138_auto_20240509_1227.py b/district/migrations/0138_auto_20240509_1227.py index c395e88f7c2e2e2feec6fcc4972b6ae4b15928e4..438f891f712ed2eb472f0dbfbef133c4850aabb2 100644 --- a/district/migrations/0138_auto_20240509_1227.py +++ b/district/migrations/0138_auto_20240509_1227.py @@ -1,6 +1,5 @@ # Generated by Django 5.0.4 on 2024-05-09 10:27 -import wagtail from django.db import migrations from district.blocks import ElectionsCountdownBlock diff --git a/district/migrations/0145_auto_20240509_1642.py b/district/migrations/0145_auto_20240509_1642.py index d7c3e0e34e66559ec44494f3eea6e68d25e16701..6445c110bad4b6a4dd8a111a77812bb08e499a5e 100644 --- a/district/migrations/0145_auto_20240509_1642.py +++ b/district/migrations/0145_auto_20240509_1642.py @@ -4,7 +4,6 @@ import django import wagtail from django.db import migrations, models -from shared.blocks import SocialLinkBlock class Migration(migrations.Migration): diff --git a/district/migrations/0146_auto_20240510_1035.py b/district/migrations/0146_auto_20240510_1035.py index 56304c456f45293312215b9dafae93e68f50731c..711fbfa5ab8056adbcff995580bee9fc3d77569b 100644 --- a/district/migrations/0146_auto_20240510_1035.py +++ b/district/migrations/0146_auto_20240510_1035.py @@ -1,8 +1,6 @@ # Generated by Django 5.0.4 on 2024-05-10 08:35 -import django -import wagtail -from django.db import migrations, models +from django.db import migrations from shared.blocks import SocialLinkBlock diff --git a/district/migrations/0148_auto_20240510_1049.py b/district/migrations/0148_auto_20240510_1049.py index d319278bf8b2c0ac1c71b9420f3dab376d6e170b..df3003ecb8423183cb46ef17bff45b6ae12b8ecf 100644 --- a/district/migrations/0148_auto_20240510_1049.py +++ b/district/migrations/0148_auto_20240510_1049.py @@ -1,8 +1,6 @@ # Generated by Django 5.0.4 on 2024-05-10 08:49 -import django -import wagtail -from django.db import migrations, models +from django.db import migrations from shared.blocks import NavbarMenuItemBlock diff --git a/district/migrations/0161_auto_20240513_1733.py b/district/migrations/0161_auto_20240513_1733.py index 01d33c7cd87225bdf0ec3aa3862058ab4a6f7674..98f143f56267b725c82927660b803013f01afacb 100644 --- a/district/migrations/0161_auto_20240513_1733.py +++ b/district/migrations/0161_auto_20240513_1733.py @@ -2,7 +2,6 @@ import wagtail from django.db import migrations, models -from wagtail.blocks import PageChooserBlock from district.blocks import PeopleGroupBlock diff --git a/district/migrations/0162_add_people_block.py b/district/migrations/0162_add_people_block.py index 7604a12309690c2636868e4e0a451470652eda23..8504ebfaef1f54f7e472f2f0464eff5ea30e8f7c 100644 --- a/district/migrations/0162_add_people_block.py +++ b/district/migrations/0162_add_people_block.py @@ -1,10 +1,9 @@ # Generated by Django 5.0.4 on 2024-05-13 15:33 -import wagtail from django.db import migrations from district.models import DistrictHomePage, DistrictPeoplePage -from shared.blocks import BoxBlock, PeopleOverviewBlock +from shared.blocks import PeopleOverviewBlock def add_people_blocks(apps, schema_editor): diff --git a/district/migrations/0163_auto_20240509_1227.py b/district/migrations/0163_auto_20240509_1227.py index dfd22c07c17d273a4d7e7dd3b44d1a586d35825b..a8b94f07bdf4a32ca2045349cfb45473e82848fe 100644 --- a/district/migrations/0163_auto_20240509_1227.py +++ b/district/migrations/0163_auto_20240509_1227.py @@ -1,6 +1,5 @@ # Generated by Django 5.0.4 on 2024-05-09 10:27 -import wagtail from django.db import migrations from district.blocks import CalendarBlock diff --git a/district/migrations/0170_districtpersonpage_after_name_and_more.py b/district/migrations/0170_districtpersonpage_after_name_and_more.py index 473243336fa8e3e06ed242c03b07aab328fc0f40..fcacba9b4d8c567916d50972d691347e8cd09ce0 100644 --- a/district/migrations/0170_districtpersonpage_after_name_and_more.py +++ b/district/migrations/0170_districtpersonpage_after_name_and_more.py @@ -1,6 +1,6 @@ # Generated by Django 5.0.4 on 2024-05-15 09:09 -from django.db import migrations, models +from django.db import migrations class Migration(migrations.Migration): @@ -8,6 +8,4 @@ class Migration(migrations.Migration): ("district", "0169_alter_districtcontactpage_contact_people_and_more"), ] - operations = [ - - ] + operations = [] diff --git a/district/migrations/0190_remove_districthomepage_calendar_page.py b/district/migrations/0190_remove_districthomepage_calendar_page.py index fd25fb5a84a3b9fdd5ac8c7fa99cb9f171fa3ef6..c2f90d59bed9906ae95452912ad3c79f9c4e617d 100644 --- a/district/migrations/0190_remove_districthomepage_calendar_page.py +++ b/district/migrations/0190_remove_districthomepage_calendar_page.py @@ -4,14 +4,13 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ - ('district', '0189_auto_20240516_1526'), + ("district", "0189_auto_20240516_1526"), ] operations = [ migrations.RemoveField( - model_name='districthomepage', - name='calendar_page', + model_name="districthomepage", + name="calendar_page", ), ] diff --git a/district/migrations/0191_delete_districtpersontag.py b/district/migrations/0191_delete_districtpersontag.py index 1d2a60e0eafb5bcb0f80dc82b7f90f986a4f5bf1..0267ac9de0e3945ca3a01841bc0dd62f0b679e40 100644 --- a/district/migrations/0191_delete_districtpersontag.py +++ b/district/migrations/0191_delete_districtpersontag.py @@ -4,13 +4,12 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ - ('district', '0190_remove_districthomepage_calendar_page'), + ("district", "0190_remove_districthomepage_calendar_page"), ] operations = [ migrations.DeleteModel( - name='DistrictPersonTag', + name="DistrictPersonTag", ), ] diff --git a/district/migrations/0192_remove_districtarticlepage_thumb_image_and_more.py b/district/migrations/0192_remove_districtarticlepage_thumb_image_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..2a50c94f98c3ca3afe48638324fab34f18586220 --- /dev/null +++ b/district/migrations/0192_remove_districtarticlepage_thumb_image_and_more.py @@ -0,0 +1,29 @@ +# Generated by Django 5.0.4 on 2024-05-19 09:18 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('district', '0191_delete_districtpersontag'), + ] + + operations = [ + migrations.RemoveField( + model_name='districtarticlepage', + name='thumb_image', + ), + migrations.RemoveField( + model_name='districtcontactpage', + name='text_backup', + ), + migrations.RemoveField( + model_name='districthomepage', + name='fallback_image', + ), + migrations.RemoveField( + model_name='districtpeoplepage', + name='content', + ), + ] diff --git a/district/migrations/0193_remove_districthomepage_show_pirati_cz_link_and_more.py b/district/migrations/0193_remove_districthomepage_show_pirati_cz_link_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..ce561e2488e1e31eb1e3d0bb24b0e0e01fbf3c4d --- /dev/null +++ b/district/migrations/0193_remove_districthomepage_show_pirati_cz_link_and_more.py @@ -0,0 +1,24 @@ +# Generated by Django 5.0.4 on 2024-05-19 09:49 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('district', '0192_remove_districtarticlepage_thumb_image_and_more'), + ('main', '0085_alter_mainpersonpage_primary_group'), + ] + + operations = [ + migrations.RemoveField( + model_name='districthomepage', + name='show_pirati_cz_link', + ), + migrations.AddField( + model_name='districthomepage', + name='gdpr_and_cookies_page', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='main.mainsimplepage', verbose_name='Stránka pro GDPR'), + ), + ] diff --git a/district/models.py b/district/models.py index 086db4667cdae204fcda8aeb9deff555778fbb0c..dcfb25a946f0714fedb08cd40dd7024da5c873c3 100644 --- a/district/models.py +++ b/district/models.py @@ -5,12 +5,9 @@ from django.core.cache import cache from django.core.exceptions import ValidationError from django.db import models from django.http import HttpResponseNotFound, HttpResponseRedirect -from django.shortcuts import render -from django.utils.safestring import mark_safe -from django.utils.translation import gettext_lazy from modelcluster.contrib.taggit import ClusterTaggableManager from modelcluster.fields import ParentalKey -from taggit.models import Tag, TaggedItemBase +from taggit.models import TaggedItemBase from wagtail.admin.panels import ( FieldPanel, HelpPanel, @@ -24,7 +21,6 @@ from wagtail.blocks import RichTextBlock from wagtail.contrib.routable_page.models import RoutablePageMixin, route from wagtail.fields import RichTextField, StreamField from wagtail.models import Orderable, Page -from wagtail.search import index from wagtailmetadata.models import MetadataPageMixin from calendar_utils.models import CalendarMixin @@ -41,11 +37,8 @@ from shared.blocks import ( ButtonGroupBlock, ChartBlock, FigureBlock, - FullSizeHeaderBlock, - HeadlineBlock, MainButtonBlock, MainButtonGroupBlock, - NavbarMenuItemBlock, NewsBlock, NewsletterSubscriptionBlock, PeopleOverviewBlock, @@ -53,28 +46,19 @@ from shared.blocks import ( ) from shared.const import RICH_TEXT_DEFAULT_FEATURES from shared.models import ( - ArticleMixin, - ArticlesMixin, - ArticlesPageMixin, - ExtendedMetadataHomePageMixin, ExtendedMetadataPageMixin, - FooterMixin, MainArticlePageMixin, MainArticlesPageMixin, MainContactPageMixin, - MainFooterMixin, - MainMenuMixin, + MainHomePageMixin, MainPeoplePageMixin, MainPersonPageMixin, MainSimplePageMixin, - MenuMixin, PdfPageMixin, SharedTaggedDistrictArticle, - SocialMixin, SubpageMixin, ) from shared.utils import make_promote_panels, strip_all_html_tags, trim_to_length -from tuning import admin_help from . import blocks from .forms import JekyllImportForm @@ -89,21 +73,12 @@ CONTENT_BLOCKS = DEFAULT_CONTENT_BLOCKS + [ # --- BEGIN Migrated models --- -class DistrictHomePage( - RoutablePageMixin, - ExtendedMetadataHomePageMixin, - MetadataPageMixin, - CalendarMixin, - MainFooterMixin, - ArticlesMixin, - MainMenuMixin, - SocialMixin, - Page, -): +class DistrictHomePage(CalendarMixin, MainHomePageMixin): ### FIELDS # --- BEGIN New fields --- + # Main section content = StreamField( [ ("fullscreen_header_block", blocks.FullscreenHeaderBlock()), @@ -128,38 +103,16 @@ class DistrictHomePage( use_json_field=True, ) - # footer + # Footer footer_person_list = StreamField( - [("person", blocks.PersonCustomPositionBlock())], + [("person", blocks.PersonContactBlock())], verbose_name="Osoby v zápatí webu", blank=True, max_num=6, use_json_field=True, ) - menu_button_name = models.CharField( - verbose_name="Text na tlačítku pro zapojení", max_length=16 - ) - - menu_button_content = StreamField( - [ - ("navbar_menu_item", NavbarMenuItemBlock()), - ], - verbose_name="Obsah menu pro zapojení se", - blank=True, - use_json_field=True, - ) - - # --- END New fields --- - - calendar_button_text = models.CharField( - "Text tlačítka kalendáře", max_length=256, default="Kalendář" - ) - - show_pirati_cz_link = models.BooleanField( - "Zobrazit v záhlaví odkaz 'pirati.cz'", default=True - ) - + # Settings newsletter_list_id = models.CharField( "ID newsletteru", max_length=20, @@ -173,87 +126,62 @@ class DistrictHomePage( default="Fake news tam nenajdeš, ale dozvíš se, co chystáme doopravdy!", ) - # Extra komentar v paticce - footer_extra_content = RichTextField( - verbose_name="Extra obsah na začátku patičky", - blank=True, - features=RICH_TEXT_DEFAULT_FEATURES, + calendar_button_text = models.CharField( + "Text tlačítka kalendáře", max_length=256, default="Kalendář" ) - # settings - matomo_id = models.IntegerField( - "Matomo ID pro sledování návštěvnosti", blank=True, null=True - ) - fallback_image = models.ForeignKey( - "wagtailimages.Image", + gdpr_and_cookies_page = models.ForeignKey( + # Keep this a reference to the main website's GDPR page. Not ideal, but works (for now). + "main.MainSimplePage", + verbose_name="Stránka pro GDPR", on_delete=models.PROTECT, + blank=True, null=True, - related_name="+", ) - ### PANELS - - content_panels = Page.content_panels + [ - FieldPanel("content"), - ] + # --- END New fields --- - menu_panels = ( - [FieldPanel("title_suffix")] - + SocialMixin.menu_panels - + MainMenuMixin.menu_panels - + [ - MultiFieldPanel( - [ - FieldPanel("menu_button_name"), - FieldPanel("menu_button_content"), - ], - heading="Tlačítko pro zapojení", - ) - ] + # Extra komentar v paticce + footer_extra_content = RichTextField( + verbose_name="Extra obsah na začátku patičky", + blank=True, + features=RICH_TEXT_DEFAULT_FEATURES, ) - promote_panels = make_promote_panels(admin_help.build(admin_help.IMPORTANT_TITLE)) + ### PANELS - footer_panels = [ - FieldPanel("footer_person_list"), + menu_panels = [FieldPanel("title_suffix")] + MainHomePageMixin.menu_panels + + footer_panels = MainHomePageMixin.footer_panels + [ FieldPanel("footer_extra_content"), - FieldPanel("footer_other_links"), ] - settings_panels = [ - FieldPanel("matomo_id"), - MultiFieldPanel( - [ - FieldPanel("show_pirati_cz_link"), - ], - gettext_lazy("Odkazy na webu"), - ), + settings_panels = MainHomePageMixin.settings_panels + [ MultiFieldPanel( [ FieldPanel("calendar_button_text"), FieldPanel("calendar_url"), ], - gettext_lazy("Kalendář"), + "Kalendář", ), MultiFieldPanel( [ FieldPanel("newsletter_list_id"), FieldPanel("newsletter_description"), ], - gettext_lazy("Formulář pro odběr newsletteru"), + "Formulář pro odběr newsletteru", ), - FieldPanel("fallback_image"), ] ### EDIT HANDLERS edit_handler = TabbedInterface( [ - ObjectList(content_panels, heading="Obsah"), + ObjectList(MainHomePageMixin.content_panels, heading="Obsah"), ObjectList(menu_panels, heading="Hlavička"), ObjectList(footer_panels, heading="Patička"), ObjectList(settings_panels, heading="Nastavení"), - ObjectList(promote_panels, heading="Propagace"), + ObjectList(MainHomePageMixin.promote_panels, heading="Propagace"), ] ) @@ -279,35 +207,6 @@ class DistrictHomePage( class Meta: verbose_name = "Oblastní sdružení" - @route(r"^sdilene/$", name="shared") - def shared(self, request): - return self.setup_article_page_context(request) - - def get_context(self, request, *args, **kwargs): - context = super().get_context(request, args, kwargs) - - context["article_data_list"] = self.materialize_shared_articles_query( - self.append_all_shared_articles_query( - DistrictArticlePage.objects.live().all() - ).order_by("-union_timestamp")[:3] - ) - - return context - - def _first_subpage_of_type(self, page_type) -> Page or None: - try: - return self.get_descendants().type(page_type).live().specific()[0] - except IndexError: - return None - - @property - def articles(self): - return self.materialize_shared_articles_query( - self.append_all_shared_articles_query( - DistrictArticlePage.objects.descendant_of(self) - )[:6] - ) - @property def articles_page_model(self): return DistrictArticlesPage @@ -317,36 +216,8 @@ class DistrictHomePage( return DistrictArticlePage @property - def articles_page(self): - return self._first_subpage_of_type(self.articles_page_model) - - @property - def center_page(self): - return self._first_subpage_of_type(DistrictCenterPage) - - @property - def contact_page(self): - return self._first_subpage_of_type(DistrictContactPage) - - @property - def election_page(self): - return self._first_subpage_of_type(DistrictElectionRootPage) - - @staticmethod - def get_404_response(request): - return render(request, "district/404.html", status=404) - - @property - def people_page(self): - return self._first_subpage_of_type(DistrictPeoplePage) - - @property - def program_page(self): - return self._first_subpage_of_type(DistrictProgramPage) - - @property - def interactive_program_page(self): - return self._first_subpage_of_type(DistrictInteractiveProgramPage) + def search_page_model(self): + return DistrictArticlePage @property def calendar_page(self): @@ -360,15 +231,6 @@ class DistrictHomePage( def has_calendar(self): return self.calendar_id is not None - @property - def newsletter_info(self): - if not self.newsletter_list_id: - return None - return { - "list_id": self.newsletter_list_id, - "description": self.newsletter_description, - } - class DistrictArticleTag(TaggedItemBase): content_object = ParentalKey( @@ -390,14 +252,6 @@ class DistrictArticlePage(MainArticlePageMixin): through=SharedTaggedDistrictArticle, blank=True, ) - thumb_image = models.ForeignKey( - "wagtailimages.Image", - on_delete=models.PROTECT, - blank=True, - null=True, - verbose_name="náhledový obrázek", - related_name="thumb_image", - ) ### RELATIONS @@ -417,10 +271,8 @@ class DistrictArticlesPage(MainArticlesPageMixin): class DistrictContactPage(MainContactPageMixin): ### FIELDS - text_backup = RichTextField("Text", blank=True, features=RICH_TEXT_DEFAULT_FEATURES) - contact_people = StreamField( - [("item", blocks.PersonCustomPositionBlock())], + [("item", blocks.PersonContactBlock())], verbose_name="Kontaktní osoby", blank=True, use_json_field=True, @@ -431,14 +283,10 @@ class DistrictContactPage(MainContactPageMixin): parent_page_types = ["district.DistrictHomePage"] subpage_types = [] - ### OTHERS - - class Meta: - verbose_name = "Kontakty" - class DistrictPersonPage(MainPersonPageMixin): ### FIELDS + job = models.CharField( "Povolání", max_length=128, @@ -519,21 +367,6 @@ class DistrictPersonPage(MainPersonPageMixin): class DistrictPeoplePage(MainPeoplePageMixin): - content = StreamField( - [ - ( - "text", - blocks.RichTextBlock( - label="Textový editor", features=RICH_TEXT_DEFAULT_FEATURES - ), - ), - ("people_group", blocks.PeopleGroupListBlock()), - ], - verbose_name="Obsah stránky", - blank=True, - use_json_field=True, - ) - people = StreamField( [ ("people_group", blocks.PeopleGroupBlock(label="Seznam osob")), @@ -544,22 +377,11 @@ class DistrictPeoplePage(MainPeoplePageMixin): use_json_field=True, ) - content_panels = Page.content_panels + [ - FieldPanel("perex_col_1"), - FieldPanel("perex_col_2"), - FieldPanel("people"), - FieldPanel("content"), - ] - parent_page_types = ["district.DistrictHomePage"] subpage_types = ["district.DistrictPersonPage"] class DistrictCalendarPage(SubpageMixin, MetadataPageMixin, CalendarMixin, Page): - """ - Page for displaying full calendar - """ - ### PANELS content_panels = Page.content_panels + [FieldPanel("calendar_url")] @@ -579,10 +401,6 @@ class DistrictCalendarPage(SubpageMixin, MetadataPageMixin, CalendarMixin, Page) class DistrictPdfPage(PdfPageMixin, MetadataPageMixin, SubpageMixin, Page): - """ - Single pdf page display - """ - ### RELATIONS parent_page_types = [ @@ -601,10 +419,6 @@ class DistrictPdfPage(PdfPageMixin, MetadataPageMixin, SubpageMixin, Page): verbose_name = "PDF stránka" -class DistrictNewProgramPage(): - pass - - # --- END Migrated models --- @@ -1473,6 +1287,7 @@ class DistrictGeoFeatureCollectionCategory(Orderable): def make_feature_index_cache_key(feature: "DistrictGeoFeatureDetailPage"): return f"DistrictGeoFeatureDetailPage::{feature.id}::index" + class DistrictGeoFeatureDetailPage( ExtendedMetadataPageMixin, MetadataPageMixin, SubpageMixin, Page, Orderable ): diff --git a/donate/models.py b/donate/models.py index eb2dacfdc13b79850c7ba1bc47fd87c3540ab3a7..0a1163ab545966bf58a9874920c88a4411bfef4f 100644 --- a/donate/models.py +++ b/donate/models.py @@ -16,7 +16,6 @@ from wagtail.admin.panels import ( PublishingPanel, TabbedInterface, ) -from wagtail.blocks import URLBlock from wagtail.fields import RichTextField, StreamField from wagtail.images.blocks import ImageChooserBlock from wagtail.models import Orderable, Page diff --git a/elections/blocks.py b/elections/blocks.py index 6f011bcb3d8b0315dffd9879abd2f0a2084ce85e..e5b2cae87acacbb7df64bc43b82066c7c2bf42be 100644 --- a/elections/blocks.py +++ b/elections/blocks.py @@ -3,7 +3,6 @@ from wagtail.blocks import ( IntegerBlock, ListBlock, PageChooserBlock, - RichTextBlock, StructBlock, TextBlock, URLBlock, diff --git a/elections/models.py b/elections/models.py index ec2ea82cf67a887aed409dc6f271006b74dcfdb6..1175e984b2a16b5e8204739c8499b9d0f2ef02ec 100644 --- a/elections/models.py +++ b/elections/models.py @@ -1,38 +1,24 @@ -from dateutil.relativedelta import relativedelta -from django.conf import settings -from django.contrib import messages -from django.core.paginator import Paginator from django.db import models -from django.forms.models import model_to_dict -from django.http import HttpResponseRedirect, JsonResponse -from django.shortcuts import redirect, render +from django.shortcuts import redirect from django.template.loader import render_to_string -from django.utils import timezone from modelcluster.contrib.taggit import ClusterTaggableManager from modelcluster.fields import ParentalKey -from taggit.models import Tag, TaggedItemBase +from taggit.models import TaggedItemBase from wagtail.admin.panels import ( FieldPanel, - HelpPanel, - MultiFieldPanel, ObjectList, - PageChooserPanel, TabbedInterface, ) -from wagtail.blocks import PageChooserBlock, RichTextBlock -from wagtail.contrib.routable_page.models import RoutablePageMixin, route +from wagtail.blocks import RichTextBlock +from wagtail.contrib.routable_page.models import route from wagtail.fields import RichTextField, StreamField from wagtail.models import Page -from wagtail.search import index from wagtailmetadata.models import MetadataPageMixin from calendar_utils.models import CalendarMixin from shared import blocks as shared_blocks -from shared.forms import SubscribeForm from shared.models import ( # MenuMixin, ArticleMixin, - ArticlesMixin, - ArticlesPageMixin, ExtendedMetadataHomePageMixin, ExtendedMetadataPageMixin, MainArticlePageMixin, @@ -45,8 +31,7 @@ from shared.models import ( # MenuMixin, SharedTaggedElectionsArticle, SubpageMixin, ) -from shared.utils import make_promote_panels, subscribe_to_newsletter -from tuning import admin_help +from shared.utils import make_promote_panels from . import blocks from .forms import JekyllImportForm diff --git a/elections2021/parser.py b/elections2021/parser.py index e4db916e42424cba8ba007b7d055cc0f4328f478..cab8289b1b40d9c7c6b9aa24de04fb7906d6cfa4 100644 --- a/elections2021/parser.py +++ b/elections2021/parser.py @@ -4,7 +4,6 @@ import sys import urllib from collections import defaultdict -import bleach import bs4 from django.utils.text import slugify diff --git a/green_deal/models.py b/green_deal/models.py index c428ed66074461e2dd0412d5018225441b464952..49130079e807871fe421f0c992b41d5b55292c79 100644 --- a/green_deal/models.py +++ b/green_deal/models.py @@ -1,5 +1,4 @@ from django.db import models -from django.utils import timezone from django.utils.translation import gettext_lazy from wagtail import blocks from wagtail.admin.panels import CommentPanel, FieldPanel, HelpPanel, MultiFieldPanel diff --git a/instagram_utils/management/commands/update_instagram.py b/instagram_utils/management/commands/update_instagram.py index fe532e24a7713a8fc4b5d4992ed5e71a614119bb..ab7e57dfb5721d275d13f0244a21363eb7171861 100644 --- a/instagram_utils/management/commands/update_instagram.py +++ b/instagram_utils/management/commands/update_instagram.py @@ -1,4 +1,3 @@ -from django.conf import settings from django.core.management.base import BaseCommand from ...services import InstagramDownloadService diff --git a/instagram_utils/models.py b/instagram_utils/models.py index 2b340c314ff4c65a6002d87bbb951f9255204138..3a3a874a2a94cf8d20a1a8f0a798b769dee8c239 100644 --- a/instagram_utils/models.py +++ b/instagram_utils/models.py @@ -3,7 +3,6 @@ import logging import mimetypes import uuid -from django.conf import settings from django.db import models logger = logging.getLogger() diff --git a/main/blocks.py b/main/blocks.py index 430921cdeaf749c7024c5bb7b020ff937d3e84e0..1a62cee03803f17dde4441b5ff2169024d09dcfd 100644 --- a/main/blocks.py +++ b/main/blocks.py @@ -1,7 +1,6 @@ from django.utils.text import slugify from wagtail.blocks import ( CharBlock, - ChoiceBlock, ListBlock, PageChooserBlock, RichTextBlock, @@ -12,11 +11,9 @@ from wagtail.blocks import ( from wagtail.images.blocks import ImageChooserBlock from shared.blocks import ( - PROGRAM_RICH_TEXT_FEATURES, BoxBlock, CardLinkBlockMixin, CardLinkWithHeadlineBlockMixin, - CTAMixin, PersonContactBlockMixin, ProgramGroupBlockMixin, ) diff --git a/main/models.py b/main/models.py index 33bbabd9a6e552cbddb633ccc99f62abe7e8d833..cba78373b97a8cf40651991fdfcf5806b165649a 100644 --- a/main/models.py +++ b/main/models.py @@ -1,37 +1,19 @@ -from dateutil.relativedelta import relativedelta -from django.conf import settings -from django.contrib import messages -from django.core.paginator import Paginator from django.db import models -from django.forms.models import model_to_dict -from django.http import HttpResponseRedirect, JsonResponse -from django.shortcuts import render -from django.utils import timezone from modelcluster.contrib.taggit import ClusterTaggableManager from modelcluster.fields import ParentalKey -from taggit.models import Tag, TaggedItemBase +from taggit.models import TaggedItemBase from wagtail.admin.panels import ( FieldPanel, - HelpPanel, - MultiFieldPanel, - ObjectList, - PageChooserPanel, - TabbedInterface, ) -from wagtail.blocks import PageChooserBlock, RichTextBlock -from wagtail.contrib.routable_page.models import RoutablePageMixin, route +from wagtail.blocks import RichTextBlock +from wagtail.contrib.routable_page.models import route from wagtail.fields import RichTextField, StreamField from wagtail.models import Page -from wagtail.search import index from wagtailmetadata.models import MetadataPageMixin -from calendar_utils.models import CalendarMixin from shared import blocks as shared_blocks -from shared.forms import SubscribeForm from shared.models import ( # MenuMixin, ArticleMixin, - ArticlesMixin, - ArticlesPageMixin, ExtendedMetadataHomePageMixin, ExtendedMetadataPageMixin, MainArticlePageMixin, @@ -40,15 +22,14 @@ from shared.models import ( # MenuMixin, MainHomePageMixin, MainPeoplePageMixin, MainPersonPageMixin, + MainProgramPageMixin, MainSearchPageMixin, MainSimplePageMixin, - MainProgramPageMixin, PageInMenuMixin, SharedTaggedMainArticle, SubpageMixin, ) -from shared.utils import make_promote_panels, subscribe_to_newsletter -from tuning import admin_help +from shared.utils import make_promote_panels from . import blocks from .forms import JekyllImportForm @@ -214,6 +195,12 @@ class MainPeoplePage(MainPeoplePageMixin): use_json_field=True, ) + parent_page_types = ["main.MainHomePage"] + subpage_types = [ + "main.MainPersonPage", + "main.MainSimplePage", + ] + class MainPersonPage(MainPersonPageMixin): ### RELATIONS diff --git a/shared/blocks/__init__.py b/shared/blocks/__init__.py index d31603b8b661dd6f3e2770acf986a701f9063e6c..f4c0ba1a36a73602ab0328b40a32766caeee4544 100644 --- a/shared/blocks/__init__.py +++ b/shared/blocks/__init__.py @@ -1,2 +1,2 @@ -from .base import * -from .main import * +from .base import * # noqa +from .main import * # noqa diff --git a/shared/blocks/base.py b/shared/blocks/base.py index f109f938455be7b8e5f71456423a7a88462a72a5..b10c28a80ce10552d0186d9703c5b6115b219d8b 100644 --- a/shared/blocks/base.py +++ b/shared/blocks/base.py @@ -9,7 +9,6 @@ import requests from django.core.cache import cache from django.core.exceptions import ValidationError from django.core.files.images import ImageFile -from django.db import models from django.forms.utils import ErrorList from wagtail import blocks from wagtail.blocks.struct_block import StructBlockValidationError diff --git a/shared/blocks/main.py b/shared/blocks/main.py index c6711f9c3610fb28cd1b6f843d0f9c973e33c7da..397cbc5039e78cf48992b603da1f9d5bf763a8c4 100644 --- a/shared/blocks/main.py +++ b/shared/blocks/main.py @@ -2,7 +2,6 @@ from wagtail import blocks from wagtail.blocks import ( CharBlock, ListBlock, - PageChooserBlock, RichTextBlock, StructBlock, TextBlock, diff --git a/shared/feeds.py b/shared/feeds.py index a60c7527b5a899145ba058ae68778eea302d10cc..46cdec90b0a02be02c4bd9fc4f355b23db26137b 100644 --- a/shared/feeds.py +++ b/shared/feeds.py @@ -3,7 +3,6 @@ from datetime import datetime from django.contrib.syndication.views import Feed from django.template.loader import render_to_string -from django.urls import reverse class LatestArticlesFeed(Feed): diff --git a/shared/jekyll_import.py b/shared/jekyll_import.py index 58451065d958f3be37a862f0038afb1d4e8896b6..0dbe56218995eabb84047c36b1207f90d9d97162 100644 --- a/shared/jekyll_import.py +++ b/shared/jekyll_import.py @@ -19,7 +19,6 @@ import bleach import markdown.serializers import yaml from django.core.files.images import ImageFile -from django.utils import timezone from markdown import Markdown from markdown.extensions import Extension from markdown.inlinepatterns import InlineProcessor diff --git a/shared/models/__init__.py b/shared/models/__init__.py index d31603b8b661dd6f3e2770acf986a701f9063e6c..f4c0ba1a36a73602ab0328b40a32766caeee4544 100644 --- a/shared/models/__init__.py +++ b/shared/models/__init__.py @@ -1,2 +1,2 @@ -from .base import * -from .main import * +from .base import * # noqa +from .main import * # noqa diff --git a/shared/models/main.py b/shared/models/main.py index 65a100bd3fcc58005f160847ad7f2cdd46d2783f..6bd54cccc77801b86b9f3af6ab65616db42542d1 100644 --- a/shared/models/main.py +++ b/shared/models/main.py @@ -1,18 +1,12 @@ import datetime from functools import cached_property -from dateutil.relativedelta import relativedelta from django.conf import settings from django.contrib import messages -from django.core.paginator import Paginator from django.db import models -from django.forms.models import model_to_dict from django.http import HttpResponseRedirect, JsonResponse from django.shortcuts import render -from django.utils import timezone -from modelcluster.contrib.taggit import ClusterTaggableManager -from modelcluster.fields import ParentalKey -from taggit.models import Tag, TaggedItemBase +from taggit.models import Tag from wagtail.admin.panels import ( FieldPanel, HelpPanel, @@ -36,12 +30,11 @@ from shared.blocks import ( NavbarMenuItemBlock, OtherLinksBlock, PersonContactBoxBlock, - SocialLinkBlock, - TwoTextColumnBlock, ProgramGroupBlock, ProgramGroupBlockPopout, + SocialLinkBlock, + TwoTextColumnBlock, ) -from shared.const import MONTH_NAMES from shared.forms import SubscribeForm from shared.utils import make_promote_panels, subscribe_to_newsletter from tuning import admin_help @@ -212,12 +205,8 @@ class MainHomePageMixin( content_panels = Page.content_panels + [ FieldPanel("content"), - FieldPanel("footer_other_links"), - FieldPanel("footer_person_list"), ] - promote_panels = make_promote_panels(admin_help.build(admin_help.IMPORTANT_TITLE)) - menu_panels = ( MainMenuMixin.menu_panels + SocialMixin.menu_panels @@ -227,6 +216,13 @@ class MainHomePageMixin( ] ) + footer_panels = [ + FieldPanel("footer_other_links"), + FieldPanel("footer_person_list"), + ] + + promote_panels = make_promote_panels(admin_help.build(admin_help.IMPORTANT_TITLE)) + settings_panels = [ PageChooserPanel("gdpr_and_cookies_page"), FieldPanel("matomo_id"), @@ -237,9 +233,10 @@ class MainHomePageMixin( edit_handler = TabbedInterface( [ ObjectList(content_panels, heading="Obsah"), - ObjectList(promote_panels, heading="Propagovat"), + ObjectList(menu_panels, heading="Hlavička"), + ObjectList(footer_panels, heading="Patička"), ObjectList(settings_panels, heading="Nastavení"), - ObjectList(menu_panels, heading="Menu"), + ObjectList(promote_panels, heading="Propagace"), ] ) @@ -839,11 +836,9 @@ class MainPeoplePageMixin( ### RELATIONS - parent_page_types = ["main.MainHomePage"] - subpage_types = [ - "main.MainPersonPage", - "main.MainSimplePage", - ] + # NOTE: Must be overridden + parent_page_types = [] + subpage_types = [] ### OTHERS @@ -981,7 +976,9 @@ class MainPersonPageMixin( # ordering = ("title",) -class MainProgramPageMixin(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, PageInMenuMixin, Page): +class MainProgramPageMixin( + ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, PageInMenuMixin, Page +): ### FIELDS program = StreamField( diff --git a/uniweb/blocks.py b/uniweb/blocks.py index b2b34d3d9c363c6e88f42c3244c4c372eb91aa31..fc77b839924c9c0393cf9ffc18a47d009a37c8df 100644 --- a/uniweb/blocks.py +++ b/uniweb/blocks.py @@ -9,7 +9,6 @@ from wagtail.blocks import ( ) from wagtail.contrib.table_block.blocks import TableBlock as ContribTableBlock -from shared.blocks import CardLinkBlockMixin, CardLinkWithHeadlineBlockMixin class AlignedTableBlock(StructBlock): @@ -72,7 +71,7 @@ class PersonUrlBlock(StructBlock): ) -class PersonCustomPositionBlock(StructBlock): +class PersonContactBlock(StructBlock): position = CharBlock(label="Název pozice", required=False) person = PageChooserBlock( label="Osoba", @@ -87,7 +86,7 @@ class PersonCustomPositionBlock(StructBlock): class PeopleGroupListBlock(StructBlock): group_title = CharBlock(label="Titulek", required=True) person_list = ListBlock( - PersonCustomPositionBlock(), + PersonContactBlock(), label="List osob", )