Skip to content

Commit 728c60a

Browse files
committed
Refactored config. parsing; Added support for v1.8
1 parent e675067 commit 728c60a

File tree

1 file changed

+40
-24
lines changed

1 file changed

+40
-24
lines changed

utils/ray-res-config.py

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from parse import *
99
from optparse import OptionParser
1010

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']
1212

1313
res_modes_list=['relaxed', 'recommended', 'strict', 'custom']
1414

@@ -57,7 +57,7 @@ def dump_conf(ray_version, res_mode, overwrite, dirname='configs'):
5757
if (not os.path.exists(file_path)) or overwrite:
5858
fd = open(file_path, "w+")
5959
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'))
6161

6262
# Que: is dumping in json format better or YAML?
6363
def read_conf(ray_version, res_mode, dirname='configs/'):
@@ -82,43 +82,59 @@ def read_conf(ray_version, res_mode, dirname='configs/'):
8282
print(exception)
8383

8484

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):
8686
# Ray_conf[version][conf_name][type/default/env]
8787
Ray_conf[ray_version][conf_name] = dict()
8888
Ray_conf[ray_version][conf_name]['type'] = conf_type
8989
Ray_conf[ray_version][conf_name]['default'] = conf_default
9090
Ray_conf[ray_version][conf_name]['value_for_this_mode'] = conf_default
9191
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
92122

93123
def parse_ray_config(ray_version, sig_str, is_multiline):
94124
# print("In parse_ray_config: %s" % sig_str)
95125
conf_type, conf_name, conf_default = parse("RAY_CONFIG({}, {}, {}", sig_str)
96126

97127
# replace if default has comment in it
98128
conf_default = re.sub('(?:/\*(.*?)\*/)', '', conf_default)
99-
conf_env = ''
129+
conf_str = ''
100130
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)
118134
conf_default = conf_default.rstrip(')')
119135
# print(conf_type, conf_name, conf_default, conf_env)
120136
# 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)
122138

123139
# for multi-line signatures
124140
def is_balanced_parenthesis(str_list):
@@ -330,15 +346,15 @@ def main(argv):
330346
if opts.lists:
331347
print_ray_versions_and_modes()
332348
sys.exit(0)
333-
349+
334350
# validate ray version; print list of supported versions if input is invalid
335351
if opts.ray_version not in versions_list:
336352
print_colored(FAIL, "Ray version %s not supported!" % opts.ray_version)
337353
print_ray_versions_and_modes()
338354
sys.exit(1)
339355

340356
# 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
342358
if opts.res_mode.lower() not in res_modes_list:
343359
print_colored(FAIL, "Resiliency profile %s not supported!" % opts.res_mode)
344360
print_ray_versions_and_modes()

0 commit comments

Comments
 (0)