summaryrefslogtreecommitdiff
path: root/pokemontools/configuration.py
diff options
context:
space:
mode:
authorBryan Bishop <kanzure@gmail.com>2013-09-12 00:34:43 -0500
committerBryan Bishop <kanzure@gmail.com>2013-09-12 00:34:43 -0500
commita4849db2658a14deebb6620fac50e9d8e9f8a0ad (patch)
tree6a753e136986640400e3dffd04b0ff99bb1e2bce /pokemontools/configuration.py
parent0ce2555a1939ebbd97c2539e46af7d5c30480deb (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.py54
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)
+ )