Error if set command is used on read-only element
[mudpy.git] / mudpy / misc.py
index 4e32ccc..b0b7290 100644 (file)
@@ -154,6 +154,12 @@ class Element:
 
     def set(self, facet, value):
         """Set values."""
+        if not self.origin.is_writeable() and not self.universe.loading:
+            # break if there is an attempt to update an element from a
+            # read-only file, unless the universe is in the midst of loading
+            # updated data from files
+            raise PermissionError("Altering elements in read-only files is "
+                                  "disallowed")
         if facet in ["loglevel"]:
             value = int(value)
         if not self.has_facet(facet) or not self.get(facet) == value:
@@ -2288,6 +2294,11 @@ def command_set(actor, parameters):
             else:
                 try:
                     universe.contents[element].set(facet, value)
+                except PermissionError:
+                    message = ('The "%s" element is kept in read-only file '
+                               '"%s" and cannot be altered.' %
+                               (element, universe.contents[
+                                        element].origin.filename))
                 except ValueError:
                     message = ('Value "%s" of type "%s" cannot be coerced '
                                'to the correct datatype for facet "%s".' %