From ba05b0fa5390bcbe0447ef2dabf495f56a4e5a9d Mon Sep 17 00:00:00 2001 From: Hlamalani Date: Mon, 17 Feb 2025 09:17:28 +0200 Subject: [PATCH 1/8] code refractor --- home/import_content_pages.py | 199 +++++++++++++++++++++++++---------- 1 file changed, 141 insertions(+), 58 deletions(-) diff --git a/home/import_content_pages.py b/home/import_content_pages.py index 6c6aca0b..52e8baa4 100644 --- a/home/import_content_pages.py +++ b/home/import_content_pages.py @@ -60,6 +60,9 @@ def __init__( self.go_to_page_list_items: dict[PageId, dict[int, list[dict[str, Any]]]] = ( defaultdict(lambda: defaultdict(list)) ) + self.go_to_page: dict[PageId, dict[int, list[dict[str, Any]]]] = ( + defaultdict(lambda: defaultdict(list)) + ) def locale_from_display_name(self, langname: str) -> Locale: if langname not in self.locale_map: @@ -339,6 +342,72 @@ def add_variation_to_shadow_content_page_from_row( ) ) + def _get_shadow_page(self, slug: str, locale: Locale): + + try: + return self.shadow_pages[(slug, locale)] + except KeyError: + raise ImportException( + f"This is a message for page with slug '{slug}' and locale '{locale}', but no such page exists" + ) + + def _get_form(self, slug: str, locale: Locale, title: str, page_slug: str, field: str): + try: + return Assessment.objects.get(slug=slug, locale=locale) + except Assessment.DoesNotExist: + raise ImportException( + f"No form found with slug '{slug}' and locale '{locale}' for go_to_form {field} '{title}' on page '{page_slug}'" + ) + + def _create_interactive_items(self, row_field, page, slug, locale, field_name) -> list: + messages = [] + for index, field in enumerate(row_field): + if field["type"] == "next_message": + messages.append( + { + "id": str(uuid4()), + "type": field["type"], + "value": {"title": field["title"]}, + } + ) + elif field["type"] == "go_to_page": + field["index"] = index + if field_name == "button": + go_to_page = self.go_to_page_buttons + else: + go_to_page = self.go_to_page_list_items + page_gtp = go_to_page[(slug, locale)] + page_gtp[len(page.whatsapp_body)].append(field) + elif field["type"] == "go_to_form": + form = self._get_form(field["slug"], locale, field["title"], slug, field_name) + + try: + form = Assessment.objects.get( + slug=field["slug"], locale=locale + ) + except Assessment.DoesNotExist: + raise ImportException( + f"No form found with slug '{field['slug']}' and locale " + f"'{locale}' for go_to_form button '{field['title']}' on " + f"page '{slug}'" + ) + messages.append( + { + "id": str(uuid4()), + "type": field["type"], + "value": {"title": field["title"], "form": form.id}, + } + ) + + # else: + # raise ImportException( + # f"{field_name} with invalid type '{field['type']}'" + # ) + # except KeyError as e: + # raise ImportException(f"{field_name} is missing key {e}") + return messages + + def add_message_to_shadow_content_page_from_row( self, row: "ContentRow", locale: Locale ) -> None: @@ -350,69 +419,83 @@ def add_message_to_shadow_content_page_from_row( ) if row.is_whatsapp_message: page.enable_whatsapp = True - buttons = [] - for index, button in enumerate(row.buttons): - if button["type"] == "next_message": - buttons.append( - { - "id": str(uuid4()), - "type": button["type"], - "value": {"title": button["title"]}, - } - ) - elif button["type"] == "go_to_page": - button["index"] = index - page_gtps = self.go_to_page_buttons[(row.slug, locale)] - page_gtps[len(page.whatsapp_body)].append(button) - elif button["type"] == "go_to_form": - try: - form = Assessment.objects.get( - slug=button["slug"], locale=locale - ) - except Assessment.DoesNotExist: - raise ImportException( - f"No form found with slug '{button['slug']}' and locale " - f"'{locale}' for go_to_form button '{button['title']}' on " - f"page '{row.slug}'" - ) - buttons.append( - { - "id": str(uuid4()), - "type": button["type"], - "value": {"title": button["title"], "form": form.id}, - } - ) + # buttons = [] + # for index, button in enumerate(row.buttons): + # if button["type"] == "next_message": + # buttons.append( + # { + # "id": str(uuid4()), + # "type": button["type"], + # "value": {"title": button["title"]}, + # } + # ) + # elif button["type"] == "go_to_page": + # button["index"] = index + # page_gtps = self.go_to_page_buttons[(row.slug, locale)] + # page_gtps[len(page.whatsapp_body)].append(button) + # elif button["type"] == "go_to_form": + # try: + # form = Assessment.objects.get( + # slug=button["slug"], locale=locale + # ) + # except Assessment.DoesNotExist: + # raise ImportException( + # f"No form found with slug '{button['slug']}' and locale " + # f"'{locale}' for go_to_form button '{button['title']}' on " + # f"page '{row.slug}'" + # ) + # buttons.append( + # { + # "id": str(uuid4()), + # "type": button["type"], + # "value": {"title": button["title"], "form": form.id}, + # } + # ) + page = self._get_shadow_page(row.slug, locale) + buttons = self._create_interactive_items(row.buttons, page, row.slug, locale, "button") + list_items = self._create_interactive_items(row.list_items, page, row.slug, locale, "List Item") list_items = [] for index, item in enumerate(row.list_items): - if item["type"] == "next_message": - list_items.append( - { - "id": str(uuid4()), - "type": item["type"], - "value": {"title": item["title"]}, - } - ) - elif item["type"] == "go_to_page": - item["index"] = index - page_gtpli = self.go_to_page_list_items[(row.slug, locale)] - page_gtpli[len(page.whatsapp_body)].append(item) - elif item["type"] == "go_to_form": - try: - form = Assessment.objects.get(slug=item["slug"], locale=locale) - except Assessment.DoesNotExist: + try: + if item["type"] == "next_message": + list_items.append( + { + "id": str(uuid4()), + "type": item["type"], + "value": {"title": item["title"]}, + } + ) + elif item["type"] == "go_to_page": + item["index"] = index + page_gtpli = self.go_to_page_list_items[(row.slug, locale)] + page_gtpli[len(page.whatsapp_body)].append(item) + elif item["type"] == "go_to_form": + try: + form = Assessment.objects.get( + slug=item["slug"], locale=locale + ) + except Assessment.DoesNotExist: + raise ImportException( + f"No form found with slug '{item['slug']}' and locale " + f"'{locale}' for go_to_form list item '{item['title']}' on " + f"page '{row.slug}'" + ) + list_items.append( + { + "id": str(uuid4()), + "type": item["type"], + "value": {"title": item["title"], "form": form.id}, + } + ) + else: raise ImportException( - f"No form found with slug '{item['slug']}' and locale " - f"'{locale}' for go_to_form list item '{item['title']}' on " - f"page '{row.slug}'" + f"List item with invalid type '{item['type']}'" ) - list_items.append( - { - "id": str(uuid4()), - "type": item["type"], - "value": {"title": item["title"], "form": form.id}, - } - ) + except ImportException: + raise + except KeyError as e: + raise ImportException(f"List item is missing key {e}") page.whatsapp_body.append( ShadowWhatsappBlock( message=row.whatsapp_body, From 50f00d973722f25cb60a731f93a674f5be564fc7 Mon Sep 17 00:00:00 2001 From: Hlamalani Date: Mon, 17 Feb 2025 10:05:04 +0200 Subject: [PATCH 2/8] refactor add_message_to_shadow_content_page_from_row --- home/import_content_pages.py | 153 ++++++++++------------------------- 1 file changed, 41 insertions(+), 112 deletions(-) diff --git a/home/import_content_pages.py b/home/import_content_pages.py index 52e8baa4..af278877 100644 --- a/home/import_content_pages.py +++ b/home/import_content_pages.py @@ -362,49 +362,50 @@ def _get_form(self, slug: str, locale: Locale, title: str, page_slug: str, field def _create_interactive_items(self, row_field, page, slug, locale, field_name) -> list: messages = [] for index, field in enumerate(row_field): - if field["type"] == "next_message": - messages.append( - { - "id": str(uuid4()), - "type": field["type"], - "value": {"title": field["title"]}, - } - ) - elif field["type"] == "go_to_page": - field["index"] = index - if field_name == "button": - go_to_page = self.go_to_page_buttons - else: - go_to_page = self.go_to_page_list_items - page_gtp = go_to_page[(slug, locale)] - page_gtp[len(page.whatsapp_body)].append(field) - elif field["type"] == "go_to_form": - form = self._get_form(field["slug"], locale, field["title"], slug, field_name) + try: + if field["type"] == "next_message": + messages.append( + { + "id": str(uuid4()), + "type": field["type"], + "value": {"title": field["title"]}, + } + ) + elif field["type"] == "go_to_page": + field["index"] = index + if field_name == "button": + go_to_page = self.go_to_page_buttons + else: + go_to_page = self.go_to_page_list_items + page_gtp = go_to_page[(slug, locale)] + page_gtp[len(page.whatsapp_body)].append(field) + elif field["type"] == "go_to_form": + form = self._get_form(field["slug"], locale, field["title"], slug, field_name) - try: - form = Assessment.objects.get( - slug=field["slug"], locale=locale + try: + form = Assessment.objects.get( + slug=field["slug"], locale=locale + ) + except Assessment.DoesNotExist: + raise ImportException( + f"No form found with slug '{field['slug']}' and locale " + f"'{locale}' for go_to_form button '{field['title']}' on " + f"page '{slug}'" + ) + messages.append( + { + "id": str(uuid4()), + "type": field["type"], + "value": {"title": field["title"], "form": form.id}, + } ) - except Assessment.DoesNotExist: + + else: raise ImportException( - f"No form found with slug '{field['slug']}' and locale " - f"'{locale}' for go_to_form button '{field['title']}' on " - f"page '{slug}'" + f"{field_name} with invalid type '{field['type']}'" ) - messages.append( - { - "id": str(uuid4()), - "type": field["type"], - "value": {"title": field["title"], "form": form.id}, - } - ) - - # else: - # raise ImportException( - # f"{field_name} with invalid type '{field['type']}'" - # ) - # except KeyError as e: - # raise ImportException(f"{field_name} is missing key {e}") + except KeyError as e: + raise ImportException(f"{field_name} is missing key {e}") return messages @@ -419,83 +420,11 @@ def add_message_to_shadow_content_page_from_row( ) if row.is_whatsapp_message: page.enable_whatsapp = True - # buttons = [] - # for index, button in enumerate(row.buttons): - # if button["type"] == "next_message": - # buttons.append( - # { - # "id": str(uuid4()), - # "type": button["type"], - # "value": {"title": button["title"]}, - # } - # ) - # elif button["type"] == "go_to_page": - # button["index"] = index - # page_gtps = self.go_to_page_buttons[(row.slug, locale)] - # page_gtps[len(page.whatsapp_body)].append(button) - # elif button["type"] == "go_to_form": - # try: - # form = Assessment.objects.get( - # slug=button["slug"], locale=locale - # ) - # except Assessment.DoesNotExist: - # raise ImportException( - # f"No form found with slug '{button['slug']}' and locale " - # f"'{locale}' for go_to_form button '{button['title']}' on " - # f"page '{row.slug}'" - # ) - # buttons.append( - # { - # "id": str(uuid4()), - # "type": button["type"], - # "value": {"title": button["title"], "form": form.id}, - # } - # ) + page = self._get_shadow_page(row.slug, locale) buttons = self._create_interactive_items(row.buttons, page, row.slug, locale, "button") list_items = self._create_interactive_items(row.list_items, page, row.slug, locale, "List Item") - list_items = [] - for index, item in enumerate(row.list_items): - try: - if item["type"] == "next_message": - list_items.append( - { - "id": str(uuid4()), - "type": item["type"], - "value": {"title": item["title"]}, - } - ) - elif item["type"] == "go_to_page": - item["index"] = index - page_gtpli = self.go_to_page_list_items[(row.slug, locale)] - page_gtpli[len(page.whatsapp_body)].append(item) - elif item["type"] == "go_to_form": - try: - form = Assessment.objects.get( - slug=item["slug"], locale=locale - ) - except Assessment.DoesNotExist: - raise ImportException( - f"No form found with slug '{item['slug']}' and locale " - f"'{locale}' for go_to_form list item '{item['title']}' on " - f"page '{row.slug}'" - ) - list_items.append( - { - "id": str(uuid4()), - "type": item["type"], - "value": {"title": item["title"], "form": form.id}, - } - ) - else: - raise ImportException( - f"List item with invalid type '{item['type']}'" - ) - except ImportException: - raise - except KeyError as e: - raise ImportException(f"List item is missing key {e}") page.whatsapp_body.append( ShadowWhatsappBlock( message=row.whatsapp_body, From 0697c4848a5361c0da20f3e28b2067687c2f3d25 Mon Sep 17 00:00:00 2001 From: Hlamalani Date: Mon, 17 Feb 2025 13:07:52 +0200 Subject: [PATCH 3/8] code refactor --- home/import_content_pages.py | 5 +++-- home/tests/test_content_import_export.py | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/home/import_content_pages.py b/home/import_content_pages.py index af278877..061e98bc 100644 --- a/home/import_content_pages.py +++ b/home/import_content_pages.py @@ -399,7 +399,8 @@ def _create_interactive_items(self, row_field, page, slug, locale, field_name) - "value": {"title": field["title"], "form": form.id}, } ) - + elif not field["type"]: + pass else: raise ImportException( f"{field_name} with invalid type '{field['type']}'" @@ -423,7 +424,7 @@ def add_message_to_shadow_content_page_from_row( page = self._get_shadow_page(row.slug, locale) buttons = self._create_interactive_items(row.buttons, page, row.slug, locale, "button") - list_items = self._create_interactive_items(row.list_items, page, row.slug, locale, "List Item") + list_items = self._create_interactive_items(row.list_items, page, row.slug, locale, "list item") page.whatsapp_body.append( ShadowWhatsappBlock( diff --git a/home/tests/test_content_import_export.py b/home/tests/test_content_import_export.py index 6aeea869..4fae7449 100644 --- a/home/tests/test_content_import_export.py +++ b/home/tests/test_content_import_export.py @@ -1683,7 +1683,7 @@ def test_list_item_descriptive_error_message( with pytest.raises(ImportException) as e: csv_impexp.import_file("list_items_with_errors.csv") assert e.value.row_num == 3 - assert e.value.message == ["List item is missing key 'type'"] + assert e.value.message == ["list item is missing key 'type'"] def test_list_item_type_error_message(self, csv_impexp: ImportExport) -> None: """ @@ -1692,7 +1692,7 @@ def test_list_item_type_error_message(self, csv_impexp: ImportExport) -> None: with pytest.raises(ImportException) as e: csv_impexp.import_file("list_items_with_type_error.csv") assert e.value.row_num == 3 - assert e.value.message == ["List item with invalid type 'new_type'"] + assert e.value.message == ["list item with invalid type 'new_type'"] @pytest.mark.django_db From e9b0626b9a86fbf33c21bcbf4959cc8250222710 Mon Sep 17 00:00:00 2001 From: Hlamalani Date: Mon, 17 Feb 2025 13:58:35 +0200 Subject: [PATCH 4/8] code refactor --- home/import_content_pages.py | 71 +++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 25 deletions(-) diff --git a/home/import_content_pages.py b/home/import_content_pages.py index 061e98bc..a39b2653 100644 --- a/home/import_content_pages.py +++ b/home/import_content_pages.py @@ -60,8 +60,8 @@ def __init__( self.go_to_page_list_items: dict[PageId, dict[int, list[dict[str, Any]]]] = ( defaultdict(lambda: defaultdict(list)) ) - self.go_to_page: dict[PageId, dict[int, list[dict[str, Any]]]] = ( - defaultdict(lambda: defaultdict(list)) + self.go_to_page: dict[PageId, dict[int, list[dict[str, Any]]]] = defaultdict( + lambda: defaultdict(list) ) def locale_from_display_name(self, langname: str) -> Locale: @@ -342,7 +342,7 @@ def add_variation_to_shadow_content_page_from_row( ) ) - def _get_shadow_page(self, slug: str, locale: Locale): + def _get_shadow_page(self, slug: str, locale: Locale) -> Page: try: return self.shadow_pages[(slug, locale)] @@ -351,7 +351,9 @@ def _get_shadow_page(self, slug: str, locale: Locale): f"This is a message for page with slug '{slug}' and locale '{locale}', but no such page exists" ) - def _get_form(self, slug: str, locale: Locale, title: str, page_slug: str, field: str): + def _get_form( + self, slug: str, locale: Locale, title: str, page_slug: str, field: str + ) -> Assessment: try: return Assessment.objects.get(slug=slug, locale=locale) except Assessment.DoesNotExist: @@ -359,57 +361,72 @@ def _get_form(self, slug: str, locale: Locale, title: str, page_slug: str, field f"No form found with slug '{slug}' and locale '{locale}' for go_to_form {field} '{title}' on page '{page_slug}'" ) - def _create_interactive_items(self, row_field, page, slug, locale, field_name) -> list: - messages = [] - for index, field in enumerate(row_field): + def _create_interactive_items( + self, + row_field: list[dict[str, Any]], + page: Page, + slug: str, + locale: Locale, + field_name: str, + ) -> list[dict[str, Any]]: + messages: list[dict[str, Any]] = [] + for index, content_page_field in enumerate(row_field): try: - if field["type"] == "next_message": + if content_page_field["type"] == "next_message": messages.append( { "id": str(uuid4()), - "type": field["type"], - "value": {"title": field["title"]}, + "type": content_page_field["type"], + "value": {"title": content_page_field["title"]}, } ) - elif field["type"] == "go_to_page": - field["index"] = index + elif content_page_field["type"] == "go_to_page": + content_page_field["index"] = index if field_name == "button": go_to_page = self.go_to_page_buttons else: go_to_page = self.go_to_page_list_items page_gtp = go_to_page[(slug, locale)] - page_gtp[len(page.whatsapp_body)].append(field) - elif field["type"] == "go_to_form": - form = self._get_form(field["slug"], locale, field["title"], slug, field_name) + page_gtp[len(page.whatsapp_body)].append(content_page_field) + elif content_page_field["type"] == "go_to_form": + form = self._get_form( + content_page_field["slug"], + locale, + content_page_field["title"], + slug, + field_name, + ) try: form = Assessment.objects.get( - slug=field["slug"], locale=locale + slug=content_page_field["slug"], locale=locale ) except Assessment.DoesNotExist: raise ImportException( - f"No form found with slug '{field['slug']}' and locale " - f"'{locale}' for go_to_form button '{field['title']}' on " + f"No form found with slug '{content_page_field['slug']}' and locale " + f"'{locale}' for go_to_form button '{content_page_field['title']}' on " f"page '{slug}'" ) messages.append( { "id": str(uuid4()), - "type": field["type"], - "value": {"title": field["title"], "form": form.id}, + "type": content_page_field["type"], + "value": { + "title": content_page_field["title"], + "form": form.id, + }, } ) - elif not field["type"]: + elif not content_page_field["type"]: pass else: raise ImportException( - f"{field_name} with invalid type '{field['type']}'" + f"{field_name} with invalid type '{content_page_field['type']}'" ) except KeyError as e: raise ImportException(f"{field_name} is missing key {e}") return messages - def add_message_to_shadow_content_page_from_row( self, row: "ContentRow", locale: Locale ) -> None: @@ -423,8 +440,12 @@ def add_message_to_shadow_content_page_from_row( page.enable_whatsapp = True page = self._get_shadow_page(row.slug, locale) - buttons = self._create_interactive_items(row.buttons, page, row.slug, locale, "button") - list_items = self._create_interactive_items(row.list_items, page, row.slug, locale, "list item") + buttons = self._create_interactive_items( + row.buttons, page, row.slug, locale, "button" + ) + list_items = self._create_interactive_items( + row.list_items, page, row.slug, locale, "list item" + ) page.whatsapp_body.append( ShadowWhatsappBlock( From a393ad1450645f6fa5b8d1453e312cf2d18f0b2a Mon Sep 17 00:00:00 2001 From: Hlamalani Date: Mon, 17 Feb 2025 14:29:23 +0200 Subject: [PATCH 5/8] code refactor --- home/import_content_pages.py | 52 +++++++++++++++++------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/home/import_content_pages.py b/home/import_content_pages.py index a39b2653..8cecb750 100644 --- a/home/import_content_pages.py +++ b/home/import_content_pages.py @@ -367,65 +367,63 @@ def _create_interactive_items( page: Page, slug: str, locale: Locale, - field_name: str, + item_type: str, ) -> list[dict[str, Any]]: - messages: list[dict[str, Any]] = [] - for index, content_page_field in enumerate(row_field): + items: list[dict[str, Any]] = [] + for index, item in enumerate(row_field): try: - if content_page_field["type"] == "next_message": - messages.append( + if item["type"] == "next_message": + items.append( { "id": str(uuid4()), - "type": content_page_field["type"], - "value": {"title": content_page_field["title"]}, + "type": item["type"], + "value": {"title": item["title"]}, } ) - elif content_page_field["type"] == "go_to_page": - content_page_field["index"] = index - if field_name == "button": + elif item["type"] == "go_to_page": + item["index"] = index + if item_type == "button": go_to_page = self.go_to_page_buttons else: go_to_page = self.go_to_page_list_items page_gtp = go_to_page[(slug, locale)] - page_gtp[len(page.whatsapp_body)].append(content_page_field) - elif content_page_field["type"] == "go_to_form": + page_gtp[len(page.whatsapp_body)].append(item) + elif item["type"] == "go_to_form": form = self._get_form( - content_page_field["slug"], + item["slug"], locale, - content_page_field["title"], + item["title"], slug, - field_name, + item_type, ) try: - form = Assessment.objects.get( - slug=content_page_field["slug"], locale=locale - ) + form = Assessment.objects.get(slug=item["slug"], locale=locale) except Assessment.DoesNotExist: raise ImportException( - f"No form found with slug '{content_page_field['slug']}' and locale " - f"'{locale}' for go_to_form button '{content_page_field['title']}' on " + f"No form found with slug '{item['slug']}' and locale " + f"'{locale}' for go_to_form button '{item['title']}' on " f"page '{slug}'" ) - messages.append( + items.append( { "id": str(uuid4()), - "type": content_page_field["type"], + "type": item["type"], "value": { - "title": content_page_field["title"], + "title": item["title"], "form": form.id, }, } ) - elif not content_page_field["type"]: + elif not item["type"]: pass else: raise ImportException( - f"{field_name} with invalid type '{content_page_field['type']}'" + f"{item_type} with invalid type '{item['type']}'" ) except KeyError as e: - raise ImportException(f"{field_name} is missing key {e}") - return messages + raise ImportException(f"{item_type} is missing key {e}") + return items def add_message_to_shadow_content_page_from_row( self, row: "ContentRow", locale: Locale From 62b4a8e392340dc70a254d2306e15ef8d2ac7b30 Mon Sep 17 00:00:00 2001 From: Hlamalani Date: Tue, 18 Feb 2025 14:41:32 +0200 Subject: [PATCH 6/8] refactor add_go_to_page methods --- home/import_content_pages.py | 49 +++++++++--------------------------- 1 file changed, 12 insertions(+), 37 deletions(-) diff --git a/home/import_content_pages.py b/home/import_content_pages.py index 8cecb750..bd271ce0 100644 --- a/home/import_content_pages.py +++ b/home/import_content_pages.py @@ -60,9 +60,6 @@ def __init__( self.go_to_page_list_items: dict[PageId, dict[int, list[dict[str, Any]]]] = ( defaultdict(lambda: defaultdict(list)) ) - self.go_to_page: dict[PageId, dict[int, list[dict[str, Any]]]] = defaultdict( - lambda: defaultdict(list) - ) def locale_from_display_name(self, langname: str) -> Locale: if langname not in self.locale_map: @@ -90,8 +87,8 @@ def perform_import(self) -> None: self.process_rows(rows) self.save_pages() self.link_related_pages() - self.add_go_to_page_buttons() - self.add_go_to_page_list_items() + self.add_go_to_page_items(self.go_to_page_buttons, "buttons") + self.add_go_to_page_items(self.go_to_page_list_items, "list_items") def process_rows(self, rows: list["ContentRow"]) -> None: # Non-page rows don't have a locale, so we need to remember the last @@ -178,35 +175,13 @@ def link_related_pages(self) -> None: "Linking related pages", 80 + 10 * i // len(self.shadow_pages) ) - def add_go_to_page_buttons(self) -> None: - for (slug, locale), messages in self.go_to_page_buttons.items(): - page = ContentPage.objects.get(slug=slug, locale=locale) - for message_index, buttons in messages.items(): - for button in buttons: - title = button["title"] - try: - related_page = Page.objects.get( - slug=button["slug"], locale=locale - ) - except Page.DoesNotExist: - row = self.shadow_pages[(slug, locale)] - raise ImportException( - f"No pages found with slug '{button['slug']}' and locale " - f"'{locale}' for go_to_page button '{button['title']}' on " - f"page '{slug}'", - row.row_num, - ) - page.whatsapp_body[message_index].value["buttons"].insert( - button["index"], - ("go_to_page", {"page": related_page, "title": title}), - ) - page.save() - - def add_go_to_page_list_items(self) -> None: - for (slug, locale), messages in self.go_to_page_list_items.items(): + def add_go_to_page_items( + self, items_dict: dict[PageId, dict[int, list[dict[str, Any]]]], item_type: str + ) -> None: + for (slug, locale), messages in items_dict.items(): page = ContentPage.objects.get(slug=slug, locale=locale) - for message_index, list_items in messages.items(): - for item in list_items: + for message_index, items in messages.items(): + for item in items: title = item["title"] try: related_page = Page.objects.get( @@ -216,11 +191,11 @@ def add_go_to_page_list_items(self) -> None: row = self.shadow_pages[(slug, locale)] raise ImportException( f"No pages found with slug '{item['slug']}' and locale " - f"'{locale}' for go_to_page list item '{item['title']}' on " + f"'{locale}' for go_to_page {item_type[:-1]} '{item['title']}' on " f"page '{slug}'", row.row_num, ) - page.whatsapp_body[message_index].value["list_items"].insert( + page.whatsapp_body[message_index].value[item_type].insert( item["index"], ("go_to_page", {"page": related_page, "title": title}), ) @@ -352,13 +327,13 @@ def _get_shadow_page(self, slug: str, locale: Locale) -> Page: ) def _get_form( - self, slug: str, locale: Locale, title: str, page_slug: str, field: str + self, slug: str, locale: Locale, title: str, page_slug: str, item_type: str ) -> Assessment: try: return Assessment.objects.get(slug=slug, locale=locale) except Assessment.DoesNotExist: raise ImportException( - f"No form found with slug '{slug}' and locale '{locale}' for go_to_form {field} '{title}' on page '{page_slug}'" + f"No form found with slug '{slug}' and locale '{locale}' for go_to_form {item_type} '{title}' on page '{page_slug}'" ) def _create_interactive_items( From e8db8ecef02845763a105d40a8713b4e8e8b905e Mon Sep 17 00:00:00 2001 From: Hlamalani Date: Thu, 20 Feb 2025 09:00:21 +0200 Subject: [PATCH 7/8] remove duplicate try except --- home/import_content_pages.py | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/home/import_content_pages.py b/home/import_content_pages.py index bd271ce0..2dea3d18 100644 --- a/home/import_content_pages.py +++ b/home/import_content_pages.py @@ -371,23 +371,11 @@ def _create_interactive_items( slug, item_type, ) - - try: - form = Assessment.objects.get(slug=item["slug"], locale=locale) - except Assessment.DoesNotExist: - raise ImportException( - f"No form found with slug '{item['slug']}' and locale " - f"'{locale}' for go_to_form button '{item['title']}' on " - f"page '{slug}'" - ) items.append( { "id": str(uuid4()), "type": item["type"], - "value": { - "title": item["title"], - "form": form.id, - }, + "value": {"title": item["title"],"form": form.id,}, } ) elif not item["type"]: From 14edc3f5c4756f958b7cab0b730abb1532a039a5 Mon Sep 17 00:00:00 2001 From: Hlamalani Date: Thu, 20 Feb 2025 09:19:29 +0200 Subject: [PATCH 8/8] remove duplicate try except --- home/import_content_pages.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/home/import_content_pages.py b/home/import_content_pages.py index 2dea3d18..dd0b240c 100644 --- a/home/import_content_pages.py +++ b/home/import_content_pages.py @@ -375,7 +375,10 @@ def _create_interactive_items( { "id": str(uuid4()), "type": item["type"], - "value": {"title": item["title"],"form": form.id,}, + "value": { + "title": item["title"], + "form": form.id, + }, } ) elif not item["type"]: