From def5b19eae658e9abbf77996fe59567d68ea8cc1 Mon Sep 17 00:00:00 2001 From: Daniel Brown <ddb@star.sr.bham.ac.uk> Date: Mon, 9 Jan 2017 22:12:47 +0000 Subject: [PATCH] further work for freezing components --- pykat/finesse.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/pykat/finesse.py b/pykat/finesse.py index 93bf52f..e0eaf27 100644 --- a/pykat/finesse.py +++ b/pykat/finesse.py @@ -840,7 +840,7 @@ class kat(object): return object.__new__(cnew) def __init__(self, kat_file=None, kat_code=None, katdir="", katname="", tempdir=None, tempname=None): - + self._unfreeze() self.__looking = False self.scene = None # scene object for GUI self.verbose = True @@ -887,7 +887,18 @@ class kat(object): if kat_file != None: self.loadKatFile(kat_file) + + self._freeze() + + def _freeze(self): self.__dict__["____FROZEN____"] = True + def _unfreeze(self): self.__dict__["____FROZEN____"] = False + + def __setattr__(self, name, value): + if "____FROZEN____" in self.__dict__ and self.__dict__["____FROZEN____"] and not hasattr(self, name): + warnings.warn("'%s' does not have attribute called '%s'" % (self.__name, name), stacklevel=2) + super(kat, self).__setattr__(name, value) + def deepcopy(self): return copy.deepcopy(self) @@ -2033,6 +2044,7 @@ class kat(object): def add(self, obj, block=NO_BLOCK): try: + self._unfreeze() obj.tag = block self.__blocks[block].contents.append(obj) @@ -2065,9 +2077,11 @@ class kat(object): raise pkex.BasePyKatException("Object {0} could not be added".format(obj)) obj._on_kat_add(self) - + except pkex.BasePyKatException as ex: pkex.PrintError("Error on adding object:", ex) + finally: + self._freeze() def readOutFile(self, filename): -- GitLab