linkml 1.8.5__py3-none-any.whl → 1.8.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. linkml/cli/main.py +2 -0
  2. linkml/generators/common/build.py +1 -2
  3. linkml/generators/common/lifecycle.py +18 -2
  4. linkml/generators/dbmlgen.py +173 -0
  5. linkml/generators/erdiagramgen.py +1 -0
  6. linkml/generators/jsonldcontextgen.py +7 -1
  7. linkml/generators/jsonldgen.py +1 -3
  8. linkml/generators/jsonschemagen.py +84 -53
  9. linkml/generators/linkmlgen.py +13 -1
  10. linkml/generators/mermaidclassdiagramgen.py +133 -0
  11. linkml/generators/owlgen.py +16 -14
  12. linkml/generators/plantumlgen.py +17 -10
  13. linkml/generators/pydanticgen/array.py +21 -61
  14. linkml/generators/pydanticgen/templates/attribute.py.jinja +1 -1
  15. linkml/generators/shacl/shacl_ifabsent_processor.py +2 -1
  16. linkml/generators/shaclgen.py +16 -5
  17. linkml/generators/shexgen.py +1 -3
  18. linkml/generators/summarygen.py +1 -3
  19. linkml/generators/typescriptgen.py +3 -1
  20. linkml/generators/yamlgen.py +1 -3
  21. linkml/linter/rules.py +3 -1
  22. linkml/transformers/logical_model_transformer.py +7 -5
  23. linkml/utils/converter.py +17 -0
  24. linkml/utils/deprecation.py +10 -0
  25. linkml/utils/generator.py +11 -2
  26. linkml/utils/helpers.py +65 -0
  27. linkml/utils/validation.py +2 -1
  28. linkml/validator/__init__.py +2 -2
  29. linkml/validator/plugins/jsonschema_validation_plugin.py +1 -0
  30. linkml/validator/report.py +4 -1
  31. linkml/validator/validator.py +4 -4
  32. linkml/validators/jsonschemavalidator.py +10 -0
  33. linkml/validators/sparqlvalidator.py +7 -0
  34. linkml/workspaces/example_runner.py +21 -4
  35. {linkml-1.8.5.dist-info → linkml-1.8.7.dist-info}/METADATA +2 -2
  36. {linkml-1.8.5.dist-info → linkml-1.8.7.dist-info}/RECORD +39 -37
  37. {linkml-1.8.5.dist-info → linkml-1.8.7.dist-info}/entry_points.txt +2 -0
  38. {linkml-1.8.5.dist-info → linkml-1.8.7.dist-info}/LICENSE +0 -0
  39. {linkml-1.8.5.dist-info → linkml-1.8.7.dist-info}/WHEEL +0 -0
linkml/utils/helpers.py CHANGED
@@ -1,4 +1,13 @@
1
1
  import re
2
+ from functools import lru_cache
3
+ from typing import List, Tuple, Union
4
+
5
+ from linkml_runtime import SchemaView
6
+ from linkml_runtime.linkml_model.meta import (
7
+ ClassDefinition,
8
+ ElementName,
9
+ SlotDefinition,
10
+ )
2
11
 
3
12
 
4
13
  def remove_duplicates(lst):
@@ -14,3 +23,59 @@ def write_to_file(file_path, data, mode="w", encoding="utf-8"):
14
23
  def convert_to_snake_case(str):
15
24
  str = re.sub(r"(?<=[a-z])(?=[A-Z])|[^a-zA-Z]", " ", str).strip().replace(" ", "_")
16
25
  return "".join(str.lower())
26
+
27
+
28
+ @lru_cache(None)
29
+ def get_range_associated_slots(
30
+ schemaview: SchemaView, range_class: ClassDefinition
31
+ ) -> Tuple[Union[SlotDefinition, None], Union[SlotDefinition, None], Union[List[SlotDefinition], None]]:
32
+ if isinstance(range_class, ElementName):
33
+ range_class = schemaview.get_class(range_class)
34
+ if range_class is None:
35
+ return None, None, None
36
+
37
+ range_class_id_slot = schemaview.get_identifier_slot(range_class.name, use_key=True)
38
+ if range_class_id_slot is None:
39
+ return None, None, None
40
+
41
+ non_id_slots = [s for s in schemaview.class_induced_slots(range_class.name) if s.name != range_class_id_slot.name]
42
+ non_id_required_slots = [s for s in non_id_slots if s.required]
43
+
44
+ # Some lists of objects can be serialized as SimpleDicts.
45
+ # A SimpleDict is serialized as simple key-value pairs where the value is atomic.
46
+ # The key must be declared as a key, and the value must satisfy one of the following conditions:
47
+ # 1. The value slot is the only other slot in the object other than the key
48
+ # 2. The value slot is explicitly annotated as a simple_dict_value
49
+ # 3. The value slot is the only non-key that is required
50
+ # See also: https://github.com/linkml/linkml/issues/1250
51
+ range_simple_dict_value_slot = None
52
+ if len(non_id_slots) == 1:
53
+ range_simple_dict_value_slot = non_id_slots[0]
54
+ elif len(non_id_slots) > 1:
55
+ candidate_non_id_slots = []
56
+ for non_id_slot in non_id_slots:
57
+ if isinstance(non_id_slot.annotations, dict):
58
+ is_simple_dict_value = non_id_slot.annotations.get("simple_dict_value", False)
59
+ else:
60
+ is_simple_dict_value = getattr(non_id_slot.annotations, "simple_dict_value", False)
61
+ if is_simple_dict_value:
62
+ candidate_non_id_slots.append(non_id_slot)
63
+ if len(candidate_non_id_slots) == 1:
64
+ range_simple_dict_value_slot = candidate_non_id_slots[0]
65
+ else:
66
+ candidate_non_id_slots = []
67
+ for non_id_slot in non_id_slots:
68
+ if non_id_slot.required:
69
+ candidate_non_id_slots.append(non_id_slot)
70
+ if len(candidate_non_id_slots) == 1:
71
+ range_simple_dict_value_slot = candidate_non_id_slots[0]
72
+
73
+ return range_class_id_slot, range_simple_dict_value_slot, non_id_required_slots
74
+
75
+
76
+ def is_simple_dict(schemaview: SchemaView, slot: SlotDefinition) -> bool:
77
+ if not slot.multivalued or not slot.inlined or slot.inlined_as_list:
78
+ return False
79
+ else:
80
+ _, range_simple_dict_value_slot, _ = get_range_associated_slots(schemaview, slot.range)
81
+ return range_simple_dict_value_slot is not None
@@ -7,6 +7,7 @@ from linkml_runtime.linkml_model import SchemaDefinition
7
7
  from linkml_runtime.utils.yamlutils import YAMLRoot
8
8
 
9
9
  from linkml.generators.jsonschemagen import JsonSchemaGenerator
10
+ from linkml.utils.deprecation import deprecation_warning
10
11
 
11
12
 
12
13
  def _as_dict(inst):
@@ -16,7 +17,6 @@ def _as_dict(inst):
16
17
  return inst_dict
17
18
 
18
19
 
19
- # Deprecated: use validators module
20
20
  def validate_object(
21
21
  data: YAMLRoot,
22
22
  schema: Union[str, TextIO, SchemaDefinition],
@@ -32,6 +32,7 @@ def validate_object(
32
32
  :param closed:
33
33
  :return:
34
34
  """
35
+ deprecation_warning("validators")
35
36
  if target_class is None:
36
37
  target_class = type(data)
37
38
  inst_dict = _as_dict(data)
@@ -60,7 +60,7 @@ def validate(
60
60
  otherwise it should be a ``SchemaDefinition`` instance.
61
61
  :param target_class: Name of the class within the schema to validate
62
62
  against. If ``None``, the class will be inferred from the schema by
63
- looked for a class with ``tree_root: true``. Defaults to ``None``.
63
+ looking for a class with ``tree_root: true``. Defaults to ``None``.
64
64
  :param strict: If ``True``, validation will stop after the first validation
65
65
  error is found, Otherwise all validation problems will be reported.
66
66
  Defaults to ``False``.
@@ -99,7 +99,7 @@ def validate_file(
99
99
  otherwise it should be a ``SchemaDefinition`` instance.
100
100
  :param target_class: Name of the class within the schema to validate
101
101
  against. If ``None``, the class will be inferred from the schema by
102
- looked for a class with ``tree_root: true``. Defaults to ``None``.
102
+ looking for a class with ``tree_root: true``. Defaults to ``None``.
103
103
  :param strict: If ``True``, validation will stop after the first validation
104
104
  error is found, Otherwise all validation problems will be reported.
105
105
  Defaults to ``False``.
@@ -55,4 +55,5 @@ class JsonschemaValidationPlugin(ValidationPlugin):
55
55
  instantiates=context.target_class,
56
56
  message=f"{best_error.message} in /{'/'.join(str(p) for p in best_error.absolute_path)}",
57
57
  context=error_context,
58
+ source=best_error,
58
59
  )
@@ -1,7 +1,7 @@
1
1
  from enum import Enum
2
2
  from typing import Any, List, Optional
3
3
 
4
- from pydantic import BaseModel
4
+ from pydantic import BaseModel, Field
5
5
 
6
6
 
7
7
  class Severity(str, Enum):
@@ -30,6 +30,9 @@ class ValidationResult(BaseModel):
30
30
  instantiates: Optional[str] = None
31
31
  context: List[str] = []
32
32
 
33
+ # The source object that caused this validation result
34
+ source: Any = Field(None, description="The source of this validation result", exclude=True)
35
+
33
36
 
34
37
  class ValidationReport(BaseModel):
35
38
  """
@@ -48,7 +48,7 @@ class Validator:
48
48
  :param instance: The instance to validate
49
49
  :param target_class: Name of the class within the schema to validate
50
50
  against. If ``None``, the class will be inferred from the schema by
51
- looked for a class with ``tree_root: true``. Defaults to ``None``.
51
+ looking for a class with ``tree_root: true``. Defaults to ``None``.
52
52
  :return: A validation report
53
53
  :rtype: ValidationReport
54
54
  """
@@ -61,7 +61,7 @@ class Validator:
61
61
  which provides the instances to validate
62
62
  :param target_class: Name of the class within the schema to validate
63
63
  against. If ``None``, the class will be inferred from the schema by
64
- looked for a class with ``tree_root: true``. Defaults to ``None``.
64
+ looking for a class with ``tree_root: true``. Defaults to ``None``.
65
65
  :return: A validation report
66
66
  :rtype: ValidationReport
67
67
  """
@@ -73,7 +73,7 @@ class Validator:
73
73
  :param instance: The instance to validate
74
74
  :param target_class: Name of the class within the schema to validate
75
75
  against. If ``None``, the class will be inferred from the schema by
76
- looked for a class with ``tree_root: true``. Defaults to ``None``.
76
+ looking for a class with ``tree_root: true``. Defaults to ``None``.
77
77
  :return: Iterator over validation results
78
78
  :rtype: Iterator[ValidationResult]
79
79
  """
@@ -89,7 +89,7 @@ class Validator:
89
89
  which provides the instances to validate
90
90
  :param target_class: Name of the class within the schema to validate
91
91
  against. If ``None``, the class will be inferred from the schema by
92
- looked for a class with ``tree_root: true``. Defaults to ``None``.
92
+ looking for a class with ``tree_root: true``. Defaults to ``None``.
93
93
  :return: Iterator over validation results
94
94
  :rtype: Iterator[ValidationResult]
95
95
  """
@@ -18,6 +18,7 @@ from linkml.generators.jsonschemagen import JsonSchemaGenerator
18
18
  from linkml.generators.pythongen import PythonGenerator
19
19
  from linkml.utils import datautils
20
20
  from linkml.utils.datavalidator import DataValidator
21
+ from linkml.utils.deprecation import deprecation_warning
21
22
 
22
23
  logger = logging.getLogger(__name__)
23
24
 
@@ -29,6 +30,7 @@ class HashableSchemaDefinition(SchemaDefinition):
29
30
 
30
31
  @lru_cache(maxsize=None)
31
32
  def _generate_jsonschema(schema, top_class, closed, include_range_class_descendants):
33
+ deprecation_warning("validators")
32
34
  logger.debug("Generating JSON Schema")
33
35
  not_closed = not closed
34
36
  return JsonSchemaGenerator(
@@ -42,6 +44,7 @@ def _generate_jsonschema(schema, top_class, closed, include_range_class_descenda
42
44
 
43
45
  class JsonSchemaDataValidatorError(Exception):
44
46
  def __init__(self, validation_messages: List[str]) -> None:
47
+ deprecation_warning("validators")
45
48
  super().__init__("\n".join(validation_messages))
46
49
  self.validation_messages = validation_messages
47
50
 
@@ -56,6 +59,7 @@ class JsonSchemaDataValidator(DataValidator):
56
59
  _hashable_schema: Union[str, HashableSchemaDefinition] = field(init=False, repr=False)
57
60
 
58
61
  def __setattr__(self, __name: str, __value: Any) -> None:
62
+ deprecation_warning("validators")
59
63
  if __name == "schema":
60
64
  if isinstance(__value, SchemaDefinition):
61
65
  self._hashable_schema = HashableSchemaDefinition(**asdict(__value))
@@ -65,6 +69,7 @@ class JsonSchemaDataValidator(DataValidator):
65
69
 
66
70
  def validate_file(self, input: str, format: str = "json", **kwargs):
67
71
  # return self.validate_object(obj)
72
+ deprecation_warning("validators")
68
73
  pass
69
74
 
70
75
  def validate_object(self, data: YAMLRoot, target_class: Type[YAMLRoot] = None, closed: bool = True) -> None:
@@ -76,6 +81,7 @@ class JsonSchemaDataValidator(DataValidator):
76
81
  :param closed:
77
82
  :return:
78
83
  """
84
+ deprecation_warning("validators")
79
85
  if target_class is None:
80
86
  target_class = type(data)
81
87
  inst_dict = as_simple_dict(data)
@@ -90,6 +96,7 @@ class JsonSchemaDataValidator(DataValidator):
90
96
  :param closed:
91
97
  :return:
92
98
  """
99
+ deprecation_warning("validators")
93
100
  results = list(self.iter_validate_dict(data, target_class, closed))
94
101
  if results:
95
102
  raise JsonSchemaDataValidatorError(results)
@@ -97,6 +104,7 @@ class JsonSchemaDataValidator(DataValidator):
97
104
  def iter_validate_dict(
98
105
  self, data: dict, target_class_name: ClassDefinitionName = None, closed: bool = True
99
106
  ) -> Iterable[str]:
107
+ deprecation_warning("validators")
100
108
  if self.schema is None:
101
109
  raise ValueError("schema object must be set")
102
110
  if target_class_name is None:
@@ -159,6 +167,8 @@ def cli(
159
167
  """
160
168
  Validates instance data
161
169
  """
170
+ deprecation_warning("validators")
171
+
162
172
  if module is None:
163
173
  if schema is None:
164
174
  raise Exception("must pass one of module OR schema")
@@ -14,11 +14,13 @@ from linkml.generators.sparqlgen import SparqlGenerator
14
14
  from linkml.reporting import CheckResult, Report
15
15
  from linkml.utils.datautils import _get_format, dumpers_loaders, get_dumper
16
16
  from linkml.utils.datavalidator import DataValidator
17
+ from linkml.utils.deprecation import deprecation_warning
17
18
 
18
19
  logger = logging.getLogger(__name__)
19
20
 
20
21
 
21
22
  def sparqljson2dict(row: dict):
23
+ deprecation_warning("validators")
22
24
  return {k: v["value"] for k, v in row.items()}
23
25
 
24
26
 
@@ -37,11 +39,13 @@ class SparqlDataValidator(DataValidator):
37
39
  queries: dict = None
38
40
 
39
41
  def validate_file(self, input: str, format: str = "turtle", **kwargs):
42
+ deprecation_warning("validators")
40
43
  g = Graph()
41
44
  g.parse(input, format=format)
42
45
  return self.validate_graph(g, **kwargs)
43
46
 
44
47
  def validate_graph(self, g: Graph, **kwargs):
48
+ deprecation_warning("validators")
45
49
  if self.queries is None:
46
50
  self.queries = SparqlGenerator(self.schema, **kwargs).queries
47
51
  invalid = []
@@ -61,6 +65,7 @@ class SparqlDataValidator(DataValidator):
61
65
  return invalid
62
66
 
63
67
  def validate_endpoint(self, url: str, **kwargs):
68
+ deprecation_warning("validators")
64
69
  if self.queries is None:
65
70
  self.queries = SparqlGenerator(self.schema, **kwargs).queries
66
71
  invalid = []
@@ -81,6 +86,7 @@ class SparqlDataValidator(DataValidator):
81
86
  return report
82
87
 
83
88
  def load_schema(self, schema: Union[str, SchemaDefinition]):
89
+ deprecation_warning("validators")
84
90
  self.schemaview = SchemaView(schema)
85
91
  self.schema = self.schemaview.schema
86
92
  # self.schema = YAMLGenerator(schema).schema
@@ -124,6 +130,7 @@ def cli(
124
130
 
125
131
  linkml-sparql-validate -U http://sparql.hegroup.org/sparql -s tests/test_validation/input/omo.yaml
126
132
  """
133
+ deprecation_warning("validators")
127
134
  validator = SparqlDataValidator(schema)
128
135
  if endpoint_url is not None:
129
136
  results = validator.validate_endpoint(endpoint_url, limit=limit, named_graphs=named_graph)
@@ -1,6 +1,4 @@
1
- """Iterate through all examples in a folder testing them for validity.
2
-
3
- """
1
+ """Iterate through all examples in a folder testing them for validity."""
4
2
 
5
3
  import glob
6
4
  import json
@@ -22,6 +20,7 @@ from linkml_runtime.utils.formatutils import camelcase
22
20
 
23
21
  from linkml._version import __version__
24
22
  from linkml.generators.pythongen import PythonGenerator
23
+ from linkml.utils.helpers import get_range_associated_slots
25
24
  from linkml.validator import Validator, _get_default_validator
26
25
 
27
26
  logger = logging.getLogger(__name__)
@@ -244,10 +243,28 @@ class ExampleRunner:
244
243
  raise ValueError(f"Cannot find unique class for URI {target_class}; got: {target_classes}")
245
244
  target_class = target_classes[0]
246
245
  new_dict_obj = {}
246
+
247
247
  for k, v in dict_obj.items():
248
248
  if v is not None:
249
249
  islot = sv.induced_slot(k, target_class)
250
- v2 = self._load_from_dict(v, target_class=islot.range)
250
+ # if slot is a dictionary, repeat key in dictionary value object
251
+ if islot.multivalued and islot.inlined and not islot.inlined_as_list:
252
+ (range_id_slot, range_simple_dict_value_slot, _) = get_range_associated_slots(
253
+ self.schemaview, islot.range
254
+ )
255
+ v_as_list = []
256
+ for ik, iv in v.items():
257
+ # simple dictionaries can be simply created
258
+ if range_simple_dict_value_slot is not None:
259
+ value = {range_id_slot.name: ik, range_simple_dict_value_slot.name: iv}
260
+ # other dictionaries => simply add the identifier to the dictionary
261
+ else:
262
+ value = iv
263
+ value[range_id_slot.name] = ik
264
+ v_as_list.append(value)
265
+ v2 = self._load_from_dict(v_as_list, target_class=islot.range)
266
+ else:
267
+ v2 = self._load_from_dict(v, target_class=islot.range)
251
268
  new_dict_obj[k] = v2
252
269
  py_target_class = getattr(self.python_module, camelcase(target_class))
253
270
  return py_target_class(**new_dict_obj)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: linkml
3
- Version: 1.8.5
3
+ Version: 1.8.7
4
4
  Summary: Linked Open Data Modeling Language
5
5
  Home-page: https://linkml.io/linkml/
6
6
  Keywords: schema,linked data,data modeling,rdf,owl,biolink
@@ -53,7 +53,7 @@ Requires-Dist: pyyaml
53
53
  Requires-Dist: rdflib (>=6.0.0)
54
54
  Requires-Dist: requests (>=2.22)
55
55
  Requires-Dist: sqlalchemy (>=1.4.31)
56
- Requires-Dist: typing-extensions (>=4.4.0) ; python_version < "3.9"
56
+ Requires-Dist: typing-extensions (>=4.6.0) ; python_version < "3.12"
57
57
  Requires-Dist: watchdog (>=0.9.0)
58
58
  Project-URL: Documentation, https://linkml.io/linkml/
59
59
  Project-URL: Repository, https://github.com/linkml/linkml
@@ -2,18 +2,19 @@ linkml/__init__.py,sha256=0REu65rXiOk3F1CYLzq60HiSZ2DfFySfGS6QFljZ01s,3663
2
2
  linkml/_version.py,sha256=udxv6OEqcE89DTVMYPtetXYg8IA8Sgc6yW26-6f8C3M,310
3
3
  linkml/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  linkml/cli/__main__.py,sha256=oPa7Fl2DQP40UivpIWNRr1CgwT2SQM0rhE478155zBY,80
5
- linkml/cli/main.py,sha256=83lyx36tcy95StDRtN7BmwNFCPt4As1wb0wbC3YwHKg,5386
5
+ linkml/cli/main.py,sha256=4X0OXU53nqkS18ViOIRLH8bx2eDVzgisWixhx9bhgPQ,5484
6
6
  linkml/generators/PythonGenNotes.md,sha256=wb9BPLLhF6378OKLbwSBAwmniLpwrcT5_bbfCHfLme8,51006
7
7
  linkml/generators/README.md,sha256=RMzT8EblC_GEdPy5WyfXHDBXlFI6k6mz3Cx2sdpcyWI,4438
8
8
  linkml/generators/__init__.py,sha256=2qSOnibL6KtzBW3KNqVX1gx1LQttrXlOPbbVDLLV2go,1587
9
9
  linkml/generators/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- linkml/generators/common/build.py,sha256=hXf2gf1ox2hiR-D6N-qXt5w5QkISLlo1A-_GurY3yHo,2897
10
+ linkml/generators/common/build.py,sha256=AR1jnMzE7WXBlLCX1qdgilj8qmBHRWFwsNx9nw2RBzQ,2928
11
11
  linkml/generators/common/ifabsent_processor.py,sha256=hVm6mKq8qciL5Fa53TAtGO8ZJnbRuktvJnaA6-HutTk,13533
12
- linkml/generators/common/lifecycle.py,sha256=UOJXlIyWQkvsn0Dao9_ZDzlamJtiINyVJQ6SRj66L9s,4910
12
+ linkml/generators/common/lifecycle.py,sha256=We0h_GeyL1biDaXCsd0ENWqGMpgtDbWOMCk-1-JJTD4,5514
13
13
  linkml/generators/common/naming.py,sha256=AsLJ7e87TU_SnAM0Sy7q9HZc-qXvyIuqHt1CoHV-Y3Y,5089
14
14
  linkml/generators/common/template.py,sha256=bjcSNiC85MYl9oGhk0ZpqwZpRxxy_NqxG8XBV-TXXDY,3338
15
15
  linkml/generators/common/type_designators.py,sha256=lgVcIRJJ-yCvVGeP9U_gQZpm77UmJBQo9Bh3lGJITno,1956
16
16
  linkml/generators/csvgen.py,sha256=O20K3IuDxomGJAyNFJmm1_HbPyl6xUK0l-aKY0A3KcM,3253
17
+ linkml/generators/dbmlgen.py,sha256=IrtY65iFdXg4wHBP9vHQeV20HUOUB1XlggPtmt_YvGM,5466
17
18
  linkml/generators/docgen/class.md.jinja2,sha256=-JmjYHgYOaaBYd5r-Tr5dkk0CLM_lX0kHdocPQtRsjU,3504
18
19
  linkml/generators/docgen/class_diagram.md.jinja2,sha256=gzskx4hOpU_s6BqOXdYZ9DwKxuClnsEgDzPurm30PeY,3469
19
20
  linkml/generators/docgen/common_metadata.md.jinja2,sha256=gy9J8rghBfKDKimwtHj_XuHY4PJRRYHLXVlBHqWrUzU,1604
@@ -26,7 +27,7 @@ linkml/generators/docgen/subset.md.jinja2,sha256=EPln_fjlhlkmwEGEp2iPX-9Xm2vVodP
26
27
  linkml/generators/docgen/type.md.jinja2,sha256=QmCMJZrFwP33eHkggBVtypbyrxTb-XZn9vHOYojVaYk,635
27
28
  linkml/generators/docgen.py,sha256=iDSu2LsZ7MStrzXdxFwK-oBlVevq2MwBc1n5WzHzTyw,38996
28
29
  linkml/generators/dotgen.py,sha256=vjHveFtKBItHRkowi1I4FHffcn4u4wLpBydYgVxB-vE,5028
29
- linkml/generators/erdiagramgen.py,sha256=5_VEPvRL0I819wCjk7T5hWffdBPc_qw3XpQdOYpO7uE,11357
30
+ linkml/generators/erdiagramgen.py,sha256=BteqzyVgKeUXfdCq3VHiiJMbuMrsn_D08IoNq8QMBcY,11462
30
31
  linkml/generators/excelgen.py,sha256=MQRRm1wDbg7auUQH9tGb5aRyrp-e4gjXsY10aoLb9LI,7708
31
32
  linkml/generators/golanggen.py,sha256=Qx1GZRIrKn8jNoO-8fJMjkrwV9ZLwR4NwYBW5kGGp9c,5840
32
33
  linkml/generators/golrgen.py,sha256=JB92VDhTuwyaOyxHxB4goIsjZbq4NMf36ESprC3GeBs,3454
@@ -34,27 +35,28 @@ linkml/generators/graphqlgen.py,sha256=belU4f89vBHoHBipaMkHiE_ND42IV7L0Zp4akL9sQ
34
35
  linkml/generators/javagen/example_template.java.jinja2,sha256=ec4CVTv_0zS7V5Y-1E6H4lRraya10gfX7BEMBlu38X4,444
35
36
  linkml/generators/javagen/java_record_template.jinja2,sha256=OQZffLSy_xR3FIhQMltvrYyVeut7l2Q-tzK7AOiVmWs,1729
36
37
  linkml/generators/javagen.py,sha256=BTAXgvOOvRa3AOfaaiVFyuyaqg4XFR_JbO6_7tT_AnQ,5335
37
- linkml/generators/jsonldcontextgen.py,sha256=J-9QF7doco3-hYReiik67PjiaF_UudrFEiVsbnJFCJg,8666
38
- linkml/generators/jsonldgen.py,sha256=9ru1rb4_u7t_Rp8ILQSmDIsk_evrDL_OeilnQUsu338,7770
39
- linkml/generators/jsonschemagen.py,sha256=1k00W4I4paKHKZnmcWcMEoAel1VZRHa2rVgcOZW3kZU,30424
38
+ linkml/generators/jsonldcontextgen.py,sha256=LpuTtzU4H6BH_615E4Fbt0QBCEopvqRMVOMwDva1kGk,8958
39
+ linkml/generators/jsonldgen.py,sha256=d94TEPu9zeHDZqPU6cSaiQiJnv0kc_AXkXahi1xOBZ8,7789
40
+ linkml/generators/jsonschemagen.py,sha256=8luthDkItlZ5bU4Lxt9b7tZx0HTIP4FZEZ5C2nwMMqA,30867
40
41
  linkml/generators/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- linkml/generators/linkmlgen.py,sha256=g1D8B6MBxcG6b9aYCUESp7nDZPmjedCs8rmGm_0GLnE,3484
42
+ linkml/generators/linkmlgen.py,sha256=7GbD-ZErCblapbl_CukfHvFYOTbhgWiTIyg6O5BJSO0,3915
42
43
  linkml/generators/markdowngen.py,sha256=0gjMPJ0Ycm9se4Y4cyqjbTntGYqRRZu4RL-9Qf5n4lk,34464
44
+ linkml/generators/mermaidclassdiagramgen.py,sha256=NzRDXmy2qMOUHmvrcd7LrKZiVR1J___pLRhQpGstGyA,4946
43
45
  linkml/generators/namespacegen.py,sha256=C4p9LSwsnDqf6sv-wG5l0VQniWFJ1HA1hRXJBDOg3pM,6467
44
46
  linkml/generators/oocodegen.py,sha256=aBJgy-S-8FL5cW9p4hf986iSTxXwvkM7ZajKlari4us,7820
45
- linkml/generators/owlgen.py,sha256=X00YGlx8scBftKY422l6uwnvqiQpNd2DI4cDC-G0kW8,58204
46
- linkml/generators/plantumlgen.py,sha256=ScTpXZe2Vjs2O6DeRJo-nr-p13lWSAtMZl6gu9jQYTk,15478
47
+ linkml/generators/owlgen.py,sha256=FxfEpJSybw11qEjcE3ozVvFuu_eKp1qhQmFOK566CGg,58086
48
+ linkml/generators/plantumlgen.py,sha256=G12fBFh8qqHuXTtGEndcQJzAtarWJFE7qcUaMXLTJrE,15614
47
49
  linkml/generators/prefixmapgen.py,sha256=oISFtSt_s5OWx65tYasWk0bUJIDIU1MjnsWqfBE7ZQA,4257
48
50
  linkml/generators/projectgen.py,sha256=XQdOjAJroroT2JNNPbrUauv2DTJ3tfJoFNYGSLKky24,9791
49
51
  linkml/generators/protogen.py,sha256=a4KUyKj525tuE2YenEJQ_IkbNKnnhVH_N-qTEmMBVY4,2524
50
52
  linkml/generators/pydanticgen/__init__.py,sha256=5SUFNcrh-6MLfMqptR6wPsR2v1Gyrl3wii-yu6kdnQM,700
51
- linkml/generators/pydanticgen/array.py,sha256=eV5zWd4dJl7Uj-xQyijibACily4IgWSEQRH8Wmga9gc,27876
53
+ linkml/generators/pydanticgen/array.py,sha256=ELAH-KyJwDX69q3ANlyyFJqvEpU30XSY1Ztu2sh4M0E,25956
52
54
  linkml/generators/pydanticgen/black.py,sha256=BaJ7b-kMUbIN_cKRT3yCaMEbFwxzj1_U7w4fKQnkL44,723
53
55
  linkml/generators/pydanticgen/build.py,sha256=xWNnxaNz0LqfNpgUuaUeVdvmXyFASwv5QED3bEaUVaM,4093
54
56
  linkml/generators/pydanticgen/includes.py,sha256=kDAwonKbhTFzrFa2TrmTYuOSHXuzDy5WHgBaI5nVY6c,504
55
57
  linkml/generators/pydanticgen/pydanticgen.py,sha256=IEmSPr9zu1dkgIMFvVKDswokhQvM_weXdmVNQ3l3eNQ,49938
56
58
  linkml/generators/pydanticgen/template.py,sha256=wjUMiTay_EFh8zp5LfytBsgZJGlKjV96PVnBgI21KVc,24886
57
- linkml/generators/pydanticgen/templates/attribute.py.jinja,sha256=uMyVKpO5uQkAFlIvIBwA6FFZl_BSIotfwCorrSwMA3Q,873
59
+ linkml/generators/pydanticgen/templates/attribute.py.jinja,sha256=4s4eUZEqiTxHV2pU8beF761xut4Q-bXwZXF0XBlnXAs,881
58
60
  linkml/generators/pydanticgen/templates/base_model.py.jinja,sha256=6KRQ1ZVHh1uwZnYL3qxBnyit8_DNE7D-4l2-1wsRsG0,406
59
61
  linkml/generators/pydanticgen/templates/class.py.jinja,sha256=GqR2t5y0vLmvUpT2vyP5VX42PO9AkAnGE-U2RZPa9AI,690
60
62
  linkml/generators/pydanticgen/templates/conditional_import.py.jinja,sha256=YheknDrxvepiJUzeItSL5aSbAkCdR1k0a6m6aTA4qNM,240
@@ -69,9 +71,9 @@ linkml/generators/pythongen.py,sha256=-W8ZgvgDP-Hm4Q9weQiB7xtXMJyadtyfZ6BHC1CmCl
69
71
  linkml/generators/rdfgen.py,sha256=OT8oS8MPUVf5UK3OKvRWgAh9iQiWwdyWJSA69PncOw4,2969
70
72
  linkml/generators/shacl/__init__.py,sha256=KgMOyESGTdKk2Vhx9uuUYgEJPuJQ-iT1vDQVIMoiXCM,58
71
73
  linkml/generators/shacl/shacl_data_type.py,sha256=gX3Y2KyTVPwMyef0cJMTEpU9h0oH-H0ThVDORdNW170,1828
72
- linkml/generators/shacl/shacl_ifabsent_processor.py,sha256=hbgt5UtVHo_z_JOLkg6ltGRdVuiv65b2PA3x1Oy4ssQ,4269
73
- linkml/generators/shaclgen.py,sha256=6MKUgvsQ8GGG9j8w8EUqwhMB4VhV2nVURYRRcg2FBfw,14330
74
- linkml/generators/shexgen.py,sha256=-GFdapDEAUXAjsXdTI7ZlS39YfuvaxfzPkdqUNM19qI,9941
74
+ linkml/generators/shacl/shacl_ifabsent_processor.py,sha256=usmqdCvAPiivHzXWkNzW0G_KOaAG8bHdTCkEH2pI0b4,4364
75
+ linkml/generators/shaclgen.py,sha256=RcGoo4j-NJUavbdUo1gnYo4mXTivaYb8o-oIfaUrA_g,14833
76
+ linkml/generators/shexgen.py,sha256=cr4x4ORZlre6XlToWKho5F4XjFwOlzR1SpOpbeOvRA4,9939
75
77
  linkml/generators/sparqlgen.py,sha256=2DaFrFIeMI7QQfiPn79J8ERILlkJALrabDnKK7usDJQ,6188
76
78
  linkml/generators/sqlalchemy/__init__.py,sha256=mb9AC1rIFkSiNZhhG0TAk45ol9PjS1XvsrvCjgfVUpQ,249
77
79
  linkml/generators/sqlalchemy/sqlalchemy_declarative_template.py,sha256=X_Ws1NUBikMI5HuNgEhl_PIeWM-B-c2B0W9KUBH4QTg,2542
@@ -80,10 +82,10 @@ linkml/generators/sqlalchemygen.py,sha256=MYzEkg8BAgFChiRNqOZK9aMqH-aNGa6-CnpZdb
80
82
  linkml/generators/sqltablegen.py,sha256=BaWAuvwVHsXVt85GYxzH5_UL3ZeqRI9SojlvMmh4KkE,12395
81
83
  linkml/generators/sssomgen.py,sha256=zrZy0WL9fF5bk-XAcB-MZYZkhHhqVRHt2rGBUtfqnLY,6891
82
84
  linkml/generators/string_template.md,sha256=kRcfic6entgIaJdpSg6GF3jcjC9wbKsCVM6wVT2qipc,1788
83
- linkml/generators/summarygen.py,sha256=C9r34928QtVMaXTbdch-mRPB5L0jDTGmTnVmtrKrR-0,3083
85
+ linkml/generators/summarygen.py,sha256=abNd39Z-Kn3FX2fjXLeCqvXvFunpqM7UFPimtiCB2p0,3081
84
86
  linkml/generators/terminusdbgen.py,sha256=ItJ-HTMkkX22Ex1-UjJZmtEtE2fn6UdjAxDtn20RXV8,4713
85
- linkml/generators/typescriptgen.py,sha256=3738AygrfEnyp0eDzpwbO4x4udLHDXX1Ev4MVM2zBwY,8814
86
- linkml/generators/yamlgen.py,sha256=38zdh5T4tObFhCHgbUbKbc0UuFh1TmmsWBkWM9gcvsI,1625
87
+ linkml/generators/typescriptgen.py,sha256=xxi7LzWNjbRFjjC6AR7NO4tfXx5CVCWNJ1urSiu5FNo,8876
88
+ linkml/generators/yamlgen.py,sha256=PWexYoR3wHRoAUk6zK67fRYjBF6sAmX_iGlOAT0PJq0,1623
87
89
  linkml/generators/yumlgen.py,sha256=Bg1MGlhCCQoswB19mFKh8xB0UcL9MQGHlUrAVGZSWkc,12208
88
90
  linkml/linter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
91
  linkml/linter/cli.py,sha256=tXJ3vwjohCnj4EApEJXvXUSI3NLJ3fI3u6tJVxbgLQg,4505
@@ -100,24 +102,24 @@ linkml/linter/formatters/markdown_formatter.py,sha256=sumF2MNJYL5oipLwCftCr3AiaC
100
102
  linkml/linter/formatters/terminal_formatter.py,sha256=xmNwlRieVCssRt3fpnNP5WWw_YXGmaBsbxFoMWufy5M,2085
101
103
  linkml/linter/formatters/tsv_formatter.py,sha256=1VW-1Tv16mwhIDpHdExYpJJR3z42K5_XK2C-4mmYYdE,871
102
104
  linkml/linter/linter.py,sha256=ETx1C8IbXnrCDWwpBxAz0ahY4ROYcl-pQhwp5RFjzJ8,5145
103
- linkml/linter/rules.py,sha256=Eg_-lIX1KPsCp3PHdPcBiHmSS5qAVZkHbw5LURfkfXk,11481
105
+ linkml/linter/rules.py,sha256=NFCSBnEU_D0V9tqYbJvzhJlxhtyNuyqRzt4nrTc7xeA,11621
104
106
  linkml/reporting/__init__.py,sha256=Jo0V_nyEcnWhMukMW-bqW9dlbgCfaRlWm3CO-XzgU84,92
105
107
  linkml/reporting/model.py,sha256=-10yNfk8wuRC48ZI-akrWvtlJ9a6RYWET2TzlZV3XXo,8622
106
108
  linkml/transformers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
- linkml/transformers/logical_model_transformer.py,sha256=hWc5uF1TYU9_qVZAKm2UtQ6ICoeWLaRCI5OUWmEy94k,29835
109
+ linkml/transformers/logical_model_transformer.py,sha256=5p6y41bTt3nJULznqINb8BJqPeCYgHGPuv8qQRycJ_E,29923
108
110
  linkml/transformers/model_transformer.py,sha256=tK_MpRDI-q2qfe8KHT6qJHP8ZruKjYx1FcM-Fnjse-E,678
109
111
  linkml/transformers/relmodel_transformer.py,sha256=2AwLVqto1to_9IaTjicweFVIPa8dcNPKK0EJWdHfWMo,19675
110
112
  linkml/transformers/schema_renamer.py,sha256=DYRbgL9j41M9FdbHYLY3u4YIdDM98laD3cv_lHcgWHQ,5275
111
113
  linkml/utils/__init__.py,sha256=Pkyv-Gfb8QoJdInRdJuuUz1Igfe0sT9t8Gv3V_fyTXc,92
112
114
  linkml/utils/cli_utils.py,sha256=MdVbox1qr6kDUHUCWAmFhV-D6ebs_nn8vVwB8KDQfew,742
113
- linkml/utils/converter.py,sha256=ZGRZXsPezhMmQaF-BiBsQON--TVQLi64tEdtrN9q2PA,6334
115
+ linkml/utils/converter.py,sha256=-v6eiXjjn3NqmZCfnzfkyDpcA5jha3BFxUuSlLmgK6Y,7126
114
116
  linkml/utils/datautils.py,sha256=QlbzwXykh5Fphfe5KxPo6_ekXfniLbHiEGJtLWjUrvY,3742
115
117
  linkml/utils/datavalidator.py,sha256=kBdWaVi8IZT1bOwEJgJYx-wZAb_PTBObB9nHpYORfKA,472
116
- linkml/utils/deprecation.py,sha256=onhB82qjIkKzyUOTO9WDqN6QF3I2cJoyBrbm66vHmgM,8088
118
+ linkml/utils/deprecation.py,sha256=SlAS6L27I65fkaSape2uC49CFgeOTGzUwwERZMp134E,8484
117
119
  linkml/utils/exceptions.py,sha256=3S6lf5WAUgVvjPRaES597_YjUjbbJ5KqjKjpjcaRLoU,217
118
120
  linkml/utils/execute_tutorial.py,sha256=X2sdb4fBBnBmNKg9k5_fhWeY9DXCbYEb4NXUCPv4TJ0,7057
119
- linkml/utils/generator.py,sha256=04GLUdwxz5Q4K_5ICBWOlhRapCf9yOan2H5C3zUrOE4,39132
120
- linkml/utils/helpers.py,sha256=yR8n4zFA5wPcYC7xzRuNF3wO16vG80v6j7DM3qTNmIc,447
121
+ linkml/utils/generator.py,sha256=w90ASqaXZnu4aezf8YpFfH7khU5HHvJa5Qqfk50Pd6c,39572
122
+ linkml/utils/helpers.py,sha256=IoLaG8XE8WOorOFQF-XKfaWKSEoVDShC2E9Rd1596uo,3364
121
123
  linkml/utils/logictools.py,sha256=BGtcoqr_Rsu08Ywa6lNiL881uZzQmNWk1p4FEIVKYe0,23641
122
124
  linkml/utils/mergeutils.py,sha256=FdcSiYUmPkxxwnEv_43SR3BN6lCUeEkNndRpxJQWE2c,9080
123
125
  linkml/utils/rawloader.py,sha256=nUB8Gfn8yEVwyo6bx0TtB2mBGkilC-fybi0xvQ73Gks,4417
@@ -127,8 +129,8 @@ linkml/utils/schemaloader.py,sha256=wiqKHc28ga_qLuIDGS9BQhwhXYu1ZSUqhOebmUF1NGs,
127
129
  linkml/utils/schemasynopsis.py,sha256=j7sNt6j-E3rmf-1qEo351Kth2kltt6crQV-dxJAGCUE,18414
128
130
  linkml/utils/sqlutils.py,sha256=DkeNyVlHcFlKSHgnOmpO47JSQssqRhA9ys_0ZXkYGz4,17120
129
131
  linkml/utils/typereferences.py,sha256=8Yfuz9-HAwOPoJLbIcO_sY9zf32hvPRzGeSOzECfMWA,2232
130
- linkml/utils/validation.py,sha256=eLw1-d8x3N1V14bSc6H_mJJXo59ryKvvUIBcOJ1dVMw,1438
131
- linkml/validator/__init__.py,sha256=u0CeorIw50Qqwa60-lIFsJXg-sOdfo90hqvLpyvvwo4,4993
132
+ linkml/utils/validation.py,sha256=5vYsb2G21S0j7wkCOvmwK9TNbIGtBNMXHKdRVw1VF-o,1497
133
+ linkml/validator/__init__.py,sha256=rhGXoxyxY3ZMJYwB29HYYzXbwSbMxxE-OmB2ouQIvVw,4995
132
134
  linkml/validator/cli.py,sha256=-7_hU787d321z_4pJeUs9dQsM76xpXie9dS-552c7Xs,7683
133
135
  linkml/validator/loaders/__init__.py,sha256=FjUqEfBHeT5PEMBEZ9XwpclyQOysr4OCI1M0w_MYPVc,1165
134
136
  linkml/validator/loaders/delimited_file_loader.py,sha256=fdh61ZMPTfH29_DM93f5dY0jLP7KQPNh_QAHZppsdNw,2616
@@ -137,24 +139,24 @@ linkml/validator/loaders/loader.py,sha256=YKQXmSZhCymvvb2Dbr4lVCKVDt-lOIayzRD7CW
137
139
  linkml/validator/loaders/passthrough_loader.py,sha256=fQvBZqzGnpdwpZio4Mbehmsb6ePpzcacHPuR1QWuhFM,525
138
140
  linkml/validator/loaders/yaml_loader.py,sha256=ZsMz-oGDkX9oPEOVcKnFRGhU9q0fKoHcL6BLOkCeB4c,914
139
141
  linkml/validator/plugins/__init__.py,sha256=0ifiDqpcXVy4X7OJFm7FMYi1-6E06avNIIk9R0c6nD8,693
140
- linkml/validator/plugins/jsonschema_validation_plugin.py,sha256=c3OjvLR5m83vppsDfkrS9nMXma_ogUxXpZuM_JIUVM4,2634
142
+ linkml/validator/plugins/jsonschema_validation_plugin.py,sha256=y1DU_oxc-tP5ZRHzI6boSqkesxpEe_6A6Ftuva0Yfuo,2669
141
143
  linkml/validator/plugins/pydantic_validation_plugin.py,sha256=gVjdJiGcZ1EuOTcCMWOUS35W3IpMJQHUgjj6lQ3-41E,1990
142
144
  linkml/validator/plugins/recommended_slots_plugin.py,sha256=kOdoYQyye47nLA7BjorVmydS84nGpiVy3MoCbPq1Ymo,2308
143
145
  linkml/validator/plugins/shacl_validation_plugin.py,sha256=X6h1O54m9P5USvqCvNqELD0YpzXkE6UrmxnV0ukU6E4,3888
144
146
  linkml/validator/plugins/validation_plugin.py,sha256=9SMHF8b2bgG9-8351e8bY676e0A4aEBJSXvMjMF5kXg,1548
145
- linkml/validator/report.py,sha256=LwFpmJ74Cvsi2CuEDhm1a8nn9x1VI3Z98DbkUZVhKMA,898
147
+ linkml/validator/report.py,sha256=haaLq9TiOw00SURa9r9v-WUsstfzn_8yIJ29_Axq0fg,1061
146
148
  linkml/validator/validation_context.py,sha256=Pmccq-LQ9iEeLyZhamp3mKjjtwp4ji1hIe5TT05AUT4,2732
147
- linkml/validator/validator.py,sha256=BFgfKdu9Nad2dc9XTpmz9daQTj_FTcvo6mBq3e8fhJs,5649
149
+ linkml/validator/validator.py,sha256=-RUrgLl7RY8p0zbUOWbw6afh7ZgHjjMJM08heDh58LM,5653
148
150
  linkml/validators/__init__.py,sha256=43W3J5NPKhwa3ZFHLRYsJMocwQKWGYCF9Ki9r0ccGbc,202
149
- linkml/validators/jsonschemavalidator.py,sha256=zGDPKjr13hXHSH8g1KOzo4PXrfM_TTvpwq_jD03aVUw,8005
150
- linkml/validators/sparqlvalidator.py,sha256=0iq-oFFLV0Juu6pJskpLOlB7AMZwU3VFvoflzW4ohH8,4660
151
+ linkml/validators/jsonschemavalidator.py,sha256=jrUWbQo4Uy85SLtxyu3LPdgcZM6re5-Hw5Yo5qASl4U,8391
152
+ linkml/validators/sparqlvalidator.py,sha256=xlf9hZ-XDeScv2WB9wBg17WKM8HOKmRPowozOzlOLSQ,4961
151
153
  linkml/workspaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
154
  linkml/workspaces/datamodel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
153
155
  linkml/workspaces/datamodel/workspaces.py,sha256=4HdkqweGNfMPqnB1_Onc9DcTfkhoagTRcqruh08nRoI,14905
154
156
  linkml/workspaces/datamodel/workspaces.yaml,sha256=EjVrwPpeRZqJRjuGyyDRxxFzuv55SiLIXPBRUG6HStU,4233
155
- linkml/workspaces/example_runner.py,sha256=T7sHQetV6a-dG5Kjuh2L4rHQ6-SPG3Kj1J1nPB_1uoQ,11757
156
- linkml-1.8.5.dist-info/LICENSE,sha256=kORMoywK6j9_iy0UvLR-a80P1Rvc9AOM4gsKlUNZABg,535
157
- linkml-1.8.5.dist-info/entry_points.txt,sha256=jvnPJ8UTca4_L-Dh8OdUm5td8I3ZFlKRhMPjqRLtaSg,2084
158
- linkml-1.8.5.dist-info/METADATA,sha256=9isA7CyNTTGO9A1qH-RvsfN0TH2JGw6ss0RBEwuRa5k,3873
159
- linkml-1.8.5.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
160
- linkml-1.8.5.dist-info/RECORD,,
157
+ linkml/workspaces/example_runner.py,sha256=oViQ5gT8NkFTZbg0dW5LAOSAOAfJK8_QmKdYwzzGhgQ,12919
158
+ linkml-1.8.7.dist-info/LICENSE,sha256=kORMoywK6j9_iy0UvLR-a80P1Rvc9AOM4gsKlUNZABg,535
159
+ linkml-1.8.7.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
160
+ linkml-1.8.7.dist-info/METADATA,sha256=hubj7dcgTrPQ2ZHmC9Es38FRabdXlkYzrYOqHNp_PS0,3874
161
+ linkml-1.8.7.dist-info/entry_points.txt,sha256=CtvrM-5f3NuMEBTXONEnIo5UUJegBRWJvXUmrYfdIfM,2194
162
+ linkml-1.8.7.dist-info/RECORD,,
@@ -1,5 +1,6 @@
1
1
  [console_scripts]
2
2
  gen-csv=linkml.generators.csvgen:cli
3
+ gen-dbml=linkml.generators.dbmlgen:cli
3
4
  gen-doc=linkml.generators.docgen:cli
4
5
  gen-erdiagram=linkml.generators.erdiagramgen:cli
5
6
  gen-excel=linkml.generators.excelgen:cli
@@ -13,6 +14,7 @@ gen-jsonld=linkml.generators.jsonldgen:cli
13
14
  gen-jsonld-context=linkml.generators.jsonldcontextgen:cli
14
15
  gen-linkml=linkml.generators.linkmlgen:cli
15
16
  gen-markdown=linkml.generators.markdowngen:cli
17
+ gen-mermaid-class-diagram=linkml.generators.mermaidclassdiagramgen:cli
16
18
  gen-namespaces=linkml.generators.namespacegen:cli
17
19
  gen-owl=linkml.generators.owlgen:cli
18
20
  gen-plantuml=linkml.generators.plantumlgen:cli
File without changes