[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [bridgedb/master] Add opt module with updated options parsers.



commit 2da70e4215c9026e71d28a2ebd01cbce75b04b38
Author: Isis Lovecruft <isis@xxxxxxxxxxxxxx>
Date:   Tue Oct 15 13:59:00 2013 +0000

    Add opt module with updated options parsers.
---
 lib/bridgedb/opt.py |  108 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 108 insertions(+)

diff --git a/lib/bridgedb/opt.py b/lib/bridgedb/opt.py
new file mode 100644
index 0000000..628f04d
--- /dev/null
+++ b/lib/bridgedb/opt.py
@@ -0,0 +1,108 @@
+# -*- coding: utf-8 -*-
+#
+# This file is part of BridgeDB, a Tor bridge distribution system.
+#
+# :authors: Isis Lovecruft 0xA3ADB67A2CDB8B35 <isis@xxxxxxxxxxxxxx>
+#           please also see AUTHORS file
+# :copyright: (c) 2007-2013, The Tor Project, Inc.
+#             (c) 2007-2013, all entities within the AUTHORS file
+# :license: 3-clause BSD, see included LICENSE for information
+
+"""Classes for commandline options parsing.
+
+** Module Overview: **
+
+"""
+
+from __future__ import print_function
+
+import sys
+import textwrap
+
+from twisted.python import usage
+
+# from ._version import get_versions
+# __version__ = get_versions()['version']
+# del get_versions
+from bridgedb import __version__
+
+
+def parseOptions():
+    """Create the main options parser and its subcommand parsers.
+
+    Any :exc:`~twisted.python.usage.UsageErrors` which are raised due to
+    invalid options are ignored; their error message is printed and then we
+    exit the program.
+
+    :rtype: :class:`MainOptions`
+    :returns: The main options parsing class, with any commandline arguments
+        already parsed.
+    """
+    options = MainOptions()
+    try:
+        options.parseOptions()
+    except usage.UsageError as uerr:
+        print(uerr.message)
+        sys.exit(1)
+    return options
+
+
+class BaseOptions(usage.Options):
+    """Base options included in all main and sub options menus."""
+
+    longdesc = textwrap.dedent("""BridgeDB is a proxy distribution system for
+    private relays acting as bridges into the Tor network.""")
+
+    optFlags = [['verbose', 'v', 'Log to stdout']]
+
+    def __init__(self):
+        """Create an options parser. All flags, parameters, and attributes of
+        this base options parser are inherited by all child classes.
+        """
+        usage.Options.__init__(self)
+        self['version'] = self.opt_version
+
+    def opt_version(self):
+        """Display BridgeDB version and exit."""
+        print("%s-%s" % (__package__, __version__))
+        sys.exit()
+
+
+class TestOptions(BaseOptions):
+    """Suboptions for running twisted.trial and unittest based tests."""
+
+    optFlags = [['coverage', 'c', 'Generate coverage statistics']]
+    optParameters = [
+        ['descriptors', 'n', 1000, 'Generate <N> fake bridge descriptors'],
+        ['file', 'f', None, 'Run tests in specific file(s) (trial only)'],
+        ['unittests', 'u', False, 'Run unittests in bridgedb.Tests'],
+        ['trial', 't', True, 'Run twisted.trial tests in bridgedb.test']]
+
+    completionData = usage.Completions(
+        mutuallyExclusive=[('unittests', 'coverage'),
+                           ('unittests', 'file')],
+        optActions={'file': usage.CompleteFiles('lib/bridgedb/test/test_*.py',
+                                                repeat=True,
+                                                descr="test filename")},
+        extraActions=[
+            usage.Completer(descr="extra arguments to pass to trial")])
+
+    def parseArgs(self, *args):
+        """Parse any additional arguments after the options and flags."""
+        self['test_args'] = args
+
+
+class MainOptions(BaseOptions):
+    """Main commandline options parser for BridgeDB."""
+
+    optFlags = [
+        ['reload', 'r',
+         'Reload bridge descriptors by sending a SIGHUP to BridgeDB'],
+        ['dump-bridges', 'd', 'Dump bridges by hashring assignment into files']]
+    optParameters = [
+        ['config', 'c', './bridgedb.conf', 'Configuration file']]
+
+    subCommands = [
+        ['test', None, TestOptions,
+         'Run twisted.trial tests or unittests {}'.format(
+             '(see `bridgedb test --help`)')]]



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits