Skip to content

Commit

Permalink
code refractor
Browse files Browse the repository at this point in the history
  • Loading branch information
Hlamallama committed Feb 17, 2025
1 parent 2c3475a commit ba05b0f
Showing 1 changed file with 141 additions and 58 deletions.
199 changes: 141 additions & 58 deletions home/import_content_pages.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand All @@ -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,
Expand Down

0 comments on commit ba05b0f

Please sign in to comment.