@@ -13,14 +13,14 @@ class GdacsTransformer(BaseTransformerClass):
1313 Extracts and normalizes impact fields, computes derived values, and stores metadata.
1414 """
1515
16- # NOTE: This logic might change in future
16+ # NOTE: This logic might change in future. Currently only creating a function for future use.
1717 def compute_people_exposed (self , metadata_list ) -> Optional [int ]:
1818 for data in metadata_list :
1919 if data ["category" ] == ImpactDetailsEnum .Category .PEOPLE and data ["type" ] == ImpactDetailsEnum .Type .AFFECTED_TOTAL :
2020 return data ["value" ]
2121 return None
2222
23- # NOTE: This logic might change in future
23+ # NOTE: This logic might change in future. Currently only creating a function for future use.
2424 def compute_buildings_exposed (self , metadata_list ) -> Optional [int ]:
2525 """
2626 Compute the 'buildings_exposed' field.
@@ -30,28 +30,36 @@ def compute_buildings_exposed(self, metadata_list) -> Optional[int]:
3030 return data ["value" ]
3131 return None
3232
33- # NOTE: This logic will change with changes in montandon.
3433 def process_impact (self , impact_items ) -> BaseTransformerClass .ImpactType :
35- metadata = []
34+ meta_hash_map = {}
35+
3636 for item in impact_items :
3737 properties = item .resp_data .get ("properties" , {})
38- impact_detail = properties .get ("monty:impact_detail" , {})
39- category = impact_detail .get ("category" )
40- type_ = impact_detail .get ("type" )
41- value = impact_detail .get ("value" )
42- if category == ImpactDetailsEnum .Category .PEOPLE and type_ == ImpactDetailsEnum .Type .AFFECTED_TOTAL :
43- metadata = [
44- {
45- "category" : category ,
46- "type" : type_ ,
47- "value" : value ,
48- "unit" : impact_detail .get ("unit" , "" ),
49- "estimate_type" : impact_detail .get ("estimate_type" , "" ),
50- }
51- ]
38+ detail = properties .get ("monty:impact_detail" , {})
39+
40+ category = detail .get ("category" )
41+ type_ = detail .get ("type" )
42+ value = detail .get ("value" )
43+ if value in (None , - 1 ):
44+ value = 0
45+ key = (category , type_ )
46+ meta_hash_map [key ] = meta_hash_map .get (key , 0 ) + value
47+
48+ metadata = [
49+ {
50+ "category" : category ,
51+ "type" : type_ ,
52+ "value" : value ,
53+ }
54+ for (category , type_ ), value in meta_hash_map .items ()
55+ if category == ImpactDetailsEnum .Category .PEOPLE
56+ ]
57+
5258 return {
53- "people_exposed" : self .compute_people_exposed (metadata ),
54- "buildings_exposed" : self .compute_buildings_exposed (metadata ),
59+ "people_exposed" : meta_hash_map .get (
60+ (ImpactDetailsEnum .Category .PEOPLE , ImpactDetailsEnum .Type .AFFECTED_TOTAL ) # Taking only people exposed.
61+ ),
62+ "buildings_exposed" : meta_hash_map .get ((ImpactDetailsEnum .Category .BUILDINGS , ImpactDetailsEnum .Type .DAMAGED )),
5563 "impact_metadata" : metadata ,
5664 }
5765
0 commit comments