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.
if len(arguments) != 2:
message = "You must specify one file."
elif arguments[1] in universe.files:
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]
- 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:
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."
elif arguments[0] == "element":
if len(arguments) != 2:
message = "You must specify one element."
# to use, copy, modify, and distribute this software is granted under
# terms provided in the LICENSE file distributed with this software.
# to use, copy, modify, and distribute this software is granted under
# terms provided in the LICENSE file distributed with this software.
import re
import sys
import telnetlib
import re
import sys
import telnetlib
r' \x1b\[33m\[private\]\x1b\[0m.*> ', ""),
)
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.*'
test_show_element = (
(2, "> ", "show element mudpy.limit"),
(2, r'These are the properties of the "mudpy\.limit" element.*'
(test_set_facet, "set facet"),
(test_set_refused, "refuse altering read-only element"),
(test_show_files, "show a list of loaded files"),
(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"),
(test_show_element, "show element"),
(test_show_log, "show log"),
(test_custom_loglevel, "custom loglevel"),