Coverage for src/probable_fiesta/config/config_builder.py: 78%

95 statements  

« prev     ^ index     » next       coverage.py v7.1.0, created at 2023-01-30 18:57 -0500

1from ..logger.builder.logger_factory import LoggerFactory 

2 

3class Config(): 

4 def __init__(self): 

5 self.package = {} 

6 self.logger = None 

7 self.variables = {} 

8 self.dotenv = {} 

9 self.parsed_dotenv = {} 

10 

11 def __str__(self): 

12 return f"Config: {self.__dict__}" 

13 

14class ConfigBuilder(): 

15 def __init__(self, config=None): 

16 if config is None: 

17 self.config = Config() 

18 else: 

19 self.config = config 

20 @property 

21 def my_logger(self): 

22 return ConfigMyLogger(self.config) 

23 

24 @property 

25 def package(self): 

26 return ConfigPackage(self.config) 

27 

28 @property 

29 def logger(self): 

30 return ConfigLogger(self.config) 

31 

32 @property 

33 def variables(self): 

34 return ConfigVariables(self.config) 

35 

36 @property 

37 def dotenv(self): 

38 return ConfigDotEnv(self.config) 

39 

40 def build(self): 

41 return self.config 

42 

43class ConfigPackage(ConfigBuilder): 

44 def __init__(self, config): 

45 super().__init__(config) 

46 

47 def set_package_name(self, name): 

48 self.config.package['name'] = name 

49 return self 

50 

51 def set_root_dir(self, directory): 

52 self.config.package['root_directory'] = directory 

53 return self 

54 

55class ConfigLogger(ConfigBuilder): 

56 def __init__(self, config): 

57 super().__init__(config) 

58 

59 def set_logger_level(self, level): 

60 self.config.logger = level 

61 return self 

62 

63 def set_logger_dir(self, directory): 

64 self.config.logger = directory 

65 return self 

66 

67 def set_logger_format(self, log_format): 

68 self.config.logger = log_format 

69 return self 

70 

71 def set_logger_name(self, name): 

72 self.config.logger.name = name 

73 return self 

74 

75 def set_logger(self, logger): 

76 self.config.logger = logger 

77 return self 

78 

79 def set_new_logger(self, name=None, level=None, fmt=None, directory=None): 

80 self.config.logger = LoggerFactory.new_logger(name, level, fmt, directory) 

81 return self 

82 

83 

84class ConfigVariables(ConfigBuilder): 

85 def __init__(self, config): 

86 super().__init__(config) 

87 

88 def set_variable(self, name, value): 

89 self.config.variables[name] = value 

90 return self 

91 

92 def set_variables(self, variables): 

93 self.config.variables.update(variables) 

94 return self 

95 

96 def get_from_module_config(self): 

97 self.config.variables.update(self.config.variables.module_config) 

98 return self 

99 

100class ConfigDotEnv(ConfigBuilder): 

101 def __init__(self, config): 

102 super().__init__(config) 

103 

104 def load_dotenv(self): 

105 try: 

106 import dotenv as _dotenv 

107 except ImportError: 

108 print("Warning: dotenv package not installed.") 

109 self.dotenv = None 

110 if _dotenv is not None: 

111 _dotenv.load_dotenv() 

112 return self 

113 

114 def get_var(self, var_name): 

115 import os 

116 if os.getenv(var_name) is not None: 

117 self.config.parsed_dotenv[var_name] = os.getenv(var_name) 

118 return self 

119 

120 def set_vars(self, vars): 

121 for var in vars: 

122 self.get_var(var) 

123 return self