[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