From ba634614c2e7a47f3bc626b5013bb81dbf141a12 Mon Sep 17 00:00:00 2001 From: OndraRehounek <ondra.rehounek@seznam.cz> Date: Fri, 15 Apr 2022 16:18:05 +0200 Subject: [PATCH] district & region: Fill redmine block on page save --- district/blocks.py | 7 +-- district/models.py | 6 +++ redmine_utils/functions.py | 45 ++++++++++++++++++ redmine_utils/{utils.py => getters.py} | 0 .../commands/update_redmine_issues.py | 47 +------------------ region/blocks.py | 7 +-- region/models.py | 6 +++ shared/blocks.py | 7 +++ 8 files changed, 70 insertions(+), 55 deletions(-) create mode 100644 redmine_utils/functions.py rename redmine_utils/{utils.py => getters.py} (100%) diff --git a/district/blocks.py b/district/blocks.py index 693f061c..60d1573b 100644 --- a/district/blocks.py +++ b/district/blocks.py @@ -12,6 +12,8 @@ from wagtail.core.blocks import ( from wagtail.core.blocks.struct_block import StructBlockValidationError from wagtail.images.blocks import ImageChooserBlock +from shared.blocks import ProgramItemBlock + class AddressBlock(StructBlock): title = CharBlock(label="Titulek", required=True) @@ -213,11 +215,6 @@ class PersonUrlBlock(StructBlock): ) -class ProgramItemBlock(StructBlock): - title = CharBlock(label="Název", required=True) - completion_percentage = IntegerBlock(label="Procento dokonÄŤenĂ", required=True) - - class StaticProgramBlock(StructBlock): headline = CharBlock(label="Titulek bloku", required=True) perex = TextBlock(label="KrátkĂ˝ text pod nadpisem", required=True) diff --git a/district/models.py b/district/models.py index 4c946bd7..e08306c8 100644 --- a/district/models.py +++ b/district/models.py @@ -872,6 +872,12 @@ class DistrictProgramPage(SubpageMixin, MetadataPageMixin, Page): class Meta: verbose_name = "Program" + def save(self, **kwargs): + from redmine_utils.functions import fill_data_from_redmine_for_page + + fill_data_from_redmine_for_page(self) + return super().save(**kwargs) + class DistrictCenterPage(CalendarMixin, SubpageMixin, MetadataPageMixin, Page): ### FIELDS diff --git a/redmine_utils/functions.py b/redmine_utils/functions.py new file mode 100644 index 00000000..f4e12ec8 --- /dev/null +++ b/redmine_utils/functions.py @@ -0,0 +1,45 @@ +from wagtail.core.blocks import StructValue + +from shared.blocks import ProgramItemBlock + +from .getters import get_issue_list, get_issue_overall_percentage + + +def fill_data_from_redmine_for_page(page): + """ + NaplnĂ hondnotu completion_percentage a program_items pro RedmineProgramBlock + pro danou Page (musĂ mĂt atribut content s blockem redmine_program_block) + """ + for program_block in page.content: + if program_block.block_type == "redmine_program_block": + redmine_issue_id = program_block.value["redmine_issue"] + fill_overall_percentage_from_redmine(program_block.value, redmine_issue_id) + fill_program_items_from_redmine(program_block.value, redmine_issue_id) + + +def fill_overall_percentage_from_redmine(program_block_value: dict, issue_id: int): + """ + NaplnĂ hondnotu completion_percentage pro RedmineProgramBlock hodnoutou z Redmine. + """ + program_block_value["completion_percentage"] = get_issue_overall_percentage( + issue_id + ) + + +def fill_program_items_from_redmine(program_block_value: dict, issue_id: int): + """ + NaplnĂ hondnotu program_items pro RedmineProgramBlock. NejdĹ™Ăve hodnotu (list) + promaĹľe a pak z getnĂ˝ch issues naplnĂ pomocĂ StructValue + """ + issue_list = get_issue_list(issue_id) + program_block_value["program_items"].clear() + + for issue in issue_list: + sv = StructValue(ProgramItemBlock) + sv.update( + { + "completion_percentage": issue.get("done_ratio", None), + "title": issue.get("subject", ""), + } + ) + program_block_value["program_items"].append(sv) diff --git a/redmine_utils/utils.py b/redmine_utils/getters.py similarity index 100% rename from redmine_utils/utils.py rename to redmine_utils/getters.py diff --git a/redmine_utils/management/commands/update_redmine_issues.py b/redmine_utils/management/commands/update_redmine_issues.py index cc0ae3a5..b708361b 100644 --- a/redmine_utils/management/commands/update_redmine_issues.py +++ b/redmine_utils/management/commands/update_redmine_issues.py @@ -1,12 +1,9 @@ from django.core.management.base import BaseCommand -from wagtail.core.blocks import StructValue -from district.blocks import ProgramItemBlock from district.models import DistrictProgramPage +from redmine_utils.functions import fill_data_from_redmine_for_page from region.models import RegionProgramPage -from ...utils import get_issue_list, get_issue_overall_percentage - class Command(BaseCommand): def handle(self, *args, **options): @@ -20,47 +17,7 @@ class Command(BaseCommand): for model in updated_models: for page in model.objects.all(): - for program_block in page.content: - if program_block.block_type == "redmine_program_block": - fill_data_from_redmine(program_block.value) - + fill_data_from_redmine_for_page(page) page.save() self.stdout.write("\nUpdating Redmine issues finished") - - -def fill_data_from_redmine(program_block_value: dict): - """ - NaplnĂ hondnotu completion_percentage a program_items pro RedmineProgramBlock - """ - redmine_issue_id = program_block_value["redmine_issue"] - fill_overall_percentage_from_redmine(program_block_value, redmine_issue_id) - fill_program_items_from_redmine(program_block_value, redmine_issue_id) - - -def fill_overall_percentage_from_redmine(program_block_value: dict, issue_id: int): - """ - NaplnĂ hondnotu completion_percentage pro RedmineProgramBlock hodnoutou z Redmine. - """ - program_block_value["completion_percentage"] = get_issue_overall_percentage( - issue_id - ) - - -def fill_program_items_from_redmine(program_block_value: dict, issue_id: int): - """ - NaplnĂ hondnotu program_items pro RedmineProgramBlock. NejdĹ™Ăve hodnotu (list) - promaĹľe a pak z getnĂ˝ch issues naplnĂ pomocĂ StructValue - """ - issue_list = get_issue_list(issue_id) - program_block_value["program_items"].clear() - - for issue in issue_list: - sv = StructValue(ProgramItemBlock) - sv.update( - { - "completion_percentage": issue.get("done_ratio", None), - "title": issue.get("subject", ""), - } - ) - program_block_value["program_items"].append(sv) diff --git a/region/blocks.py b/region/blocks.py index e173f963..9513750f 100644 --- a/region/blocks.py +++ b/region/blocks.py @@ -12,6 +12,8 @@ from wagtail.core.blocks import ( from wagtail.core.blocks.struct_block import StructBlockValidationError from wagtail.images.blocks import ImageChooserBlock +from shared.blocks import ProgramItemBlock + class AddressBlock(StructBlock): title = CharBlock(label="Titulek", required=True) @@ -213,11 +215,6 @@ class PersonUrlBlock(StructBlock): ) -class ProgramItemBlock(StructBlock): - title = CharBlock(label="Název", required=True) - completion_percentage = IntegerBlock(label="Procento dokonÄŤenĂ", required=True) - - class StaticProgramBlock(StructBlock): headline = CharBlock(label="Titulek bloku", required=True) perex = TextBlock(label="KrátkĂ˝ text pod nadpisem", required=True) diff --git a/region/models.py b/region/models.py index d1f6072b..15bf1bdf 100644 --- a/region/models.py +++ b/region/models.py @@ -859,6 +859,12 @@ class RegionProgramPage(SubpageMixin, MetadataPageMixin, Page): class Meta: verbose_name = "Program" + def save(self, **kwargs): + from redmine_utils.functions import fill_data_from_redmine_for_page + + fill_data_from_redmine_for_page(self) + return super().save(**kwargs) + class RegionCenterPage(CalendarMixin, SubpageMixin, MetadataPageMixin, Page): ### FIELDS diff --git a/shared/blocks.py b/shared/blocks.py index c4dbe9ae..846a082a 100644 --- a/shared/blocks.py +++ b/shared/blocks.py @@ -50,3 +50,10 @@ class MenuParentBlock(blocks.StructBlock): class Meta: label = "Podmenu" template = "styleguide/2.3.x/menu_parent.html" + + +class ProgramItemBlock(blocks.StructBlock): + title = blocks.CharBlock(label="Název", required=True) + completion_percentage = blocks.IntegerBlock( + label="Procento dokonÄŤenĂ", required=True + ) -- GitLab