def test_issue_113(self):
        """ Make sure that types are generated as part of the output """
        env.generate_single_file(
            'issue_113.py',
            lambda: PythonGenerator(env.input_path('issue_113.yaml')
                                    ).serialize(),
            comparator=lambda exp, act: compare_python(exp, act, 'issue_113.py'
                                                       ),
            value_is_returned=True)
        module = compile_python(env.expected_path('issue_113.py'))
        example = module.TestClass(test_attribute_2="foo")
        assert hasattr(example, "test_attribute_2")
        assert hasattr(example, "test_attribute_1")
        example.wiible = "foo"
        example.test_attribute_1 = "foo"
        example.test_attribute_2 = "foo"

        env.generate_single_file(
            'issue_113.json',
            lambda: PythonGenerator(env.input_path('issue_113.yaml')
                                    ).serialize(),
            comparator=lambda exp, act: compare_python(exp, act, 'issue_113.py'
                                                       ),
            value_is_returned=True)

        def output_generator(dirname) -> None:
            with open(os.path.join(dirname, 'issue_113.json'), 'w') as f:
                f.write(as_json(example))

        env.generate_directory('issue_113',
                               lambda dirname: output_generator(dirname))
Beispiel #2
0
    def test_local_imports(self):
        """ Check the local import behavior """
        dir = 'issue_260'

        # Useful to have an __init__.py available
        init_path = env.actual_path(dir, '__init__.py')
        if not os.path.exists(init_path):
            with open(init_path, 'w'):
                pass

        env.generate_single_file('issue_260/issue_260a.py',
                                 lambda: PythonGenerator(env.input_path(dir, 'issue_260a.yaml'),
                                                         importmap=env.import_map, mergeimports=False).serialize(),
                                 comparator=compare_python, value_is_returned=True)
        env.generate_single_file('issue_260/issue_260b.py',
                                 lambda: PythonGenerator(env.input_path(dir, 'issue_260b.yaml'),
                                                         importmap=env.import_map, mergeimports=False).serialize(),
                                 comparator=compare_python, value_is_returned=True)
        env.generate_single_file('issue_260/issue_260c.py',
                                 lambda: PythonGenerator(env.input_path(dir, 'issue_260c.yaml'),
                                                         importmap=env.import_map, mergeimports=False).serialize(),
                                 comparator=compare_python, value_is_returned=True)
        env.generate_single_file('issue_260/issue_260.py',
                                 lambda: PythonGenerator(env.input_path(dir, 'issue_260.yaml'),
                                                         importmap=env.import_map, mergeimports=False).serialize(),
                                 comparator=compare_python, value_is_returned=True)
Beispiel #3
0
    def test_slot_subclass_good(self):
        """ Test slot domain as superclass of parent """

        yaml_fname = os.path.join(sourcedir, 'issue_56_good.yaml')
        PythonGenerator(yaml_fname).serialize()
        self.assertTrue(True, "Didn't throw an error - we good")
        yaml_fname = os.path.join(sourcedir, 'issue_56_bad.yaml')
        PythonGenerator(yaml_fname).serialize()
    def test_issue_368(self):
        """ Make sure that types are generated as part of the output """
        env.generate_single_file(
            'issue_368_imports.py',
            lambda: PythonGenerator(env.input_path('issue_368_imports.yaml'),
                                    mergeimports=False).serialize(),
            comparator=lambda exp, act: compare_python(
                exp, act, self.env.expected_path('issue_368_imports.py')),
            value_is_returned=True)
        env.generate_single_file(
            'issue_368.py',
            lambda: PythonGenerator(env.input_path('issue_368.yaml'),
                                    mergeimports=False).serialize(),
            comparator=lambda exp, act: compare_python(
                exp, act, self.env.expected_path('issue_368.py')),
            value_is_returned=True)

        with open(env.expected_path('issue_368.py')) as f:
            python = f.read()

        has_imports = False
        for line in python.split("\n"):
            if line.startswith("from . issue_368_imports"):
                imps = line.replace("from . issue_368_imports import ",
                                    "").split(", ")
                assert 'SampleEnum' in imps
                assert 'ParentClass' in imps
                has_imports = True
        assert has_imports
        module = compile_python(env.expected_path('issue_368.py'))

        enum_inst = module.SampleEnum("pva")  # EnumInstanceImpl
        example = module.SampleClass(slot_1="pva")
        assert hasattr(example, "slot_1")
        assert example.slot_1.code.text == enum_inst.code.text
        assert str(example.slot_1) == "pva: PVA description"

        def dump_and_load(dumper: Callable, sfx: str) -> None:
            fname = env.actual_path(f'issue_368_1.{sfx}')
            dumper(example, fname)
            with open(fname) as f:
                print(f'\n----- {sfx} -----')
                print(f.read())

        dump_and_load(json_dumper.dump, 'json')
        dump_and_load(yaml_dumper.dump, 'yaml')

        env.generate_single_file(
            'issue_368.context.jsonld',
            lambda: ContextGenerator(env.input_path('issue_368.yaml'),
                                     emit_metadata=False).serialize(),
            filtr=ldcontext_metadata_filter,
            value_is_returned=True)
        dump_and_load(
            lambda obj, fname: rdf_dumper.dump(
                obj, fname, env.expected_path("issue_368.context.jsonld")),
            'ttl')
Beispiel #5
0
 def test_local_imports(self):
     """ Make sure there is a '.' on a local import in python """
     env.generate_single_file('importee.py',
                              lambda: PythonGenerator(env.input_path('issue_tccm', 'importee.yaml'),
                                                      importmap=env.import_map, mergeimports=False).serialize(),
                              comparator=compare_python, value_is_returned=True)
     env.generate_single_file('importer.py',
                              lambda: PythonGenerator(env.input_path('issue_tccm', 'importer.yaml'),
                                                      importmap=env.import_map, mergeimports=False).serialize(),
                              comparator=compare_python, value_is_returned=True)
    def test_notebook_model_1(self):
        file = 'notebook_model_1'
        python_name = f'{self.testdir}/{file}.py'
        env.generate_single_file(
            python_name,
            lambda: PythonGenerator(env.input_path(self.testdir, f'{file}.yaml'
                                                   ),
                                    importmap=env.import_map,
                                    mergeimports=False,
                                    gen_classvars=False,
                                    gen_slots=False).serialize(),
            comparator=lambda exp, act: compare_python(
                exp, act, self.env.expected_path(python_name)),
            value_is_returned=True)

        module = compile_python(env.expected_path(python_name))
        c1 = module.PositionalRecord('my location', 'a')
        print(str(c1))
        print(str(c1.position))
        print(repr(c1.position))
        try:
            c2 = module.PositionalRecord('your location', 'z')
        except ValueError as e:
            print(e)
        x = module.PositionalRecord("117493", "c")
        self.assertEqual('c: bottom', str(x.position))
        self.assertEqual(
            "PositionalRecord(id='117493', position=(text='c', description='bottom'))",
            repr(x))
        self.assertEqual("(text='c', description='bottom')", repr(x.position))
    def test_enum_alternatives(self):
        """ test various variants on enum constraints """
        file = "alternatives"
        env.generate_single_file(
            env.expected_path(self.testdir, f'{file}.yaml'),
            lambda: YAMLGenerator(env.input_path(self.testdir, f'{file}.yaml')
                                  ).serialize(),
            filtr=yaml_filter,
            value_is_returned=True)

        python_name = f'{self.testdir}/{file}.py'
        YAMLGenerator(env.input_path(self.testdir, f'{file}.yaml'),
                      mergeimports=False,
                      log_level=logging.INFO).serialize()
        env.generate_single_file(
            python_name,
            lambda: PythonGenerator(env.input_path(self.testdir, f'{file}.yaml'
                                                   ),
                                    importmap=env.import_map,
                                    mergeimports=False).serialize(),
            comparator=lambda exp, act: compare_python(
                exp, act, self.env.expected_path(python_name)),
            value_is_returned=True)

        module = compile_python(env.expected_path(python_name))
 def test_issue_50(self):
     env.generate_single_file(
         'issue_84.py',
         lambda: PythonGenerator(env.input_path('issue_84.yaml')).serialize(
         ),
         comparator=compare_python,
         value_is_returned=True)
Beispiel #9
0
 def test_multiple_postinit(self):
     """ Generate postinit code for a multi-occurring element """
     env.generate_single_file(
         'issue_44.py',
         lambda: PythonGenerator(env.input_path('issue_44.yaml'),
                                 emit_metadata=False).serialize(),
         value_is_returned=True)
Beispiel #10
0
    def test_slot_subclass(self):
        """ Test slot domain as superclass of parent """
        env.generate_single_file(
            'issue_56_good.py',
            lambda: PythonGenerator(env.input_path('issue_56_good.yaml')
                                    ).serialize(),
            comparator=compare_python,
            value_is_returned=True)

        with self.assertRaises(Exception) as e:
            env.generate_single_file(
                'issue_56_bad.py',
                lambda: PythonGenerator(env.input_path('issue_56_bad.yaml')
                                        ).serialize(),
                comparator=compare_python,
                value_is_returned=True)
Beispiel #11
0
    def test_issue_121(self):
        """ Make sure that types are generated as part of the output """
        env.generate_single_file('issue_121.py',
                                 lambda: PythonGenerator(env.input_path('issue_121.yaml')).serialize(),
                                 comparator=compare_python, value_is_returned=True)
        with open(env.expected_path('issue_121.py')) as f:
            python= f.read()

        has_includes = False
        for line in python.split("\n"):
            if line.startswith("from includes.types"):
                assert line == "from includes.types import String"
                has_includes = True
        assert has_includes
        module = compile_python(env.expected_path('issue_121.py'))

        example = module.Biosample(depth="test")
        assert hasattr(example, "depth")
        assert example.depth == "test"

        example2 = module.ImportedClass()

        def output_generator(dirname) -> None:
            with open(os.path.join(dirname, 'issue_121_1.json'), 'w') as f:
                f.write(as_json(example))
            with open(os.path.join(dirname, 'issue_121_2.json'), 'w') as f:
                f.write(as_json(example2))

        env.generate_directory('issue_121', lambda dirname: output_generator(dirname))
    def test_contained_constructor(self):
        test_name = 'issue_355'
        """ Make sure that types are generated as part of the output """
        env.generate_single_file(f'{test_name}.py',
                                 lambda: PythonGenerator(env.input_path(f'{test_name}.yaml')).serialize(),
                                 comparator=lambda exp, act: compare_python(exp, act, self.env.expected_path(f'{test_name}.py')),
                                 value_is_returned=True)
        module = compile_python(env.expected_path(f'{test_name}.py'))
        c = module.Container(module.Containee('11111', "Glaubner's disease"))
        self.assertEqual('''entry:
  '11111':
    id: '11111'
    value: Glaubner's disease''', as_yaml(c).strip())

        c = module.Container({'22222': dict(id='22222', value='Phrenooscopy')})
        self.assertEqual('''entry:
  '22222':
    id: '22222'
    value: Phrenooscopy''', as_yaml(c).strip())
        alt_object = YAMLRoot()
        alt_object.id = '33333'
        alt_object.value = 'test'
        c = module.Container(alt_object)
        self.assertEqual('''entry:
  '33333':
    id: '33333'
    value: test''', as_yaml(c).strip())
        c = module.Container([dict(id='44444', value="Gracken's curse")])
        self.assertEqual('''entry:
  '44444':
    id: '44444'
    value: Gracken's curse''', as_yaml(c).strip())
Beispiel #13
0
 def test_python_import(self):
     """ Import generates for biolink-model """
     python = PythonGenerator(os.path.join(sourcedir,
                                           'issue_38.yaml')).serialize()
     print(python)
     # We never get here if the imports fails
     self.assertEqual(True, True)
Beispiel #14
0
 def test_template_basics(self):
     """ Test the basics of a string template  """
     file = "templated_classes"
     env.generate_single_file(
         f'{self.testdir}/{file}.py',
         lambda: PythonGenerator(env.input_path(self.testdir, f'{file}.yaml'
                                                ),
                                 importmap=env.import_map,
                                 mergeimports=False).serialize(),
         comparator=lambda exp, act: compare_python(
             exp, act, self.env.expected_path(f'{self.testdir}/{file}.py')),
         value_is_returned=True)
     module = compile_python(env.expected_path(self.testdir, f"{file}.py"))
     inst = module.FirstClass("Sam Sneed", 42, "Male")
     self.assertEqual('Sam Sneed - a 42 year old Male', str(inst))
     inst2 = module.FirstClass.parse(
         "Jillian Johnson - a 93 year old female")
     self.assertEqual(
         "FirstClass(name='Jillian Johnson', age=93, gender='female')",
         repr(inst2))
     self.assertEqual('Jillian Johnson - a 93 year old female', str(inst2))
     with open(env.input_path(self.testdir, 'jones.yaml')) as yf:
         inst3 = from_yaml(yf, module.FirstClass)
     self.assertEqual('Freddy Buster Jones - a 11 year old Undetermined',
                      str(inst3))
Beispiel #15
0
    def test_issue_80(self):
        """ Make sure that types are generated as part of the output """
        env.generate_single_file(
            'issue_80.py',
            lambda: PythonGenerator(env.input_path('issue_80.yaml')).serialize(
            ),
            comparator=lambda exp, act: compare_python(
                exp, act, self.env.expected_path('issue_80.py')),
            value_is_returned=True)
        module = compile_python(env.expected_path('issue_80.py'))
        example = module.Person("http://example.org/person/17", "Fred Jones",
                                43)

        # Create output for various forms
        def output_generator(dirname) -> None:
            with open(os.path.join(dirname, 'issue_80.json'), 'w') as f:
                f.write(as_json(example))
            context = os.path.join(dirname, 'issue_80.context.jsonld')
            with open(context, 'w') as f:
                f.write(
                    ContextGenerator(
                        env.input_path('issue_80.yaml')).serialize())
            with open(os.path.join(dirname, 'issue_80.ttl'), 'w') as f:
                f.write(
                    as_rdf(
                        example,
                        contexts=context).serialize(format="turtle").decode())

        env.generate_directory('issue_80',
                               lambda dirname: output_generator(dirname))
Beispiel #16
0
 def test_issue_167b_python(self):
     """ Annotations python example """
     env.generate_single_file(
         'issue_167b.py',
         lambda: PythonGenerator(env.input_path('issue_167b.yaml'),
                                 importmap=env.import_map).serialize(),
         comparator=compare_python,
         value_is_returned=True)
Beispiel #17
0
 def test_issue_167b_python(self):
     """ Annotations python example """
     env.generate_single_file(
         'issue_167b.py',
         lambda: PythonGenerator(env.input_path('issue_167b.yaml'),
                                 importmap=env.import_map).serialize(),
         comparator=lambda exp, act: compare_python(
             exp, act, self.env.expected_path('issue_167b.py')),
         value_is_returned=True)
     env.generate_single_file(
         'issue_167b.py',
         lambda: PythonGenerator(env.input_path('issue_167b.yaml'),
                                 importmap=env.import_map,
                                 mergeimports=False).serialize(),
         comparator=lambda exp, act: compare_python(
             exp, act, self.env.expected_path('issue_167b_nomerged.py')),
         value_is_returned=True)
Beispiel #18
0
 def test_prefix(self):
     env.generate_single_file(
         'issue_107.py',
         lambda: PythonGenerator(env.input_path('issue_107.yaml')
                                 ).serialize(),
         comparator=lambda exp, act: compare_python(
             exp, act, self.env.expected_path('issue_107.py')),
         value_is_returned=True)
Beispiel #19
0
 def test_python_import(self):
     """ Import generates for biolink-model """
     python = PythonGenerator(
         env.input_path('issue_38.yaml'),
         importmap=env.input_path(
             'biolink-model-importmap.json')).serialize()
     msg = validate_python(python)
     if msg:
         self.fail(msg)
Beispiel #20
0
    def test_inheritence(self):
        env.generate_single_file('issue_14.py',
                                 lambda: PythonGenerator(env.input_path('issue_14.yaml')).serialize(),
                                 comparator=lambda exp, act: compare_python(exp, act, self.env.expected_path('issue_14.py')),
                                 filtr=metadata_filter, value_is_returned=True)

        # Added test for issue #183, where sex_qualifier disappeared from MixinOwner class
        module = compile_python(env.expected_path('issue_14.py'))
        subject = module.SubjectRange1(id='sr1',name="SubjectRange1", subject='thing1', object='thing2')
        mixin_owner = module.MixinOwner(id='mo1', subject='sr1', name='MixinOwner1', object='thing2', sex_qualifier="ntx")
Beispiel #21
0
 def test_metamodel_python(self):
     """ Build meta.py """
     env.generate_single_file(
         'meta.py',
         lambda: PythonGenerator(env.meta_yaml, importmap=env.import_map
                                 ).serialize(),
         value_is_returned=True,
         filtr=metadata_filter,
         comparator=compare_python,
         use_testing_root=True)
 def test_slot_usage_only(self):
     """ Slot_usages without parents don't generate slots period. """
     env.generate_single_file(
         'issue_ttcm_1.py',
         lambda: PythonGenerator(env.input_path('issue_tccm',
                                                'resourcedescription.yaml'),
                                 importmap=env.import_map,
                                 mergeimports=True).serialize(),
         comparator=lambda exp, act: compare_python(
             exp, act, env.expected_path('issue_ttcm_1.py')),
         value_is_returned=True)
    def gen_and_comp_python(self, yaml_file: str) -> None:
        """
         Generate a python image of the metamodel and verify that it parses
        :param yaml_file: YAML model definition

        """
        model_python = PythonGenerator(yaml_file).serialize()

        spec = compile(model_python, 'test', 'exec')
        module = ModuleType('test')
        exec(spec, module.__dict__)
Beispiel #24
0
 def test_annotations_python(self):
     """ Build includes/annotations.py """
     env.generate_single_file(
         'includes/annotations.py',
         lambda: PythonGenerator(env.input_path('includes',
                                                'annotations.yaml'),
                                 importmap=env.import_map).serialize(),
         value_is_returned=True,
         filtr=metadata_filter,
         comparator=compare_python,
         use_testing_root=True)
 def test_mapping_python(self):
     """ Build includes/mappings.py """
     env.generate_single_file(
         'includes/mappings.py',
         lambda: PythonGenerator(env.mapping_yaml, importmap=env.import_map
                                 ).serialize(),
         value_is_returned=True,
         filtr=metadata_filter,
         comparator=lambda exp, act: compare_python(
             exp, act, self.env.expected_path('includes/mappings.py')),
         use_testing_root=True)
 def test_evidence(self):
     """ Test evidence enumeration  """
     file = "evidence"
     env.generate_single_file(
         f'{self.testdir}/{file}.py',
         lambda: PythonGenerator(env.input_path(self.testdir, f'{file}.yaml'
                                                ),
                                 importmap=env.import_map,
                                 mergeimports=False).serialize(),
         comparator=lambda exp, act: compare_python(
             exp, act, self.env.expected_path(f'{self.testdir}/{file}.py')),
         value_is_returned=True)
Beispiel #27
0
 def test_extensions_python(self):
     """ Build includes/extensions.py """
     env.generate_single_file(
         'includes/extensions.py',
         lambda: PythonGenerator(env.input_path('includes',
                                                'extensions.yaml'),
                                 importmap=env.import_map,
                                 genmeta=True).serialize(),
         value_is_returned=True,
         filtr=metadata_filter,
         comparator=lambda exp, act: compare_python(
             exp, act, self.env.expected_path('includes/extensions.py')),
         use_testing_root=True)
Beispiel #28
0
    def test_issue_120(self):
        """ Courses not inlining """
        env.generate_single_file(
            'issue_120.py',
            lambda: PythonGenerator(env.input_path('issue_120.yaml')
                                    ).serialize(),
            value_is_returned=True,
            comparator=compare_python)

        env.generate_single_file(
            'issue_120.json',
            lambda: JsonSchemaGenerator(env.input_path('issue_120.yaml')
                                        ).serialize(),
            value_is_returned=True)
    def test_python_complex_ranges(self):
        """ description """
        test_dir = 'python_generation'
        test_name = 'python_complex_ranges'

        env.generate_single_file(
            f'{test_dir}/{test_name}.py',
            lambda: PythonGenerator(env.input_path(test_dir,
                                                   f'{test_name}.yaml'),
                                    importmap=env.import_map,
                                    mergeimports=False).serialize(),
            comparator=lambda exp, act: compare_python(
                exp, act, self.env.expected_path(f'{test_dir}/{test_name}.py')
            ),
            value_is_returned=True)
Beispiel #30
0
    def test_issue_python_ordering(self):
        """ Make sure that types are generated as part of the output """
        env.generate_single_file('issue_134.py',
                                 lambda: PythonGenerator(env.input_path('issue_134.yaml')).serialize(),
                                 comparator=compare_python, value_is_returned=True)
        module = compile_python(env.expected_path('issue_134.py'))
        e = module.E('id:1')
        b = module.B('id:2')
        e.has_b = b
        
        def output_generator(dirname) -> None:
            with open(os.path.join(dirname, 'issue_134.json'), 'w') as f:
                f.write(as_json(e))

        env.generate_directory('issue_134', lambda dirname: output_generator(dirname) )