Skip to content

Commit 8b2e504

Browse files
Merge pull request #76 from unicef/bugfix/remove-extra-prefixes-from-kobo-data
Bugfix: Remove extra prefixes from Kobo data
2 parents 628056a + 4d566a3 commit 8b2e504

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

src/country_workspace/contrib/kobo/sync.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,14 @@ def extract_household_data(submission: Submission, individual_records_field: str
5454
return {key: value for key, value in submission.items() if key != individual_records_field}
5555

5656

57+
def normalize_json(data: dict[str, Any]) -> dict[str, Any]:
58+
return {key.split("/")[-1]: value for key, value in data.items()}
59+
60+
5761
def create_individuals(batch: Batch, household: Household, submission: Submission, config: Config) -> int:
5862
individuals = []
5963
for raw_individual in submission.get(config["individual_records_field"], []):
60-
individual = {
61-
key.replace(f"{config['individual_records_field']}/", ""): value for key, value in raw_individual.items()
62-
}
64+
individual = normalize_json(raw_individual)
6365
fullname = next((key for key in individual if key.startswith("full_name")), None)
6466
individuals.append(
6567
Individual(
@@ -74,7 +76,8 @@ def create_individuals(batch: Batch, household: Household, submission: Submissio
7476

7577

7678
def create_household(batch: Batch, submission: Submission, config: Config) -> Household:
77-
household_fields = extract_household_data(submission, config["individual_records_field"])
79+
raw_household_fields = extract_household_data(submission, config["individual_records_field"])
80+
household_fields = normalize_json(raw_household_fields)
7881
return cast(
7982
Household,
8083
batch.program.households.create(

tests/contrib/kobo/test_kobo_sync.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ def test_create_individuals(mocker: MockerFixture, config: Config) -> None:
130130
def test_create_household(mocker: MockerFixture, config: Config) -> None:
131131
clean_field_names_mock = mocker.patch("country_workspace.contrib.kobo.sync.clean_field_names")
132132
extract_household_data_mock = mocker.patch("country_workspace.contrib.kobo.sync.extract_household_data")
133+
normalize_json_mock = mocker.patch("country_workspace.contrib.kobo.sync.normalize_json")
133134

134135
household = create_household(
135136
batch_mock := Mock(name="batch"),
@@ -142,7 +143,8 @@ def test_create_household(mocker: MockerFixture, config: Config) -> None:
142143
batch_mock.program.households.create.assert_called_once_with(
143144
batch=batch_mock, flex_fields=clean_field_names_mock.return_value
144145
)
145-
clean_field_names_mock.assert_called_once_with(extract_household_data_mock.return_value)
146+
normalize_json_mock.assert_called_once_with(extract_household_data_mock.return_value)
147+
clean_field_names_mock.assert_called_once_with(normalize_json_mock.return_value)
146148

147149

148150
def test_import_asset(mocker: MockerFixture, config: Config) -> None:

0 commit comments

Comments
 (0)