diff options
author | Isis Lovecruft <isis@torproject.org> | 2013-02-17 15:23:54 +0000 |
---|---|---|
committer | Isis Lovecruft <isis@torproject.org> | 2013-02-17 15:23:54 +0000 |
commit | 66d60a58ef752f9c9692dd8bdb0f61a5c1dfdb17 (patch) | |
tree | 016980342b8e2610f0010efddcab489a8d30db0a /start_mx.py | |
parent | 364200c25e28d4996024dcf2f0644f5f20cde9ae (diff) | |
parent | 8d2fdc800de469420005f9c5deee4c342950ccc9 (diff) |
Merge branch 'feature/check-recipient' into develop
Diffstat (limited to 'start_mx.py')
-rwxr-xr-x | start_mx.py | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/start_mx.py b/start_mx.py new file mode 100755 index 0000000..d45209c --- /dev/null +++ b/start_mx.py @@ -0,0 +1,146 @@ +#!/usr/bin/env python +#-*- coding: utf-8 -*- +""" + ____ + | MX |_________________________ + ___|____| An encrypting remailer |________ + | |__________________________| | + | is designed for use on a mail exchange | + | with OpenPGP implementations and Postfix, | + | and is part of the Leap Encryption Access | + | Project platform. | + |___________________________________________| +""" + # authors: Isis Agora Lovecruft, <isis@leap.se> 0x2cdb8b35 + # license: AGPLv3, see included LICENCE file. + # copyright: copyright (c) 2013 Isis Agora Lovecruft + + +from __future__ import print_function +from os import getcwd +from os import path as ospath + +import sys + + +application_name = "leap_mx" + +def __get_dirs__(): + """Get the absolute path of the top-level repository directory.""" + here = getcwd() + base = here.rsplit(application_name, 1)[0] + repo = ospath.join(base, application_name) + leap = ospath.join(repo, 'src') + ours = ospath.join(leap, application_name.replace('_', '/')) + return repo, leap, ours + +## py3k check, snagged from python-gnupg-0.3.2 by Vinay Sajip +try: + unicode + _py3k = False +except NameError: + _py3k = True + +## Set the $PYTHONPATH: +repo, leap, ours = __get_dirs__() +sys.path[:] = map(ospath.abspath, sys.path) +sys.path.insert(0, leap) + +## Now we should be able to import ourselves without installation: +try: + from leap.mx import runner + from leap.mx.util import config, log, version +except ImportError, ie: + print("%s \nExiting... \n" % ie.message) + sys.exit(1) + +try: + from twisted.python import usage, runtime, failure + from twisted.python.util import spewer +except ImportError, ie: + print("This software requires Twisted>=12.0.2, please see the README for") + print("help on using virtualenv and pip to obtain requirements.") + + +class MXOptions(usage.Options): + """Command line options for leap_mx.""" + + optParameters = [ + ['config', 'c', 'mx.conf', 'Config file to use']] + optFlags = [ + ['all-tests', 'a', 'Run all unittests'], + ['verbose', 'v', 'Increase logging verbosity']] + + def opt_version(self): + """Print leap_mx version and exit.""" + print("Authors: %s" % version.getAuthors()) + print("Licence: AGPLv3, see included LICENSE file") + print("Copyright: © 2013 Isis Lovecruft, see included COPYLEFT file") + print("Version: %s" % version.getVersion()) + sys.exit(0) + + def opt_spewer(self): + """Print *all of the things*. Useful for debugging.""" + sys.settrace(spewer) + + def parseArgs(self): + """Called with the remaining unrecognised commandline options.""" + log.warn("Couldn't recognise option: %s" % self) + + +if __name__ == "__main__": + dependency_check = runner.CheckRequirements(version.getPackageName(), + version.getPipfile()) + ## the following trickery is for printing the module docstring + ## *before* the options help, and printing it only once: + import __main__ + print("%s" % __main__.__doc__) + __main__.__doc__ = (""" +Example Usage: + $ start_mx.py --config="./my-mx.conf" --spewer +""") + + mx_options = MXOptions() + if len(sys.argv) <= 1: + mx_options.opt_help() + sys.exit(0) + try: + mx_options.parseOptions() + except usage.UsageError, ue: + print("%s" % ue.message) + sys.exit(1) + options = mx_options.opts + + ## Get the config settings: + config.filename = options['config'] + config.loadConfig() + + if config.basic.enable_logfile: + ## Log to file: + logfilename = config.basic.logfile + logfilepath = ospath.join(repo, 'logs') + log.start(logfilename, logfilepath) + else: + ## Otherwise just log to stdout: + log.start() + + log.msg("Testing logging functionality") + if runtime.platform.supportsThreads(): + thread_support = "with thread support." + else: + thread_support = "without thread support." + log.debug("Running %s, with Python %s on %s platform %s" + % (application_name, runtime.shortPythonVersion(), + runtime.platform.getType(), thread_support)) + + if options['verbose']: + config.basic.debug = True + failure.traceupLength = 7 + failure.startDebugMode() + + if options['all-tests']: + from leap.mx import tests + tests.run() + else: + mx_options.getUsage() + sys.exit(1) |