Fix show element command for Py3K
[mudpy.git] / lib / mudpy / misc.py
index ea18ffb..f4c8779 100644 (file)
@@ -1,6 +1,6 @@
 """Miscellaneous functions for the mudpy engine."""
 
-# Copyright (c) 2004-2015 Jeremy Stanley <fungi@yuggoth.org>. Permission
+# Copyright (c) 2004-2016 Jeremy Stanley <fungi@yuggoth.org>. Permission
 # to use, copy, modify, and distribute this software is granted under
 # terms provided in the LICENSE file distributed with this software.
 
@@ -840,14 +840,14 @@ class User:
         if self.output_queue:
             try:
                 self.connection.send(self.output_queue[0])
-                del self.output_queue[0]
             except BrokenPipeError:
                 if self.account and self.account.get("name"):
                     account = self.account.get("name")
                 else:
                     account = "an unknown user"
-                log("Broken pipe sending to %s." % account, 7)
                 self.state = "disconnecting"
+                log("Broken pipe sending to %s." % account, 7)
+            del self.output_queue[0]
 
     def enqueue_input(self):
         """Process and enqueue any new input."""
@@ -1003,10 +1003,8 @@ def log(message, level=0):
     syslog_name = universe.categories["internal"]["logging"].get("syslog")
     timestamp = time.asctime()[4:19]
 
-    # turn the message into a list of lines
-    lines = filter(
-        lambda x: x != "", [(x.rstrip()) for x in message.split("\n")]
-    )
+    # turn the message into a list of nonempty lines
+    lines = [x for x in [(x.rstrip()) for x in message.split("\n")] if x != ""]
 
     # send the timestamp and line to a file
     if file_name:
@@ -1058,7 +1056,7 @@ def get_loglines(level, start, stop):
     """Return a specific range of loglines filtered by level."""
 
     # filter the log lines
-    loglines = filter(lambda x: x[0] >= level, universe.loglines)
+    loglines = [x for x in universe.loglines if x[0] >= level]
 
     # we need these in several places
     total_count = str(len(universe.loglines))
@@ -1344,9 +1342,12 @@ def replace_macros(user, text, is_input=False):
     return text
 
 
-def escape_macros(text):
+def escape_macros(value):
     """Escapes replacement macros in text."""
-    return text.replace("$(", "$_(")
+    if type(value) is str:
+        return value.replace("$(", "$_(")
+    else:
+        return value
 
 
 def first_word(text, separator=" "):
@@ -2171,10 +2172,9 @@ def command_show(actor, parameters):
                        + "\" element (in \"" + element.origin.filename
                        + "\"):$(eol)")
             facets = element.facets()
-            facets.sort()
-            for facet in facets:
-                message += ("$(eol)   $(grn)" + facet + ": $(red)"
-                            + escape_macros(element.get(facet)) + "$(nrm)")
+            for facet in sorted(facets):
+                message += ("$(eol)   $(grn)%s: $(red)%s$(nrm)" %
+                            (facet, escape_macros(element.get(facet))))
         else:
             message = "Element \"" + arguments[1] + "\" does not exist."
     elif arguments[0] == "result":
@@ -2207,8 +2207,8 @@ def command_show(actor, parameters):
                 level = int(arguments[1])
             else:
                 level = -1
-        elif 0 <= actor.owner.account.get("loglevel") <= 9:
-            level = actor.owner.account.get("loglevel")
+        elif 0 <= actor.owner.account.get("loglevel", 0) <= 9:
+            level = actor.owner.account.get("loglevel", 0)
         else:
             level = 1
         if level > -1 and start > -1 and stop > -1: