Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(46)

Unified Diff: client/tests/kvm/kvm_config.py

Issue 6246035: Merge remote branch 'cros/upstream' into master (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/autotest.git@master
Patch Set: patch Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: client/tests/kvm/kvm_config.py
diff --git a/client/tests/kvm/kvm_config.py b/client/tests/kvm/kvm_config.py
index 4fc1029a2fb04b63617d2e1c4b938b1435694083..13cdfe263fcdea0f3f096dcc5347dfacf513bd5d 100755
--- a/client/tests/kvm/kvm_config.py
+++ b/client/tests/kvm/kvm_config.py
@@ -9,7 +9,7 @@ import logging, re, os, sys, optparse, array, traceback, cPickle
import common
import kvm_utils
from autotest_lib.client.common_lib import error
-from autotest_lib.client.common_lib import logging_config, logging_manager
+from autotest_lib.client.common_lib import logging_manager
class config:
@@ -32,7 +32,6 @@ class config:
self.object_cache = []
self.object_cache_indices = {}
self.regex_cache = {}
- self.filename = filename
self.debug = debug
if filename:
self.parse_file(filename)
@@ -46,9 +45,8 @@ class config:
"""
if not os.path.exists(filename):
raise IOError("File %s not found" % filename)
- self.filename = filename
str = open(filename).read()
- self.list = self.parse(configreader(str), self.list)
+ self.list = self.parse(configreader(filename, str), self.list)
def parse_string(self, str):
@@ -57,7 +55,7 @@ class config:
@param str: String to parse.
"""
- self.list = self.parse(configreader(str), self.list)
+ self.list = self.parse(configreader('<string>', str, real_file=False), self.list)
def fork_and_parse(self, filename=None, str=None):
@@ -297,7 +295,7 @@ class config:
# (inside an exception or inside subvariants)
if restricted:
e_msg = "Using variants in this context is not allowed"
- raise error.AutotestError(e_msg)
+ cr.raise_error(e_msg)
if self.debug and not restricted:
_debug_print(indented_line,
"Entering variants block (%d dicts in "
@@ -337,20 +335,21 @@ class config:
continue
if self.debug and not restricted:
_debug_print(indented_line, "Entering file %s" % words[1])
- if self.filename:
- filename = os.path.join(os.path.dirname(self.filename),
- words[1])
- if os.path.exists(filename):
- str = open(filename).read()
- list = self.parse(configreader(str), list, restricted)
- if self.debug and not restricted:
- _debug_print("", "Leaving file %s" % words[1])
- else:
- logging.warning("Cannot include %s -- file not found",
- filename)
- else:
- logging.warning("Cannot include %s because no file is "
- "currently open", words[1])
+
+ cur_filename = cr.real_filename()
+ if cur_filename is None:
+ cr.raise_error("'include' is valid only when parsing a file")
+
+ filename = os.path.join(os.path.dirname(cur_filename),
+ words[1])
+ if not os.path.exists(filename):
+ cr.raise_error("Cannot include %s -- file not found" % (filename))
+
+ str = open(filename).read()
+ list = self.parse(configreader(filename, str), list, restricted)
+ if self.debug and not restricted:
+ _debug_print("", "Leaving file %s" % words[1])
+
continue
# Parse multi-line exceptions
@@ -539,15 +538,20 @@ class configreader:
whose readline() and/or seek() methods seem to be slow.
"""
- def __init__(self, str):
+ def __init__(self, filename, str, real_file=True):
"""
Initialize the reader.
+ @param filename: the filename we're parsing
@param str: The string to parse.
+ @param real_file: Indicates if filename represents a real file. Defaults to True.
"""
+ self.filename = filename
+ self.is_real_file = real_file
self.line_index = 0
self.lines = []
- for line in str.splitlines():
+ self.real_number = []
+ for num, line in enumerate(str.splitlines()):
line = line.rstrip().expandtabs()
stripped_line = line.strip()
indent = len(line) - len(stripped_line)
@@ -556,7 +560,16 @@ class configreader:
or stripped_line.startswith("//")):
continue
self.lines.append((line, stripped_line, indent))
+ self.real_number.append(num + 1)
+
+
+ def real_filename(self):
+ """Returns the filename we're reading, in case it is a real file
+ @returns the filename we are parsing, or None in case we're not parsing a real file
+ """
+ if self.is_real_file:
+ return self.filename
def get_next_line(self):
"""
@@ -588,6 +601,18 @@ class configreader:
"""
self.line_index = index
+ def raise_error(self, msg):
+ """Raise an error related to the last line returned by get_next_line()
+ """
+ if self.line_index == 0: # nothing was read. shouldn't happen, but...
+ line_id = 'BEGIN'
+ elif self.line_index >= len(self.lines): # past EOF
+ line_id = 'EOF'
+ else:
+ # line_index is the _next_ line. get the previous one
+ line_id = str(self.real_number[self.line_index-1])
+ raise error.AutotestError("%s:%s: %s" % (self.filename, line_id, msg))
+
# Array structure:
# ----------------
@@ -682,18 +707,21 @@ if __name__ == "__main__":
options, args = parser.parse_args()
debug = options.debug
if args:
- filename = args[0]
+ filenames = args
else:
- filename = os.path.join(os.path.dirname(sys.argv[0]), "tests.cfg")
+ filenames = [os.path.join(os.path.dirname(sys.argv[0]), "tests.cfg")]
# Here we configure the stand alone program to use the autotest
# logging system.
logging_manager.configure_logging(kvm_utils.KvmLoggingConfig(),
verbose=debug)
- dicts = config(filename, debug=debug).get_generator()
+ cfg = config(debug=debug)
+ for fn in filenames:
+ cfg.parse_file(fn)
+ dicts = cfg.get_generator()
for i, dict in enumerate(dicts):
- logging.info("Dictionary #%d:", i)
+ print "Dictionary #%d:" % (i)
keys = dict.keys()
keys.sort()
for key in keys:
- logging.info(" %s = %s", key, dict[key])
+ print " %s = %s" % (key, dict[key])
« cli/job.py ('K') | « client/tests/kvm/kvm.py ('k') | client/tests/kvm/kvm_monitor.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698