Handle ValueError when setting incorrect type
authorJeremy Stanley <fungi@yuggoth.org>
Sun, 2 Jul 2017 15:11:17 +0000 (15:11 +0000)
committerJeremy Stanley <fungi@yuggoth.org>
Sun, 2 Jul 2017 15:11:17 +0000 (15:11 +0000)
Trap for ValueError exceptions when attempting to pass a value to
the set command with an incorrect data type for the facet being set,
returning a clear failure message to the calling user.

mudpy/misc.py
mudpy/tests/selftest.py

index 6cb7804..470fb96 100644 (file)
@@ -2284,11 +2284,17 @@ def command_set(actor, parameters):
             if element not in universe.contents:
                 message = "The \"" + element + "\" element does not exist."
             else:
-                universe.contents[element].set(facet, value)
-                message = ("You have successfully (re)set the \"" + facet
-                           + "\" facet of element \"" + element
-                           + "\". Try \"show element " +
-                           element + "\" for verification.")
+                try:
+                    universe.contents[element].set(facet, value)
+                except ValueError:
+                    message = ("Value \"%s\" of type \"%s\" cannot be coerced "
+                               "to the correct datatype for facet \"%s\"." %
+                               (value, type(value), facet))
+                else:
+                    message = ("You have successfully (re)set the \"" + facet
+                               + "\" facet of element \"" + element
+                               + "\". Try \"show element " +
+                               element + "\" for verification.")
     actor.send(message)
 
 
index 56814d4..a6bb6d6 100644 (file)
@@ -174,6 +174,11 @@ test_custom_loglevel = (
         "[0-9]+\. The matching lines\r\nfrom [0-9]+ to [0-9]+ are:", ""),
 )
 
+test_invalid_loglevel = (
+    (2, "> ", "set account:admin loglevel two"),
+    (2, "Value \"two\" of type \"<class 'str'>\" cannot be coerced .*> ", ""),
+)
+
 test_log_no_errors = (
     (2, "> ", "show log 7"),
     (2, "None of the [0-9]+ lines in memory matches your request\.", ""),
@@ -197,6 +202,7 @@ dialogue = (
     (test_show_element, "show element"),
     (test_show_log, "show log"),
     (test_custom_loglevel, "show log"),
+    (test_invalid_loglevel, "invalid loglevel"),
     (test_log_no_errors, "no errors logged"),
 )