pokemon-reverse-engineering.../pokemontools/configuration.py
Bryan Bishop a4849db265 rename config.py -> configuration.py
This should help cut down on the confusion between the "config" module
and the "config" variable that everyone likes to use. The config
variable should refer to an instance of Config, whereas before it was
being shared as both the name of the module and the name of an instance.

"configuration" is always the module. "config" should always be a Config
instance.

TODO: avoid passing around a Config instance everywhere.
2013-09-12 00:34:43 -05:00

55 lines
1.6 KiB
Python

"""
Configuration
"""
import os
import exceptions
class Config(object):
"""
The Config class handles all configuration for pokemontools. Other classes
and functions use a Config object to determine where expected files can be
located.
"""
def __init__(self, **kwargs):
"""
Store all parameters.
"""
self._config = {}
for (key, value) in kwargs.items():
if key not in self.__dict__:
self._config[key] = value
else:
raise exceptions.ConfigException(
"Can't store \"{0}\" in configuration because the key conflicts with an existing property."
.format(key)
)
if "path" not in self._config:
self._config["path"] = os.getcwd()
# vba save states go into ./save-states/
if "save_state_path" not in self._config:
self._config["save_state_path"] = os.path.join(self._config["path"], "save-states/")
# assume rom is at ./baserom.gbc
if "rom" not in self._config:
self._config["rom_path"] = os.path.join(self._config["path"], "baserom.gbc")
def __getattr__(self, key):
"""
Grab the value from the class properties, then check the configuration,
and raise an exception if nothing works.
"""
if key in self.__dict__:
return self.__dict__[key]
elif key in self._config:
return self._config[key]
else:
raise exceptions.ConfigException(
"no config found for \"{0}\"".format(key)
)