def test_shared_data(tmp_path, parent, save_meth): for i in range(2): m = mx.new_model("SharedDataTest" + str(i)) if parent == "model": p = m else: p = m.new_space("SharedDataTest") parent_name = p.name kwargs = testargs[i].copy() kwargs["path"] = tmp_path / "testexcel.xlsx" kwargs["sheet"] = "TestTables" kwargs["loadpath"] = XL_TESTDATA expected = kwargs.pop("expected").copy() p.new_excel_range(**kwargs) xlr = getattr(p, kwargs["name"]) for key, val in xlr.items(): xlr[key] = 2 * val for key, val in expected.items(): expected[key] = 2 * val getattr(m, save_meth)(tmp_path / ("model" + str(i))) assert xlr == expected for i in range(2): m = mx.get_models()["SharedDataTest" + str(i)] m.close() for i in range(2): m2 = mx.read_model(tmp_path / ("model" + str(i))) p2 = m2 if parent == "model" else m2.spaces["SharedDataTest"] kwargs = testargs[i] name = kwargs["name"] expected = kwargs["expected"].copy() expected = {key: 2 * val for key, val in expected.items()} assert getattr(p2, name) == expected for i in range(2): m = mx.get_models()["SharedDataTest" + str(i)] m.close() assert not mx.core.mxsys._check_sanity()
def _parse_dir(self, path_: pathlib.Path = None, target=None): result = _InstructionList() if target is None: path_ = self.path if "name" in self.kwargs and self.kwargs["name"]: name = self.kwargs["name"] self.is_renamed = True else: i = 1 while True: name = "Temp" + ("%04d" % i) if name in mx.get_models(): i += 1 else: break self.model = target = model = mx.new_model(name) result.extend(self._parse_source(path_ / "_model.py", model)) for source in path_.glob("[!_]*.py"): name = source.name[:-3] space = target.new_space(name=name) result.extend(self._parse_source(source, space)) for subdir in path_.iterdir(): if subdir.is_dir(): next_target = target.spaces[subdir.name] result.extend(self._parse_dir(subdir, target=next_target)[0]) return result, target
def get_modellist(): modellist = [m._baseattrs for m in mx.get_models().values()] cur = mx.cur_model() if cur: modellist.insert(0, mx.cur_model()._baseattrs) else: modellist.insert(0, None) return modellist
def _get_or_create_model(self, model): """ if model is blank, current model is used if exits, otherwise new model is created. """ import modelx as mx if model: return mx.get_models()[model] else: return mx.cur_model() if mx.cur_model() else mx.new_model()
def mx_get_modellist(self): """Returns a list of model info. Returns a list of dicts of basic model attributes. The first element of the list is the current model info. None if not current model is set. """ import modelx as mx from modelx.core.base import Interface data = [Interface._baseattrs.fget(m) for m in mx.get_models().values()] if mx.cur_model(): cur = Interface._baseattrs.fget(mx.cur_model()) else: cur = None data.insert(0, cur) if spyder.version_info > (4, ): return data else: self.send_mx_msg("modellist", data=data)
def test_getattr_models(testmodel): assert mx.models == mx.get_models()
def test_get_models(testmodel): assert mx.get_models() == {testmodel.name: testmodel}
if cur: modellist.insert(0, mx.cur_model()._baseattrs) else: modellist.insert(0, None) return modellist if __name__ == "__main__": model, space = mx.new_model("ModelA"), mx.new_space("SpaceA") model, space = mx.new_model("ModelB"), mx.new_space("SpaceB") model, space = mx.new_model("ModelC"), mx.new_space("SpaceC") @mx.defcells def fibo(x): if x == 0 or x == 1: return x else: return fibo[x - 1] + fibo[x - 2] app = QApplication.instance() if not app: app = QApplication(sys.argv) w = Window(model) mx.get_models()["ModelA"].close() w.show() w.combo.update_modellist(get_modellist()) app.exec_()
def mx_write_model(self, model, modelpath, backup): import modelx as mx mx.write_model(mx.get_models()[model], modelpath, backup)
def mx_del_model(self, name): import modelx as mx mx.get_models()[name].close() self.send_mx_msg("mxupdated")
def test_get_models(testmodel): assert testmodel.name in mx.get_models().keys() assert testmodel in mx.get_models().values()