linkml 1.9.4rc1__py3-none-any.whl → 1.9.5__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 (83) hide show
  1. linkml/cli/main.py +5 -1
  2. linkml/converter/__init__.py +0 -0
  3. linkml/generators/__init__.py +2 -0
  4. linkml/generators/common/build.py +5 -20
  5. linkml/generators/common/template.py +289 -3
  6. linkml/generators/docgen.py +55 -10
  7. linkml/generators/erdiagramgen.py +9 -5
  8. linkml/generators/graphqlgen.py +32 -6
  9. linkml/generators/jsonldcontextgen.py +78 -12
  10. linkml/generators/jsonschemagen.py +29 -12
  11. linkml/generators/mermaidclassdiagramgen.py +21 -3
  12. linkml/generators/owlgen.py +13 -2
  13. linkml/generators/panderagen/dataframe_class.py +13 -0
  14. linkml/generators/panderagen/dataframe_field.py +50 -0
  15. linkml/generators/panderagen/linkml_pandera_validator.py +186 -0
  16. linkml/generators/panderagen/panderagen.py +22 -5
  17. linkml/generators/panderagen/panderagen_class_based/class.jinja2 +70 -13
  18. linkml/generators/panderagen/panderagen_class_based/custom_checks.jinja2 +27 -0
  19. linkml/generators/panderagen/panderagen_class_based/enums.jinja2 +3 -3
  20. linkml/generators/panderagen/panderagen_class_based/pandera.jinja2 +12 -2
  21. linkml/generators/panderagen/panderagen_class_based/slots.jinja2 +19 -17
  22. linkml/generators/panderagen/slot_generator_mixin.py +143 -16
  23. linkml/generators/panderagen/transforms/__init__.py +19 -0
  24. linkml/generators/panderagen/transforms/collection_dict_model_transform.py +62 -0
  25. linkml/generators/panderagen/transforms/list_dict_model_transform.py +66 -0
  26. linkml/generators/panderagen/transforms/model_transform.py +8 -0
  27. linkml/generators/panderagen/transforms/nested_struct_model_transform.py +27 -0
  28. linkml/generators/panderagen/transforms/simple_dict_model_transform.py +86 -0
  29. linkml/generators/plantumlgen.py +17 -11
  30. linkml/generators/pydanticgen/pydanticgen.py +53 -2
  31. linkml/generators/pydanticgen/template.py +45 -233
  32. linkml/generators/pydanticgen/templates/attribute.py.jinja +1 -0
  33. linkml/generators/pydanticgen/templates/base_model.py.jinja +16 -2
  34. linkml/generators/pydanticgen/templates/imports.py.jinja +1 -1
  35. linkml/generators/rdfgen.py +11 -2
  36. linkml/generators/rustgen/__init__.py +3 -0
  37. linkml/generators/rustgen/build.py +97 -0
  38. linkml/generators/rustgen/cli.py +83 -0
  39. linkml/generators/rustgen/rustgen.py +1186 -0
  40. linkml/generators/rustgen/template.py +910 -0
  41. linkml/generators/rustgen/templates/Cargo.toml.jinja +42 -0
  42. linkml/generators/rustgen/templates/anything.rs.jinja +149 -0
  43. linkml/generators/rustgen/templates/as_key_value.rs.jinja +86 -0
  44. linkml/generators/rustgen/templates/class_module.rs.jinja +8 -0
  45. linkml/generators/rustgen/templates/enum.rs.jinja +70 -0
  46. linkml/generators/rustgen/templates/file.rs.jinja +75 -0
  47. linkml/generators/rustgen/templates/import.rs.jinja +4 -0
  48. linkml/generators/rustgen/templates/imports.rs.jinja +8 -0
  49. linkml/generators/rustgen/templates/lib_shim.rs.jinja +52 -0
  50. linkml/generators/rustgen/templates/poly.rs.jinja +9 -0
  51. linkml/generators/rustgen/templates/poly_containers.rs.jinja +439 -0
  52. linkml/generators/rustgen/templates/poly_trait.rs.jinja +15 -0
  53. linkml/generators/rustgen/templates/poly_trait_impl.rs.jinja +5 -0
  54. linkml/generators/rustgen/templates/poly_trait_impl_orsubtype.rs.jinja +5 -0
  55. linkml/generators/rustgen/templates/poly_trait_property.rs.jinja +8 -0
  56. linkml/generators/rustgen/templates/poly_trait_property_impl.rs.jinja +134 -0
  57. linkml/generators/rustgen/templates/poly_trait_property_match.rs.jinja +10 -0
  58. linkml/generators/rustgen/templates/property.rs.jinja +28 -0
  59. linkml/generators/rustgen/templates/pyproject.toml.jinja +10 -0
  60. linkml/generators/rustgen/templates/serde_utils.rs.jinja +490 -0
  61. linkml/generators/rustgen/templates/slot_range_as_union.rs.jinja +64 -0
  62. linkml/generators/rustgen/templates/struct.rs.jinja +81 -0
  63. linkml/generators/rustgen/templates/struct_or_subtype_enum.rs.jinja +111 -0
  64. linkml/generators/rustgen/templates/stub_gen.rs.jinja +71 -0
  65. linkml/generators/rustgen/templates/stub_utils.rs.jinja +76 -0
  66. linkml/generators/rustgen/templates/typealias.rs.jinja +13 -0
  67. linkml/generators/sqltablegen.py +18 -16
  68. linkml/generators/yarrrmlgen.py +173 -0
  69. linkml/linter/config/datamodel/config.py +160 -293
  70. linkml/linter/config/datamodel/config.yaml +34 -26
  71. linkml/linter/config/default.yaml +4 -0
  72. linkml/linter/config/recommended.yaml +4 -0
  73. linkml/linter/linter.py +1 -2
  74. linkml/linter/rules.py +37 -0
  75. linkml/utils/schema_builder.py +2 -0
  76. linkml/utils/schemaloader.py +76 -3
  77. {linkml-1.9.4rc1.dist-info → linkml-1.9.5.dist-info}/METADATA +2 -2
  78. {linkml-1.9.4rc1.dist-info → linkml-1.9.5.dist-info}/RECORD +82 -40
  79. {linkml-1.9.4rc1.dist-info → linkml-1.9.5.dist-info}/entry_points.txt +2 -1
  80. linkml/generators/panderagen/panderagen_class_based/mixins.jinja2 +0 -26
  81. /linkml/{utils/converter.py → converter/cli.py} +0 -0
  82. {linkml-1.9.4rc1.dist-info → linkml-1.9.5.dist-info}/WHEEL +0 -0
  83. {linkml-1.9.4rc1.dist-info → linkml-1.9.5.dist-info}/licenses/LICENSE +0 -0
@@ -37,32 +37,17 @@ classes:
37
37
  Each attribute of this class represents a rule that can be enabled and possibly
38
38
  configured by a configuration file.
39
39
  attributes:
40
+ canonical_prefixes:
41
+ range: CanonicalPrefixesConfig
42
+ description: >-
43
+ Enforce canonical prefixes by verifying that the mappings defined in the `prefixes`
44
+ slot agree with those provided by the [prefixmaps](https://github.com/linkml/prefixmaps)
45
+ package. Not auto-fixable.
40
46
  no_empty_title:
41
47
  range: NoEmptyTitleConfig
42
48
  description: >-
43
49
  Disallow empty titles on schema elements. Autofix will transform the element's
44
50
  name into a title.
45
- permissible_values_format:
46
- range: PermissibleValuesFormatRuleConfig
47
- description: >-
48
- Enforce consistent formatting of enum permissible values. This rule may conflict
49
- with the standard_naming rule. Not auto-fixable.
50
- tree_root_class:
51
- range: TreeRootClassRuleConfig
52
- description: >-
53
- Require a single class with `tree_root: true` and optionally verify that class's
54
- name. Autofix will create a new class with `tree_root: true`, a name based on
55
- the rule configuration, and slots for existing classes.
56
- recommended:
57
- range: RecommendedRuleConfig
58
- description: >-
59
- Require any slot in the metamodel with `recommended: true` (e.g. description)
60
- to be provided. Not auto-fixable.
61
- no_xsd_int_type:
62
- range: RuleConfig
63
- description: >-
64
- Disallow use of `uri: xsd:int` in type definitions. Autofix will change the
65
- uri to xsd:integer.
66
51
  no_invalid_slot_usage:
67
52
  range: RuleConfig
68
53
  description: >-
@@ -78,6 +63,29 @@ classes:
78
63
  description: >-
79
64
  Disallow the use of ranges in slot specifications if any of the ranges used
80
65
  do not refer to an existing type, class, or enum. Not auto-fixable.
66
+ no_xsd_int_type:
67
+ range: RuleConfig
68
+ description: >-
69
+ Disallow use of `uri: xsd:int` in type definitions. Autofix will change the
70
+ uri to xsd:integer.
71
+ one_identifier_per_class:
72
+ range: RuleConfig
73
+ description: >-
74
+ Ensure that there is only one slot with the `identifier` attribute set to True per class.
75
+ one_key_per_class:
76
+ range: RuleConfig
77
+ description: >-
78
+ Ensure that there is only one slot with the `key` attribute set to True per class.
79
+ permissible_values_format:
80
+ range: PermissibleValuesFormatRuleConfig
81
+ description: >-
82
+ Enforce consistent formatting of enum permissible values. This rule may conflict
83
+ with the standard_naming rule. Not auto-fixable.
84
+ recommended:
85
+ range: RecommendedRuleConfig
86
+ description: >-
87
+ Require any slot in the metamodel with `recommended: true` (e.g. description)
88
+ to be provided. Not auto-fixable.
81
89
  root_type_checks:
82
90
  range: RuleConfig
83
91
  description: >-
@@ -90,12 +98,12 @@ classes:
90
98
  CamelCase for enums, snake_case (default) or UPPER_SNAKE for permissible_values
91
99
  (see permissible_values_upper_case option). This rule may conflict with the
92
100
  permissible_values_format rule. Not auto-fixable.
93
- canonical_prefixes:
94
- range: CanonicalPrefixesConfig
101
+ tree_root_class:
102
+ range: TreeRootClassRuleConfig
95
103
  description: >-
96
- Enforce canonical prefixes by verifying that the mappings defined in the `prefixes`
97
- slot agree with those provided by the [prefixmaps](https://github.com/linkml/prefixmaps)
98
- package. Not auto-fixable.
104
+ Require a single class with `tree_root: true` and optionally verify that class's
105
+ name. Autofix will create a new class with `tree_root: true`, a name based on
106
+ the rule configuration, and slots for existing classes.
99
107
 
100
108
  RuleConfig:
101
109
  description: >-
@@ -22,6 +22,10 @@ rules:
22
22
  level: disabled
23
23
  no_undeclared_ranges:
24
24
  level: disabled
25
+ one_identifier_per_class:
26
+ level: disabled
27
+ one_key_per_class:
28
+ level: disabled
25
29
  root_type_checks:
26
30
  level: disabled
27
31
  standard_naming:
@@ -9,6 +9,10 @@ rules:
9
9
  level: error
10
10
  no_undeclared_ranges:
11
11
  level: error
12
+ one_identifier_per_class:
13
+ level: error
14
+ one_key_per_class:
15
+ level: error
12
16
  root_type_checks:
13
17
  level: error
14
18
  standard_naming:
linkml/linter/linter.py CHANGED
@@ -45,8 +45,7 @@ def get_metamodel_validator() -> Validator:
45
45
  meta_json_gen = JsonSchemaGenerator(LOCAL_METAMODEL_YAML_FILE, not_closed=False)
46
46
  meta_json_schema = meta_json_gen.generate()
47
47
  validator_cls = jsonschema.validators.validator_for(meta_json_schema, default=jsonschema.Draft7Validator)
48
- validator = validator_cls(meta_json_schema, format_checker=validator_cls.FORMAT_CHECKER)
49
- return validator
48
+ return validator_cls(meta_json_schema, format_checker=validator_cls.FORMAT_CHECKER)
50
49
 
51
50
 
52
51
  def merge_configs(original: dict, other: dict):
linkml/linter/rules.py CHANGED
@@ -319,6 +319,43 @@ class RootTypeChecks(LinterRule):
319
319
  yield LinterProblem(f"Root type '{t}' is missing the required 'uri' attribute")
320
320
 
321
321
 
322
+ class OnePerClass(LinterRule):
323
+ """Ensures that there is only one slot with the specified attribute per class."""
324
+
325
+ id = "one_per_class"
326
+
327
+ def _check(self, schema_view: SchemaView, attr_name: str) -> Iterable[LinterProblem]:
328
+ for cn in schema_view.all_classes():
329
+ slots_with_attr = [
330
+ slot
331
+ for slot in schema_view.class_induced_slots(cn)
332
+ if hasattr(slot, attr_name) and getattr(slot, attr_name)
333
+ ]
334
+ if len(slots_with_attr) > 1:
335
+ naughty_slots = ", ".join(sorted([slot.name for slot in slots_with_attr]))
336
+ yield LinterProblem(f"Class '{cn}' has more than one '{attr_name}' slot: {naughty_slots}")
337
+
338
+
339
+ class OneIdentifierPerClass(OnePerClass):
340
+ """Ensure that there is only one slot with the `identifier` attribute set to True per class."""
341
+
342
+ id = "one_identifier_per_class"
343
+
344
+ def check(self, schema_view: SchemaView, fix: bool = False) -> Iterable[LinterProblem]:
345
+ """Run the one_identifier_per_class check."""
346
+ return self._check(schema_view, "identifier")
347
+
348
+
349
+ class OneKeyPerClass(OnePerClass):
350
+ """Ensure that there is only one slot with the `key` attribute set to True per class."""
351
+
352
+ id = "one_key_per_class"
353
+
354
+ def check(self, schema_view: SchemaView, fix: bool = False) -> Iterable[LinterProblem]:
355
+ """Run the one_key_per_class check."""
356
+ return self._check(schema_view, "key")
357
+
358
+
322
359
  class StandardNamingRule(LinterRule):
323
360
  id = "standard_naming"
324
361
 
@@ -193,6 +193,8 @@ class SchemaBuilder:
193
193
  if isinstance(pv, str):
194
194
  pv = PermissibleValue(text=pv)
195
195
  enum_def.permissible_values[pv.text] = pv
196
+ else:
197
+ enum_def.permissible_values[pv.text] = pv
196
198
  return self
197
199
 
198
200
  def add_prefix(self, prefix: str, url: str, replace_if_present=False) -> "SchemaBuilder":
@@ -401,10 +401,83 @@ class SchemaLoader:
401
401
  # Inline any class definitions that don't have identifiers. Note that keys ARE inlined
402
402
  if slot.range in self.schema.classes:
403
403
  range_class = self.schema.classes[cast(ClassDefinitionName, slot.range)]
404
- if slot.inlined_as_list or not any(
404
+ range_has_identifier = any(
405
405
  [self.schema.slots[s].identifier or self.schema.slots[s].key for s in range_class.slots]
406
- ):
407
- slot.inlined = True
406
+ )
407
+ # the inference and validation of class inlining is quite complex
408
+ # slot.inlined and slot.inlined_as_list can have three different values:
409
+ # True, False or None (if nothing specified in the schema)
410
+ # range_has_identifier can only be True or False
411
+ if range_has_identifier is True:
412
+ if slot.inlined is False:
413
+ if slot.inlined_as_list is True:
414
+ slot.inlined = True
415
+ # TODO: do not override a given value, but raise an exception
416
+ self.logger.warning(
417
+ f"Slot '{slot.name}': 'inlining' as list requested. "
418
+ + "Overriding inconsistent `inlined: False`!!"
419
+ )
420
+ elif slot.inlined_as_list is False:
421
+ self.logger.warning(
422
+ f"Slot '{slot.name}': Specifying a value for 'inlined_as_list' does not "
423
+ + "make any sense for non-inlined classes."
424
+ )
425
+ elif slot.inlined is None:
426
+ if slot.inlined_as_list is True:
427
+ slot.inlined = True
428
+ self.logger.info(
429
+ f"Slot '{slot.name}': A value for 'inlined_as_list' specified, but no 'inlined' "
430
+ + "specification. `inlined: True` has been automatically set!"
431
+ )
432
+ elif slot.inlined_as_list is False:
433
+ # TODO: decide if `inlined` should be set or not and implement accordingly
434
+ self.logger.warning(
435
+ f"Slot '{slot.name}': A value for 'inlined_as_list' specified, but no "
436
+ + "'inlined' specification."
437
+ )
438
+ elif slot.inlined is True:
439
+ if slot.inlined_as_list is None:
440
+ slot.inlined_as_list = False
441
+ self.logger.info(
442
+ f"Slot '{slot.name}': A class with identifiers ({range_class.name}) will be "
443
+ + "'inlined' as a dictionary. `inlined_as_list: False` has been set!"
444
+ )
445
+ else:
446
+ if slot.inlined is True:
447
+ if slot.inlined_as_list is False:
448
+ self.logger.warning(
449
+ f"Slot '{slot.name}': A class without identifiers ({range_class.name}) cannot be "
450
+ + "'inlined' as a dictionary."
451
+ )
452
+ elif slot.inlined_as_list is None:
453
+ slot.inlined_as_list = True
454
+ self.logger.info(
455
+ f"Slot '{slot.name}': A class without identifiers ({range_class.name}) will not be "
456
+ + "typically 'inlined' as a dictionary. `inlined_as_list: True` has been set!"
457
+ )
458
+ elif slot.inlined is False:
459
+ slot.inlined = True
460
+ self.logger.info(
461
+ f"Slot '{slot.name}': A class without identifiers ({range_class.name}) MUST be "
462
+ + "'inlined', but non-inlined specified. `inlined: True` has been automatically set!"
463
+ )
464
+ else:
465
+ slot.inlined = True
466
+ self.logger.info(
467
+ f"Slot '{slot.name}': A class without identifiers ({range_class.name}) MUST be "
468
+ + "inlined, but nothing specified. `inlined: True` has been automatically set!"
469
+ )
470
+ if slot.inlined_as_list is False:
471
+ self.logger.warning(
472
+ f"Slot '{slot.name}': A class without identifiers ({range_class.name}) cannot be "
473
+ + "'inlined' as a dictionary."
474
+ )
475
+ elif slot.inlined_as_list is None:
476
+ slot.inlined_as_list = True
477
+ self.logger.info(
478
+ f"Slot '{slot.name}': A class without identifiers ({range_class.name}) will not be "
479
+ + "typically 'inlined' as a dictionary. `inlined_as_list: True` has been set!"
480
+ )
408
481
 
409
482
  if slot.slot_uri is not None:
410
483
  slot.mappings.insert(0, slot.slot_uri)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: linkml
3
- Version: 1.9.4rc1
3
+ Version: 1.9.5
4
4
  Summary: Linked Open Data Modeling Language
5
5
  Author: Deepak Unni
6
6
  Author-email: Chris Mungall <cjmungall@lbl.gov>, Sierra Moxon <smoxon@lbl.gov>, Harold Solbrig <solbrig@jhu.edu>, Sujay Patil <spatil@lbl.gov>, Harshad Hegde <hhegde@lbl.gov>, Mark Andrew Miller <MAM@lbl.gov>, Gaurav Vaidya <gaurav@renci.org>, Kevin Schaper <kevin@tislab.org>
@@ -27,7 +27,7 @@ Requires-Dist: isodate>=0.6.0
27
27
  Requires-Dist: jinja2>=3.1.0
28
28
  Requires-Dist: jsonasobj2<2.0.0,>=1.0.3
29
29
  Requires-Dist: jsonschema[format]>=4.0.0
30
- Requires-Dist: linkml-runtime<2.0.0,>=1.9.4
30
+ Requires-Dist: linkml-runtime<2.0.0,>=1.9.5
31
31
  Requires-Dist: openpyxl
32
32
  Requires-Dist: parse
33
33
  Requires-Dist: prefixcommons>=0.1.7
@@ -3,53 +3,56 @@ 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
5
  linkml/cli/logging.py,sha256=MdVbox1qr6kDUHUCWAmFhV-D6ebs_nn8vVwB8KDQfew,742
6
- linkml/cli/main.py,sha256=EncEEYMqaSlXj3pOEi8_xqZe12BYPW9IdEMJilGqIkI,5594
6
+ linkml/cli/main.py,sha256=IyLP0yZV4J51rhmw9wdX_4XNKehYlk3L3sBvwv02pXk,5804
7
+ linkml/converter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ linkml/converter/cli.py,sha256=0xcUXdVPUXZvVuHivUibfVMoCd24oPsjYU1M17H173U,7121
7
9
  linkml/generators/PythonGenNotes.md,sha256=SOzZhIBP_O8g46uBTnYy6A7nuP--hh-f_QXEERZRxdk,50822
8
10
  linkml/generators/README.md,sha256=fnkmT98lspv8a8FyBLOQsHoBKQaapFGb8H_Stg56dco,4436
9
- linkml/generators/__init__.py,sha256=AxTltouJeNayg3sJmVM7h4JkCx8NxGa4AV-_awtvfmo,1669
11
+ linkml/generators/__init__.py,sha256=DGSaQ3JOAjI1VwjZQXmU6IPZdAfoBC2ma-N4aRgvGKY,1742
10
12
  linkml/generators/csvgen.py,sha256=gPwX5GuwToD2KQF7SrINatqwMYY-54ZsgDTgYH1EM1Y,3242
11
13
  linkml/generators/dbmlgen.py,sha256=6TvpdvTEPoprdBHuJpbfIb1Ejwpp20kGNUvW5Av7cpo,5465
12
- linkml/generators/docgen.py,sha256=Xw1Urg6y6UgYl7jYQWUufC3sV1AgVfUtM6kUUFpC9UU,43316
14
+ linkml/generators/docgen.py,sha256=oB-oN1HFCpVOxBBG__Baka7qOZLR4w_s3vcN5m70xs4,45384
13
15
  linkml/generators/dotgen.py,sha256=DR1tC-vZ7Vj-NxEkE-zOPGrwPUIk5Bo2LISsJpS0rUk,5022
14
- linkml/generators/erdiagramgen.py,sha256=lUHFkiOHiOLvymnKoJ2Erl0SZzXvSnqJzKGfl5K-MyI,12100
16
+ linkml/generators/erdiagramgen.py,sha256=dZ1RfZize7fLEdXSO5DyVAyvC8dIFDCSRrZzyw0hodc,12317
15
17
  linkml/generators/excelgen.py,sha256=81x0Ib13ZjLC5WBWsH0aePn8swv_pjZnwV4X-T4q4Jc,7684
16
18
  linkml/generators/golanggen.py,sha256=oBXY0gUz2OzI8uKjubUT9WeBJ4TdoOYUqXxNqeEG1gM,5834
17
19
  linkml/generators/golrgen.py,sha256=92hswWdusngnGDGD3vpX_iHbIDYRZrRV5xWkpxG7nxw,3448
18
- linkml/generators/graphqlgen.py,sha256=34qGKjNqz6jJg4b6ClGAA1ffOscSPpeemM3IkifDuRg,3485
20
+ linkml/generators/graphqlgen.py,sha256=I3zWuMOKjZz5KfA-nyJi_RWVfJdDQ8RUccwuXeoTQik,4775
19
21
  linkml/generators/javagen.py,sha256=BTAXgvOOvRa3AOfaaiVFyuyaqg4XFR_JbO6_7tT_AnQ,5335
20
- linkml/generators/jsonldcontextgen.py,sha256=opDZ0q_rc-E8yKeieWZbrMk-np8fheyMVB5jnxmMOz4,8946
22
+ linkml/generators/jsonldcontextgen.py,sha256=JBgfOgjeOBoc0fFlPdKqn-zBeKRs5GopZVH0ltlBU1o,11355
21
23
  linkml/generators/jsonldgen.py,sha256=pHSCmZ_qKdzVot_J8XFhPAyYOUYap7Vt6NGigM0-SQ0,7842
22
- linkml/generators/jsonschemagen.py,sha256=gVfeEzz9izxI231oA48pDc4vTP7rvUUkySmw2T8PNoo,30887
24
+ linkml/generators/jsonschemagen.py,sha256=bGa6nvazlUjCN-G5RbdLaUHoyxEDPfnfuCJ85jrRqfw,31758
23
25
  linkml/generators/linkmlgen.py,sha256=j8T7O-_i7JAa87EnHgSqmdeD4RsXOD66MqZU7P-tX2c,4221
24
26
  linkml/generators/markdowngen.py,sha256=_4RfmuMNR-m90QdmbG26iFQC_ZSaUBDUWPX_hsqZPLY,35530
25
- linkml/generators/mermaidclassdiagramgen.py,sha256=9HEcXntK0lL4T2wYpKzeFyTg6rRUt1ZiOVdZgA_l4eg,5145
27
+ linkml/generators/mermaidclassdiagramgen.py,sha256=Zr926xS1K2MqD3K3x9zb9w_ot1T0wyj9U_1ZHZTN2n4,5984
26
28
  linkml/generators/namespacegen.py,sha256=C4p9LSwsnDqf6sv-wG5l0VQniWFJ1HA1hRXJBDOg3pM,6467
27
29
  linkml/generators/oocodegen.py,sha256=dgcHhpO81qC2Tx-kG_VhZVaoRjOwrcrulIXV8gEU1bY,7808
28
- linkml/generators/owlgen.py,sha256=HcW5EIohi9YMd6pXH62bAesZrrbBt5H8-4eQ3Eab6ow,58095
29
- linkml/generators/plantumlgen.py,sha256=S05S13kxDLeKJihZ7BZesuj_8-tQUzsWjL6S478dzQg,15603
30
+ linkml/generators/owlgen.py,sha256=-eCqd0QF_3k0sT6Qjl-uSVGpEGOYtip8wQEfZeovUNo,58581
31
+ linkml/generators/plantumlgen.py,sha256=KUmx25wCcUJrnaOqXJ3EyCx12f9YK2wlrWGOFifKcJc,16053
30
32
  linkml/generators/prefixmapgen.py,sha256=X-3K1q5WcSS8TL7rHBOL4qBGBk2Szr7l1_UzRQVvFGA,4246
31
33
  linkml/generators/projectgen.py,sha256=qvXIWDfrPYKZT38JCyItQjW1AZofJ4ZyPZeUkscZxOo,9586
32
34
  linkml/generators/protogen.py,sha256=a4KUyKj525tuE2YenEJQ_IkbNKnnhVH_N-qTEmMBVY4,2524
33
35
  linkml/generators/pythongen.py,sha256=soc3EgUpp1dYwRWx--aVGWo9emCNhj9TvcJsUNunlwE,55847
34
- linkml/generators/rdfgen.py,sha256=33m01NKAF-AfOLwq_g6I9itle43_u4Ek10mLT8mmuYs,2963
36
+ linkml/generators/rdfgen.py,sha256=X_N_x-EWvcFimsRi7tKnEAKmzOCTM7Z-O5BQgFzYRcY,3458
35
37
  linkml/generators/shaclgen.py,sha256=qas_rqhwx7IpnIKAKOtxUTPB7EdhiCcTOLVJQbLOOsk,15277
36
38
  linkml/generators/shexgen.py,sha256=fVwrYRifsojiPu6vM1oNwnkSEp4uX-QognHOExJs0cY,9933
37
39
  linkml/generators/sparqlgen.py,sha256=1WjZQFNk3QXMaJhVeztJ1uWg8qojLyGGBdAKSjpVQaI,6176
38
40
  linkml/generators/sqlalchemygen.py,sha256=b8vrigGOso66qQrZKlvawRDz-1oDu5LyL-X4F-mkTdc,9053
39
- linkml/generators/sqltablegen.py,sha256=83j-4ImIZIwz1WTy1fHMGYbP7WjWpN6K0AuNQnXPeXw,18178
41
+ linkml/generators/sqltablegen.py,sha256=BpqE8rTCDrN89usf2-4iijdVOXyWDSNyZlv-DA4KD24,18279
40
42
  linkml/generators/sssomgen.py,sha256=zrZy0WL9fF5bk-XAcB-MZYZkhHhqVRHt2rGBUtfqnLY,6891
41
43
  linkml/generators/string_template.md,sha256=UMEgU5-JLBEoSpoZ0SKuzcZV6El3vcApm-cvsegsE1c,1780
42
44
  linkml/generators/summarygen.py,sha256=abNd39Z-Kn3FX2fjXLeCqvXvFunpqM7UFPimtiCB2p0,3081
43
45
  linkml/generators/terminusdbgen.py,sha256=Zizvh_GLBO9LK_X11gUvB_Ip1ttkkfiD4OZBtxjgAG4,4669
44
46
  linkml/generators/typescriptgen.py,sha256=wRnZpZ3LEepJRFYHVNP06PX5rPFzIDPglDRxi0Z6Zro,8870
45
47
  linkml/generators/yamlgen.py,sha256=PWexYoR3wHRoAUk6zK67fRYjBF6sAmX_iGlOAT0PJq0,1623
48
+ linkml/generators/yarrrmlgen.py,sha256=jEQo6k_w_S3HeYoMm0C5lDDqrXaB_ZMADSJ1i35KCww,5865
46
49
  linkml/generators/yumlgen.py,sha256=ZK42N3hJPvvOdztOWCwysARrGVWjg5V4Qx2XcS2Vvgc,13277
47
50
  linkml/generators/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- linkml/generators/common/build.py,sha256=X2QDnybdr5GwDIaXWfwAzIqduqk7_rDReU-7CvcJ2OI,2835
51
+ linkml/generators/common/build.py,sha256=3SxiwOp9bzrt9XVQqgegstGEuiibnG0-4gdlIAiRBtE,2394
49
52
  linkml/generators/common/ifabsent_processor.py,sha256=qefNF_rd24DxF4IGAynR9J7zWGH-oMfDULNbFMvZalA,13527
50
53
  linkml/generators/common/lifecycle.py,sha256=Rx9q8shhS_e-4Hx_06wOVR1ZW7I3rqNS8_bOM-r9eCw,5541
51
54
  linkml/generators/common/naming.py,sha256=KkY3KCTX3DM30VbPjfIS6icEc-IxUNF9hE8GXreDAv4,5081
52
- linkml/generators/common/template.py,sha256=AmHcTlPnN23H4IvuX70AiTRzd-V16zNFBb7d3cCntFU,3326
55
+ linkml/generators/common/template.py,sha256=-ZuokNyzB8hnHt9t3hJ69ezeRCGiFE7Iy3ufZlmMF4o,15117
53
56
  linkml/generators/common/type_designators.py,sha256=ORA9siVxHUXqn3TMuun81m_whqZcX3Zrnn1FDf6dK7c,1931
54
57
  linkml/generators/docgen/class.md.jinja2,sha256=2QI-9DpqZ9XJc-g2RwiBa2EkWeDeg4j4HH5cxgE_A3w,4336
55
58
  linkml/generators/docgen/class_diagram.md.jinja2,sha256=UCpMYgzbcRsXpb7TnUsCUqIu0yWCEOvPB6o7IOvZFuA,3728
@@ -66,33 +69,73 @@ linkml/generators/javagen/java_record_template.jinja2,sha256=OQZffLSy_xR3FIhQMlt
66
69
  linkml/generators/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
70
  linkml/generators/panderagen/__init__.py,sha256=Bcthn0rKU6xzQoBU--hfTUJwyOvKjASGICYamEglzcQ,109
68
71
  linkml/generators/panderagen/class_generator_mixin.py,sha256=LKdpKb1_pyBN3iyhzsQE_Q9A3S9CnXj0RQUDQw0_Ly4,826
72
+ linkml/generators/panderagen/dataframe_class.py,sha256=doTlpoXXNJ0unMtFOQHDyDsmfMYot2dfOpXVh4fBCuU,431
73
+ linkml/generators/panderagen/dataframe_field.py,sha256=TscZrXJS_pjckKiXD3aIsi8lU2Gvy5Yw9fPHCZfp71U,1461
69
74
  linkml/generators/panderagen/enum_generator_mixin.py,sha256=CMILBMjP35L8HHdp7WuO0dAHe9zEVBvN5CBSQlq41_g,708
70
- linkml/generators/panderagen/panderagen.py,sha256=OxLZrVLzUD5PrmomsC0MYaUM8v0R4djKHDtVr6UjPjQ,6445
71
- linkml/generators/panderagen/slot_generator_mixin.py,sha256=mDoyptHXiR4TehDmSe3cYX4Mpa1oJUH8apPiJEKycLo,2586
72
- linkml/generators/panderagen/panderagen_class_based/class.jinja2,sha256=56Pb-6iiGgyfcCT1oE7mD4Rbs637SLgn2wsqH3Eyzwc,686
73
- linkml/generators/panderagen/panderagen_class_based/enums.jinja2,sha256=7eXfmoz7F6Tb2aYumTwW6UrwrQvqD73oYTi-LbmNCVw,295
75
+ linkml/generators/panderagen/linkml_pandera_validator.py,sha256=lGzngQVtq2QAVhCVBaQhunZBWq-CqHAQMT6_bVwwXmE,7554
76
+ linkml/generators/panderagen/panderagen.py,sha256=U7AJpEIxy_NcyVqAgxWAqlmaYa3jCFD5lxD6qJ4nEtI,7031
77
+ linkml/generators/panderagen/slot_generator_mixin.py,sha256=Y8z8HEyWxy4tGIDv9gr3T-RfupyrzsPinws3Ey7diUc,8202
78
+ linkml/generators/panderagen/panderagen_class_based/class.jinja2,sha256=NlLz2plxCpcNXBi0Mm7IiLbRJiwCb7ty82i1gqVdy94,2311
79
+ linkml/generators/panderagen/panderagen_class_based/custom_checks.jinja2,sha256=HwtAHT2cxsne8ACyYlhUUCkAt8cJyE5YUon1jJb0bhE,897
80
+ linkml/generators/panderagen/panderagen_class_based/enums.jinja2,sha256=wgrDEc_rU4GGZkc2e0Fqpt264ftH-jB8kdZ386zc7G4,272
74
81
  linkml/generators/panderagen/panderagen_class_based/header.jinja2,sha256=shLPwNAjIPMgR7uoqZWUxo4a_OtV15ywSjYh0m9dIKo,396
75
- linkml/generators/panderagen/panderagen_class_based/mixins.jinja2,sha256=JCgwGre4FuoEUSbPrg5MRJXZbcx5_3uCt-JuBsG3LRY,955
76
- linkml/generators/panderagen/panderagen_class_based/pandera.jinja2,sha256=Vlh5tdp7T9gbPst1RR72PdFeboE4Ha0yX5wILXHeZyE,506
77
- linkml/generators/panderagen/panderagen_class_based/slots.jinja2,sha256=cy8LKkGNDkNZBoECVOwkvN0MKLj0U_KrgkiOaY317Rc,1416
82
+ linkml/generators/panderagen/panderagen_class_based/pandera.jinja2,sha256=gkON1BzEyIaMl47ZZDqtAYUXErJDNyTY9nSrz-p-Lis,769
83
+ linkml/generators/panderagen/panderagen_class_based/slots.jinja2,sha256=u_pzArB7QFxpfQCro55l22F1c4qwJL0DcBgKbPBs9Mc,1582
84
+ linkml/generators/panderagen/transforms/__init__.py,sha256=lWhHmiw1H5DAaHwEcNIOMCx4F3wG_NM7cIlwJAtfdt8,690
85
+ linkml/generators/panderagen/transforms/collection_dict_model_transform.py,sha256=o1K1JqzIrOKtLfokHYOZ0SZ9dkPpqMVwyzq6jEP8SAw,2580
86
+ linkml/generators/panderagen/transforms/list_dict_model_transform.py,sha256=-Dhb7_rSupAsaitMw0KOo8dK3yo_ZLKlnqXO7HCe_GM,2443
87
+ linkml/generators/panderagen/transforms/model_transform.py,sha256=ZAD7jW1xqe6UU7bWOQ8dV2qs8MrfIR6bQ0GYXLVwlt0,225
88
+ linkml/generators/panderagen/transforms/nested_struct_model_transform.py,sha256=eeJwywRsCVPX9o9ZAor_PPx-yTM0CNE1nX02BmOw9W8,1050
89
+ linkml/generators/panderagen/transforms/simple_dict_model_transform.py,sha256=O2hF4MSCN9i89hzIkDxvkbAJf1zOKPnRQlzjo4ZCjUc,3549
78
90
  linkml/generators/pydanticgen/__init__.py,sha256=5SUFNcrh-6MLfMqptR6wPsR2v1Gyrl3wii-yu6kdnQM,700
79
91
  linkml/generators/pydanticgen/array.py,sha256=TD3_LStHfGGY1TI7jn_9DeyvLMBmgM4kc0JeOWGzSbs,25803
80
92
  linkml/generators/pydanticgen/black.py,sha256=BaJ7b-kMUbIN_cKRT3yCaMEbFwxzj1_U7w4fKQnkL44,723
81
93
  linkml/generators/pydanticgen/build.py,sha256=KVRiaJ-o1OuRGyeli8PYDOJPqeSVoKfoibsjffoXeFU,4064
82
94
  linkml/generators/pydanticgen/includes.py,sha256=qwC8Lj2enFMLLNbaOlZINra0WSQuI4WS9Bd_ZvgQe1c,476
83
- linkml/generators/pydanticgen/pydanticgen.py,sha256=tTgegnBae0Y_QfV1BnbRoUw-h5TPdcw_pJImWkF521w,49780
84
- linkml/generators/pydanticgen/template.py,sha256=QKDjsP3XosdkckMx_lDx7UZsIeIvgk4RdO7wJnDQVG4,24836
85
- linkml/generators/pydanticgen/templates/attribute.py.jinja,sha256=4s4eUZEqiTxHV2pU8beF761xut4Q-bXwZXF0XBlnXAs,881
86
- linkml/generators/pydanticgen/templates/base_model.py.jinja,sha256=4wrDfZppqLQqs9NKW0NW_5Q9wJiDOT-P2UKU_d8U07s,407
95
+ linkml/generators/pydanticgen/pydanticgen.py,sha256=6HtWLGVjZsSO_AvBDFI0xt1Xbq03aSerM5ILMwpNgzg,51515
96
+ linkml/generators/pydanticgen/template.py,sha256=fnA8jDTE53h05zA8Rrl6KvHmu3PLYDgqgoeF0HZBPRE,16272
97
+ linkml/generators/pydanticgen/templates/attribute.py.jinja,sha256=A44qNvlszD1FtPGYhh1yHkziBQbw85HP7yiTy486Ca8,928
98
+ linkml/generators/pydanticgen/templates/base_model.py.jinja,sha256=lKxLLCPSvEXQN6nXivBO9T1Vv8AR0YPVcxM1Q4L3PCw,1050
87
99
  linkml/generators/pydanticgen/templates/class.py.jinja,sha256=PCkbfRcONxk4ScVHKiGK-6KPjzS94QCKCn262LZ6O_8,691
88
100
  linkml/generators/pydanticgen/templates/conditional_import.py.jinja,sha256=r2kb-AOJgqUgU98_tqk2aB4BG1bJFcfV1Ts7TaHTGds,241
89
101
  linkml/generators/pydanticgen/templates/enum.py.jinja,sha256=d2j0FbQ4HT-TjspaUkfSHWaHJ50didUBTE8RV9Cj7bo,372
90
102
  linkml/generators/pydanticgen/templates/footer.py.jinja,sha256=k764ffh6q-qDJYpTtiUGePOrcw6i81Osrm8mRWs_c2c,156
91
- linkml/generators/pydanticgen/templates/imports.py.jinja,sha256=3SaYtFofcjCzzJgD6cXZdcLyVVGvzyOcNmskZMfKCyI,1250
103
+ linkml/generators/pydanticgen/templates/imports.py.jinja,sha256=bk21V9ofXAfhT4fFSPodGtzl8OjtewAcHgdMYX-Yvyo,1248
92
104
  linkml/generators/pydanticgen/templates/module.py.jinja,sha256=hqZKsJ72yUioBkZAunscVgLSe58OFHf0z6-so_b43U4,526
93
105
  linkml/generators/pydanticgen/templates/validator.py.jinja,sha256=oz8XWh4Mt7DRHH0KObKGZWl_WUoR0KzoGMkLOh-NXFU,525
94
106
  linkml/generators/python/__init__.py,sha256=NS9fPEuAo0punDplD91F9mcViXMJJv04Q5NkFcKPNvY,40
95
107
  linkml/generators/python/python_ifabsent_processor.py,sha256=AqFabuyHCBpPTLO2-XO1uWNh3YcIpc-Na_649o_VmLc,3834
108
+ linkml/generators/rustgen/__init__.py,sha256=2ihCJiuI3AxYo55Sqt4r2wVxn-3Kp6RNgQVQ-SNvaQU,115
109
+ linkml/generators/rustgen/build.py,sha256=vBMcCsDjDM56BzSHFGy0S0Ugv5PusSVBfIWa3chTlbI,1879
110
+ linkml/generators/rustgen/cli.py,sha256=GEQmwxx_yZNcVRA0eUao7Qxgdp8o8NU5GhHq59SQhjQ,2349
111
+ linkml/generators/rustgen/rustgen.py,sha256=OyURn_vvk7OXkG5ivNSBzpMiKJKTIZgGoVdI5bwOEgo,45751
112
+ linkml/generators/rustgen/template.py,sha256=D412jQwfLQy79Z-_jSUUBh6_erTNh95eW4-v7-ed25E,29482
113
+ linkml/generators/rustgen/templates/Cargo.toml.jinja,sha256=CqHM6DkVLpk9YUD4FJmt4LJLwkEjzGsyUTd1TIAkFqw,1061
114
+ linkml/generators/rustgen/templates/anything.rs.jinja,sha256=WWAO9QkS0kKWkPcW5M6-58X8lyuDpuMpsz_1TEid5ss,5246
115
+ linkml/generators/rustgen/templates/as_key_value.rs.jinja,sha256=dOAWwUy4Ce6jZ-6Uj3cwCGo1-hBdSBsU1eEhUoIHfd8,3181
116
+ linkml/generators/rustgen/templates/class_module.rs.jinja,sha256=HKRA6L74rGLynfvxdLhzuVQK-5s7tWlcpUmUr1NSw5Q,153
117
+ linkml/generators/rustgen/templates/enum.rs.jinja,sha256=YiBvQvjkIKGNv-mtAMCENf7gdM78-d2qOV5uBJXA7Rs,2395
118
+ linkml/generators/rustgen/templates/file.rs.jinja,sha256=UCrDJuZu3q8IX8TW7qhBVmmillJ04iFdQ5XzCSjVGI0,1297
119
+ linkml/generators/rustgen/templates/import.rs.jinja,sha256=fYEG5YYVszjBVp6Gs-pJdgcAoaiHghUQxUg2BA4yyx8,397
120
+ linkml/generators/rustgen/templates/imports.rs.jinja,sha256=2u0cVLBrluxldVnEUJ1ipMJWQGrWidmDP6KbJVyQxi8,158
121
+ linkml/generators/rustgen/templates/lib_shim.rs.jinja,sha256=zY7Cje4tOs7hEPuur5U5BMo8Jc2z4BPDYG2JgFpv__k,1681
122
+ linkml/generators/rustgen/templates/poly.rs.jinja,sha256=CXFmKfNwZMSI2cYXy14vKzv80QGtO86vjTdTf7NZi0U,123
123
+ linkml/generators/rustgen/templates/poly_containers.rs.jinja,sha256=xDZevupLBm0bLjltXc1VzE1tVyAligeOtRZmN6-_puw,12347
124
+ linkml/generators/rustgen/templates/poly_trait.rs.jinja,sha256=Smje9PjD2LZsZ27XVbCcHJeWDU5e1PyNg-zJOAVhf9U,308
125
+ linkml/generators/rustgen/templates/poly_trait_impl.rs.jinja,sha256=u1_DSCB-7vX05_xL34gmIQHKelnexGCQZp_lAXhShyw,95
126
+ linkml/generators/rustgen/templates/poly_trait_impl_orsubtype.rs.jinja,sha256=4GTCjV_1MlUG5O-gN_SD-4UY3RaLvthIYW24sLhXGBs,93
127
+ linkml/generators/rustgen/templates/poly_trait_property.rs.jinja,sha256=tLge1ghiR6lHPUsHDhXIQHPshK7hGkJtXm8hXSiL4-g,428
128
+ linkml/generators/rustgen/templates/poly_trait_property_impl.rs.jinja,sha256=IwJB6vy0ShZgyNvdMo4WUcPmns7qh9gKbDbHfB6KqmU,5196
129
+ linkml/generators/rustgen/templates/poly_trait_property_match.rs.jinja,sha256=qEeKXt1AcEoIpDrbaNkOgyfGs1zgxGtn8SyHo6mgCWA,478
130
+ linkml/generators/rustgen/templates/property.rs.jinja,sha256=7GRXNwEPi1jLttOI27jldcK3H3-tPUVLqvpFr4O_ST4,1350
131
+ linkml/generators/rustgen/templates/pyproject.toml.jinja,sha256=4ViLLeTcLt9wzqe8i80HEypHiU5lGwfzU6IHqzzc1cw,184
132
+ linkml/generators/rustgen/templates/serde_utils.rs.jinja,sha256=PDx0VLooA0sjKGBf_XNxHmiEobGdQMmgW7ew6-Gf5Po,13884
133
+ linkml/generators/rustgen/templates/slot_range_as_union.rs.jinja,sha256=qYeOvojeoPUkUPiRhnX-nurwBfjkIMIeHkIUzEYHu3E,2235
134
+ linkml/generators/rustgen/templates/struct.rs.jinja,sha256=45vGkG8R5OgUVyUWnF40D0sym0FjP46XIDnyzpUItqc,2377
135
+ linkml/generators/rustgen/templates/struct_or_subtype_enum.rs.jinja,sha256=Jpix-C9Hcycg8gyuF_ghHyZAQBH_yKJjpB6P74Yh1mM,3559
136
+ linkml/generators/rustgen/templates/stub_gen.rs.jinja,sha256=3xiRepFCr1vrDUne_4if3Tzil9B4l5lV0x9RRRZeOkU,2093
137
+ linkml/generators/rustgen/templates/stub_utils.rs.jinja,sha256=_FAVspupgJwpdbiSLjvZG0MY6PK5pf-1HibUrTiEf4w,2818
138
+ linkml/generators/rustgen/templates/typealias.rs.jinja,sha256=HQtLzULc-7YaqfVfecYUJBqX7k3PCMEyU9Q8h5-a5vc,413
96
139
  linkml/generators/shacl/__init__.py,sha256=KgMOyESGTdKk2Vhx9uuUYgEJPuJQ-iT1vDQVIMoiXCM,58
97
140
  linkml/generators/shacl/shacl_data_type.py,sha256=gX3Y2KyTVPwMyef0cJMTEpU9h0oH-H0ThVDORdNW170,1828
98
141
  linkml/generators/shacl/shacl_ifabsent_processor.py,sha256=rjxD5OSa7s66ALSj_8CqAqU8oj2NiE4nfOQJ6xCSpjA,4363
@@ -101,14 +144,14 @@ linkml/generators/sqlalchemy/sqlalchemy_declarative_template.py,sha256=X_Ws1NUBi
101
144
  linkml/generators/sqlalchemy/sqlalchemy_imperative_template.py,sha256=u4ZpponG1h6XROrOHGOf_0H2e6xL1_s8twAOA-gx94A,1622
102
145
  linkml/linter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
146
  linkml/linter/cli.py,sha256=0Bt7-A1zUTJK3rzFj1O-uvLXc0JsO5vkxODvkWOPgT4,4552
104
- linkml/linter/linter.py,sha256=O7X2i6w-YWKl26FL7WXw9Beh4xkhmYi30PuD_FE3cM8,5187
105
- linkml/linter/rules.py,sha256=WKTDIA8iQbTOi_hUOEY6AwRY_Xa56AcIJOHQ8oJ0qnc,17342
106
- linkml/linter/config/default.yaml,sha256=sDKkS9RXhSy7U6YCr5bbzPpCYCvChy6c9PsRd49tJRc,730
107
- linkml/linter/config/recommended.yaml,sha256=iPvaevOWgNge0ECAQoXE1v78lY_te7i9nyE-xr7pqdc,316
147
+ linkml/linter/linter.py,sha256=wxAopbGgpT19m-FR4vslgCwoVJv9yDS8-zImtWSIwm4,5161
148
+ linkml/linter/rules.py,sha256=bVRY3wUIJSTuefd_gVnF2HR7EQRudFWaFnbrAwf4nic,18795
149
+ linkml/linter/config/default.yaml,sha256=B2hyc9xIz0IoncJ4lDMkJ8BmipIzkPWLZHz6xKyREnA,819
150
+ linkml/linter/config/recommended.yaml,sha256=wRY3-gYzfVj7yn4lFOOWFTW3Y3EoLiEFBdX0aWO7Zos,399
108
151
  linkml/linter/config/datamodel/.linkmllint.yaml,sha256=40rNhcL35FXQSjlVBMWnyPgplwEUqFT_sJmeZqUzxMw,292
109
152
  linkml/linter/config/datamodel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
110
- linkml/linter/config/datamodel/config.py,sha256=juLR811BlMagvLY_qrT2rbOGqiC3S7PO9MrdvWJHHNU,23821
111
- linkml/linter/config/datamodel/config.yaml,sha256=z2EFvMXAFL_7hIrBrq_0SK5EQIa14p7VOSGfVUyTtCc,10018
153
+ linkml/linter/config/datamodel/config.py,sha256=4Gr1uY8XXYRU3meAi8D6qlgc3uPlfWwyJMJBOnYTHnw,24772
154
+ linkml/linter/config/datamodel/config.yaml,sha256=jVJJjW_avpGePxu6lEcTO_NNyPYzAG36Ldez8WxZHK0,10368
112
155
  linkml/linter/formatters/__init__.py,sha256=lKTbA20yL_TuimKZIBI1DGXgDO7D4QSrJ3zZFCJRwu0,269
113
156
  linkml/linter/formatters/formatter.py,sha256=u2DNowT7Nx1rexCMJmghlXklTYb98_Glj5qhnhjTkBc,518
114
157
  linkml/linter/formatters/json_formatter.py,sha256=rrOELuETUCFTl1Ewnrus9Rx9hl2g4uucrMfN6yw33iI,767
@@ -124,7 +167,6 @@ linkml/transformers/relmodel_transformer.py,sha256=g3WhT3FyNlxP36lFaJzSh9v9eZweN
124
167
  linkml/transformers/rollup_transformer.py,sha256=YP3RyYa0TzfkTrPZ4LnTIedmQWCnneFk3wAT77E1Amc,4549
125
168
  linkml/transformers/schema_renamer.py,sha256=DvXsAsxAb8p8RAxR_c74zbn_VRFN1JHCLHcjH9z7qr0,5263
126
169
  linkml/utils/__init__.py,sha256=Pkyv-Gfb8QoJdInRdJuuUz1Igfe0sT9t8Gv3V_fyTXc,92
127
- linkml/utils/converter.py,sha256=0xcUXdVPUXZvVuHivUibfVMoCd24oPsjYU1M17H173U,7121
128
170
  linkml/utils/datautils.py,sha256=QlbzwXykh5Fphfe5KxPo6_ekXfniLbHiEGJtLWjUrvY,3742
129
171
  linkml/utils/datavalidator.py,sha256=kBdWaVi8IZT1bOwEJgJYx-wZAb_PTBObB9nHpYORfKA,472
130
172
  linkml/utils/deprecation.py,sha256=fFd_rUmTJInovuhuHVZf_44fQRve6FyJ43DY2-0XLmA,9781
@@ -135,9 +177,9 @@ linkml/utils/helpers.py,sha256=MomYM4Oof-c1SgyMpjoG0Aob-eaVeF8kXvuzdJiKo_g,3351
135
177
  linkml/utils/logictools.py,sha256=dvwuX6DU0PZyxhVr9kphyQFttqZNSbbIRZ7vtTh2gU8,23649
136
178
  linkml/utils/mergeutils.py,sha256=uXHuyc13MhATMPaDToSsJlMTXeqQ9AGVEj7uOlcGGLE,10505
137
179
  linkml/utils/rawloader.py,sha256=nUB8Gfn8yEVwyo6bx0TtB2mBGkilC-fybi0xvQ73Gks,4417
138
- linkml/utils/schema_builder.py,sha256=WfTdRnuLUhNj_y_D1uaMCaGXgafUuJkvMyPlW8T11r8,9971
180
+ linkml/utils/schema_builder.py,sha256=dowMWyuo00yjfh0BHCmPiEw12o0tEmj3lXiKVp_VpBU,10055
139
181
  linkml/utils/schema_fixer.py,sha256=j9MoPlAd6j8fLC1Mnj_MSojnPlfR_Ml87jQkknjPYjE,16754
140
- linkml/utils/schemaloader.py,sha256=jc4IL03DSCt2V-POiarUKSh0U8jDzMrrxmXvcwbanIQ,47387
182
+ linkml/utils/schemaloader.py,sha256=0tn6opcJH3njNV6Bkba-8Xsx6fSETyditaAM4v5t2Rg,52070
141
183
  linkml/utils/schemasynopsis.py,sha256=0cJZHTIrXTUS6EPvK2YKo7IuvbRQCkWKeRBsyz_zjSo,18441
142
184
  linkml/utils/sqlutils.py,sha256=qOnoZvZepo2BcKa3J0Wufhxe4z4ek7SOeHR4O86nlE0,17108
143
185
  linkml/utils/typereferences.py,sha256=CcL8ieqFgLq13pvVtYxcJmVy5BzmRpK7VsC0ZVH7mco,2209
@@ -167,8 +209,8 @@ linkml/workspaces/example_runner.py,sha256=EjaAn6vaAKZnFcW5hRopkYBguiaR05aqKbuaM
167
209
  linkml/workspaces/datamodel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
210
  linkml/workspaces/datamodel/workspaces.py,sha256=YIGzErECZuMER03h3DcuY3psMb0lDF1Pia_8hreKoTE,14667
169
211
  linkml/workspaces/datamodel/workspaces.yaml,sha256=LU0lMJ4W6Tk66r5ECD7OkaVm9kCRfu93yoik1b4gkzQ,4228
170
- linkml-1.9.4rc1.dist-info/METADATA,sha256=NgqQ9Spo4HP62ByQzFPMlz_xq7mtKW_WK_4eZQKO7ps,3344
171
- linkml-1.9.4rc1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
172
- linkml-1.9.4rc1.dist-info/entry_points.txt,sha256=BXonQU9A7VqkPV5UA2r0vz0qLdAznpTovTFEI7FGlgE,2336
173
- linkml-1.9.4rc1.dist-info/licenses/LICENSE,sha256=zsURghk1UIVsx0jaDvEy5QU2UAqecv1vtJozTV8Hwvw,536
174
- linkml-1.9.4rc1.dist-info/RECORD,,
212
+ linkml-1.9.5.dist-info/METADATA,sha256=eqIaQRCUkqztBU5PVMnm3mhle6_bscQzt7v777M9yRI,3341
213
+ linkml-1.9.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
214
+ linkml-1.9.5.dist-info/entry_points.txt,sha256=pxiXrMMc21vHnzIgIUCLNJPySyKeD8rLocgPc2lFOWs,2379
215
+ linkml-1.9.5.dist-info/licenses/LICENSE,sha256=zsURghk1UIVsx0jaDvEy5QU2UAqecv1vtJozTV8Hwvw,536
216
+ linkml-1.9.5.dist-info/RECORD,,
@@ -26,6 +26,7 @@ gen-py-classes = linkml.generators.pythongen:cli
26
26
  gen-pydantic = linkml.generators.pydanticgen:cli
27
27
  gen-python = linkml.generators.pythongen:cli
28
28
  gen-rdf = linkml.generators.rdfgen:cli
29
+ gen-rust = linkml.generators.rustgen.cli:cli
29
30
  gen-shacl = linkml.generators.shaclgen:cli
30
31
  gen-shex = linkml.generators.shexgen:cli
31
32
  gen-sparql = linkml.generators.sparqlgen:cli
@@ -39,7 +40,7 @@ gen-typescript = linkml.generators.typescriptgen:cli
39
40
  gen-yaml = linkml.generators.yamlgen:cli
40
41
  gen-yuml = linkml.generators.yumlgen:cli
41
42
  linkml = linkml.cli.main:linkml
42
- linkml-convert = linkml.utils.converter:cli
43
+ linkml-convert = linkml.converter.cli:cli
43
44
  linkml-jsonschema-validate = linkml.validators.jsonschemavalidator:cli
44
45
  linkml-lint = linkml.linter.cli:main
45
46
  linkml-run-examples = linkml.workspaces.example_runner:cli
@@ -1,26 +0,0 @@
1
- {#-
2
- Jinja2 Template for a mixin class used by the Linkml/Pandera class-based model
3
- Inline generation avoids dependencies on LinkML in the generated code.
4
-
5
- -#}
6
- class _LinkmlPanderaValidator:
7
-
8
- @classmethod
9
- def generate_polars_schema(cls, object_to_validate) -> dict:
10
- """Creates a nested PolaRS schema suitable for loading the object_to_validate.
11
- Optional columns that are not present in the data are omitted.
12
- This approach is only suitable to enable the test fixtures.
13
- """
14
- polars_schema = {}
15
-
16
- for column_name, column in cls.to_schema().columns.items():
17
- dtype = column.properties["dtype"]
18
- required = column.properties["required"]
19
-
20
- if required or column_name in object_to_validate:
21
- if dtype.type == pl.Struct:
22
- pass
23
- else:
24
- polars_schema[column_name] = dtype.type
25
-
26
- return polars_schema
File without changes