@@ -212,8 +212,8 @@ async def async_run_hosting_capacity_work_package(self, work_package: WorkPackag
212212 "endTime" : work_package .load_time .end_time .isoformat (),
213213 } if isinstance (work_package .load_time , TimePeriod ) else None ,
214214 "qualityAssuranceProcessing" : work_package .quality_assurance_processing ,
215- "generatorConfig" : {
216- "model" : {
215+ "generatorConfig" : work_package . generator_config and {
216+ "model" : work_package . generator_config . model and {
217217 "vmPu" : work_package .generator_config .model .vm_pu ,
218218 "vMinPu" : work_package .generator_config .model .vmin_pu ,
219219 "vMaxPu" : work_package .generator_config .model .vmax_pu ,
@@ -232,7 +232,7 @@ async def async_run_hosting_capacity_work_package(self, work_package: WorkPackag
232232 "maxLoadServiceLineRatio" : work_package .generator_config .model .max_load_service_line_ratio ,
233233 "maxLoadLvLineRatio" : work_package .generator_config .model .max_load_lv_line_ratio ,
234234 "collapseLvNetworks" : work_package .generator_config .model .collapse_lv_networks ,
235- "feederScenarioAllocationStrategy" : work_package .generator_config .model .feeder_scenario_allocation_strategy . name if work_package .generator_config .model .feeder_scenario_allocation_strategy is not None else None ,
235+ "feederScenarioAllocationStrategy" : work_package .generator_config .model .feeder_scenario_allocation_strategy and work_package .generator_config .model .feeder_scenario_allocation_strategy . name ,
236236 "closedLoopVRegEnabled" : work_package .generator_config .model .closed_loop_v_reg_enabled ,
237237 "closedLoopVRegReplaceAll" : work_package .generator_config .model .closed_loop_v_reg_replace_all ,
238238 "closedLoopVRegSetPoint" : work_package .generator_config .model .closed_loop_v_reg_set_point ,
@@ -245,25 +245,26 @@ async def async_run_hosting_capacity_work_package(self, work_package: WorkPackag
245245 "splitPhaseDefaultLoadLossPercentage" : work_package .generator_config .model .split_phase_default_load_loss_percentage ,
246246 "splitPhaseLVKV" : work_package .generator_config .model .split_phase_lv_kv ,
247247 "swerVoltageToLineVoltage" : work_package .generator_config .model .swer_voltage_to_line_voltage ,
248- "loadPlacement" : work_package .generator_config .model .load_placement . name if work_package .generator_config .model .load_placement is not None else None ,
248+ "loadPlacement" : work_package .generator_config .model .load_placement and work_package .generator_config .model .load_placement . name ,
249249 "loadIntervalLengthHours" : work_package .generator_config .model .load_interval_length_hours ,
250- "meterPlacementConfig" : {
250+ "meterPlacementConfig" : work_package . generator_config . model . meter_placement_config and {
251251 "feederHead" : work_package .generator_config .model .meter_placement_config .feeder_head ,
252252 "distTransformers" : work_package .generator_config .model .meter_placement_config .dist_transformers ,
253- "switchMeterPlacementConfigs" : [{
254- "meterSwitchClass" : spc .meter_switch_class .name if spc .meter_switch_class is not None else None ,
255- "namePattern" : spc .name_pattern
256- } for spc in
257- work_package .generator_config .model .meter_placement_config .switch_meter_placement_configs ] if work_package .generator_config .model .meter_placement_config .switch_meter_placement_configs is not None else None ,
253+ "switchMeterPlacementConfigs" : work_package .generator_config .model .meter_placement_config .switch_meter_placement_configs and [
254+ {
255+ "meterSwitchClass" : spc .meter_switch_class and spc .meter_switch_class .name ,
256+ "namePattern" : spc .name_pattern
257+ } for spc in work_package .generator_config .model .meter_placement_config .switch_meter_placement_configs
258+ ],
258259 "energyConsumerMeterGroup" : work_package .generator_config .model .meter_placement_config .energy_consumer_meter_group
259- } if work_package . generator_config . model . meter_placement_config is not None else None ,
260+ },
260261 "seed" : work_package .generator_config .model .seed ,
261- "defaultLoadWatts" : work_package .generator_config .model .default_load_watts ,
262- "defaultGenWatts" : work_package .generator_config .model .default_gen_watts ,
263- "defaultLoadVar" : work_package .generator_config .model .default_load_var ,
264- "defaultGenVar" : work_package .generator_config .model .default_gen_var
265- } if work_package . generator_config . model is not None else None ,
266- "solve" : {
262+ "defaultLoadWatts" : work_package .generator_config .model .default_load_watts ,
263+ "defaultGenWatts" : work_package .generator_config .model .default_gen_watts ,
264+ "defaultLoadVar" : work_package .generator_config .model .default_load_var ,
265+ "defaultGenVar" : work_package .generator_config .model .default_gen_var
266+ },
267+ "solve" : work_package . generator_config . solve and {
267268 "normVMinPu" : work_package .generator_config .solve .norm_vmin_pu ,
268269 "normVMaxPu" : work_package .generator_config .solve .norm_vmax_pu ,
269270 "emergVMinPu" : work_package .generator_config .solve .emerg_vmin_pu ,
@@ -272,32 +273,32 @@ async def async_run_hosting_capacity_work_package(self, work_package: WorkPackag
272273 "voltageBases" : work_package .generator_config .solve .voltage_bases ,
273274 "maxIter" : work_package .generator_config .solve .max_iter ,
274275 "maxControlIter" : work_package .generator_config .solve .max_control_iter ,
275- "mode" : work_package .generator_config .solve .mode . name if work_package .generator_config .solve .mode is not None else None ,
276+ "mode" : work_package .generator_config .solve .mode and work_package .generator_config .solve .mode . name ,
276277 "stepSizeMinutes" : work_package .generator_config .solve .step_size_minutes
277- } if work_package . generator_config . solve is not None else None ,
278- "rawResults" : {
278+ },
279+ "rawResults" : work_package . generator_config . raw_results and {
279280 "energyMeterVoltagesRaw" : work_package .generator_config .raw_results .energy_meter_voltages_raw ,
280281 "energyMetersRaw" : work_package .generator_config .raw_results .energy_meters_raw ,
281282 "resultsPerMeter" : work_package .generator_config .raw_results .results_per_meter ,
282283 "overloadsRaw" : work_package .generator_config .raw_results .overloads_raw ,
283284 "voltageExceptionsRaw" : work_package .generator_config .raw_results .voltage_exceptions_raw
284- } if work_package . generator_config . raw_results is not None else None
285- } if work_package . generator_config is not None else None ,
285+ }
286+ },
286287 "executorConfig" : {},
287- "resultProcessorConfig" : {
288- "storedResults" : {
288+ "resultProcessorConfig" : work_package . result_processor_config and {
289+ "storedResults" : work_package . result_processor_config . stored_results and {
289290 "energyMeterVoltagesRaw" : work_package .result_processor_config .stored_results .energy_meter_voltages_raw ,
290291 "energyMetersRaw" : work_package .result_processor_config .stored_results .energy_meters_raw ,
291292 "overloadsRaw" : work_package .result_processor_config .stored_results .overloads_raw ,
292293 "voltageExceptionsRaw" : work_package .result_processor_config .stored_results .voltage_exceptions_raw ,
293- } if work_package . result_processor_config . stored_results is not None else None ,
294- "metrics" : {
294+ },
295+ "metrics" : work_package . result_processor_config . metrics and {
295296 "calculatePerformanceMetrics" : work_package .result_processor_config .metrics .calculate_performance_metrics
296- } if work_package . result_processor_config . metrics is not None else None ,
297- "writerConfig" : {
298- "writerType" : work_package .result_processor_config .writer_config .writer_type . name if work_package .result_processor_config .writer_config .writer_type is not None else None ,
299- "outputWriterConfig" : {
300- "enhancedMetricsConfig" : {
297+ },
298+ "writerConfig" : work_package . result_processor_config . writer_config and {
299+ "writerType" : work_package .result_processor_config .writer_config .writer_type and work_package .result_processor_config .writer_config .writer_type . name ,
300+ "outputWriterConfig" : work_package . result_processor_config . writer_config . output_writer_config and {
301+ "enhancedMetricsConfig" : work_package . result_processor_config . writer_config . output_writer_config . enhanced_metrics_config and {
301302 "populateEnhancedMetrics" : work_package .result_processor_config .writer_config .output_writer_config .enhanced_metrics_config .populate_enhanced_metrics ,
302303 "populateEnhancedMetricsProfile" : work_package .result_processor_config .writer_config .output_writer_config .enhanced_metrics_config .populate_enhanced_metrics_profile ,
303304 "populateDurationCurves" : work_package .result_processor_config .writer_config .output_writer_config .enhanced_metrics_config .populate_duration_curves ,
@@ -308,10 +309,48 @@ async def async_run_hosting_capacity_work_package(self, work_package: WorkPackag
308309 "calculateNormalForGenThermal" : work_package .result_processor_config .writer_config .output_writer_config .enhanced_metrics_config .calculate_normal_for_gen_thermal ,
309310 "calculateEmergForGenThermal" : work_package .result_processor_config .writer_config .output_writer_config .enhanced_metrics_config .calculate_emerg_for_gen_thermal ,
310311 "calculateCO2" : work_package .result_processor_config .writer_config .output_writer_config .enhanced_metrics_config .calculate_co2
311- } if work_package .result_processor_config .writer_config .output_writer_config .enhanced_metrics_config is not None else None
312- } if work_package .result_processor_config .writer_config .output_writer_config is not None else None
313- } if work_package .result_processor_config .writer_config is not None else None
314- } if work_package .result_processor_config is not None else None
312+ }
313+ }
314+ }
315+ },
316+ "intervention" : work_package .intervention and {
317+ "baseWorkPackageId" : work_package .intervention .base_work_package_id ,
318+ "yearRange" : {
319+ "maxYear" : work_package .intervention .year_range .max_year ,
320+ "minYear" : work_package .intervention .year_range .min_year
321+ },
322+ "allocationLimitPerYear" : work_package .intervention .allocation_limit_per_year ,
323+ "interventionType" : work_package .intervention .intervention_type .name ,
324+ "candidateGeneration" : work_package .intervention .candidate_generation and {
325+ "type" : work_package .intervention .candidate_generation .type .name ,
326+ "interventionCriteriaName" : work_package .intervention .candidate_generation .intervention_criteria_name ,
327+ "voltageDeltaAvgThreshold" : work_package .intervention .candidate_generation .voltage_delta_avg_threshold ,
328+ "voltageUnderLimitHoursThreshold" : work_package .intervention .candidate_generation .voltage_under_limit_hours_threshold ,
329+ "voltageOverLimitHoursThreshold" : work_package .intervention .candidate_generation .voltage_over_limit_hours_threshold ,
330+ "tapWeightingFactorLowerThreshold" : work_package .intervention .candidate_generation .tap_weighting_factor_lower_threshold ,
331+ "tapWeightingFactorUpperThreshold" : work_package .intervention .candidate_generation .tap_weighting_factor_upper_threshold ,
332+ },
333+ "allocationCriteria" : work_package .intervention .allocation_criteria ,
334+ "specificAllocationInstance" : work_package .intervention .specific_allocation_instance ,
335+ "phaseRebalanceProportions" : work_package .intervention .phase_rebalance_proportions and {
336+ "a" : work_package .intervention .phase_rebalance_proportions .a ,
337+ "b" : work_package .intervention .phase_rebalance_proportions .b ,
338+ "c" : work_package .intervention .phase_rebalance_proportions .c
339+ },
340+ "dvms" : work_package .intervention .dvms and {
341+ "lowerLimit" : work_package .intervention .dvms .lower_limit ,
342+ "upperLimit" : work_package .intervention .dvms .upper_limit ,
343+ "lowerPercentile" : work_package .intervention .dvms .lower_percentile ,
344+ "upperPercentile" : work_package .intervention .dvms .upper_percentile ,
345+ "maxIterations" : work_package .intervention .dvms .max_iterations ,
346+ "regulatorConfig" : {
347+ "puTarget" : work_package .intervention .dvms .regulator_config .pu_target ,
348+ "puDeadbandPercent" : work_package .intervention .dvms .regulator_config .pu_deadband_percent ,
349+ "maxTapChangePerStep" : work_package .intervention .dvms .regulator_config .max_tap_change_per_step ,
350+ "allowPushToLimit" : work_package .intervention .dvms .regulator_config .allow_push_to_limit
351+ }
352+ }
353+ }
315354 }
316355 }
317356 }
@@ -454,15 +493,15 @@ async def async_upload_study(self, study: Study):
454493 "styles" : study .styles ,
455494 "results" : [{
456495 "name" : result .name ,
457- "geoJsonOverlay" : {
496+ "geoJsonOverlay" : result . geo_json_overlay and {
458497 "data" : result .geo_json_overlay .data ,
459498 "sourceProperties" : result .geo_json_overlay .source_properties ,
460499 "styles" : result .geo_json_overlay .styles
461- } if result . geo_json_overlay else None ,
462- "stateOverlay" : {
500+ },
501+ "stateOverlay" : result . state_overlay and {
463502 "data" : result .state_overlay .data ,
464503 "styles" : result .state_overlay .styles
465- } if result . state_overlay else None ,
504+ },
466505 "sections" : [{
467506 "type" : section .type ,
468507 "name" : section .name ,
0 commit comments