Esempio n. 1
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))
Esempio n. 2
0
    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')
Esempio n. 3
0
    def test_local_imports(self):
        """ Check the local import behavior """
        test_dir = 'issue_260'

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

        fp = f'{test_dir}/issue_260a.py'
        env.generate_single_file(
            fp,
            lambda: PythonGenerator(env.input_path(test_dir, 'issue_260a.yaml'
                                                   ),
                                    importmap=env.import_map,
                                    mergeimports=False).serialize(),
            comparator=lambda expected, actual: compare_python(
                expected, actual, env.expected_path(fp)),
            value_is_returned=True)
        fp = f'{test_dir}/issue_260b.py'
        env.generate_single_file(
            fp,
            lambda: PythonGenerator(env.input_path(test_dir, 'issue_260b.yaml'
                                                   ),
                                    importmap=env.import_map,
                                    mergeimports=False).serialize(),
            comparator=lambda expected, actual: compare_python(
                expected, actual, env.expected_path(fp)),
            value_is_returned=True)
        fp = f'{test_dir}/issue_260c.py'
        env.generate_single_file(
            fp,
            lambda: PythonGenerator(env.input_path(test_dir, 'issue_260c.yaml'
                                                   ),
                                    importmap=env.import_map,
                                    mergeimports=False).serialize(),
            comparator=lambda expected, actual: compare_python(
                expected, actual, env.expected_path(fp)),
            value_is_returned=True)
        fp = f'{test_dir}/issue_260.py'
        env.generate_single_file(
            fp,
            lambda: PythonGenerator(env.input_path(test_dir, 'issue_260.yaml'),
                                    importmap=env.import_map,
                                    mergeimports=False).serialize(),
            comparator=lambda expected, actual: compare_python(
                expected, actual, env.expected_path(fp)),
            value_is_returned=True)
Esempio n. 4
0
    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())
Esempio n. 5
0
    def test_minimal_model(self):
        """ Test to make the absolute minimal model work """
        YAMLGenerator(env.input_path('issue_tccm', 'minimalmodel.yaml'),
                      mergeimports=False,
                      log_level=logging.INFO).serialize(validateonly=True)

        env.make_testing_directory(env.expected_path('issue_tccm'))
        for generator in Generator.__subclasses__():
            if not generator.__module__.startswith('linkml.generators'):
                pass
            elif not generator.directory_output:
                env.generate_single_file(
                    [
                        'issue_tccm',
                        'minimalmodel.' + generator.valid_formats[0]
                    ],
                    lambda: generator(env.input_path('issue_tccm',
                                                     'minimalmodel.yaml'),
                                      importmap=env.import_map,
                                      mergeimports=False,
                                      emit_metadata=False).serialize(),
                    value_is_returned=True)
            else:
                env.generate_directory(
                    ['issue_tccm', generator.__name__], lambda d: generator(
                        env.input_path('issue_tccm', 'minimalmodel.yaml'),
                        importmap=env.import_map,
                        mergeimports=False,
                        emit_metadata=False).serialize(directory=d))
Esempio n. 6
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))
Esempio n. 7
0
    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))
Esempio n. 8
0
 def _test_owl(self, name: str) -> Graph:
     self.env.generate_single_file(f'{name}.owl',
                                   lambda: OwlSchemaGenerator(env.input_path(f'{name}.yaml'),
                                                              importmap=env.import_map).serialize(),
                                   value_is_returned=True, comparator=compare_rdf)
     g = Graph()
     g.parse(env.expected_path(f'{name}.owl'), format="turtle")
     return g
Esempio n. 9
0
 def test_prefix(self):
     env.generate_single_file(
         'issue112.yuml',
         lambda: YumlGenerator(env.input_path('issue_112.yaml')).serialize(
         ),
         value_is_returned=True)
     with open(env.expected_path('issue112.yuml')) as f:
         url = f.read()
     resp = requests.get(url)
     self.assertTrue(resp.ok)
Esempio n. 10
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,
                           expected_path=env.expected_path('foo.py'))
     if msg:
         self.fail(msg)
Esempio n. 11
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")
Esempio n. 12
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=lambda exp, act: compare_python(
             exp, act, env.expected_path('importee.py')),
         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=lambda exp, act: compare_python(
             exp, act, env.expected_path('importer.py')),
         value_is_returned=True)
Esempio n. 13
0
 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)
Esempio n. 14
0
 def test_pattern_1(self):
     """ Test the pattern ehnancement  """
     file = "pattern_1"
     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"))
     d1 = yaml.load(StringIO(d1_test), yaml.loader.SafeLoader)
     dev1 = module.DiskDevice(**d1)
     print("HERE")
Esempio n. 15
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) )
Esempio n. 16
0
 def test_enum_import(self):
     """ Enum reference isn't getting merged on module import  """
     # env.generate_single_file('file1.py',
     #                          lambda: PythonGenerator(env.input_path(self.directory, 'file1.yaml'),
     #                                                  mergeimports=True).serialize(),
     #                          comparator=lambda exp, act: compare_python(exp, act, env.expected_path(self.directory, 'file1.py')),
     #                          value_is_returned=True)
     env.generate_single_file(
         'file2.py',
         lambda: PythonGenerator(env.input_path(self.directory, 'file2.yaml'
                                                ),
                                 mergeimports=True).serialize(),
         comparator=lambda exp, act: compare_python(
             exp, act, env.expected_path(self.directory, 'file2.py')),
         value_is_returned=True)