Skip to content

Linter failed to discover missing name field #3259

@paulmillar

Description

@paulmillar

Describe the bug

The linkml-linter described a schema definition as valid, even though it was missing the mandatory name field.

Version of LinkML you are using

(linkml) paul@monkeywrench:~/vtmp$ linkml-lint -V
linkml-lint, version 1.10.0
(linkml) paul@monkeywrench:~/vtmp$ 

Please provide a schema (and if applicable, a data file) that replicates the issue

File: in-schema.yaml

id: input_schema
imports:
  - linkml:types
default_range: string

classes:
  InClass:
    tree_root: true
    description: Simple container of information.
    attributes:
      foo:
        description: First piece of information
      bar:
        description: Second piece of information, may be a duplicate of a.
(linkml) paul@monkeywrench:~/vtmp$ linkml-lint in-schema.yaml 
✓ No problems found
(linkml) paul@monkeywrench:~/vtmp$ 

Here is an example of this failing:

(linkml) paul@monkeywrench:~/vtmp$ linkml-map map-data -T map.yaml -s in-schema.yaml in-data.json 
Traceback (most recent call last):
  File "/home/paul/Venv/linkml/bin/linkml-map", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/home/paul/Venv/linkml/lib/python3.11/site-packages/click/core.py", line 1161, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/paul/Venv/linkml/lib/python3.11/site-packages/click/core.py", line 1082, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/home/paul/Venv/linkml/lib/python3.11/site-packages/click/core.py", line 1697, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/paul/Venv/linkml/lib/python3.11/site-packages/click/core.py", line 1443, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/paul/Venv/linkml/lib/python3.11/site-packages/click/core.py", line 788, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/paul/Venv/linkml/lib/python3.11/site-packages/linkml_map/cli/cli.py", line 156, in map_data
    _map_data_single(
  File "/home/paul/Venv/linkml/lib/python3.11/site-packages/linkml_map/cli/cli.py", line 178, in _map_data_single
    tr.source_schemaview = SchemaView(schema)
                           ^^^^^^^^^^^^^^^^^^
  File "/home/paul/Venv/linkml/lib/python3.11/site-packages/linkml_runtime/utils/schemaview.py", line 304, in __init__
    schema = load_schema_wrap(schema)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/paul/Venv/linkml/lib/python3.11/site-packages/linkml_runtime/utils/schemaview.py", line 210, in load_schema_wrap
    schema: SchemaDefinition = yaml_loader.load(path, target_class=SchemaDefinition, **kwargs)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/paul/Venv/linkml/lib/python3.11/site-packages/linkml_runtime/loaders/loader_root.py", line 82, in load
    results = self.load_any(*args, **kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/paul/Venv/linkml/lib/python3.11/site-packages/linkml_runtime/loaders/yaml_loader.py", line 49, in load_any
    return self._construct_target_class(data_as_dict, target_class)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/paul/Venv/linkml/lib/python3.11/site-packages/linkml_runtime/loaders/loader_root.py", line 153, in _construct_target_class
    return target_class(**data_as_dict)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<string>", line 68, in __init__
  File "/home/paul/Venv/linkml/lib/python3.11/site-packages/linkml_runtime/linkml_model/meta.py", line 615, in __post_init__
    self.MissingRequiredField("name")
  File "/home/paul/Venv/linkml/lib/python3.11/site-packages/linkml_runtime/utils/yamlutils.py", line 285, in MissingRequiredField
    raise ValueError(f"{field_name} must be supplied")
ValueError: name must be supplied
(linkml) paul@monkeywrench:~/vtmp$ 

The above problem is fixed by adding a valid name slot in the schema description.

Metadata

Metadata

Assignees

Labels

bugSomething that should work but isn't, with an example and a test case.community-generatedlinting

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions