5
5
6
6
class ConfigError (Exception ):
7
7
"""Custom exception for configuration errors."""
8
-
9
8
pass
10
9
11
10
12
11
class Config :
13
12
config_data = None
14
13
section_name = "codegreen"
15
- boolean_keys = {"enable_energy_caching" , "enable_time_prediction_logging" }
16
- defaults = {
17
- "default_energy_mode" : "public_data" ,
18
- "enable_energy_caching" : False ,
19
- "enable_time_prediction_logging" : False ,
20
- "energy_redis_path" : None ,
21
- }
14
+ all_keys = [
15
+ {
16
+ "name" :"ENTSOE_token" ,
17
+ "default" : "None" ,
18
+ "use" :"To fetch data from ENTSOE portal" ,
19
+ "boolean" :False ,
20
+ },
21
+ {
22
+ "name" :"default_energy_mode" ,
23
+ "default" :"public_data" ,
24
+ "use" :"Determines which type of data to use." ,
25
+ "boolean" :False ,
26
+ },
27
+ {
28
+ "name" :"enable_energy_caching" ,
29
+ "default" :"False" ,
30
+ "use" :"To indicate if data used by tools must be cached" ,
31
+ "boolean" :True ,
32
+ },
33
+ {
34
+ "name" :"energy_redis_path" ,
35
+ "default" :"None" ,
36
+ "boolean" :False ,
37
+ "use" :"Path to redis server to cache data.required if enable_energy_caching is enabled "
38
+ },
39
+ {
40
+ "name" :"enable_time_prediction_logging" ,
41
+ "default" :"False" ,
42
+ "boolean" :True ,
43
+ "use" :"To indicate if logs must me saved in a log file "
44
+ },
45
+ {
46
+ "name" :"log_folder_path" ,
47
+ "default" :" " ,
48
+ "boolean" :False ,
49
+ "use" :"Path of the folder where logs will be stored"
50
+ }
51
+
52
+ ]
22
53
23
54
@classmethod
24
55
def load_config (self , file_path = None ):
@@ -41,10 +72,15 @@ def load_config(self, file_path=None):
41
72
42
73
if self .section_name not in self .config_data :
43
74
self .config_data [self .section_name ] = {}
44
- for key , default_value in self .defaults .items ():
45
- if not self .config_data .has_option (self .section_name , key ):
46
- self .config_data .set (self .section_name , key , str (default_value ))
47
-
75
+ raise ConfigError ("Invalid config file. The config file must have a section called codegreen" )
76
+
77
+ for ky in self .all_keys :
78
+ try :
79
+ value = self .config_data .get (self .section_name , ky ["name" ])
80
+ # print(value)
81
+ except configparser .NoOptionError :
82
+ self .config_data .set (self .section_name , ky ["name" ],ky ["default" ])
83
+
48
84
if self .get ("enable_energy_caching" ) == True :
49
85
if self .get ("energy_redis_path" ) is None :
50
86
raise ConfigError (
@@ -53,7 +89,7 @@ def load_config(self, file_path=None):
53
89
else :
54
90
r = redis .from_url (self .get ("energy_redis_path" ))
55
91
r .ping ()
56
- # print(self.config_data["default_energy_mode"] )
92
+ # print("Connection to redis works" )
57
93
58
94
@classmethod
59
95
def get (self , key ):
@@ -63,13 +99,11 @@ def get(self, key):
63
99
)
64
100
try :
65
101
value = self .config_data .get (self .section_name , key )
66
- if value is None :
67
- # if key not in self.defaults:
68
- # raise KeyError(f"No default value provided for key: {key}")
69
- value = self .defaults .get (key , None )
70
- else :
71
- if key in self .boolean_keys :
72
- value = value .lower () == "true"
102
+ config = next ((d for d in self .all_keys if d .get ("name" ) == key ), None )
103
+ if config ["boolean" ]:
104
+ return value .lower () == "true"
73
105
return value
74
- except (configparser .NoSectionError , configparser .NoOptionError ):
75
- return self .defaults .get (key ) # Return default if key is missing
106
+ except (configparser .NoSectionError , configparser .NoOptionError ) as e :
107
+ print ("Config not found" )
108
+ print (key )
109
+ raise e
0 commit comments