diff --git a/pykat/freeze.py b/pykat/freeze.py new file mode 100644 index 0000000000000000000000000000000000000000..20a24a7c4152f1143ed5888220240afa04bda72a --- /dev/null +++ b/pykat/freeze.py @@ -0,0 +1,25 @@ +import warnings + +def canFreeze(cls): + + def _freeze(self): self.__dict__["____FROZEN____"] = True + def _unfreeze(self): self.__dict__["____FROZEN____"] = False + + def frozensetattr(self, name, value): + if "____FROZEN____" in self.__dict__ and self.__dict__["____FROZEN____"] and not hasattr(self, name): + if hasattr(self, "name"): + n = self.name + elif hasattr(self, "__name"): + n = self.__name + else: + n = self.__class__.__name__ + + warnings.warn("'%s' does not have attribute called '%s'" % (n, name), stacklevel=2) + + super(cls, self).__setattr__(name, value) + + cls.__setattr__ = frozensetattr + cls._freeze = _freeze + cls._unfreeze = _unfreeze + + return cls \ No newline at end of file