Configurable

Configurable.py

Provides configuration file functionality.

class MiscUtils.Configurable.Configurable

Bases: object

Abstract superclass for configuration file functionality.

Subclasses should override:

  • defaultConfig() to return a dictionary of default settings

    such as {‘Frequency’: 5}

  • configFilename() to return the filename by which users can

    override the configuration such as ‘Pinger.config’

Subclasses typically use the setting() method, for example:

time.sleep(self.setting(‘Frequency’))

They might also use the printConfig() method, for example:

self.printConfig() # or self.printConfig(file)

Users of your software can create a file with the same name as configFilename() and selectively override settings. The format of the file is a Python dictionary.

Subclasses can also override userConfig() in order to obtain the user configuration settings from another source.

__init__()
commandLineConfig()

Return the settings that came from the command-line.

These settings come via addCommandLineSetting().

config()

Return the configuration of the object as a dictionary.

This is a combination of defaultConfig() and userConfig(). This method caches the config.

configFilename()

Return the full name of the user config file.

Users can override the configuration by this config file. Subclasses must override to specify a name. Returning None is valid, in which case no user config file will be loaded.

configName()

Return the name of the configuration file without the extension.

This is the portion of the config file name before the ‘.config’. This is used on the command-line.

configReplacementValues()

Return a dictionary for substitutions in the config file.

This must be a dictionary suitable for use with “string % dict” that should be used on the text in the config file. If an empty dictionary (or None) is returned, then no substitution will be attempted.

defaultConfig()

Return a dictionary with all the default values for the settings.

This implementation returns {}. Subclasses should override.

hasSetting(name)

Check whether a configuration setting has been changed.

printConfig(dest=None)

Print the configuration to the given destination.

The default destination is stdout. A fixed with font is assumed for aligning the values to start at the same column.

static readConfig(filename)

Read the configuration from the file with the given name.

Raises an UIError if the configuration cannot be read.

This implementation assumes the file is stored in utf-8 encoding with possible BOM at the start, but also tries to read as latin-1 if it cannot be decoded as utf-8. Subclasses can override this behavior.

setSetting(name, value)

Set a particular configuration setting.

setting(name, default=<class 'MiscUtils.NoDefault'>)

Return the value of a particular setting in the configuration.

userConfig()

Return the user config overrides.

These settings can be found in the optional config file. Returns {} if there is no such file.

The config filename is taken from configFilename().

exception MiscUtils.Configurable.ConfigurationError

Bases: Exception

Error in configuration file.

__init__(*args, **kwargs)
args
with_traceback()

Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.

MiscUtils.Configurable.addCommandLineSetting(name, value)

Override the configuration with a command-line setting.

Take a setting, like “Application.Verbose=0”, and call addCommandLineSetting(‘Application.Verbose’, ‘0’), and it will override any settings in Application.config

MiscUtils.Configurable.commandLineSetting(configName, settingName, default=<class 'MiscUtils.NoDefault'>)

Retrieve a command-line setting.

You can use this with non-existent classes, like “Context.Root=/Webware”, and then fetch it back with commandLineSetting(‘Context’, ‘Root’).