diff options
Diffstat (limited to 'build/lib.linux-x86_64-2.7/dogtail/config.py')
-rw-r--r-- | build/lib.linux-x86_64-2.7/dogtail/config.py | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/build/lib.linux-x86_64-2.7/dogtail/config.py b/build/lib.linux-x86_64-2.7/dogtail/config.py new file mode 100644 index 00000000000..82e197cf523 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/dogtail/config.py @@ -0,0 +1,219 @@ +""" +The configuration module. +""" +__author__ = "Zack Cerza <zcerza@redhat.com>, David Malcolm <dmalcolm@redhat.com>" + +import os +import sys +import locale + + +def _userTmpDir(baseName): + # i.e. /tmp/dogtail-foo + return '-'.join(('/'.join(('/tmp', baseName)), os.environ['USER'])) + + +class _Config(object): + + """ + Contains configuration parameters for the dogtail run. + + scratchDir(str): + Directory where things like screenshots are stored. + + dataDir(str): + Directory where related data files are located. + + logDir(str): + Directory where dogtail.tc.TC*-generated logs are stored. + + scriptName(str) [Read-Only]: + The name of the script being run. + + encoding(str) + The encoding for text, used by dogtail.tc.TCString . + + actionDelay(float): + The delay after an action is executed. + + typingDelay(float): + The delay after a character is typed on the keyboard. + + runInterval(float): + The interval at which dogtail.utils.run() and dogtail.procedural.run() + check to see if the application has started up. + + runTimeout(int): + The timeout after which dogtail.utils.run() and dogtail.procedural.run() + give up on looking for the newly-started application. + + searchBackoffDuration (float): + Time in seconds for which to delay when a search fails. + + searchWarningThreshold (int): + Number of retries before logging the individual attempts at a search. + + searchCutoffCount (int): + Number of times to retry when a search fails. + + defaultDelay (float): + Default time in seconds to sleep when delaying. + + childrenLimit (int): + When there are a very large number of children of a node, only return + this many, starting with the first. + + debugSearching (boolean): + Whether to write info on search backoff and retry to the debug log. + + debugSleep (boolean): + Whether to log whenever we sleep to the debug log. + + debugSearchPaths (boolean): + Whether we should write out debug info when running the SearchPath + routines. + + absoluteNodePaths (boolean): + Whether we should identify nodes in the logs with long 'abcolute paths', or + merely with a short 'relative path'. FIXME: give examples + + ensureSensitivity (boolean): + Should we check that ui nodes are sensitive (not 'greyed out') before + performing actions on them? If this is True (the default) it will raise + an exception if this happens. Can set to False as a workaround for apps + and toolkits that don't report sensitivity properly. + + debugTranslation (boolean): + Whether we should write out debug information from the translation/i18n + subsystem. + + blinkOnActions (boolean): + Whether we should blink a rectangle around a Node when an action is + performed on it. + + fatalErrors (boolean): + Whether errors encountered in dogtail.procedural should be considered + fatal. If True, exceptions will be raised. If False, warnings will be + passed to the debug logger. + + checkForA11y (boolean): + Whether to check if accessibility is enabled. If not, just assume it is + (default True). + + logDebugToFile (boolean): + Whether to write debug output to a log file. + + logDebugToStdOut (boolean): + Whether to print log output to console or not (default True). + """ + @property + def scriptName(self): + return os.path.basename(sys.argv[0]).replace('.py', '') + + @property + def encoding(self): + return locale.getpreferredencoding().lower() + + defaults = { + # Storage + 'scratchDir': '/'.join((_userTmpDir('dogtail'), '')), + 'dataDir': '/'.join((_userTmpDir('dogtail'), 'data', '')), + 'logDir': '/'.join((_userTmpDir('dogtail'), 'logs', '')), + 'scriptName': scriptName.fget(None), + 'encoding': encoding.fget(None), + 'configFile': None, + 'baseFile': None, + + # Timing and Limits + 'actionDelay': 1.0, + 'typingDelay': 0.1, + 'runInterval': 0.5, + 'runTimeout': 30, + 'searchBackoffDuration': 0.5, + 'searchWarningThreshold': 3, + 'searchCutoffCount': 20, + 'defaultDelay': 0.5, + 'childrenLimit': 100, + + # Debug + 'debugSearching': False, + 'debugSleep': False, + 'debugSearchPaths': False, + 'logDebugToStdOut': True, + 'absoluteNodePaths': False, + 'ensureSensitivity': False, + 'debugTranslation': False, + 'blinkOnActions': False, + 'fatalErrors': False, + 'checkForA11y': True, + + # Logging + 'logDebugToFile': True + } + + options = {} + + invalidValue = "__INVALID__" + + def __init__(self): + _Config.__createDir(_Config.defaults['scratchDir']) + _Config.__createDir(_Config.defaults['logDir']) + _Config.__createDir(_Config.defaults['dataDir']) + + def __setattr__(self, name, value): + if name not in config.defaults: + raise AttributeError(name + " is not a valid option.") + + elif _Config.defaults[name] != value or \ + _Config.options.get(name, _Config.invalidValue) != value: + if 'Dir' in name: + _Config.__createDir(value) + if value[-1] != os.path.sep: + value = value + os.path.sep + elif name == 'logDebugToFile': + import logging + logging.debugLogger = logging.Logger('debug', value) + _Config.options[name] = value + + def __getattr__(self, name): + try: + return _Config.options[name] + except KeyError: + try: + return _Config.defaults[name] + except KeyError: + raise AttributeError("%s is not a valid option." % name) + + def __createDir(cls, dirName, perms=0o777): + """ + Creates a directory (if it doesn't currently exist), creating any + parent directories it needs. + + If perms is None, create with python's default permissions. + """ + dirName = os.path.abspath(dirName) + # print "Checking for %s ..." % dirName, + if not os.path.isdir(dirName): + if perms: + umask = os.umask(0) + os.makedirs(dirName, perms) + os.umask(umask) + else: + # This is probably a dead code - no other functions call this without the permissions set + os.makedirs(dirName) # pragma: no cover + __createDir = classmethod(__createDir) + + def load(self, dict): + """ + Loads values from dict, preserving any options already set that are not overridden. + """ + _Config.options.update(dict) + + def reset(self): + """ + Resets all settings to their defaults. + """ + _Config.options = {} + + +config = _Config() |