Exemple #1
0
    def test_normalize(self):
        filename_xls_1 = path.join(self.tempdir, 'model-1.xlsx')
        filename_xls_2 = path.join(self.tempdir, 'model-2.xlsx')

        model = Model(id='model',
                      name='test model',
                      version='0.0.1a',
                      wc_lang_version='0.0.0')
        Writer().run(filename_xls_1, model, data_repo_metadata=False)

        # with same destination
        with __main__.App(argv=['normalize', filename_xls_1]) as app:
            app.run()

        model2 = Reader().run(filename_xls_1)[Model][0]
        self.assertTrue(model2.is_equal(model))

        # with different destination
        with __main__.App(
                argv=['normalize', filename_xls_1, '--dest', filename_xls_2
                      ]) as app:
            app.run()

        model2 = Reader().run(filename_xls_2)[Model][0]
        self.assertTrue(model2.is_equal(model))
Exemple #2
0
    def test_difference(self):
        now = datetime.datetime.now().replace(microsecond=0)

        model1 = Model(id='model',
                       name='test model',
                       version='0.0.1a',
                       wc_lang_version='0.0.0',
                       created=now,
                       updated=now)
        filename1 = path.join(self.tempdir, 'model1.xlsx')
        Writer().run(filename1, model1, data_repo_metadata=False)

        model2 = Model(id='model',
                       name='test model',
                       version='0.0.1a',
                       wc_lang_version='0.0.0',
                       created=now,
                       updated=now)
        filename2 = path.join(self.tempdir, 'model2.xlsx')
        Writer().run(filename2, model2, data_repo_metadata=False)

        model3 = Model(id='model',
                       name='test model',
                       version='0.0.1a',
                       wc_lang_version='0.0.1',
                       created=now,
                       updated=now)
        filename3 = path.join(self.tempdir, 'model3.xlsx')
        Writer().run(filename3, model3, data_repo_metadata=False)

        with CaptureOutput(relay=False) as capturer:
            with __main__.App(
                    argv=['difference', filename1, filename2]) as app:
                app.run()
            self.assertEqual(capturer.get_text(), 'Models are identical')

        with CaptureOutput(relay=False) as capturer:
            with __main__.App(argv=[
                    'difference', filename1, filename2, '--compare-files'
            ]) as app:
                app.run()
            self.assertEqual(capturer.get_text(), 'Models are identical')

        with CaptureOutput(relay=False) as capturer:
            with __main__.App(
                    argv=['difference', filename1, filename3]) as app:
                app.run()
            diff = (
                'Objects (Model: "model", Model: "model") have different attribute values:\n  '
                '`wc_lang_version` are not equal:\n    0.0.0 != 0.0.1')
            self.assertEqual(capturer.get_text(), diff)

        with CaptureOutput(relay=False) as capturer:
            with __main__.App(argv=[
                    'difference', filename1, filename3, '--compare-files'
            ]) as app:
                app.run()
            diff = 'Sheet !!Model:\n  Row 7:\n    Cell B: 0.0.0 != 0.0.1'
            self.assertEqual(capturer.get_text(), diff)
Exemple #3
0
    def test_get_version(self):
        with CaptureOutput(relay=False) as capturer:
            with __main__.App(argv=['-v']) as app:
                with self.assertRaises(SystemExit):
                    app.run()
                self.assertEqual(capturer.get_text(), wc_lang.__version__)

        with CaptureOutput(relay=False) as capturer:
            with __main__.App(argv=['--version']) as app:
                with self.assertRaises(SystemExit):
                    app.run()
                self.assertEqual(capturer.get_text(), wc_lang.__version__)
Exemple #4
0
    def test_merge_models(self):
        in_paths = [
            path.join(self.tempdir, 'in-0.xlsx'),
            path.join(self.tempdir, 'in-1.xlsx'),
        ]
        out_path = path.join(self.tempdir, 'out.xlsx')

        # write models
        model_0 = Model(id='model',
                        name='test model',
                        version='0.0.1a',
                        wc_lang_version='0.0.1')
        model_0.species_types.create(id='a')
        model_1 = Model(id='model',
                        name='test model',
                        version='0.0.1a',
                        wc_lang_version='0.0.1')
        model_1.species_types.create(id='b')
        Writer().run(in_paths[0], model_0, data_repo_metadata=False)
        Writer().run(in_paths[1], model_1, data_repo_metadata=False)

        # merge models
        with __main__.App(argv=[
                'merge-models', '-p', in_paths[0], '-s', in_paths[1], '-o',
                out_path
        ]) as app:
            app.run()

        # read merged model
        merged_model = Reader().run(out_path)[Model][0]

        # verify merged model
        self.assertEqual(len(merged_model.species_types), 2)
        self.assertNotEqual(merged_model.species_types.get_one(id='a'), None)
        self.assertNotEqual(merged_model.species_types.get_one(id='b'), None)
Exemple #5
0
    def test_export_import(self):
        filename = path.join(path.dirname(__file__), 'fixtures',
                             'sbml-io.xlsx')
        filename_transformed = path.join(path.dirname(__file__), 'fixtures',
                                         'sbml-io-transformed.xlsx')
        sbml_dir = self.tempdir
        filename_2 = path.join(self.tempdir, 'export.xlsx')

        with __main__.App(argv=['export', filename, sbml_dir]) as app:
            app.run()

        with __main__.App(argv=['import', sbml_dir, filename_2]) as app:
            app.run()

        model = Reader().run(filename_transformed)[Model][0]
        model_2 = Reader().run(filename_2)[Model][0]
        self.assertTrue(model_2.is_equal(model))
Exemple #6
0
    def test_create_template(self):
        filename = path.join(self.tempdir, 'template.xlsx')

        with __main__.App(
                argv=['create-template', filename, '--ignore-repo-metadata'
                      ]) as app:
            app.run()

        self.assertTrue(path.isfile(filename))
Exemple #7
0
    def test_transform_exception(self):
        source = path.join(self.tempdir, 'source.xlsx')
        model = Model(id='model',
                      name='test model',
                      version='0.0.1a',
                      wc_lang_version='0.0.0')
        Writer().run(source, model, data_repo_metadata=False)

        dest = path.join(self.tempdir, 'dest.xlsx')
        with self.assertRaisesRegex(SystemExit,
                                    'Please select at least one transform'):
            with __main__.App(argv=['transform', source, dest]) as app:
                app.run()
Exemple #8
0
    def test_validate(self):
        model = Model(id='model',
                      name='test model',
                      version='0.0.1a',
                      wc_lang_version='0.0.1')
        self.assertEqual(Validator().run(model, get_related=True), None)
        filename = path.join(self.tempdir, 'model.xlsx')
        Writer().run(filename, model, data_repo_metadata=False)

        with CaptureOutput(relay=False) as capturer:
            with __main__.App(argv=['validate', filename]) as app:
                app.run()
            self.assertEqual(capturer.get_text(), 'Model is valid')
Exemple #9
0
    def test_convert(self):
        filename_xls = path.join(self.tempdir, 'model.xlsx')
        filename_csv = path.join(self.tempdir, 'model-*.csv')

        model = Model(id='model',
                      name='test model',
                      version='0.0.1a',
                      wc_lang_version='0.0.0')
        Writer().run(filename_xls, model, data_repo_metadata=False)

        with __main__.App(argv=['convert', filename_xls, filename_csv]) as app:
            app.run()

        self.assertTrue(path.isfile(path.join(self.tempdir,
                                              'model-Model.csv')))
Exemple #10
0
    def test_transform(self):
        source = path.join(self.tempdir, 'source.xlsx')
        model = Model(id='model',
                      name='test model',
                      version='0.0.1a',
                      wc_lang_version='0.0.0')
        Writer().run(source, model, data_repo_metadata=False)

        dest = path.join(self.tempdir, 'dest.xlsx')
        with __main__.App(argv=[
                'transform', source, dest, '--transform',
                'MergeAlgorithmicallyLikeSubmodels'
        ]) as app:
            app.run()

        self.assertTrue(path.isfile(dest))
Exemple #11
0
    def test_update_version_metadata(self):
        filename = path.join(self.tempdir, 'model.xlsx')

        model = Model(id='model',
                      name='test model',
                      version='0.0.1a',
                      wc_lang_version='0.0.0')
        self.assertNotEqual(model.wc_lang_version, wc_lang.__version__)
        Writer().run(filename, model, data_repo_metadata=False)

        with __main__.App(argv=[
                'update-version-metadata', filename, '--ignore-repo-metadata'
        ]) as app:
            app.run()

        model = Reader().run(filename)[Model][0]
        self.assertEqual(model.wc_lang_version, wc_lang.__version__)
Exemple #12
0
 def test_migration_handlers(self):
     with CaptureOutput(relay=False, termination_delay=0.1) as capturer:
         with __main__.App(argv=['make-changes-template']) as app:
             app.run()
             m = re.search(
                 r"Created and added template schema changes file: '(.+)'",
                 capturer.get_text())
             filename = m.group(1)
             self.assertTrue(os.path.isfile(filename))
             # remove schema changes file from the git repo
             repo = git.Repo('.')
             repo.index.remove([filename])
             os.remove(filename)
             dir = os.path.dirname(filename)
             try:
                 os.rmdir(dir)
             except OSError as ex:
                 pass
Exemple #13
0
    def test_validate_exception(self):
        model = Model(id='model',
                      name='test model',
                      version='0.0.1a',
                      wc_lang_version='0.0.1')
        model.parameters.append(
            Parameter(id='param_1',
                      value=1.,
                      units=unit_registry.parse_units('dimensionless')))
        model.parameters.append(
            Parameter(id='param_1',
                      value=1.,
                      units=unit_registry.parse_units('dimensionless')))

        self.assertNotEqual(Validator().run(model, get_related=True), None)
        filename = path.join(self.tempdir, 'model.xlsx')
        Writer().run(filename, model, data_repo_metadata=False)

        with self.assertRaisesRegex(SystemExit, '^Model is invalid: '):
            with __main__.App(argv=['validate', filename]) as app:
                app.run()
Exemple #14
0
    def test_cut_submodels(self):
        timestamp = datetime.datetime(2018, 1, 1, 12, 0, 0)
        model = Model(id='model',
                      name='test model',
                      version='0.0.1a',
                      wc_lang_version='0.0.1',
                      created=timestamp,
                      updated=timestamp)
        model.submodels.create(id='submodel_1')
        model.submodels.create(id='submodel_2')
        model.references.create(id='ref_0')
        model.references.create(id='ref_1', submodels=model.submodels[0:1])
        model.references.create(id='ref_2', submodels=model.submodels[1:2])
        model.references.create(id='ref_3', submodels=model.submodels[0:2])

        in_path = path.join(self.tempdir, 'in.xlsx')
        Writer().run(in_path, model, data_repo_metadata=False)

        out_path = path.join(self.tempdir, 'out')
        with __main__.App(argv=['cut-submodels', in_path, out_path]) as app:
            app.run()

        model_0 = Reader().run(path.join(out_path, 'core.xlsx'))[Model][0]
        model_1 = Reader().run(path.join(out_path,
                                         'submodel_1.xlsx'))[Model][0]
        model_2 = Reader().run(path.join(out_path,
                                         'submodel_2.xlsx'))[Model][0]

        exp_model_0 = Model(id='model',
                            name='test model',
                            version='0.0.1a',
                            wc_lang_version='0.0.1',
                            created=timestamp,
                            updated=timestamp)
        exp_model_0.references.create(id='ref_0')
        self.assertTrue(model_0.is_equal(exp_model_0))

        exp_model_1 = Model(id='model',
                            name='test model',
                            version='0.0.1a',
                            wc_lang_version='0.0.1',
                            created=timestamp,
                            updated=timestamp)
        exp_model_1.submodels.create(id='submodel_1')
        exp_model_1.references.create(id='ref_1',
                                      submodels=exp_model_1.submodels)
        exp_model_1.references.create(id='ref_3',
                                      submodels=exp_model_1.submodels)
        self.assertTrue(model_1.is_equal(exp_model_1))

        exp_model_2 = Model(id='model',
                            name='test model',
                            version='0.0.1a',
                            wc_lang_version='0.0.1',
                            created=timestamp,
                            updated=timestamp)
        exp_model_2.submodels.create(id='submodel_2')
        exp_model_2.references.create(id='ref_2',
                                      submodels=exp_model_2.submodels)
        exp_model_2.references.create(id='ref_3',
                                      submodels=exp_model_2.submodels)
        self.assertTrue(model_2.is_equal(exp_model_2))