python ast

Creator
Creator
Seonglae Cho
Created
Created
2023 Aug 19 15:48
Editor
Edited
Edited
2023 Aug 19 15:50
Refs
Refs
config_keys = [k for k, v in globals().items() if not k.startswith( '_') and isinstance(v, (int, float, bool, str))] # overrides from command line or config file exec(open('configurator.py').read()) config = {k: globals()[k] for k in config_keys} # will be useful for logging

comfigurator.py

import sys from ast import literal_eval for arg in sys.argv[1:]: if '=' not in arg: # assume it's the name of a config file assert not arg.startswith('--') config_file = arg print(f"Overriding config with {config_file}:") with open(config_file) as f: print(f.read()) exec(open(config_file).read()) else: # assume it's a --key=value argument assert arg.startswith('--') key, val = arg.split('=') key = key[2:] if key in globals(): try: # attempt to eval it it (e.g. if bool, number, or etc) attempt = literal_eval(val) except (SyntaxError, ValueError): # if that goes wrong, just use the string attempt = val # ensure the types match ok assert type(attempt) == type(globals()[key]) # cross fingers print(f"Overriding: {key} = {attempt}") globals()[key] = attempt else: raise ValueError(f"Unknown config key: {key}")
 
 
 
 
 
 
 

Recommendations