diff options
author | Bryan Bishop <kanzure@gmail.com> | 2013-09-12 00:34:43 -0500 |
---|---|---|
committer | Bryan Bishop <kanzure@gmail.com> | 2013-09-12 00:34:43 -0500 |
commit | a4849db2658a14deebb6620fac50e9d8e9f8a0ad (patch) | |
tree | 6a753e136986640400e3dffd04b0ff99bb1e2bce /pokemontools/configuration.py | |
parent | 0ce2555a1939ebbd97c2539e46af7d5c30480deb (diff) |
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.
Diffstat (limited to 'pokemontools/configuration.py')
-rw-r--r-- | pokemontools/configuration.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/pokemontools/configuration.py b/pokemontools/configuration.py new file mode 100644 index 0000000..cbf230c --- /dev/null +++ b/pokemontools/configuration.py @@ -0,0 +1,54 @@ +""" +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) + ) |