Coverage for causalspyne/conf.py: 0%

44 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-02-19 14:58 +0000

1import argparse 

2import configparser 

3# ConfigArgParse is a drop-in replacement for argparse that allows options to 

4# be set via config files and environment variables. 

5 

6 

7class DynamicConfig: 

8 def __init__(self, conf): 

9 for key, value in conf.items(): 

10 setattr(self, key, value) 

11 

12 

13def parse_args_and_config(): 

14 parser = argparse.ArgumentParser() 

15 # parser = configargparse.ArgumentParser(description='Your program description') 

16 parser.add_argument('-c', '--config', help='Config file path') 

17 parser.add_argument('--option1', help='Option 1 description') 

18 parser.add_argument('--option2', help='Option 2 description') 

19 args = parser.parse_args() 

20 

21 config = configparser.ConfigParser() 

22 if args.config: 

23 config.read(args.config) 

24 

25 # Merge config file and command line arguments 

26 options = {} 

27 if 'DEFAULT' in config: 

28 options.update(config['DEFAULT']) 

29 options.update({k: v for k, v in vars(args).items() if v is not None}) 

30 

31 return options 

32def load_config_from_file(file_path): 

33 config = configparser.ConfigParser() 

34 config.read(file_path) 

35 return config 

36 

37def parse(args): 

38 if args.config: 

39 config = load_config_from_file(args.config) 

40 db_host = config.get('database', 'host', fallback=args.db_host) 

41 db_port = config.getint('database', 'port', fallback=args.db_port) 

42 db_user = config.get('database', 'user', fallback=args.db_user) 

43 db_password = config.get('database', 'password', fallback=args.db_password) 

44 db_name = config.get('database', 'dbname', fallback=args.db_name) 

45 server_host = config.get('server', 'host', fallback=args.server_host) 

46 server_port = config.getint('server', 'port', fallback=args.server_port) 

47 else: 

48 db_host = args.db_host 

49 db_port = args.db_port 

50 db_user = args.db_user 

51 db_password = args.db_password 

52 db_name = args.db_name 

53 server_host = args.server_host 

54 server_port = args.server_port 

55 

56def test_args(): 

57 options = parse_args_and_config() 

58 print(options) 

59