@@ -11,97 +11,24 @@ class Config:
11
11
config_file_path = None
12
12
section_name = "codegreen"
13
13
all_keys = [
14
- {
15
- "name" :"ENTSOE_token" ,
16
- "default" : "None" ,
17
- "use" :"To fetch data from ENTSOE portal" ,
18
- "boolean" :False ,
19
- },
20
- {
21
- "name" :"default_energy_mode" ,
22
- "default" :"public_data" ,
23
- "use" :"Determines which type of data to use." ,
24
- "boolean" :False ,
25
- },
26
- {
27
- "name" :"enable_energy_caching" ,
28
- "default" :"False" ,
29
- "use" :"To indicate if data used by tools must be cached" ,
30
- "boolean" :True ,
31
- },
32
- {
33
- "name" :"energy_redis_path" ,
34
- "default" :"None" ,
35
- "boolean" :False ,
36
- "use" :"Path to redis server to cache data.required if enable_energy_caching is enabled "
37
- },
38
- {
39
- "name" :"enable_time_prediction_logging" ,
40
- "default" :"False" ,
41
- "boolean" :True ,
42
- "use" :"To indicate if logs must me saved in a log file "
43
- },
44
- {
45
- "name" :"log_folder_path" ,
46
- "default" :" " ,
47
- "boolean" :False ,
48
- "use" :"Path of the folder where logs will be stored"
49
- },
50
- {
51
- "name" :"offline_data_dir_path" ,
52
- "default" :"" ,
53
- "boolean" :False ,
54
- "use" :"Path of the folder where bulk energy data will be stored"
55
- },
56
- {
57
- "name" :"enable_offline_energy_generation" ,
58
- "default" :"False" ,
59
- "boolean" :True ,
60
- "use" :"To enable storing energy production data for available countries locally and in cache for quick access"
61
- },
62
- {
63
- "name" :"offline_data_start_date" ,
64
- "default" :"" ,
65
- "boolean" :False ,
66
- "use" :"The start date for offline energy generation download,YYYY-mm-dd format"
67
- },
68
- {
69
- "name" :"generation_cache_hour" ,
70
- "default" :"72" ,
71
- "boolean" :False ,
72
- "use" :"Indicate the number of hours in the past the data will be stored in the cache "
73
- },
74
-
75
- {
76
- "name" :"cron_refresh_offline_files_hour" ,
77
- "default" :"6" ,
78
- "boolean" :False ,
79
- "use" :"time to setup cron for updating offline energy files"
80
- },
81
- {
82
- "name" :"cron_refresh_cache_hour" ,
83
- "default" :"6" ,
84
- "boolean" :False ,
85
- "use" :"time to setup CRON job to update the energy generation cache"
86
- },
87
-
88
- {
89
- "name" :"enable_logging" ,
90
- "default" :"False" ,
91
- "boolean" :True ,
92
- "use" :"Indicates if logging is enabled for the whole package"
93
- },
94
- {
95
- "name" :"log_folder_path" ,
96
- "default" :"" ,
97
- "boolean" :False ,
98
- "use" :"The folder where log files will be stored. Log files name are of the format: 'year-month' "
99
- }
14
+ {"name" : "ENTSOE_token" , "default" : "None" , "use" : "To fetch data from ENTSOE portal" , "boolean" : False },
15
+ {"name" : "default_energy_mode" , "default" : "public_data" , "use" : "Determines which type of data to use." , "boolean" : False },
16
+ {"name" : "enable_energy_caching" , "default" : "False" , "use" : "To indicate if data used by tools must be cached" , "boolean" : True },
17
+ {"name" : "energy_redis_path" , "default" : "None" , "boolean" : False , "use" : "Path to redis server to cache data." },
18
+ {"name" : "enable_time_prediction_logging" , "default" : "False" , "boolean" : True , "use" : "To indicate if logs must be saved." },
19
+ {"name" : "log_folder_path" , "default" : "" , "boolean" : False , "use" : "Path of the folder where logs will be stored" },
20
+ {"name" : "offline_data_dir_path" , "default" : "" , "boolean" : False , "use" : "Path where bulk energy data will be stored" },
21
+ {"name" : "enable_offline_energy_generation" , "default" : "False" , "boolean" : True , "use" : "Enable storing energy data locally" },
22
+ {"name" : "offline_data_start_date" , "default" : "" , "boolean" : False , "use" : "Start date for offline energy data" },
23
+ {"name" : "generation_cache_hour" , "default" : "72" , "boolean" : False , "use" : "Number of hours data will be cached" },
24
+ {"name" : "cron_refresh_offline_files_hour" , "default" : "6" , "boolean" : False , "use" : "CRON schedule for updating offline files" },
25
+ {"name" : "cron_refresh_cache_hour" , "default" : "6" , "boolean" : False , "use" : "CRON job to update energy cache" },
26
+ {"name" : "enable_logging" , "default" : "False" , "boolean" : True , "use" : "Enable logging for the package" }
100
27
]
101
28
102
29
@classmethod
103
- def load_config (self , file_path = None ):
104
- """to load configurations from the user config file"""
30
+ def load_config (cls , file_path = None ):
31
+ """Load configurations from a config file or environment variables. """
105
32
config_file_name = ".codegreencore.config"
106
33
config_locations = [
107
34
os .path .join (os .path .expanduser ("~" ), config_file_name ),
@@ -111,63 +38,46 @@ def load_config(self, file_path=None):
111
38
if os .path .isfile (loc ):
112
39
file_path = loc
113
40
break
41
+ cls .config_data = configparser .ConfigParser ()
42
+ if file_path :
43
+ cls .config_data .read (file_path )
44
+ cls .config_file_path = file_path
114
45
115
- if file_path is None :
116
- raise ConfigError ("Could not find the '.codegreencore.config' file. Please ensure that this file is created in the root folder of your project." )
117
-
118
- self .config_data = configparser .ConfigParser ()
119
- self .config_data .read (file_path )
120
- self .config_file_path = file_path
121
-
122
- if self .section_name not in self .config_data :
123
- self .config_data [self .section_name ] = {}
124
- raise ConfigError ("Invalid config file. The config file must have a section called codegreen" )
46
+ if cls .section_name not in cls .config_data :
47
+ raise ConfigError (f"Invalid config file. Missing required section: { cls .section_name } " )
48
+ else :
49
+ cls .config_data [cls .section_name ] = {}
125
50
126
- for ky in self .all_keys :
127
- try :
128
- value = self .config_data .get (self .section_name , ky ["name" ])
129
- # print(value)
130
- except configparser .NoOptionError :
131
- # print(ky)
132
- self .config_data .set (self .section_name , ky ["name" ],ky ["default" ])
133
-
134
- if self .get ("enable_energy_caching" ) == True :
135
- if self .get ("energy_redis_path" ) is None :
136
- raise ConfigError (
137
- "Invalid configuration. If 'enable_energy_caching' is set, 'energy_redis_path' is also required "
138
- )
51
+ for ky in cls .all_keys :
52
+ if cls .config_data .has_option (cls .section_name , ky ["name" ]):
53
+ value = cls .config_data .get (cls .section_name , ky ["name" ])
139
54
else :
140
- r = redis .from_url (self .get ("energy_redis_path" ))
141
- r .ping ()
142
- # print("Connection to redis works")
55
+ env_key = f"cgc_{ ky ['name' ]} "
56
+ value = os .getenv (env_key , ky ["default" ])
57
+ cls .config_data .set (cls .section_name , ky ["name" ], value )
58
+
59
+ if cls .get ("enable_energy_caching" ):
60
+ if not cls .get ("energy_redis_path" ):
61
+ raise ConfigError ("'energy_redis_path' is required when 'enable_energy_caching' is enabled." )
62
+ redis .from_url (cls .get ("energy_redis_path" )).ping ()
143
63
144
- if self .get ("enable_logging" ) == True :
145
- if self .get ("log_folder_path" ) is None :
146
- raise ConfigError (
147
- "Invalid configuration. If 'enable_logging' is set, 'log_folder_path' is also required "
148
- )
149
- else :
150
- base_dir = self .get ("log_folder_path" )
151
- os .makedirs (base_dir , exist_ok = True )
64
+ if cls .get ("enable_logging" ):
65
+ if not cls .get ("log_folder_path" ):
66
+ raise ConfigError ("'log_folder_path' is required when 'enable_logging' is enabled." )
67
+ os .makedirs (cls .get ("log_folder_path" ), exist_ok = True )
152
68
153
69
@classmethod
154
- def get (self , key ):
155
- if not self .config_data .sections ():
156
- raise ConfigError (
157
- "Configuration not loaded. Please call 'load_config' first."
158
- )
159
- try :
160
- value = self .config_data .get (self .section_name , key )
161
- config = next ((d for d in self .all_keys if d .get ("name" ) == key ), None )
162
- if config ["boolean" ]:
163
- return value .lower () == "true"
164
- return value
165
- except (configparser .NoSectionError , configparser .NoOptionError ) as e :
166
- print ("Config not found" )
167
- print (key )
168
- raise e
169
-
70
+ def get (cls , key ):
71
+ if not cls .config_data .sections ():
72
+ raise ConfigError ("Configuration not loaded. Call 'load_config' first." )
73
+
74
+ value = cls .config_data .get (cls .section_name , key , fallback = None )
75
+ config = next ((d for d in cls .all_keys if d ["name" ] == key ), None )
76
+ if config and config ["boolean" ]:
77
+ return value .lower () == "true"
78
+ return value
79
+
170
80
@classmethod
171
- def get_config_file_path (self ):
172
- """Returns the path of the config file"""
173
- return self .config_file_path
81
+ def get_config_file_path (cls ):
82
+ """Returns the path of the config file. """
83
+ return cls .config_file_path
0 commit comments