예제 #1
0
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()
예제 #2
0
    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
예제 #3
0
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
예제 #4
0
    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()
예제 #5
0
    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)
예제 #6
0
 def test_getattr_models(testmodel):
     assert mx.models == mx.get_models()
예제 #7
0
def test_get_models(testmodel):
    assert mx.get_models() == {testmodel.name: testmodel}
예제 #8
0
    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_()

예제 #9
0
 def mx_write_model(self, model, modelpath, backup):
     import modelx as mx
     mx.write_model(mx.get_models()[model], modelpath, backup)
예제 #10
0
 def mx_del_model(self, name):
     import modelx as mx
     mx.get_models()[name].close()
     self.send_mx_msg("mxupdated")
예제 #11
0
def test_get_models(testmodel):
    assert testmodel.name in mx.get_models().keys()
    assert testmodel in mx.get_models().values()