diff -r 1c2241dde942 -r 6eea85d8b91d VirtualMailManager/common.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/VirtualMailManager/common.py Sat Apr 24 02:49:45 2010 +0000 @@ -0,0 +1,72 @@ +# -*- coding: UTF-8 -*- +# Copyright (c) 2010, Pascal Volk +# See COPYING for distribution information. + +""" + VirtualMailManager.common + + Some common functions +""" + +import os + +from VirtualMailManager import ENCODING +from VirtualMailManager.constants.ERROR import \ + NOT_EXECUTABLE, NO_SUCH_BINARY, NO_SUCH_DIRECTORY +from VirtualMailManager.errors import VMMError + +_ = lambda msg: msg + + +def expand_path(path): + """Expands paths, starting with ``.`` or ``~``, to an absolute path.""" + if path.startswith('.'): + return os.path.abspath(path) + if path.startswith('~'): + return os.path.expanduser(path) + return path + + +def get_unicode(string): + """Converts `string` to `unicode`, if necessary.""" + if isinstance(string, unicode): + return string + return unicode(string, ENCODING, 'replace') + + +def is_dir(path): + """Checks if `path` is a directory. + + Throws a `VMMError` if `path` is not a directory. + """ + path = expand_path(path) + if not os.path.isdir(path): + raise VMMError(_(u"'%s' is not a directory") % get_unicode(path), + NO_SUCH_DIRECTORY) + return path + + +def exec_ok(binary): + """Checks if the `binary` exists and if it is executable. + + Throws a `VMMError` if the `binary` isn't a file or is not + executable. + """ + binary = expand_path(binary) + if not os.path.isfile(binary): + raise VMMError(_(u"'%s' is not a file") % get_unicode(binary), + NO_SUCH_BINARY) + if not os.access(binary, os.X_OK): + raise VMMError(_(u"File is not executable: '%s'") % + get_unicode(binary), NOT_EXECUTABLE) + return binary + + +def version_hex(version_string): + """Convert the version string '1.2.3' to an int. + hex(version_hex('1.2.3')) -> '0x10203' + """ + major, minor, patch = map(int, version_string.split('.')) + return (major << 16) + (minor << 8) + patch + +del _