Source code for xrag.config
import os
import toml
[docs]
class Config:
_instance = None # Singleton instance
def __new__(cls, config_file_path=None):
if cls._instance is None:
cls._instance = super(Config, cls).__new__(cls)
if config_file_path is None:
config_file_path = 'config.toml'
cls._instance.config = toml.load(config_file_path) # Load the config only once
# Dynamically set attributes based on TOML config
for section, values in cls._instance.config.items():
for key, value in values.items():
setattr(cls._instance, key, value)
return cls._instance
[docs]
def update_config(self, overrides):
for key, value in overrides.items():
if hasattr(self, key):
old_value = getattr(self, key)
new_value = self._convert_type(value, type(old_value))
setattr(self, key, new_value)
else:
print(f"Invalid configuration key: {key}")
def _convert_type(self, value, to_type):
try:
if to_type == bool:
return value.lower() in ('true', '1', 'yes')
elif to_type == int:
return int(value)
elif to_type == float:
return float(value)
elif to_type == str:
return value
else:
return value # For other types
except ValueError:
print(f"Could not convert value '{value}' to type {to_type.__name__}")
return value
[docs]
class GlobalVar:
query_number = 0
[docs]
@staticmethod
def set_query_number(num):
GlobalVar.query_number = num
[docs]
@staticmethod
def get_query_number():
return GlobalVar.query_number
if __name__ == '__main__':
# Usage: Create a global instance
cfg = Config()
# Now you can access config values directly as attributes:
print(cfg.test_init_total_number_documents) # Outputs: 20
print(cfg.api_key) # Outputs the API key from the toml file