[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [stem/master] Config support for multi-line entries
commit 1f5b05766ce0c2533d8bd2861d142cc6523e4410
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date: Tue Jan 24 09:26:59 2012 -0800
Config support for multi-line entries
Adding support for multi-line values in the configuration files. I've wanted
this for a while, mostly for user facing messages. This still needs an integ
test.
---
run_tests.py | 19 ++-----------------
stem/util/conf.py | 25 ++++++++++++++++++++++++-
test/settings.cfg | 16 ++++++++++++++++
3 files changed, 42 insertions(+), 18 deletions(-)
diff --git a/run_tests.py b/run_tests.py
index 9e9eb00..6972e16 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -43,6 +43,7 @@ CONFIG = {
"argument.log": None,
"argument.tor": "tor",
"argument.no_color": False,
+ "msg.help": "",
"target.config": {},
"target.description": {},
"target.prereq": {},
@@ -91,22 +92,6 @@ INTEG_TESTS = (
test.integ.connection.connect.TestConnect,
)
-# TODO: move into settings.cfg when we have multi-line options
-HELP_MSG = """Usage runTests.py [OPTION]
-Runs tests for the stem library.
-
- -u, --unit runs unit tests
- -i, --integ runs integration tests
- -c, --config PATH path to a custom test configuration
- -t, --target TARGET comma separated list of extra targets for integ tests
- -l, --log RUNLEVEL includes logging output with test results, runlevels:
- TRACE, DEBUG, INFO, NOTICE, WARN, ERROR
- --tor PATH custom tor binary to run testing against
- --no-color displays testing output without color
- -h, --help presents this help
-
- Integration targets:"""
-
def load_user_configuration(test_config):
"""
Parses our commandline arguments, loading our custom test configuration if
@@ -155,7 +140,7 @@ def load_user_configuration(test_config):
# Prints usage information and quits. This includes a listing of the
# valid integration targets.
- print HELP_MSG
+ print CONFIG["msg.help"]
# gets the longest target length so we can show the entries in columns
target_name_length = max(map(len, Target))
diff --git a/stem/util/conf.py b/stem/util/conf.py
index 8a1fcfc..67bd253 100644
--- a/stem/util/conf.py
+++ b/stem/util/conf.py
@@ -11,6 +11,13 @@ ignored. For instance:
blankEntry.example
would be loaded as four entries, the last one's value being an empty string.
+Mulit-line entries can be defined my providing an entry followed by lines with
+a '|' prefix. For instance...
+
+ msg.greeting
+ |This is a multi-line message
+ |exclaiming about the wonders
+ |and awe that is pepperjack!
get_config - Singleton for getting configurations
Config - Custom configuration.
@@ -173,8 +180,11 @@ class Config():
self._contents_lock.acquire()
self._raw_contents = read_contents
+ remainder = list(self._raw_contents)
- for line in self._raw_contents:
+ while remainder:
+ line = remainder.pop(0)
+
# strips any commenting or excess whitespace
comment_start = line.find("#")
if comment_start != -1: line = line[:comment_start]
@@ -189,6 +199,19 @@ class Config():
log.debug("Config entry '%s' is expected to be of the format 'Key Value', defaulting to '%s' -> ''" % (line, line))
key, value = line, ""
+ if not value:
+ # this might be a multi-line entry, try processing it as such
+ multiline_buffer = []
+
+ while remainder and remainder[0].lstrip().startswith("|"):
+ content = remainder.pop(0).lstrip()[1:] # removes '\s+|' prefix
+ content = content.rstrip("\n") # trailing newline
+ multiline_buffer.append(content)
+
+ if multiline_buffer:
+ self.set(key, "\n".join(multiline_buffer), False)
+ continue
+
self.set(key, value, False)
self._path = path
diff --git a/test/settings.cfg b/test/settings.cfg
index 19f5187..e004a98 100644
--- a/test/settings.cfg
+++ b/test/settings.cfg
@@ -6,6 +6,22 @@
# target.* - Attributes of the integration testing targets. This helps
# determine what is ran when the user runs with '--target'.
+msg.help
+|Usage runTests.py [OPTION]
+|Runs tests for the stem library.
+|
+| -u, --unit runs unit tests
+| -i, --integ runs integration tests
+| -c, --config PATH path to a custom test configuration
+| -t, --target TARGET comma separated list of extra targets for integ tests
+| -l, --log RUNLEVEL includes logging output with test results, runlevels:
+| TRACE, DEBUG, INFO, NOTICE, WARN, ERROR
+| --tor PATH custom tor binary to run testing against
+| --no-color displays testing output without color
+| -h, --help presents this help
+|
+| Integration targets:
+
##################
# CATEGORY: TARGET #
##################
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits