[tor-commits] [stem/master] Basic interpretor prompt
atagar at torproject.org
atagar at torproject.org
Tue May 6 01:21:12 UTC 2014
commit eed49b22e06b9a0ea549c68a23e3cb60a4ad7e8d
Author: Damian Johnson <atagar at torproject.org>
Date: Sun Apr 6 13:46:56 2014 -0700
Basic interpretor prompt
Passing raw input to the control port and presenting the result.
---
stem/interpretor/__init__.py | 24 +++++++++++++++++++++++-
stem/interpretor/arguments.py | 14 +++++++++-----
2 files changed, 32 insertions(+), 6 deletions(-)
diff --git a/stem/interpretor/__init__.py b/stem/interpretor/__init__.py
index ffe0012..72711c0 100644
--- a/stem/interpretor/__init__.py
+++ b/stem/interpretor/__init__.py
@@ -12,8 +12,23 @@ import sys
import stem.connection
import stem.interpretor.arguments
+import stem.prereq
+
+from stem.util.term import Attr, Color, format
+
+# We can only present a color prompt with python 2.7 or later...
+#
+# http://bugs.python.org/issue12972
+
+if stem.prereq.is_python_27():
+ PROMPT = format(">>> ", Color.GREEN, Attr.BOLD)
+else:
+ PROMPT = ">>> "
+
def main():
+ import readline
+
try:
args = stem.interpretor.arguments.parse(sys.argv[1:])
except ValueError as exc:
@@ -30,10 +45,17 @@ def main():
controller = stem.connection.connect(
control_port = control_port,
control_socket = control_socket,
+ password_prompt = True,
)
if controller is None:
sys.exit(1)
with controller:
- print controller.get_version()
+ while True:
+ try:
+ user_input = raw_input(PROMPT)
+ print controller.msg(user_input)
+ except KeyboardInterrupt as exc:
+ print # move cursor to the following line
+ break
diff --git a/stem/interpretor/arguments.py b/stem/interpretor/arguments.py
index f7feac4..bd6655d 100644
--- a/stem/interpretor/arguments.py
+++ b/stem/interpretor/arguments.py
@@ -8,7 +8,9 @@ Commandline argument parsing for arm.
import collections
import getopt
-DEFAULT_ARGS = {
+import stem.util.connection
+
+DEFAULT_ARGS = {
'control_address': '127.0.0.1',
'control_port': 9051,
'user_provided_port': False,
@@ -19,7 +21,7 @@ DEFAULT_ARGS = {
OPT = 'i:s:h'
-OPT_EXPANDED = [
+OPT_EXPANDED = [
'interface=',
'socket=',
'help',
@@ -39,6 +41,7 @@ prompt -i 1643 attach to control port 1643
prompt -s ~/.tor/socket attach to a control socket in your home directory
"""
+
def parse(argv):
"""
Parses our arguments, providing a named tuple with their values.
@@ -55,7 +58,7 @@ def parse(argv):
try:
getopt_results = getopt.getopt(argv, OPT, OPT_EXPANDED)[0]
except getopt.GetoptError as exc:
- raise ValueError(msg('usage.invalid_arguments', error = exc))
+ raise ValueError('%s (for usage provide --help)' % exc)
for opt, arg in getopt_results:
if opt in ('-i', '--interface'):
@@ -66,12 +69,12 @@ def parse(argv):
if address is not None:
if not stem.util.connection.is_valid_ipv4_address(address):
- raise ValueError(msg('usage.not_a_valid_address', address_input = address))
+ raise ValueError("'%s' isn't a valid IPv4 address" % address)
args['control_address'] = address
if not stem.util.connection.is_valid_port(port):
- raise ValueError(msg('usage.not_a_valid_port', port_input = port))
+ raise ValueError("'%s' isn't a valid port number" % port)
args['control_port'] = int(port)
args['user_provided_port'] = True
@@ -86,6 +89,7 @@ def parse(argv):
Args = collections.namedtuple('Args', args.keys())
return Args(**args)
+
def get_help():
"""
Provides our --help usage information.
More information about the tor-commits
mailing list