11import re
22from collections .abc import Callable , Iterable
33from functools import partial
4- from typing import Any , Final , TypedDict , cast , TYPE_CHECKING
4+ from typing import Any , Final , NotRequired , TypedDict , cast , TYPE_CHECKING
55from constance import config as constance_config
66from django .utils import timezone
77from requests import Session
1111
1212from country_workspace .contrib .kobo .exceptions import AlienFieldsError
1313
14- if TYPE_CHECKING :
15- from hope_flex_fields .models import DataChecker
1614
1715from country_workspace .contrib .kobo .api .client .auth import Auth
1816from country_workspace .contrib .kobo .api .client .main import Client
2624from country_workspace .utils .sync_log import get_kobo_sync_log_name
2725from country_workspace .workspaces .admin .cleaners .validate import create_validation_jobs
2826
27+ if TYPE_CHECKING :
28+ from hope_flex_fields .models import DataChecker
29+
2930
3031class Config (BatchNameConfig , ValidateModeConfig ):
3132 project_id : str
3233 individual_records_field : str
34+ household_mapping_id : NotRequired [int | None ]
35+ individual_mapping_id : NotRequired [int | None ]
3336
3437
3538ACCEPT_JSON_HEADERS : Final [dict [str , str ]] = {"Accept" : "application/json" }
@@ -93,11 +96,12 @@ def get_fullname_key(individual: Iterable[str]) -> str | None:
9396
9497def create_individuals (batch : Batch , household : Household , submission : Submission , config : Config ) -> list [Individual ]:
9598 individuals = []
99+ individual_mapping_id = config .get ("individual_mapping_id" )
96100 for raw_individual in submission .get (config ["individual_records_field" ], []):
97101 individual_fields = preprocess (
98102 raw_individual ,
99103 INDIVIDUAL_FIELDS_TO_UPPERCASE + TO_UPPERCASE_FIELDS ,
100- partial (batch .program .apply_mapping_importer , Individual ),
104+ partial (batch .program .apply_mapping_importer , Individual , mapping_id = individual_mapping_id ),
101105 partial (batch .program .apply_default_fields , Individual ),
102106 )
103107 fullname = get_fullname_key (individual_fields )
@@ -117,11 +121,12 @@ def create_individuals(batch: Batch, household: Household, submission: Submissio
117121def create_household (
118122 batch : Batch , submission : Submission , config : Config , id_generator : Callable [[], int ]
119123) -> Household :
124+ household_mapping_id = config .get ("household_mapping_id" )
120125 raw_household_fields = extract_household_data (submission , config ["individual_records_field" ])
121126 household_fields = preprocess (
122127 raw_household_fields ,
123128 HOUSEHOLD_FIELDS_TO_UPPERCASE ,
124- partial (batch .program .apply_mapping_importer , Household ),
129+ partial (batch .program .apply_mapping_importer , Household , mapping_id = household_mapping_id ),
125130 partial (batch .program .apply_default_fields , Household ),
126131 )
127132 household_fields ["household_id" ] = id_generator ()
0 commit comments