linkml 1.7.4__py3-none-any.whl → 1.7.6__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 (54) hide show
  1. linkml/generators/__init__.py +2 -0
  2. linkml/generators/docgen/class.md.jinja2 +15 -2
  3. linkml/generators/docgen/slot.md.jinja2 +14 -1
  4. linkml/generators/docgen.py +32 -11
  5. linkml/generators/excelgen.py +5 -3
  6. linkml/generators/golanggen.py +6 -3
  7. linkml/generators/jsonldcontextgen.py +9 -6
  8. linkml/generators/jsonldgen.py +3 -1
  9. linkml/generators/oocodegen.py +6 -3
  10. linkml/generators/owlgen.py +30 -3
  11. linkml/generators/prefixmapgen.py +5 -4
  12. linkml/generators/projectgen.py +18 -5
  13. linkml/generators/pydanticgen/__init__.py +29 -0
  14. linkml/generators/{pydanticgen.py → pydanticgen/pydanticgen.py} +196 -301
  15. linkml/generators/pydanticgen/template.py +504 -0
  16. linkml/generators/pydanticgen/templates/attribute.py.jinja +10 -0
  17. linkml/generators/pydanticgen/templates/base_model.py.jinja +27 -0
  18. linkml/generators/pydanticgen/templates/class.py.jinja +21 -0
  19. linkml/generators/pydanticgen/templates/conditional_import.py.jinja +9 -0
  20. linkml/generators/pydanticgen/templates/enum.py.jinja +16 -0
  21. linkml/generators/pydanticgen/templates/footer.py.jinja +13 -0
  22. linkml/generators/pydanticgen/templates/imports.py.jinja +31 -0
  23. linkml/generators/pydanticgen/templates/module.py.jinja +27 -0
  24. linkml/generators/pydanticgen/templates/validator.py.jinja +15 -0
  25. linkml/generators/pythongen.py +19 -10
  26. linkml/generators/shacl/__init__.py +3 -0
  27. linkml/generators/shacl/ifabsent_processor.py +41 -0
  28. linkml/generators/shacl/shacl_data_type.py +40 -0
  29. linkml/generators/shaclgen.py +105 -82
  30. linkml/generators/shexgen.py +1 -1
  31. linkml/generators/sparqlgen.py +5 -4
  32. linkml/generators/sqlalchemygen.py +15 -14
  33. linkml/generators/sqltablegen.py +37 -25
  34. linkml/generators/terminusdbgen.py +7 -1
  35. linkml/generators/typescriptgen.py +2 -1
  36. linkml/linter/config/datamodel/config.py +8 -0
  37. linkml/linter/linter.py +2 -1
  38. linkml/linter/rules.py +11 -2
  39. linkml/transformers/logical_model_transformer.py +2 -1
  40. linkml/transformers/relmodel_transformer.py +4 -2
  41. linkml/transformers/schema_renamer.py +1 -1
  42. linkml/utils/generator.py +11 -8
  43. linkml/utils/ifabsent_functions.py +7 -9
  44. linkml/utils/schema_builder.py +1 -0
  45. linkml/utils/schema_fixer.py +3 -2
  46. linkml/utils/schemaloader.py +1 -9
  47. linkml/utils/sqlutils.py +39 -25
  48. linkml/validator/validation_context.py +2 -1
  49. {linkml-1.7.4.dist-info → linkml-1.7.6.dist-info}/METADATA +4 -1
  50. {linkml-1.7.4.dist-info → linkml-1.7.6.dist-info}/RECORD +53 -40
  51. {linkml-1.7.4.dist-info → linkml-1.7.6.dist-info}/entry_points.txt +0 -1
  52. linkml/generators/sqlddlgen.py +0 -559
  53. {linkml-1.7.4.dist-info → linkml-1.7.6.dist-info}/LICENSE +0 -0
  54. {linkml-1.7.4.dist-info → linkml-1.7.6.dist-info}/WHEEL +0 -0
@@ -232,11 +232,19 @@ class StandardNamingConfig(RuleConfig):
232
232
 
233
233
  level: Union[str, "RuleLevel"] = None
234
234
  permissible_values_upper_case: Optional[Union[bool, Bool]] = None
235
+ slot_pattern: Optional[str] = None
236
+ class_pattern: Optional[str] = None
235
237
 
236
238
  def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
237
239
  if self.permissible_values_upper_case is not None and not isinstance(self.permissible_values_upper_case, Bool):
238
240
  self.permissible_values_upper_case = Bool(self.permissible_values_upper_case)
239
241
 
242
+ if self.class_pattern is not None and not isinstance(self.class_pattern, str):
243
+ self.class_pattern = str(self.class_pattern)
244
+
245
+ if self.slot_pattern is not None and not isinstance(self.slot_pattern, str):
246
+ self.slot_pattern = str(self.slot_pattern)
247
+
240
248
  super().__post_init__(**kwargs)
241
249
 
242
250
 
linkml/linter/linter.py CHANGED
@@ -85,7 +85,8 @@ class Linter:
85
85
  ]
86
86
  )
87
87
 
88
- def validate_schema(self, schema_path: str):
88
+ @staticmethod
89
+ def validate_schema(schema_path: str):
89
90
  with open(schema_path) as schema_file:
90
91
  schema = yaml.safe_load(schema_file)
91
92
 
linkml/linter/rules.py CHANGED
@@ -219,8 +219,17 @@ class StandardNamingRule(LinterRule):
219
219
  self.config = config
220
220
 
221
221
  def check(self, schema_view: SchemaView, fix: bool = False) -> Iterable[LinterProblem]:
222
- class_pattern = self.PATTERNS["uppercamel"]
223
- slot_pattern = self.PATTERNS["snake"]
222
+ class_pattern = (
223
+ self.PATTERNS["uppercamel"]
224
+ if not self.config.class_pattern
225
+ else self.PATTERNS.get(self.config.class_pattern, re.compile(self.config.class_pattern))
226
+ )
227
+ slot_pattern = (
228
+ self.PATTERNS["snake"]
229
+ if not self.config.slot_pattern
230
+ else self.PATTERNS.get(self.config.slot_pattern, re.compile(self.config.slot_pattern))
231
+ )
232
+
224
233
  enum_pattern = self.PATTERNS["uppercamel"]
225
234
  permissible_value_pattern = (
226
235
  self.PATTERNS["uppersnake"] if self.config.permissible_values_upper_case else self.PATTERNS["snake"]
@@ -383,7 +383,8 @@ class LogicalModelTransformer(ModelTransformer):
383
383
  if new_slot_dict:
384
384
  target.all_of.append(AnonymousSlotExpression(**new_slot_dict))
385
385
 
386
- def _merge_type_ancestors(self, target: TypeDefinition, source: TypeDefinition):
386
+ @staticmethod
387
+ def _merge_type_ancestors(target: TypeDefinition, source: TypeDefinition):
387
388
  """
388
389
  Generate all_ofs for type based on ancestors.
389
390
 
@@ -368,7 +368,8 @@ class RelationalModelTransformer:
368
368
  result = TransformationResult(target, mappings=mappings)
369
369
  return result
370
370
 
371
- def get_direct_identifier_attribute(self, sv: SchemaView, cn: ClassDefinitionName) -> Optional[SlotDefinition]:
371
+ @staticmethod
372
+ def get_direct_identifier_attribute(sv: SchemaView, cn: ClassDefinitionName) -> Optional[SlotDefinition]:
372
373
  c = sv.get_class(cn)
373
374
  for a in c.attributes.values():
374
375
  if a.identifier:
@@ -414,7 +415,8 @@ class RelationalModelTransformer:
414
415
  or (c.tree_root and self.skip_tree_root)
415
416
  )
416
417
 
417
- def add_primary_key(self, cn: str, sv: SchemaView) -> SlotDefinition:
418
+ @staticmethod
419
+ def add_primary_key(cn: str, sv: SchemaView) -> SlotDefinition:
418
420
  """
419
421
  Adds a surrogate/autoincrement primary key to a class
420
422
 
@@ -42,7 +42,7 @@ class SchemaRenamer:
42
42
  """
43
43
  Rename all elements in the schema using rename_function_map
44
44
 
45
- :param sv:
45
+ :param schema:
46
46
  :return:
47
47
  """
48
48
  schema = SchemaDefinition(**as_dict(schema))
linkml/utils/generator.py CHANGED
@@ -83,11 +83,11 @@ class Generator(metaclass=abc.ABCMeta):
83
83
  For usage `Generator Docs <https://linkml.io/linkml/generators/>`_
84
84
  """
85
85
 
86
- # ClassVars
87
86
  schema: Union[str, TextIO, SchemaDefinition, "Generator"]
88
87
  """metamodel compliant schema. Can be URI, file name, actual schema, another generator, an
89
88
  open file or a pre-parsed schema"""
90
89
 
90
+ # ClassVars
91
91
  generatorname: ClassVar[str] = None
92
92
  """ Name of the generator. Override with os.path.basename(__file__)"""
93
93
 
@@ -159,7 +159,8 @@ class Generator(metaclass=abc.ABCMeta):
159
159
  """True means output is to a directory, False is to stdout"""
160
160
 
161
161
  base_dir: str = None # Base directory of schema
162
- """Working directory or base URL of sources"""
162
+ """Working directory or base URL of sources.
163
+ Setting this is necessary for correct retrieval of relative imports."""
163
164
 
164
165
  metamodel_name_map: Dict[str, str] = None
165
166
  """Allows mapping of names of metamodel elements such as slot, etc"""
@@ -196,8 +197,8 @@ class Generator(metaclass=abc.ABCMeta):
196
197
  if self.uses_schemaloader:
197
198
  self._initialize_using_schemaloader(schema)
198
199
  else:
199
- logging.info(f"Using SchemaView with im={self.importmap}")
200
- self.schemaview = SchemaView(schema, importmap=self.importmap)
200
+ logging.info(f"Using SchemaView with im={self.importmap} // base_dir={self.base_dir}")
201
+ self.schemaview = SchemaView(schema, importmap=self.importmap, base_dir=self.base_dir)
201
202
  self.schema = self.schemaview.schema
202
203
  self._init_namespaces()
203
204
 
@@ -579,7 +580,8 @@ class Generator(metaclass=abc.ABCMeta):
579
580
  return slotname
580
581
  return None
581
582
 
582
- def enum_identifier_path(self, enum_or_enumname: Union[str, EnumDefinition]) -> List[str]:
583
+ @staticmethod
584
+ def enum_identifier_path(enum_or_enumname: Union[str, EnumDefinition]) -> List[str]:
583
585
  """Return an enum_identifier path"""
584
586
  return [
585
587
  "str",
@@ -682,7 +684,7 @@ class Generator(metaclass=abc.ABCMeta):
682
684
 
683
685
  def slot_name(self, name: str) -> str:
684
686
  """
685
- Return the underscored version of the aliased slot name if name is a slot. Prepend "unknown_" if the name
687
+ Return the underscored version of the aliased slot name if name is a slot. Prepend "unknown\_" if the name
686
688
  isn't valid.
687
689
  """
688
690
  slot = self.slot_for(name)
@@ -704,7 +706,7 @@ class Generator(metaclass=abc.ABCMeta):
704
706
 
705
707
  :param el_or_elname: element or name to map
706
708
  :param is_range_name: True means that we're looking for a class or type. False means Slot or Subset. Only
707
- applies if el_or_elname is an ElementName (otherwise we know what we've got
709
+ applies if el_or_elname is an ElementName (otherwise we know what we've got
708
710
  :return: Formatted name if type can be known else None
709
711
  """
710
712
  if isinstance(el_or_elname, str):
@@ -862,7 +864,8 @@ class Generator(metaclass=abc.ABCMeta):
862
864
  else:
863
865
  return slot_name
864
866
 
865
- def is_class_unconstrained(self, cls: ClassDefinition):
867
+ @staticmethod
868
+ def is_class_unconstrained(cls: ClassDefinition):
866
869
  """
867
870
  Determine if the class is mapped to typing.Any, i.e the unconstrained class
868
871
 
@@ -1,5 +1,5 @@
1
1
  import re
2
- from typing import Callable, List, Match, Optional, Text, Tuple
2
+ from typing import Callable, List, Match, Optional, Text, Tuple, Union
3
3
 
4
4
  from linkml_runtime.linkml_model.meta import ClassDefinition, SlotDefinition
5
5
  from linkml_runtime.utils.formatutils import sfx
@@ -77,12 +77,13 @@ default_library: List[
77
77
  (
78
78
  r"date\((\d{4})-(\d{2})-(\d{2})\)",
79
79
  False,
80
- lambda m, __, ___, ____: f"datetime.date({m[1]}, {m[2]}, {m[3]})",
80
+ lambda m, __, ___, ____: f"date({int(m[1])}, {int(m[2])}, {int(m[3])})",
81
81
  ),
82
82
  (
83
83
  r"datetime\((\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z\)",
84
84
  False,
85
- lambda m, __, ___, ____: f"datetime.datetime({m[1]}, {m[2]}, {m[3]}, {m[4]}, {m[5]}, {m[6]})",
85
+ lambda m, __, ___, ____: f"datetime({int(m[1])}, {int(m[2])}, {int(m[3])}, "
86
+ f"{int(m[4])}, {int(m[5])}, {int(m[6])})",
86
87
  ),
87
88
  # TODO: We have to make the real URI available before any of these can work
88
89
  # ("class_uri", True,
@@ -113,12 +114,9 @@ default_library: List[
113
114
 
114
115
  def isabsent_match(
115
116
  txt: Text,
116
- ) -> Optional[
117
- Tuple[
118
- Match[str],
119
- bool,
120
- Callable[[Match[str], SchemaLoader, ClassDefinition, SlotDefinition], str],
121
- ]
117
+ ) -> Union[
118
+ Tuple[Match[str], bool, Callable[[Match[str], SchemaLoader, ClassDefinition, SlotDefinition], str]],
119
+ Tuple[None, None, None],
122
120
  ]:
123
121
  txt = str(txt)
124
122
  for pattern, postinit, f in default_library:
@@ -200,6 +200,7 @@ class SchemaBuilder:
200
200
 
201
201
  :param prefix:
202
202
  :param url:
203
+ :param replace_if_present:
203
204
  :return: builder
204
205
  :raises ValueError: if prefix already exists and replace_if_present=False
205
206
  """
@@ -271,7 +271,8 @@ class SchemaFixer:
271
271
  for k in empty_keys:
272
272
  del cls.slot_usage[k]
273
273
 
274
- def implicit_slots(self, schema: SchemaDefinition) -> Dict[str, Dict]:
274
+ @staticmethod
275
+ def implicit_slots(schema: SchemaDefinition) -> Dict[str, Dict]:
275
276
  """
276
277
  Find slots that are implicit in the schema from slot_usage
277
278
 
@@ -313,8 +314,8 @@ class SchemaFixer:
313
314
  self.history = []
314
315
  self.history.append(txt)
315
316
 
317
+ @staticmethod
316
318
  def fix_element_names(
317
- self,
318
319
  schema: SchemaDefinition,
319
320
  schema_dict: Dict[str, Any] = None,
320
321
  rules: Dict[str, Callable] = None,
@@ -118,7 +118,7 @@ class SchemaLoader:
118
118
  sname = self.importmap.get(str(sname), sname) # It may also use URI or other forms
119
119
  import_schemadefinition = load_raw_schema(
120
120
  sname + ".yaml",
121
- base_dir=os.path.dirname(self.schema.source_file) if self.schema.source_file else None,
121
+ base_dir=os.path.dirname(self.schema.source_file) if self.schema.source_file else self.base_dir,
122
122
  merge_modules=self.merge_modules,
123
123
  emit_metadata=self.emit_metadata,
124
124
  )
@@ -351,14 +351,6 @@ class SchemaLoader:
351
351
  f"slot: {slot.name} - unrecognized domain ({slot.domain})",
352
352
  slot.domain,
353
353
  )
354
- if slot.ifabsent:
355
- from linkml.utils.ifabsent_functions import isabsent_match
356
-
357
- if isabsent_match(slot.ifabsent) is None:
358
- self.raise_value_error(
359
- f"Unrecognized ifabsent action for slot '{slot.name}': '{slot.ifabsent}'",
360
- slot.ifabsent,
361
- )
362
354
 
363
355
  # Keys and identifiers must be present
364
356
  if bool(slot.key or slot.identifier):
linkml/utils/sqlutils.py CHANGED
@@ -324,9 +324,15 @@ def main(verbose: int, quiet: bool, csv_field_size_limit: int):
324
324
  show_default=True,
325
325
  help="Force creation of a database if it does not exist",
326
326
  )
327
- @click.argument("input")
327
+ @click.option(
328
+ "--glob/--no-glob",
329
+ default=False,
330
+ show_default=True,
331
+ help="Treat input as a quoted glob expression, e.g. 'data/*.json'",
332
+ )
333
+ @click.argument("inputs", nargs=-1)
328
334
  def dump(
329
- input,
335
+ inputs,
330
336
  module,
331
337
  db,
332
338
  target_class,
@@ -334,6 +340,7 @@ def dump(
334
340
  schema=None,
335
341
  validate=None,
336
342
  force: bool = None,
343
+ glob: bool = None,
337
344
  index_slot=None,
338
345
  ) -> None:
339
346
  """
@@ -359,34 +366,41 @@ def dump(
359
366
  if target_class is None:
360
367
  raise Exception("target class not specified and could not be inferred")
361
368
  py_target_class = python_module.__dict__[target_class]
362
- input_format = _get_format(input, input_format)
363
- loader = get_loader(input_format)
364
-
365
- inargs = {}
366
- if datautils._is_rdf_format(input_format):
367
- if sv is None:
368
- raise Exception("Must pass schema arg")
369
- inargs["schemaview"] = sv
370
- inargs["fmt"] = input_format
371
- if _is_xsv(input_format):
372
- if index_slot is None:
373
- index_slot = infer_index_slot(sv, target_class)
374
- if index_slot is None:
375
- raise Exception("--index-slot is required for CSV input")
376
- inargs["index_slot"] = index_slot
377
- inargs["schema"] = schema
378
- obj = loader.load(source=input, target_class=py_target_class, **inargs)
379
- if validate:
380
- if schema is None:
381
- raise Exception("--schema must be passed in order to validate. Suppress with --no-validate")
382
- # TODO: use validator framework
383
- validation.validate_object(obj, schema)
384
369
 
385
370
  endpoint = SQLStore(schema, database_path=db, include_schema_in_database=False)
386
371
  endpoint.native_module = python_module
387
372
  endpoint.db_exists(force=force)
388
373
  endpoint.compile()
389
- endpoint.dump(obj)
374
+
375
+ if glob:
376
+ import glob
377
+
378
+ inputs = [item for input in inputs for item in glob.glob(input)]
379
+ for input in inputs:
380
+ logging.info(f"Loading: {input}")
381
+ input_format = _get_format(input, input_format)
382
+ loader = get_loader(input_format)
383
+
384
+ inargs = {}
385
+ if datautils._is_rdf_format(input_format):
386
+ if sv is None:
387
+ raise Exception("Must pass schema arg")
388
+ inargs["schemaview"] = sv
389
+ inargs["fmt"] = input_format
390
+ if _is_xsv(input_format):
391
+ if index_slot is None:
392
+ index_slot = infer_index_slot(sv, target_class)
393
+ if index_slot is None:
394
+ raise Exception("--index-slot is required for CSV input")
395
+ inargs["index_slot"] = index_slot
396
+ inargs["schema"] = schema
397
+ obj = loader.load(source=input, target_class=py_target_class, **inargs)
398
+ if validate:
399
+ if schema is None:
400
+ raise Exception("--schema must be passed in order to validate. Suppress with --no-validate")
401
+ # TODO: use validator framework
402
+ validation.validate_object(obj, schema)
403
+ endpoint.dump(obj)
390
404
 
391
405
 
392
406
  @main.command()
@@ -4,6 +4,7 @@ from functools import lru_cache
4
4
  from typing import Optional
5
5
 
6
6
  import jsonschema
7
+ from jsonschema.protocols import Validator
7
8
  from linkml_runtime import SchemaView
8
9
  from linkml_runtime.linkml_model import SchemaDefinition
9
10
 
@@ -36,7 +37,7 @@ class ValidationContext:
36
37
  closed: bool,
37
38
  include_range_class_descendants: bool,
38
39
  path_override: Optional[os.PathLike] = None,
39
- ) -> jsonschema.Validator:
40
+ ) -> Validator:
40
41
  if path_override:
41
42
  with open(path_override) as json_schema_file:
42
43
  json_schema = json.load(json_schema_file)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: linkml
3
- Version: 1.7.4
3
+ Version: 1.7.6
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
@@ -22,6 +22,8 @@ Classifier: Programming Language :: Python :: 3.11
22
22
  Classifier: Programming Language :: Python :: 3.8
23
23
  Classifier: Programming Language :: Python :: 3.9
24
24
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
+ Provides-Extra: shacl
26
+ Provides-Extra: tests
25
27
  Requires-Dist: antlr4-python3-runtime (>=4.9.0,<4.10)
26
28
  Requires-Dist: click (>=7.0)
27
29
  Requires-Dist: graphviz (>=0.10.1)
@@ -38,6 +40,7 @@ Requires-Dist: prefixcommons (>=0.1.7)
38
40
  Requires-Dist: prefixmaps (>=0.1.3)
39
41
  Requires-Dist: pydantic (>=1.0.0,<3.0.0)
40
42
  Requires-Dist: pyjsg (>=0.11.6)
43
+ Requires-Dist: pyshacl (>=0.25.0,<0.26.0) ; extra == "shacl" or extra == "tests"
41
44
  Requires-Dist: pyshex (>=0.7.20)
42
45
  Requires-Dist: pyshexc (>=0.8.3)
43
46
  Requires-Dist: python-dateutil
@@ -2,67 +2,80 @@ linkml/__init__.py,sha256=jwtUdhwmquj-0fCR6VwPH5_RfSpuG94hLWdre_W_FD4,3327
2
2
  linkml/_version.py,sha256=udxv6OEqcE89DTVMYPtetXYg8IA8Sgc6yW26-6f8C3M,310
3
3
  linkml/generators/PythonGenNotes.md,sha256=wb9BPLLhF6378OKLbwSBAwmniLpwrcT5_bbfCHfLme8,51006
4
4
  linkml/generators/README.md,sha256=RMzT8EblC_GEdPy5WyfXHDBXlFI6k6mz3Cx2sdpcyWI,4438
5
- linkml/generators/__init__.py,sha256=0KxTxNpQBnq4JTsDtwXQ1RYsRdmxfkegVBJKupti4Jg,1438
5
+ linkml/generators/__init__.py,sha256=dQ2EUKy_MctEVEzbC3XzEJL5YmYwjYfsa44mG2zKn7g,1517
6
6
  linkml/generators/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  linkml/generators/common/type_designators.py,sha256=lgVcIRJJ-yCvVGeP9U_gQZpm77UmJBQo9Bh3lGJITno,1956
8
8
  linkml/generators/csvgen.py,sha256=X0f4qKXahSDtkzM9Y47rwWqdseP1O6PTZ_WKiOqOrQI,2956
9
- linkml/generators/docgen/class.md.jinja2,sha256=_nQr8ge57ZkX3Hrh-cqPUm8Z7HCnJuuRCgYm0g21mS8,3381
9
+ linkml/generators/docgen/class.md.jinja2,sha256=bz5A46HOIPkUVbzPGorg64NNhr66zK0hCCekSfRPErY,3787
10
10
  linkml/generators/docgen/class_diagram.md.jinja2,sha256=lLU_0sQZBttOX5Wiup2oZwrxHuiQtbU9ZgLi66aJvOo,2538
11
11
  linkml/generators/docgen/common_metadata.md.jinja2,sha256=zy8Ua3gDtAAq8VA3e3O3ft9W7eJopVZaq5efP8LU_hU,1321
12
12
  linkml/generators/docgen/enum.md.jinja2,sha256=mXnUrRkleY2bOTEyAZ5c4pcUnqhs6BNa8a-4LVve-eo,1014
13
13
  linkml/generators/docgen/index.md.jinja2,sha256=wXUYTmayPLFltC0vbGE_Mf6m3GkkWav7FOEjCvEpHp4,1466
14
14
  linkml/generators/docgen/index.tex.jinja2,sha256=Go_EA-_N4JUpbOYbk3OY11mz5yV70VF2l2sMtgIPWw4,501
15
15
  linkml/generators/docgen/schema.md.jinja2,sha256=xlENfnzNRYgPT_0tdqNFxgklVM4Qf5BuzhFVvSMDuxs,70
16
- linkml/generators/docgen/slot.md.jinja2,sha256=XVd0M4gKx9Q2fONcsUGBRj_bJivyN4P9jhj9IO496jQ,2817
16
+ linkml/generators/docgen/slot.md.jinja2,sha256=HcLu32FiyIRy0AaV-GwBPUwEbTCY-KkPDhOZk3OKfqg,3226
17
17
  linkml/generators/docgen/subset.md.jinja2,sha256=fTNIpAkml5RKFbbtLore3IAzFN1cISVsyL1ru2-Z4oA,2665
18
18
  linkml/generators/docgen/type.md.jinja2,sha256=QmCMJZrFwP33eHkggBVtypbyrxTb-XZn9vHOYojVaYk,635
19
- linkml/generators/docgen.py,sha256=265bWbIkH4z5Cc7RLmyMTi2YR6hXAPBEdo5t1dqALYk,33476
19
+ linkml/generators/docgen.py,sha256=dz7OWxclX306EweVIgC765h3NKtJTRg0TPnqmltWygs,34347
20
20
  linkml/generators/dotgen.py,sha256=kzp1EYtF8bBqOuycJokDmsvHVDVkkW-J-6-MiUhwJH0,5013
21
21
  linkml/generators/erdiagramgen.py,sha256=xCnxIldDYZ7xnQ-vLaXlH3FH8MH3cxu-E0j8it-lyJE,10153
22
- linkml/generators/excelgen.py,sha256=VsvdaGAOcNZ3qPLq-3lycGe_atG6B3hid3WMCV99XZI,7668
23
- linkml/generators/golanggen.py,sha256=lGP0wDU6QwLjfiUDpTLFvJsnaDGKxOyQLizlz2lGfPc,5775
22
+ linkml/generators/excelgen.py,sha256=3ILAeIHeYngNpPf3Ad7CXoHOLQ9KSiYcX5HdwHhQeQE,7696
23
+ linkml/generators/golanggen.py,sha256=1seIQiKq-ASZoHTf7xoPd0zUQ4YCPkxoKnUwgAIttPo,5811
24
24
  linkml/generators/golrgen.py,sha256=OUBYRWicP7G7lrPu1VrxumbVpx3CBJal-o2imyeP05M,3437
25
25
  linkml/generators/graphqlgen.py,sha256=6qZpI0rwg3ypsv_KrLVzXgdsJfR8LNPqgMwaRwzwnDs,2151
26
26
  linkml/generators/javagen/example_template.java.jinja2,sha256=ec4CVTv_0zS7V5Y-1E6H4lRraya10gfX7BEMBlu38X4,444
27
27
  linkml/generators/javagen/java_record_template.jinja2,sha256=OQZffLSy_xR3FIhQMltvrYyVeut7l2Q-tzK7AOiVmWs,1729
28
28
  linkml/generators/javagen.py,sha256=KxwupMztyCRHcSsbtTnOovuj1WamsAny0mxbYWvTiDs,5324
29
- linkml/generators/jsonldcontextgen.py,sha256=RQFBgNjWMdnjf0j8S_k1lyMauI9Ia5Ao0ruuFjLwhdA,7886
30
- linkml/generators/jsonldgen.py,sha256=BtPXLYbnXTXorUcoe6y4DL0xa-TPjHOvtXdhv-ppW3I,7656
29
+ linkml/generators/jsonldcontextgen.py,sha256=048kzs28xooik86A8OQ0NIbXxyJZGkqH1ZMxg17mcf4,8073
30
+ linkml/generators/jsonldgen.py,sha256=pk8Gmh2gSvXt_o7MTuJ71thNfIJuHUGkNl3yl3RIdsE,7728
31
31
  linkml/generators/jsonschemagen.py,sha256=XOsYIrpA6BwtAcfh8GNGduIjpuPAsF2f_PQ1mghj_WU,27455
32
32
  linkml/generators/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  linkml/generators/linkmlgen.py,sha256=1_Kt_7rD42WvCTjq0yaq1Of7jEDZR_uusyzAT-qWMHk,3471
34
34
  linkml/generators/markdowngen.py,sha256=dDMyusNXLvM2raIW-_vd2AQBhDHn0P_rMeDq3QFuacs,32926
35
35
  linkml/generators/namespacegen.py,sha256=vVcIyM0zlKd7XRvtdzwTwHjG4Pg49801gy4FUmjJlqQ,6450
36
- linkml/generators/oocodegen.py,sha256=cWjQSFJmhrnRRsHqOa9dOks0k-QogrP97m5lEkLRxdY,7738
37
- linkml/generators/owlgen.py,sha256=Oo3ACE5BXRbQU1p4XhyYhP4JQgAW4w2nmNZ591FWkVM,53142
36
+ linkml/generators/oocodegen.py,sha256=r73QI08ajbTZTobc9OIG6BMWZft3zdu76vKVR33pyYg,7774
37
+ linkml/generators/owlgen.py,sha256=FMzdiK85CND8wnLiXPmylpayUTGpuydgD_g4hFjyez4,54374
38
38
  linkml/generators/plantumlgen.py,sha256=tk-_XJtBA5EqYJSUTc3bdMdCwqlC-rc9VYO9A2V_HpM,14895
39
- linkml/generators/prefixmapgen.py,sha256=-IGKre3rRxCdNs0BP3Oo7Wzv8edeUQXkjjwN7od3qjU,4627
40
- linkml/generators/projectgen.py,sha256=g3JR2oXPM_QXhWUGukP9ts1P7tqxIeABaRdv130gbo4,9578
39
+ linkml/generators/prefixmapgen.py,sha256=L9TccwKNHEguW0ox5qgf_GhIuqauYTI8d4jSjeqdkWo,4720
40
+ linkml/generators/projectgen.py,sha256=OuT_AneoZFNMCn50GllfZafadUHt50u61JcftM2eed4,9750
41
41
  linkml/generators/protogen.py,sha256=5UxThsFDVyDTzzTDh77Z0anx4-tLgz8kQQ-e7ywIqwI,2290
42
- linkml/generators/pydanticgen.py,sha256=syiqMBBiGWwT_ZD5KLstGGMdh4d2fNQ3o2qZRfQLtqs,30539
43
- linkml/generators/pythongen.py,sha256=JCFuGishyoBx75sGFL2zWlHj-qsyBizyZIc_jqpzdTU,52429
42
+ linkml/generators/pydanticgen/__init__.py,sha256=uKGaaQSaeKqinHImXGFE448i-t8Oi0No8suIO76sep8,629
43
+ linkml/generators/pydanticgen/pydanticgen.py,sha256=ZUi9fE5ZiQbW5V4Ckth8hysMghHh9H2RpqLZa3m8PfQ,27598
44
+ linkml/generators/pydanticgen/template.py,sha256=e2PYQFRlDR1Nva_xy-NlsttpW79L8n6e63QKHZzoXH8,17016
45
+ linkml/generators/pydanticgen/templates/attribute.py.jinja,sha256=AlH_QFJJkONpzXQRGqnW4ufmjp9s9E7Q9W5r8ykNGeQ,443
46
+ linkml/generators/pydanticgen/templates/base_model.py.jinja,sha256=eYKNI-4itB6lYW5yhfIWngtMcHZnuEaic9Dv56XKX4M,797
47
+ linkml/generators/pydanticgen/templates/class.py.jinja,sha256=RIdkqdZS9rDILUuVqDIAWK_vATGkirLbPhdHSyHDAbY,565
48
+ linkml/generators/pydanticgen/templates/conditional_import.py.jinja,sha256=YheknDrxvepiJUzeItSL5aSbAkCdR1k0a6m6aTA4qNM,240
49
+ linkml/generators/pydanticgen/templates/enum.py.jinja,sha256=572XFQyEMZfL-G_Cj68T-NI_mUnDoFOAVJOGIKu2Hb8,338
50
+ linkml/generators/pydanticgen/templates/footer.py.jinja,sha256=WuWGJjkWDQcEPL2bGk5fdGuhO0gQRUJzpo4CQHHxQNQ,385
51
+ linkml/generators/pydanticgen/templates/imports.py.jinja,sha256=d1XFna2eOpkH8cgJML3vXwqGcocczvOcrbg6jjd4kP0,945
52
+ linkml/generators/pydanticgen/templates/module.py.jinja,sha256=SkmtWtQS7D-xBiZI-sFiYC3WYPKi3VJCj_KtaMVxexM,438
53
+ linkml/generators/pydanticgen/templates/validator.py.jinja,sha256=Yo4dubQal-HwEoJKztQkLYM5qCz1I8na2oaDlXuEpwU,532
54
+ linkml/generators/pythongen.py,sha256=AvOQZJ-OT8lMYeaT2bdexHuRPRfTK7wpbmgAdfc2lW4,52805
44
55
  linkml/generators/rdfgen.py,sha256=L6F08iDUqVemXXrRbJmcOxvJTt14hR0oo8WLoqf4npw,2656
45
- linkml/generators/shaclgen.py,sha256=jxQjQ-iT2SYpLso3aIyBtqaVVPvZflrVzWaNA7nxQa0,8686
46
- linkml/generators/shexgen.py,sha256=VVlSrGCighLf0YSStK_VeMnCK0imAL4BJNDRVTpUFkw,9859
47
- linkml/generators/sparqlgen.py,sha256=xIT4abjYTjPvAjczZ2mkqfap5z8-AImK_jaCvgZyRGs,6120
56
+ linkml/generators/shacl/__init__.py,sha256=O-M-wndKw8rMW-U8X3QCNHal-ErXP6uXZqxiQSa77l4,108
57
+ linkml/generators/shacl/ifabsent_processor.py,sha256=I7zvSjZzB7tZjcXRE0UE3DUmF5sY7QrKbXblYvpRwkc,1746
58
+ linkml/generators/shacl/shacl_data_type.py,sha256=BT3C9tdFyBQnuucPN7YQiFAKEa9yuzy-Q26X6dmOXgo,1827
59
+ linkml/generators/shaclgen.py,sha256=mTkHziEIKoMTr-Vl6nwOdqxk-97cJzTsFG7ViMiFhMs,8308
60
+ linkml/generators/shexgen.py,sha256=KzhaL-A4R4peSdhY6nlDWmS-DPfnZMxMzrXhHGnA_Ag,9874
61
+ linkml/generators/sparqlgen.py,sha256=c7x8GFChKWprBx4rToSnu9qN8OleWTCenVUdZ8XSTWM,6138
48
62
  linkml/generators/sqlalchemy/__init__.py,sha256=mb9AC1rIFkSiNZhhG0TAk45ol9PjS1XvsrvCjgfVUpQ,249
49
63
  linkml/generators/sqlalchemy/sqlalchemy_declarative_template.py,sha256=X_Ws1NUBikMI5HuNgEhl_PIeWM-B-c2B0W9KUBH4QTg,2542
50
64
  linkml/generators/sqlalchemy/sqlalchemy_imperative_template.py,sha256=u4ZpponG1h6XROrOHGOf_0H2e6xL1_s8twAOA-gx94A,1622
51
- linkml/generators/sqlalchemygen.py,sha256=XjvyCYr9h0EsFaKy4y-lMXunYw4dnk9vSpwlPjZK8gU,9186
52
- linkml/generators/sqlddlgen.py,sha256=ickgQovcWunsBRMpHBDTGxGlZKU9kfExb-XQPBS6qPs,18437
53
- linkml/generators/sqltablegen.py,sha256=yaGdnl1kbovf9b4Qi6dx5VpRlBfy4PX1dtHsXtvg6qQ,11494
65
+ linkml/generators/sqlalchemygen.py,sha256=TTc1oLLwG0c1BdvDXvSfGWAJCDlVvq7Y0r0yjXcdiW4,9268
66
+ linkml/generators/sqltablegen.py,sha256=XorqF6lfZX6tHfi6O2aIjd2GU_JZx5BuERuC3P6utVE,11626
54
67
  linkml/generators/sssomgen.py,sha256=yur3q7so9uwIELWZaZRzkJwNbz_ppBL7IQki9XLIM3k,6879
55
68
  linkml/generators/string_template.md,sha256=kRcfic6entgIaJdpSg6GF3jcjC9wbKsCVM6wVT2qipc,1788
56
69
  linkml/generators/summarygen.py,sha256=crH_Hegd4Z7G7byUtgyXoP2XtG_4iblzZsu_pE4aQrk,2887
57
- linkml/generators/terminusdbgen.py,sha256=_po9KnOz6Uoctb9Y4fJuU_voW4uA5pepvZTmHLQ2_DE,4470
58
- linkml/generators/typescriptgen.py,sha256=VDJ-97jk7zqYx6XlnIcxZmY8mCv885T7D2brKJHaihI,8565
70
+ linkml/generators/terminusdbgen.py,sha256=XX651NgGGoCafA45XomRU0_DhbCyNzFNiigbjcrwXFQ,4627
71
+ linkml/generators/typescriptgen.py,sha256=80Ph4RfzDoA1TRCkKaLWlh0NsCNvhakJ2RrNfMqcMmY,8577
59
72
  linkml/generators/yamlgen.py,sha256=PKssrY5VHpdbOU54PVwLVLbsRqHwoOgOImlMb6DVcXM,1614
60
73
  linkml/generators/yumlgen.py,sha256=lnHcLY0VwlU_i8QporSmwR62CXSV4aOCXKxRDw5AxUk,12196
61
74
  linkml/linter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
75
  linkml/linter/cli.py,sha256=BpQiETcRfQlZsI1-JALyU9wXPgPOm_KE_n11p0iJaC8,4494
63
76
  linkml/linter/config/datamodel/.linkmllint.yaml,sha256=40rNhcL35FXQSjlVBMWnyPgplwEUqFT_sJmeZqUzxMw,292
64
77
  linkml/linter/config/datamodel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
- linkml/linter/config/datamodel/config.py,sha256=4HtqHF2ZiYx0Izm50eUQRvygsm1xSnkc49w0nd9zbGk,16837
78
+ linkml/linter/config/datamodel/config.py,sha256=WyIBA1damYcW0JI6zLxbFwcHOtSdw0prSADlJdz3zG0,17202
66
79
  linkml/linter/config/datamodel/config.yaml,sha256=hh4a8RoHEsEpl-_E50SZjJD8kmHGquBdcrI4ZqNdAME,6980
67
80
  linkml/linter/config/default.yaml,sha256=O3kaiwyvEO3siX2jDzuBjsCQc1b_EMe466OfRz8Gc5Q,540
68
81
  linkml/linter/config/recommended.yaml,sha256=hxrRSlCZzFXr3WndWAxs2RKwuSwQxRjrvRQi-zteiYQ,198
@@ -72,32 +85,32 @@ linkml/linter/formatters/json_formatter.py,sha256=rrOELuETUCFTl1Ewnrus9Rx9hl2g4u
72
85
  linkml/linter/formatters/markdown_formatter.py,sha256=sumF2MNJYL5oipLwCftCr3AiaCmVhd9V6di9aYpJ29I,2605
73
86
  linkml/linter/formatters/terminal_formatter.py,sha256=xmNwlRieVCssRt3fpnNP5WWw_YXGmaBsbxFoMWufy5M,2085
74
87
  linkml/linter/formatters/tsv_formatter.py,sha256=1VW-1Tv16mwhIDpHdExYpJJR3z42K5_XK2C-4mmYYdE,871
75
- linkml/linter/linter.py,sha256=B4zPHkS_8qWV2WJY74HDiIroajsXRmfJLIlwYky-cyA,5101
76
- linkml/linter/rules.py,sha256=Bk87FMKgdF_aSBqeLe1uQartcTxV3-ZwUu-QRp2iK4s,11164
88
+ linkml/linter/linter.py,sha256=qfVV-vFT7bUJ2BmmDQteD7Jz8HZ-CNDSvnkyhJ-54H0,5113
89
+ linkml/linter/rules.py,sha256=EuZTHtrU9YndAf2vw6QknGZSVFgsbydStsQmrUCwTKk,11502
77
90
  linkml/reporting/__init__.py,sha256=Jo0V_nyEcnWhMukMW-bqW9dlbgCfaRlWm3CO-XzgU84,92
78
91
  linkml/reporting/model.py,sha256=-10yNfk8wuRC48ZI-akrWvtlJ9a6RYWET2TzlZV3XXo,8622
79
92
  linkml/transformers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
- linkml/transformers/logical_model_transformer.py,sha256=1ZSB-HBoI0E2X2NV9TSgbTghp2GO4HQA27JaK0XiPBE,26510
93
+ linkml/transformers/logical_model_transformer.py,sha256=Luc8cKWIGrRAXQ9DSLA03fgpIolLpsTT19OV9Coolvk,26522
81
94
  linkml/transformers/model_transformer.py,sha256=tK_MpRDI-q2qfe8KHT6qJHP8ZruKjYx1FcM-Fnjse-E,678
82
- linkml/transformers/relmodel_transformer.py,sha256=STQ4ALoJpPKW5-soTVcErHof_1kEDJEEZ1EJrzneql4,17680
83
- linkml/transformers/schema_renamer.py,sha256=Cr18TyktX64b5iFh5V6R_ILPVzXjbDYVDDZQyqFiAv8,5271
95
+ linkml/transformers/relmodel_transformer.py,sha256=6tA-GkutJ0rgspjCF2NSCf2z-YdU2b4qPijabkroWfE,17704
96
+ linkml/transformers/schema_renamer.py,sha256=DYRbgL9j41M9FdbHYLY3u4YIdDM98laD3cv_lHcgWHQ,5275
84
97
  linkml/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
98
  linkml/utils/cli_utils.py,sha256=MdVbox1qr6kDUHUCWAmFhV-D6ebs_nn8vVwB8KDQfew,742
86
99
  linkml/utils/converter.py,sha256=snAF-pgZBSi4ANiaKXxqtZk5w3qonJjTfI4X5OVLmUE,6283
87
100
  linkml/utils/datautils.py,sha256=QlbzwXykh5Fphfe5KxPo6_ekXfniLbHiEGJtLWjUrvY,3742
88
101
  linkml/utils/datavalidator.py,sha256=kBdWaVi8IZT1bOwEJgJYx-wZAb_PTBObB9nHpYORfKA,472
89
102
  linkml/utils/execute_tutorial.py,sha256=T4kHTSyz3ItJGEUZxVjR-3yLVKnOr5Ix4NMGE47-IuE,6912
90
- linkml/utils/generator.py,sha256=YB2HXb9_aJx284xHnVq-glVgTtvWnBaE-yGCJXZ6nFM,38207
103
+ linkml/utils/generator.py,sha256=8-5JpMmvkWyLMeK5qSRv3XuOpfAmi2quNQ4Mo6nNCA0,38362
91
104
  linkml/utils/helpers.py,sha256=yR8n4zFA5wPcYC7xzRuNF3wO16vG80v6j7DM3qTNmIc,447
92
- linkml/utils/ifabsent_functions.py,sha256=C2mllfh7aIZgVqqJjN5nydurVUk0hV62Wy7uVMYfPDg,5801
105
+ linkml/utils/ifabsent_functions.py,sha256=IkcBcmRYu8sllx7_mTCqu4aHfTxX2AnQoccZ1KOODds,5843
93
106
  linkml/utils/logictools.py,sha256=GSmBiobC49TcQjE08RtXEE3JwJEOV7eEREio25uJiFs,21184
94
107
  linkml/utils/mergeutils.py,sha256=QVm2iQB4v_L2rSvPBsPe9C865R03BgV3TzlPoTTTwWQ,9044
95
108
  linkml/utils/rawloader.py,sha256=QB7Rdvy4o4ZJEWBWa2_2xzz2TOh_6Oe4slvUn8IBVIc,4329
96
- linkml/utils/schema_builder.py,sha256=WLSit3J4lTifaFLLWTwjqIRiTru1pqvTIUuC1TrxS6Y,9902
97
- linkml/utils/schema_fixer.py,sha256=ajsxpwD4yMjDk1iDtoKJTsa34SIqGshWxlnSNXVZ52w,16745
98
- linkml/utils/schemaloader.py,sha256=bBSTqimMDTFH2FcKtRz99dKNJzV_myPsZSkIFp_6-A0,46421
109
+ linkml/utils/schema_builder.py,sha256=4qhrur8O0xRZnPm7H1h2BZmTkut5R4q-IE_1KKiHy_c,9937
110
+ linkml/utils/schema_fixer.py,sha256=Uz8M3AOQ_BputJr1f6lbfk1iyvmANUNG80-0B3BQKJ8,16761
111
+ linkml/utils/schemaloader.py,sha256=XkH3ARPVcJ3ggnk4qgHJBPepyII4UlSRHzBlTWZbpCo,46062
99
112
  linkml/utils/schemasynopsis.py,sha256=jKf5ZJxpNgSZ5x9oAcdGO3m1IwzcIU2Ni1ugm0SQq1g,18447
100
- linkml/utils/sqlutils.py,sha256=FPUA6Smn3FogE97TZZZtGNhaMK9kpC-qJ5Ylo1mg9l8,16618
113
+ linkml/utils/sqlutils.py,sha256=FsOC3Wut6qzzmsnIt9ROsiDt2wXOa1IZUUtJ_T4Nb6M,17071
101
114
  linkml/utils/typereferences.py,sha256=8Yfuz9-HAwOPoJLbIcO_sY9zf32hvPRzGeSOzECfMWA,2232
102
115
  linkml/utils/validation.py,sha256=eLw1-d8x3N1V14bSc6H_mJJXo59ryKvvUIBcOJ1dVMw,1438
103
116
  linkml/validator/__init__.py,sha256=djKc1IyxGKvVYaX5jSxsqjfcEYaw3rFgKbFJxI2wDNk,5002
@@ -115,7 +128,7 @@ linkml/validator/plugins/recommended_slots_plugin.py,sha256=kOdoYQyye47nLA7BjorV
115
128
  linkml/validator/plugins/shacl_validation_plugin.py,sha256=A6x3tiX-p03_i_VmR2xnw28j0dpiUw6WIAG-gllwJ8Q,3624
116
129
  linkml/validator/plugins/validation_plugin.py,sha256=9SMHF8b2bgG9-8351e8bY676e0A4aEBJSXvMjMF5kXg,1548
117
130
  linkml/validator/report.py,sha256=kkkuh-IZF9--cO-2wGjwP3PDLvOcjjvC8AOlxXUIOAM,870
118
- linkml/validator/validation_context.py,sha256=2BYbw0czAYepJUNoIINyTnmW6SrgK6et7SNvH5ejzgU,2700
131
+ linkml/validator/validation_context.py,sha256=Pmccq-LQ9iEeLyZhamp3mKjjtwp4ji1hIe5TT05AUT4,2732
119
132
  linkml/validator/validator.py,sha256=BFgfKdu9Nad2dc9XTpmz9daQTj_FTcvo6mBq3e8fhJs,5649
120
133
  linkml/validators/__init__.py,sha256=43W3J5NPKhwa3ZFHLRYsJMocwQKWGYCF9Ki9r0ccGbc,202
121
134
  linkml/validators/jsonschemavalidator.py,sha256=_ku7MQGqA6KplbHMiyzDRqgRwwXGloobhLptuXqLCp4,7951
@@ -125,8 +138,8 @@ linkml/workspaces/datamodel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
125
138
  linkml/workspaces/datamodel/workspaces.py,sha256=4HdkqweGNfMPqnB1_Onc9DcTfkhoagTRcqruh08nRoI,14905
126
139
  linkml/workspaces/datamodel/workspaces.yaml,sha256=EjVrwPpeRZqJRjuGyyDRxxFzuv55SiLIXPBRUG6HStU,4233
127
140
  linkml/workspaces/example_runner.py,sha256=OmC_yZLIb4KXGQrstBVZL0UAQ9ZAaraguQF0RSf-snk,11611
128
- linkml-1.7.4.dist-info/METADATA,sha256=-EvbTFKzOQZ3HPP2-hd7LmWlELMPIF6ZUWqvGnPGoGs,3463
129
- linkml-1.7.4.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
130
- linkml-1.7.4.dist-info/LICENSE,sha256=kORMoywK6j9_iy0UvLR-a80P1Rvc9AOM4gsKlUNZABg,535
131
- linkml-1.7.4.dist-info/entry_points.txt,sha256=za8r49Z5gcz3rAYTZLbxw5EPZr1rGuxSe1uiRUpf8R0,2143
132
- linkml-1.7.4.dist-info/RECORD,,
141
+ linkml-1.7.6.dist-info/entry_points.txt,sha256=7haDkIbyC7ZLhm5z-e3BhrLJpY2xoW1yuD8Y7QPNtVg,2093
142
+ linkml-1.7.6.dist-info/METADATA,sha256=PaI8ylnY-nUYjDrS-44yWh-r6UsiLNLQ_cYYDBNZHX8,3588
143
+ linkml-1.7.6.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
144
+ linkml-1.7.6.dist-info/LICENSE,sha256=kORMoywK6j9_iy0UvLR-a80P1Rvc9AOM4gsKlUNZABg,535
145
+ linkml-1.7.6.dist-info/RECORD,,
@@ -29,7 +29,6 @@ gen-shex=linkml.generators.shexgen:cli
29
29
  gen-sparql=linkml.generators.sparqlgen:cli
30
30
  gen-sqla=linkml.generators.sqlalchemygen:cli
31
31
  gen-sqlddl=linkml.generators.sqltablegen:cli
32
- gen-sqlddl-legacy=linkml.generators.sqlddlgen:cli
33
32
  gen-sqltables=linkml.generators.sqltablegen:cli
34
33
  gen-sssom=linkml.generators.sssomgen:cli
35
34
  gen-summary=linkml.generators.summarygen:cli