From 347ddf4408c384adc4ac9a449595405c2b2fce47 Mon Sep 17 00:00:00 2001 From: Jeremy Stanley Date: Wed, 27 Sep 2017 16:52:45 +0000 Subject: [PATCH] Fix unhandled exception in show file command When generating the list of nodes from a file for the "show file" command output, treat the data attribute as a list rather than a dict. Previously, use of this command would crash the interpreter on an unhandled exception attempting to invoke a nonexistent (since the data model conversion) .keys() method. While we're here, correct the output preamble to refer to the file contents as "nodes" instead of "elements since it also includes non-element nodes. Also correct the error message when a nonexistent file is requested to say "file" instead of "category" (this was probably cut-n-pasted from "show categories" and missed getting updated). For future safety, add a selftest to exercise the "show files" command. --- mudpy/misc.py | 7 +++---- mudpy/tests/selftest.py | 8 ++++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/mudpy/misc.py b/mudpy/misc.py index 32c0d68..ebccc26 100644 --- a/mudpy/misc.py +++ b/mudpy/misc.py @@ -2164,14 +2164,13 @@ def command_show(actor, parameters): if len(arguments) != 2: message = "You must specify one file." elif arguments[1] in universe.files: - message = ('These are the elements in the "' + arguments[1] + message = ('These are the nodes in the "' + arguments[1] + '" file:$(eol)') - elements = universe.files[arguments[1]].data.keys() - elements.sort() + elements = sorted(universe.files[arguments[1]].data) for element in elements: message += "$(eol) $(grn)" + element + "$(nrm)" else: - message = 'Category "' + arguments[1] + '" does not exist.' + message = 'File "%s" does not exist.' % arguments[1] elif arguments[0] == "element": if len(arguments) != 2: message = "You must specify one element." diff --git a/mudpy/tests/selftest.py b/mudpy/tests/selftest.py index 261fa06..a7fefc2 100644 --- a/mudpy/tests/selftest.py +++ b/mudpy/tests/selftest.py @@ -2,6 +2,7 @@ # to use, copy, modify, and distribute this software is granted under # terms provided in the LICENSE file distributed with this software. +import os import re import sys import telnetlib @@ -177,6 +178,12 @@ test_show_files = ( r' \x1b\[33m\[private\]\x1b\[0m.*> ', ""), ) +test_show_file = ( + (2, "> ", "show file %s" % + os.path.join(os.getcwd(), "data/internal.yaml")), + (2, "These are the nodes in the.*file:.*internal:counters.*> ", ""), +) + test_show_element = ( (2, "> ", "show element mudpy.limit"), (2, r'These are the properties of the "mudpy\.limit" element.*' @@ -228,6 +235,7 @@ dialogue = ( (test_set_facet, "set facet"), (test_set_refused, "refuse altering read-only element"), (test_show_files, "show a list of loaded files"), + (test_show_file, "show nodes from a specific file"), (test_show_element, "show element"), (test_show_log, "show log"), (test_custom_loglevel, "custom loglevel"), -- 2.11.0