Support to convert between option v2 & v3
This commit is contained in:
129
api/s23_options_util.py
Normal file
129
api/s23_options_util.py
Normal file
@@ -0,0 +1,129 @@
|
||||
from .database import *
|
||||
|
||||
_key_map_23 = {
|
||||
'UNITS' : 'FLOW_UNITS',
|
||||
'PRESSURE' : 'PRESSURE_UNITS',
|
||||
'HEADLOSS' : 'HEADLOSS_MODEL',
|
||||
'QUALITY' : 'QUALITY_MODEL',
|
||||
'UNBALANCED' : 'IF_UNBALANCED',
|
||||
'PATTERN' : 'DEMAND_PATTERN',
|
||||
'DEMAND MODEL' : 'DEMAND_MODEL',
|
||||
'DEMAND MULTIPLIER' : 'DEMAND_MULTIPLIER',
|
||||
'EMITTER EXPONENT' : 'EMITTER_EXPONENT',
|
||||
'VISCOSITY' : 'SPECIFIC_VISCOSITY',
|
||||
'DIFFUSIVITY' : 'SPECIFIC_DIFFUSIVITY',
|
||||
'SPECIFIC GRAVITY' : 'SPECIFIC_GRAVITY',
|
||||
'TRIALS' : 'MAXIMUM_TRIALS',
|
||||
'ACCURACY' : 'RELATIVE_ACCURACY',
|
||||
#'HEADERROR' : '',
|
||||
'FLOWCHANGE' : 'FLOW_CHANGE_LIMIT',
|
||||
'MINIMUM PRESSURE' : 'MINIMUM_PRESSURE',
|
||||
'REQUIRED PRESSURE' : 'SERVICE_PRESSURE',
|
||||
'PRESSURE EXPONENT' : 'PRESSURE_EXPONENT',
|
||||
'TOLERANCE' : 'QUALITY_TOLERANCE',
|
||||
'HTOL' : 'HEAD_TOLERANCE',
|
||||
'QTOL' : 'FLOW_TOLERANCE',
|
||||
#'RQTOL' : '',
|
||||
#'CHECKFREQ' : '',
|
||||
#'MAXCHECK' : '',
|
||||
#'DAMPLIMIT' : '',
|
||||
}
|
||||
|
||||
|
||||
_key_map_32 = {
|
||||
'FLOW_UNITS' : 'UNITS',
|
||||
'PRESSURE_UNITS' : 'PRESSURE',
|
||||
'HEADLOSS_MODEL' : 'HEADLOSS',
|
||||
'SPECIFIC_GRAVITY' : 'SPECIFIC GRAVITY',
|
||||
'SPECIFIC_VISCOSITY' : 'VISCOSITY',
|
||||
'MAXIMUM_TRIALS' : 'TRIALS',
|
||||
'HEAD_TOLERANCE' : 'HTOL',
|
||||
'FLOW_TOLERANCE' : 'QTOL',
|
||||
'FLOW_CHANGE_LIMIT' : 'FLOWCHANGE',
|
||||
'RELATIVE_ACCURACY' : 'ACCURACY',
|
||||
#'TIME_WEIGHT' : '',
|
||||
#'STEP_SIZING' : '',
|
||||
'IF_UNBALANCED' : 'UNBALANCED',
|
||||
'DEMAND_MODEL' : 'DEMAND MODEL',
|
||||
'DEMAND_PATTERN' : 'PATTERN',
|
||||
'DEMAND_MULTIPLIER' : 'DEMAND MULTIPLIER',
|
||||
'MINIMUM_PRESSURE' : 'MINIMUM PRESSURE',
|
||||
'SERVICE_PRESSURE' : 'REQUIRED PRESSURE',
|
||||
'PRESSURE_EXPONENT' : 'PRESSURE EXPONENT',
|
||||
#'LEAKAGE_MODEL' : '',
|
||||
#'LEAKAGE_COEFF1' : '',
|
||||
#'LEAKAGE_COEFF2' : '',
|
||||
'EMITTER_EXPONENT' : 'EMITTER EXPONENT',
|
||||
'QUALITY_MODEL' : 'QUALITY',
|
||||
#'QUALITY_NAME' : '',
|
||||
#'QUALITY_UNITS' : '',
|
||||
#'TRACE_NODE' : '',
|
||||
'SPECIFIC_DIFFUSIVITY' : 'DIFFUSIVITY',
|
||||
'QUALITY_TOLERANCE' : 'TOLERANCE'
|
||||
}
|
||||
|
||||
|
||||
def generate_v2(cs: ChangeSet) -> ChangeSet:
|
||||
op = cs.operations[0]
|
||||
|
||||
if op['type'] == 'option':
|
||||
return cs
|
||||
|
||||
map = _key_map_32
|
||||
|
||||
cs_v2 = {}
|
||||
for key in op:
|
||||
if key == 'operation' or key == 'type':
|
||||
continue
|
||||
|
||||
if key in map.keys():
|
||||
if key != 'QUALITY_MODEL' and key != 'DEMAND_MODEL':
|
||||
cs_v2 |= { map[key] : op[key] }
|
||||
elif key == 'QUALITY_MODEL':
|
||||
if str(op[key]).upper() == 'TRACE' and 'TRACE_NODE' in op.keys():
|
||||
cs_v2 |= { map[key] : f"TRACE {op['TRACE_NODE']}" }
|
||||
else:
|
||||
cs_v2 |= { map[key] : str(op[key]).upper() }
|
||||
elif key == 'DEMAND_MODEL':
|
||||
if op[key] == 'FIXED':
|
||||
cs_v2 |= { map[key] : 'DDA' }
|
||||
else:
|
||||
cs_v2 |= { map[key] : 'PDA' }
|
||||
|
||||
if len(cs_v2) > 0:
|
||||
cs_v2 |= g_update_prefix | { 'type' : 'option' }
|
||||
return ChangeSet(cs_v2)
|
||||
|
||||
return ChangeSet()
|
||||
|
||||
|
||||
def generate_v3(cs: ChangeSet) -> ChangeSet:
|
||||
op = cs.operations[0]
|
||||
|
||||
if op['type'] == 'option_v3':
|
||||
return cs
|
||||
|
||||
map = _key_map_23
|
||||
|
||||
cs_v3 = {}
|
||||
for key in op:
|
||||
if key == 'operation' or key == 'type':
|
||||
continue
|
||||
|
||||
if key in map.keys():
|
||||
if key != 'QUALITY' and key != 'DEMAND MODEL':
|
||||
cs_v3 |= { map[key] : op[key] }
|
||||
elif key == 'QUALITY':
|
||||
tokens = str(op[key]).split()
|
||||
if len(tokens) >= 1:
|
||||
cs_v3 |= { map[key] : tokens[0].upper() }
|
||||
if tokens[0].upper() == 'TRACE' and len(tokens) >= 2:
|
||||
cs_v3 |= { 'TRACE_NODE' : tokens[1] }
|
||||
elif key == 'DEMAND MODEL':
|
||||
cs_v3 |= { map[key] : 'POWER' }
|
||||
|
||||
if len(cs_v3) > 0:
|
||||
cs_v3 |= g_update_prefix | { 'type' : 'option_v3' }
|
||||
return ChangeSet(cs_v3)
|
||||
|
||||
return ChangeSet()
|
||||
Reference in New Issue
Block a user