8
8
from parse import *
9
9
from optparse import OptionParser
10
10
11
- versions_list = ['1.0.0' , '1.1.0' ,'1.2.0' ,'1.3.0' ,'1.4.0' ,'1.4.1' ,'1.5.0' , '1.6.0' , '1.7.0' ]
11
+ versions_list = ['1.0.0' , '1.1.0' ,'1.2.0' ,'1.3.0' ,'1.4.0' ,'1.4.1' ,'1.5.0' , '1.6.0' , '1.7.0' , '1.8.0' ]
12
12
13
13
res_modes_list = ['relaxed' , 'recommended' , 'strict' , 'custom' ]
14
14
@@ -57,7 +57,7 @@ def dump_conf(ray_version, res_mode, overwrite, dirname='configs'):
57
57
if (not os .path .exists (file_path )) or overwrite :
58
58
fd = open (file_path , "w+" )
59
59
fd .write ("# please edit value_for_this_mode to change any configuration\n " )
60
- yaml .dump (Ray_conf [ray_version ], fd )
60
+ yaml .dump (Ray_conf [ray_version ], fd , width = float ( 'inf' ) )
61
61
62
62
# Que: is dumping in json format better or YAML?
63
63
def read_conf (ray_version , res_mode , dirname = 'configs/' ):
@@ -82,43 +82,59 @@ def read_conf(ray_version, res_mode, dirname='configs/'):
82
82
print (exception )
83
83
84
84
85
- def put_conf (ray_version , conf_name , conf_type , conf_default , conf_env ):
85
+ def put_conf (ray_version , conf_name , conf_type , conf_default , conf_env , conf_str ):
86
86
# Ray_conf[version][conf_name][type/default/env]
87
87
Ray_conf [ray_version ][conf_name ] = dict ()
88
88
Ray_conf [ray_version ][conf_name ]['type' ] = conf_type
89
89
Ray_conf [ray_version ][conf_name ]['default' ] = conf_default
90
90
Ray_conf [ray_version ][conf_name ]['value_for_this_mode' ] = conf_default
91
91
Ray_conf [ray_version ][conf_name ]['env' ] = conf_env
92
+ Ray_conf [ray_version ][conf_name ]['config_string' ] = conf_str
93
+
94
+ # parse env. variable from config string
95
+ def get_env (conf_default ):
96
+ conf_env = ""
97
+ if 'getenv' in conf_default :
98
+ _ ,conf_env ,_ = parse ('{}etenv("{}"){}' , conf_default )
99
+ return conf_env
100
+
101
+ # get the default value of the configuration
102
+ def get_default (conf_default , conf_type ):
103
+ if 'env_' in conf_default :
104
+ _ , conf_default = parse ('{}, {})' , conf_default )
105
+ elif '?' in conf_default :
106
+ if_str , true_str , false_str = parse ('{} ? {} : {})' , conf_default )
107
+ if '!=' in if_str :
108
+ conf_default = false_str
109
+ else :
110
+ conf_default = true_str
111
+ elif 'std::string' in conf_default :
112
+ is_eq , conf_default = parse ('{} std::string("{}"))' , conf_default )
113
+ # if the condition is != (not equal) then Ray expect the opposite value
114
+ if is_eq [- 2 :] == "!=" :
115
+ if conf_type == "bool" :
116
+ conf_default = str (not int (conf_default ))
117
+ else :
118
+ print ("Unable to parse string %s" % conf_default )
119
+ sys .exit (- 1 )
120
+
121
+ return conf_default
92
122
93
123
def parse_ray_config (ray_version , sig_str , is_multiline ):
94
124
# print("In parse_ray_config: %s" % sig_str)
95
125
conf_type , conf_name , conf_default = parse ("RAY_CONFIG({}, {}, {}" , sig_str )
96
126
97
127
# replace if default has comment in it
98
128
conf_default = re .sub ('(?:/\*(.*?)\*/)' , '' , conf_default )
99
- conf_env = ''
129
+ conf_str = ''
100
130
if is_multiline :
101
- # get the default value and associated env variable
102
- if '?' in conf_default :
103
- # TODO: make the parsing conditions more general
104
- if 'RAY_preallocate_plasma_memory' in conf_default and ray_version in ['1.5.0' , '1.6.0' , '1.7.0' ]:
105
- conf_env = 'RAY_preallocate_plasma_memory'
106
- _ , conf_default = parse ('{}: {})' , conf_default )
107
- elif 'getenv' in conf_default :
108
- conf_env ,_ ,conf_default = parse ('getenv("{}"){}: {})' , conf_default )
109
- else :
110
- print (conf_default )
111
- _ , conf_env ,_ , conf_default = parse ('{} ? {} : {}("{}"))' , conf_default )
112
- elif 'getenv' in conf_default :
113
- _ , conf_env , is_eq , _ , conf_default = parse ('{} getenv("{}") {} std::{}("{}"))' , conf_default )
114
- if is_eq == "!=" and conf_type == "bool" :
115
- conf_default = str (not int (conf_default ))
116
- elif 'env_' in conf_default :
117
- _ , conf_env , conf_default = parse ('{}("{}", {})' , conf_default )
131
+ conf_str = conf_default [:- 1 ]
132
+ conf_env = get_env (conf_default )
133
+ conf_default = get_default (conf_default , conf_type )
118
134
conf_default = conf_default .rstrip (')' )
119
135
# print(conf_type, conf_name, conf_default, conf_env)
120
136
# Access values like this: Ray_conf[ray_version][conf_name][type/default/env]
121
- put_conf (ray_version , conf_name , conf_type , conf_default , conf_env )
137
+ put_conf (ray_version , conf_name , conf_type , conf_default , conf_env , conf_str )
122
138
123
139
# for multi-line signatures
124
140
def is_balanced_parenthesis (str_list ):
@@ -330,15 +346,15 @@ def main(argv):
330
346
if opts .lists :
331
347
print_ray_versions_and_modes ()
332
348
sys .exit (0 )
333
-
349
+
334
350
# validate ray version; print list of supported versions if input is invalid
335
351
if opts .ray_version not in versions_list :
336
352
print_colored (FAIL , "Ray version %s not supported!" % opts .ray_version )
337
353
print_ray_versions_and_modes ()
338
354
sys .exit (1 )
339
355
340
356
# validate resiliency profile/mode input (case insensitive)
341
- # print list of supported versions and modes if input is unsupported
357
+ # print list of supported versions and modes if input is unsupported
342
358
if opts .res_mode .lower () not in res_modes_list :
343
359
print_colored (FAIL , "Resiliency profile %s not supported!" % opts .res_mode )
344
360
print_ray_versions_and_modes ()
0 commit comments