Skip to content

Commit

Permalink
FS-4253: Update Welsh translations (#132)
Browse files Browse the repository at this point in the history
* FS-4253: Update Welsh translations

* FS-4253: Update Welsh translations
  • Loading branch information
tferns authored Mar 19, 2024
1 parent 5f2ef38 commit b750acb
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 49 deletions.
36 changes: 12 additions & 24 deletions fsd_utils/mapping/application/application_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,11 @@
from io import StringIO

from flask import current_app

EN, CY = "en", "cy"
SUPPORTED_LANGUAGES = {EN, CY}

NOT_PROVIDED = {
EN: "Not provided",
CY: "Heb ei ddarparu",
}

YES = {
EN: "Yes",
CY: "Ydw",
}

NO = {
EN: "No",
CY: "Nac ydw",
}
from fsd_utils.mapping.application.languages import EN
from fsd_utils.mapping.application.languages import NO
from fsd_utils.mapping.application.languages import NOT_PROVIDED
from fsd_utils.mapping.application.languages import SUPPORTED_LANGUAGES
from fsd_utils.mapping.application.languages import YES


def convert_bool_value(data, language=EN):
Expand Down Expand Up @@ -52,10 +39,7 @@ def convert_values(value):
current_app.logger.error(f"Could not convert boolean values, {e}")


def format_answer(answer, language=EN):
if not language and language not in SUPPORTED_LANGUAGES:
language = EN

def format_answer(answer, language):
try:
if answer is None or answer == "None":
return NOT_PROVIDED[language]
Expand Down Expand Up @@ -171,7 +155,7 @@ def format_radio_field(answer: str) -> str:
return answer


def generate_text_of_application(q_and_a: dict, fund_name: str) -> str:
def generate_text_of_application(q_and_a: dict, fund_name: str, language=EN) -> str:
"""
Generate a formatted text document for an application with questions and answers.
Expand All @@ -185,10 +169,14 @@ def generate_text_of_application(q_and_a: dict, fund_name: str) -> str:
Parameters:
- q_and_a (dict): A dictionary of questions and answers.
- fund_name (str): The name of the fund.
- language (str): "en" or "cy", the language to use.
Returns:
- application_text (str): A formatted text output for the application.
"""
if not language and language not in SUPPORTED_LANGUAGES:
language = EN

output = StringIO()

output.write(f"********* {fund_name} **********\n")
Expand All @@ -198,7 +186,7 @@ def generate_text_of_application(q_and_a: dict, fund_name: str) -> str:
output.write(f"\n* {' '.join(title).capitalize()}\n\n")
for questions, answers in values.items():
output.write(f" Q) {questions}\n")
output.write(f" A) {format_answer(answers)}\n\n")
output.write(f" A) {format_answer(answers, language)}\n\n")
return output.getvalue()


Expand Down
17 changes: 17 additions & 0 deletions fsd_utils/mapping/application/languages.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
EN, CY = "en", "cy"
SUPPORTED_LANGUAGES = {EN, CY}

NOT_PROVIDED = {
EN: "Not provided",
CY: "Heb ei ddarparu",
}

YES = {
EN: "Yes",
CY: "Oes",
}

NO = {
EN: "No",
CY: "Nac Oes",
}
16 changes: 10 additions & 6 deletions fsd_utils/mapping/application/multi_input.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ def format_value_pair(cls, key, value, index):
)

@classmethod
def format_keys_and_values(cls, key: str, value: list, index: enumerate):
sanitised_values = convert_bool_value(value)
def format_keys_and_values(cls, key: str, value: list, index: int, language):
sanitised_values = convert_bool_value(value, language)
values = "\n".join(
[
f"{cls.indent(5) if i == 1 else cls.indent(6)}. {str(item).strip()}"
Expand All @@ -35,12 +35,13 @@ def format_keys_and_values(cls, key: str, value: list, index: enumerate):
)

@classmethod
def format_data(cls, sorted_data: dict) -> list:
def format_data(cls, sorted_data: dict, language) -> list:
"""
Process a dictionary of sorted data, generating a list of formatted values.
Args:
sorted_data (dict): A dictionary of sorted data to process.
language (str): "en" or "cy", the language to use.
Returns:
list: A list of formatted values extracted from the input data.
Expand All @@ -57,7 +58,9 @@ def format_data(cls, sorted_data: dict) -> list:
output.append(cls.format_values(value, index))

if isinstance(value, list):
output.append(cls.format_keys_and_values(key, value, index))
output.append(
cls.format_keys_and_values(key, value, index, language)
)
if not uuid and not isinstance(value, list):
output.append(cls.format_value_pair(key, value, index))

Expand All @@ -69,12 +72,13 @@ def format_data(cls, sorted_data: dict) -> list:
return output

@classmethod
def map_multi_input_data(cls, multi_input_data: list[dict]):
def map_multi_input_data(cls, multi_input_data: list[dict], language):
"""
Maps and processes a list of input data, generating a formatted output.
Args:
multi_input_data (list[dict]): A list of dictionaries representing input data.
language (str):
Returns:
str: A formatted output string containing processed data.
Expand All @@ -95,7 +99,7 @@ def map_multi_input_data(cls, multi_input_data: list[dict]):
if isinstance(item, dict):
cls._dict_items(item, sorted_data)

output = cls.format_data(sorted_data)
output = cls.format_data(sorted_data, language)
output = "\n".join(output)
return output

Expand Down
16 changes: 10 additions & 6 deletions fsd_utils/mapping/application/qa_mapping.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,18 @@
from fsd_utils.mapping.application.application_utils import format_date_month_year
from fsd_utils.mapping.application.application_utils import format_month_year
from fsd_utils.mapping.application.application_utils import format_radio_field
from fsd_utils.mapping.application.application_utils import NO
from fsd_utils.mapping.application.application_utils import YES
from fsd_utils.mapping.application.free_text import FreeText
from fsd_utils.mapping.application.languages import EN
from fsd_utils.mapping.application.languages import SUPPORTED_LANGUAGES
from fsd_utils.mapping.application.multi_input import MultiInput


def extract_questions_and_answers(forms, language="en") -> dict:
def extract_questions_and_answers(forms, language=EN) -> dict:
if not language and language not in SUPPORTED_LANGUAGES:
language = EN

"""function takes the form data and returns
dict of questions & answers.
"""
Expand All @@ -36,17 +43,14 @@ def extract_questions_and_answers(forms, language="en") -> dict:
questions_answers[form_name][field["title"]] = answer

elif isinstance(answer, bool) and field["type"] == "list":

yes = "Yes" if language == "en" else "Oes"
no = "No" if language == "en" else "Nac Oes"
questions_answers[form_name][field["title"]] = (
yes if answer else no
YES[language] if answer else NO[language]
)

elif isinstance(answer, list) and field["type"] == "multiInput":
questions_answers[form_name][
field["title"]
] = MultiInput.map_multi_input_data(answer)
] = MultiInput.map_multi_input_data(answer, language)

elif field["type"] == "freeText":
clean_html_answer = FreeText.remove_html_tags(answer)
Expand Down
28 changes: 15 additions & 13 deletions tests/test_mapping_application.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
from fsd_utils.mapping.application.application_utils import format_radio_field
from fsd_utils.mapping.application.application_utils import simplify_title
from fsd_utils.mapping.application.free_text import FreeText
from fsd_utils.mapping.application.languages import CY
from fsd_utils.mapping.application.languages import EN
from fsd_utils.mapping.application.multi_input import MultiInput
from fsd_utils.mapping.application.multi_input_utils import ProcessTypes
from fsd_utils.mapping.application.qa_mapping import extract_questions_and_answers
Expand All @@ -21,31 +23,31 @@
(True, "en", "Yes"),
(True, None, "Yes"),
(True, "", "Yes"),
(True, "cy", "Ydw"),
(True, "cy", "Oes"),
(False, "en", "No"),
(False, None, "No"),
(False, "", "No"),
(False, "cy", "Nac ydw"),
(False, "cy", "Nac Oes"),
(["address", True], "en", ["address", "Yes"]),
(["address", True], None, ["address", "Yes"]),
(["address", True], "", ["address", "Yes"]),
(["address", True], "cy", ["address", "Ydw"]),
((["address", False], "en", ["address", "No"])),
((["address", False], None, ["address", "No"])),
((["address", False], "", ["address", "No"])),
((["address", False], "cy", ["address", "Nac ydw"])),
(["address", True], "cy", ["address", "Oes"]),
(["address", False], "en", ["address", "No"]),
(["address", False], None, ["address", "No"]),
(["address", False], "", ["address", "No"]),
(["address", False], "cy", ["address", "Nac Oes"]),
(None, "en", "Not provided"),
(None, None, "Not provided"),
(None, "", "Not provided"),
(None, "cy", "Heb ei ddarparu"),
([["name", True], "en", ["name", "Yes"]]),
([["name", True], None, ["name", "Yes"]]),
([["name", True], "", ["name", "Yes"]]),
([["name", True], "cy", ["name", "Ydw"]]),
([["name", True], "cy", ["name", "Oes"]]),
([["name", False], "en", ["name", "No"]]),
([["name", False], None, ["name", "No"]]),
([["name", False], "", ["name", "No"]]),
([["name", False], "cy", ["name", "Nac ydw"]]),
([["name", False], "cy", ["name", "Nac Oes"]]),
],
)
def test_convert_bool_values(input_data, expected_response, language):
Expand All @@ -69,7 +71,7 @@ def test_convert_bool_values(input_data, expected_response, language):
],
)
def test_format_answer(input_data, expected_response):
response = format_answer(input_data)
response = format_answer(input_data, EN)
assert response == expected_response


Expand Down Expand Up @@ -136,7 +138,7 @@ def test_extract_questions_and_answers(app_context):
def test_extract_questions_and_answers_welsh(app_context):
forms = test_data_sort_questions_answers_welsh["forms"]

response = extract_questions_and_answers(forms, "cy")
response = extract_questions_and_answers(forms, CY)
assert response == test_data_sort_questions_answers_welsh["questions_answers"]


Expand Down Expand Up @@ -245,7 +247,7 @@ class TestMultiInput:
],
)
def test_format_data(self, app_context, input_data, expected_response):
response = MultiInput.format_data(input_data)
response = MultiInput.format_data(input_data, EN)
assert response == expected_response

@pytest.mark.parametrize(
Expand All @@ -272,7 +274,7 @@ def test_format_data(self, app_context, input_data, expected_response):
],
)
def test_map_multi_input_data(self, app_context, input_data, expected_response):
response = MultiInput.map_multi_input_data(input_data)
response = MultiInput.map_multi_input_data(input_data, EN)
assert response == expected_response

@pytest.mark.parametrize(
Expand Down

0 comments on commit b750acb

Please sign in to comment.