From 9e3054816265facf5a569f4b4fdc45c2ce902a17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomi=20Valentov=C3=A1?= <git@imaniti.org> Date: Wed, 31 Jul 2024 13:49:47 +0200 Subject: [PATCH] finish octopus import --- district/forms.py | 24 +++++++++++++++++++++++- district/models.py | 7 +++++-- shared/people_import.py | 8 ++++++++ shared/templatetags/people_filters.py | 2 +- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/district/forms.py b/district/forms.py index 830224af..8ec53632 100644 --- a/district/forms.py +++ b/district/forms.py @@ -2,6 +2,8 @@ import os import tempfile from shared.forms import JekyllImportForm as SharedJekyllImportForm +from wagtail.admin.forms import WagtailAdminPageForm +from wagtail.models.media import Collection from .tasks import import_jekyll_articles from .tasks import import_people_from_group @@ -25,4 +27,24 @@ class JekyllImportForm(SharedJekyllImportForm): url=self.cleaned_data["jekyll_repo_url"], dry_run=self.cleaned_data["dry_run"], use_git=True, - ) \ No newline at end of file + ) + + +class DistrictPeoplePageForm(WagtailAdminPageForm): + def save(self, *args, **kwargs): + # If anything inside the content field has changed, + # sync Octopus profiles just in case. + if "content" in self.changed_data: + collection_id = self.instance.root_page.image_collection_id + + if collection_id is None: + collection_id = Collection.objects.first().id + + for shortcut in self.instance.get_syncable_octopus_groups(): + import_people_from_group.delay( + self.instance.id, + collection_id, + shortcut, + ) + + return super().save(*args, **kwargs) \ No newline at end of file diff --git a/district/models.py b/district/models.py index c87bab1d..21e60d28 100644 --- a/district/models.py +++ b/district/models.py @@ -71,7 +71,7 @@ from shared.utils import ( ) from . import blocks -from .forms import JekyllImportForm +from .forms import JekyllImportForm, DistrictPeoplePageForm CONTENT_BLOCKS = DEFAULT_CONTENT_BLOCKS + [ ("chart", ChartBlock()), @@ -575,6 +575,8 @@ class DistrictPersonPage(MainPersonPageMixin): class DistrictPeoplePage(MainPeoplePageMixin): + base_form_class = DistrictPeoplePageForm + ### FIELDS content = StreamField( @@ -614,7 +616,8 @@ class DistrictPeoplePage(MainPeoplePageMixin): if block.block_type == "octopus_group": group_shortcuts.append(block.value["group_shortcut"]) - return group_shortcuts + # Don't duplicate groups needlessly + return list(set(group_shortcuts)) class DistrictCalendarPage(SubpageMixin, MetadataPageMixin, CalendarMixin, Page): diff --git a/shared/people_import.py b/shared/people_import.py index 26894a59..8c0fc83f 100644 --- a/shared/people_import.py +++ b/shared/people_import.py @@ -291,6 +291,14 @@ class PeopleGroupImporter: person_page = self.person_page_model.objects.filter(person=person_instance).descendant_of(self.people_parent_page).first() if person_page is None: + if not isinstance(person_instance.display_name, str): + logger.warning( + "Skipping page creation for user %s, they have no display name", + person_instance.username + ) + + continue + person_page = self.person_page_model( person=person_instance, is_automatically_created=True, diff --git a/shared/templatetags/people_filters.py b/shared/templatetags/people_filters.py index 2a172bbc..3d9e822a 100644 --- a/shared/templatetags/people_filters.py +++ b/shared/templatetags/people_filters.py @@ -8,7 +8,7 @@ def is_first_people_type(content, forloop): first_people_type_position = None for position, item in enumerate(content): - if item.block_type in ("people_group", "team_group"): + if item.block_type in ("octopus_group", "people_group", "team_group"): if first_people_type_position is None: first_people_type_position = position break -- GitLab