linkml 1.9.4rc1__py3-none-any.whl → 1.9.5rc1__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 (77) hide show
  1. linkml/cli/main.py +4 -0
  2. linkml/generators/__init__.py +2 -0
  3. linkml/generators/common/build.py +5 -20
  4. linkml/generators/common/template.py +289 -3
  5. linkml/generators/docgen.py +55 -10
  6. linkml/generators/erdiagramgen.py +9 -5
  7. linkml/generators/graphqlgen.py +32 -6
  8. linkml/generators/jsonldcontextgen.py +78 -12
  9. linkml/generators/jsonschemagen.py +29 -12
  10. linkml/generators/mermaidclassdiagramgen.py +21 -3
  11. linkml/generators/owlgen.py +4 -1
  12. linkml/generators/panderagen/dataframe_class.py +13 -0
  13. linkml/generators/panderagen/dataframe_field.py +50 -0
  14. linkml/generators/panderagen/linkml_pandera_validator.py +186 -0
  15. linkml/generators/panderagen/panderagen.py +22 -5
  16. linkml/generators/panderagen/panderagen_class_based/class.jinja2 +70 -13
  17. linkml/generators/panderagen/panderagen_class_based/custom_checks.jinja2 +27 -0
  18. linkml/generators/panderagen/panderagen_class_based/enums.jinja2 +3 -3
  19. linkml/generators/panderagen/panderagen_class_based/pandera.jinja2 +12 -2
  20. linkml/generators/panderagen/panderagen_class_based/slots.jinja2 +19 -17
  21. linkml/generators/panderagen/slot_generator_mixin.py +143 -16
  22. linkml/generators/panderagen/transforms/__init__.py +19 -0
  23. linkml/generators/panderagen/transforms/collection_dict_model_transform.py +62 -0
  24. linkml/generators/panderagen/transforms/list_dict_model_transform.py +66 -0
  25. linkml/generators/panderagen/transforms/model_transform.py +8 -0
  26. linkml/generators/panderagen/transforms/nested_struct_model_transform.py +27 -0
  27. linkml/generators/panderagen/transforms/simple_dict_model_transform.py +86 -0
  28. linkml/generators/plantumlgen.py +17 -11
  29. linkml/generators/pydanticgen/pydanticgen.py +53 -2
  30. linkml/generators/pydanticgen/template.py +45 -233
  31. linkml/generators/pydanticgen/templates/attribute.py.jinja +1 -0
  32. linkml/generators/pydanticgen/templates/base_model.py.jinja +16 -2
  33. linkml/generators/pydanticgen/templates/imports.py.jinja +1 -1
  34. linkml/generators/rdfgen.py +11 -2
  35. linkml/generators/rustgen/__init__.py +3 -0
  36. linkml/generators/rustgen/build.py +94 -0
  37. linkml/generators/rustgen/cli.py +65 -0
  38. linkml/generators/rustgen/rustgen.py +1038 -0
  39. linkml/generators/rustgen/template.py +865 -0
  40. linkml/generators/rustgen/templates/Cargo.toml.jinja +42 -0
  41. linkml/generators/rustgen/templates/anything.rs.jinja +142 -0
  42. linkml/generators/rustgen/templates/as_key_value.rs.jinja +56 -0
  43. linkml/generators/rustgen/templates/class_module.rs.jinja +8 -0
  44. linkml/generators/rustgen/templates/enum.rs.jinja +54 -0
  45. linkml/generators/rustgen/templates/file.rs.jinja +62 -0
  46. linkml/generators/rustgen/templates/import.rs.jinja +4 -0
  47. linkml/generators/rustgen/templates/imports.rs.jinja +8 -0
  48. linkml/generators/rustgen/templates/poly.rs.jinja +9 -0
  49. linkml/generators/rustgen/templates/poly_containers.rs.jinja +439 -0
  50. linkml/generators/rustgen/templates/poly_trait.rs.jinja +15 -0
  51. linkml/generators/rustgen/templates/poly_trait_impl.rs.jinja +5 -0
  52. linkml/generators/rustgen/templates/poly_trait_impl_orsubtype.rs.jinja +5 -0
  53. linkml/generators/rustgen/templates/poly_trait_property.rs.jinja +8 -0
  54. linkml/generators/rustgen/templates/poly_trait_property_impl.rs.jinja +132 -0
  55. linkml/generators/rustgen/templates/poly_trait_property_match.rs.jinja +10 -0
  56. linkml/generators/rustgen/templates/property.rs.jinja +19 -0
  57. linkml/generators/rustgen/templates/pyproject.toml.jinja +10 -0
  58. linkml/generators/rustgen/templates/serde_utils.rs.jinja +310 -0
  59. linkml/generators/rustgen/templates/slot_range_as_union.rs.jinja +61 -0
  60. linkml/generators/rustgen/templates/struct.rs.jinja +75 -0
  61. linkml/generators/rustgen/templates/struct_or_subtype_enum.rs.jinja +108 -0
  62. linkml/generators/rustgen/templates/typealias.rs.jinja +13 -0
  63. linkml/generators/sqltablegen.py +18 -16
  64. linkml/generators/yarrrmlgen.py +157 -0
  65. linkml/linter/config/datamodel/config.py +160 -293
  66. linkml/linter/config/datamodel/config.yaml +34 -26
  67. linkml/linter/config/default.yaml +4 -0
  68. linkml/linter/config/recommended.yaml +4 -0
  69. linkml/linter/linter.py +1 -2
  70. linkml/linter/rules.py +37 -0
  71. linkml/utils/schemaloader.py +55 -3
  72. {linkml-1.9.4rc1.dist-info → linkml-1.9.5rc1.dist-info}/METADATA +2 -2
  73. {linkml-1.9.4rc1.dist-info → linkml-1.9.5rc1.dist-info}/RECORD +76 -38
  74. {linkml-1.9.4rc1.dist-info → linkml-1.9.5rc1.dist-info}/entry_points.txt +1 -0
  75. linkml/generators/panderagen/panderagen_class_based/mixins.jinja2 +0 -26
  76. {linkml-1.9.4rc1.dist-info → linkml-1.9.5rc1.dist-info}/WHEEL +0 -0
  77. {linkml-1.9.4rc1.dist-info → linkml-1.9.5rc1.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
 
@@ -401,10 +401,62 @@ 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
+ self.logger.warning(
416
+ f"Slot '{slot.name}': 'inlining' as list requested. "
417
+ + "Overriding inconsistent `inlined: False`!!"
418
+ )
419
+ elif slot.inlined_as_list is False:
420
+ self.logger.warning(
421
+ f"Slot '{slot.name}': Specifying a value for 'inlined_as_list' does not "
422
+ + "make any sense for non-inlined classes."
423
+ )
424
+ elif slot.inlined is None:
425
+ if slot.inlined_as_list is True:
426
+ slot.inlined = True
427
+ self.logger.info(
428
+ f"Slot '{slot.name}': A value for 'inlined_as_list' specified, but no 'inlined' "
429
+ + "specification. `inlined: True` has been automatically set!"
430
+ )
431
+ elif slot.inlined_as_list is False:
432
+ self.logger.warning(
433
+ f"Slot '{slot.name}': A value for 'inlined_as_list' specified, but no "
434
+ + "'inlined' specification."
435
+ )
436
+ else:
437
+ if slot.inlined is True:
438
+ if slot.inlined_as_list is False:
439
+ self.logger.warning(
440
+ f"Slot '{slot.name}': A class without identifiers ({range_class.name}) cannot be "
441
+ + "'inlined' as a dictionary."
442
+ )
443
+ elif slot.inlined is False:
444
+ slot.inlined = True
445
+ self.logger.info(
446
+ f"Slot '{slot.name}': A class without identifiers ({range_class.name}) MUST be "
447
+ + "'inlined', but non-inlined specified. `inlined: True` has been automatically set!"
448
+ )
449
+ else:
450
+ slot.inlined = True
451
+ self.logger.info(
452
+ f"Slot '{slot.name}': A class without identifiers ({range_class.name}) MUST be "
453
+ + "inlined, but nothing specified. `inlined: True` has been automatically set!"
454
+ )
455
+ if slot.inlined_as_list is False:
456
+ self.logger.warning(
457
+ f"Slot '{slot.name}': A class without identifiers ({range_class.name}) cannot be "
458
+ + "'inlined' as a dictionary."
459
+ )
408
460
 
409
461
  if slot.slot_uri is not None:
410
462
  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.5rc1
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,54 @@ 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=mFbLc6s5Z5CdXL6Gnsvr8F3rPehG4sqS5AXLwJezDTs,5806
7
7
  linkml/generators/PythonGenNotes.md,sha256=SOzZhIBP_O8g46uBTnYy6A7nuP--hh-f_QXEERZRxdk,50822
8
8
  linkml/generators/README.md,sha256=fnkmT98lspv8a8FyBLOQsHoBKQaapFGb8H_Stg56dco,4436
9
- linkml/generators/__init__.py,sha256=AxTltouJeNayg3sJmVM7h4JkCx8NxGa4AV-_awtvfmo,1669
9
+ linkml/generators/__init__.py,sha256=DGSaQ3JOAjI1VwjZQXmU6IPZdAfoBC2ma-N4aRgvGKY,1742
10
10
  linkml/generators/csvgen.py,sha256=gPwX5GuwToD2KQF7SrINatqwMYY-54ZsgDTgYH1EM1Y,3242
11
11
  linkml/generators/dbmlgen.py,sha256=6TvpdvTEPoprdBHuJpbfIb1Ejwpp20kGNUvW5Av7cpo,5465
12
- linkml/generators/docgen.py,sha256=Xw1Urg6y6UgYl7jYQWUufC3sV1AgVfUtM6kUUFpC9UU,43316
12
+ linkml/generators/docgen.py,sha256=oB-oN1HFCpVOxBBG__Baka7qOZLR4w_s3vcN5m70xs4,45384
13
13
  linkml/generators/dotgen.py,sha256=DR1tC-vZ7Vj-NxEkE-zOPGrwPUIk5Bo2LISsJpS0rUk,5022
14
- linkml/generators/erdiagramgen.py,sha256=lUHFkiOHiOLvymnKoJ2Erl0SZzXvSnqJzKGfl5K-MyI,12100
14
+ linkml/generators/erdiagramgen.py,sha256=dZ1RfZize7fLEdXSO5DyVAyvC8dIFDCSRrZzyw0hodc,12317
15
15
  linkml/generators/excelgen.py,sha256=81x0Ib13ZjLC5WBWsH0aePn8swv_pjZnwV4X-T4q4Jc,7684
16
16
  linkml/generators/golanggen.py,sha256=oBXY0gUz2OzI8uKjubUT9WeBJ4TdoOYUqXxNqeEG1gM,5834
17
17
  linkml/generators/golrgen.py,sha256=92hswWdusngnGDGD3vpX_iHbIDYRZrRV5xWkpxG7nxw,3448
18
- linkml/generators/graphqlgen.py,sha256=34qGKjNqz6jJg4b6ClGAA1ffOscSPpeemM3IkifDuRg,3485
18
+ linkml/generators/graphqlgen.py,sha256=I3zWuMOKjZz5KfA-nyJi_RWVfJdDQ8RUccwuXeoTQik,4775
19
19
  linkml/generators/javagen.py,sha256=BTAXgvOOvRa3AOfaaiVFyuyaqg4XFR_JbO6_7tT_AnQ,5335
20
- linkml/generators/jsonldcontextgen.py,sha256=opDZ0q_rc-E8yKeieWZbrMk-np8fheyMVB5jnxmMOz4,8946
20
+ linkml/generators/jsonldcontextgen.py,sha256=JBgfOgjeOBoc0fFlPdKqn-zBeKRs5GopZVH0ltlBU1o,11355
21
21
  linkml/generators/jsonldgen.py,sha256=pHSCmZ_qKdzVot_J8XFhPAyYOUYap7Vt6NGigM0-SQ0,7842
22
- linkml/generators/jsonschemagen.py,sha256=gVfeEzz9izxI231oA48pDc4vTP7rvUUkySmw2T8PNoo,30887
22
+ linkml/generators/jsonschemagen.py,sha256=bGa6nvazlUjCN-G5RbdLaUHoyxEDPfnfuCJ85jrRqfw,31758
23
23
  linkml/generators/linkmlgen.py,sha256=j8T7O-_i7JAa87EnHgSqmdeD4RsXOD66MqZU7P-tX2c,4221
24
24
  linkml/generators/markdowngen.py,sha256=_4RfmuMNR-m90QdmbG26iFQC_ZSaUBDUWPX_hsqZPLY,35530
25
- linkml/generators/mermaidclassdiagramgen.py,sha256=9HEcXntK0lL4T2wYpKzeFyTg6rRUt1ZiOVdZgA_l4eg,5145
25
+ linkml/generators/mermaidclassdiagramgen.py,sha256=Zr926xS1K2MqD3K3x9zb9w_ot1T0wyj9U_1ZHZTN2n4,5984
26
26
  linkml/generators/namespacegen.py,sha256=C4p9LSwsnDqf6sv-wG5l0VQniWFJ1HA1hRXJBDOg3pM,6467
27
27
  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
28
+ linkml/generators/owlgen.py,sha256=cd7kvspyldP21PxJzLGStWkcqknJ9X-mQk2mfOQFC9Q,58203
29
+ linkml/generators/plantumlgen.py,sha256=KUmx25wCcUJrnaOqXJ3EyCx12f9YK2wlrWGOFifKcJc,16053
30
30
  linkml/generators/prefixmapgen.py,sha256=X-3K1q5WcSS8TL7rHBOL4qBGBk2Szr7l1_UzRQVvFGA,4246
31
31
  linkml/generators/projectgen.py,sha256=qvXIWDfrPYKZT38JCyItQjW1AZofJ4ZyPZeUkscZxOo,9586
32
32
  linkml/generators/protogen.py,sha256=a4KUyKj525tuE2YenEJQ_IkbNKnnhVH_N-qTEmMBVY4,2524
33
33
  linkml/generators/pythongen.py,sha256=soc3EgUpp1dYwRWx--aVGWo9emCNhj9TvcJsUNunlwE,55847
34
- linkml/generators/rdfgen.py,sha256=33m01NKAF-AfOLwq_g6I9itle43_u4Ek10mLT8mmuYs,2963
34
+ linkml/generators/rdfgen.py,sha256=X_N_x-EWvcFimsRi7tKnEAKmzOCTM7Z-O5BQgFzYRcY,3458
35
35
  linkml/generators/shaclgen.py,sha256=qas_rqhwx7IpnIKAKOtxUTPB7EdhiCcTOLVJQbLOOsk,15277
36
36
  linkml/generators/shexgen.py,sha256=fVwrYRifsojiPu6vM1oNwnkSEp4uX-QognHOExJs0cY,9933
37
37
  linkml/generators/sparqlgen.py,sha256=1WjZQFNk3QXMaJhVeztJ1uWg8qojLyGGBdAKSjpVQaI,6176
38
38
  linkml/generators/sqlalchemygen.py,sha256=b8vrigGOso66qQrZKlvawRDz-1oDu5LyL-X4F-mkTdc,9053
39
- linkml/generators/sqltablegen.py,sha256=83j-4ImIZIwz1WTy1fHMGYbP7WjWpN6K0AuNQnXPeXw,18178
39
+ linkml/generators/sqltablegen.py,sha256=BpqE8rTCDrN89usf2-4iijdVOXyWDSNyZlv-DA4KD24,18279
40
40
  linkml/generators/sssomgen.py,sha256=zrZy0WL9fF5bk-XAcB-MZYZkhHhqVRHt2rGBUtfqnLY,6891
41
41
  linkml/generators/string_template.md,sha256=UMEgU5-JLBEoSpoZ0SKuzcZV6El3vcApm-cvsegsE1c,1780
42
42
  linkml/generators/summarygen.py,sha256=abNd39Z-Kn3FX2fjXLeCqvXvFunpqM7UFPimtiCB2p0,3081
43
43
  linkml/generators/terminusdbgen.py,sha256=Zizvh_GLBO9LK_X11gUvB_Ip1ttkkfiD4OZBtxjgAG4,4669
44
44
  linkml/generators/typescriptgen.py,sha256=wRnZpZ3LEepJRFYHVNP06PX5rPFzIDPglDRxi0Z6Zro,8870
45
45
  linkml/generators/yamlgen.py,sha256=PWexYoR3wHRoAUk6zK67fRYjBF6sAmX_iGlOAT0PJq0,1623
46
+ linkml/generators/yarrrmlgen.py,sha256=-wi-jozAkGk1OsrsF-wDy23dYwV7W_6K7J-6HO9c7Ds,5257
46
47
  linkml/generators/yumlgen.py,sha256=ZK42N3hJPvvOdztOWCwysARrGVWjg5V4Qx2XcS2Vvgc,13277
47
48
  linkml/generators/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- linkml/generators/common/build.py,sha256=X2QDnybdr5GwDIaXWfwAzIqduqk7_rDReU-7CvcJ2OI,2835
49
+ linkml/generators/common/build.py,sha256=3SxiwOp9bzrt9XVQqgegstGEuiibnG0-4gdlIAiRBtE,2394
49
50
  linkml/generators/common/ifabsent_processor.py,sha256=qefNF_rd24DxF4IGAynR9J7zWGH-oMfDULNbFMvZalA,13527
50
51
  linkml/generators/common/lifecycle.py,sha256=Rx9q8shhS_e-4Hx_06wOVR1ZW7I3rqNS8_bOM-r9eCw,5541
51
52
  linkml/generators/common/naming.py,sha256=KkY3KCTX3DM30VbPjfIS6icEc-IxUNF9hE8GXreDAv4,5081
52
- linkml/generators/common/template.py,sha256=AmHcTlPnN23H4IvuX70AiTRzd-V16zNFBb7d3cCntFU,3326
53
+ linkml/generators/common/template.py,sha256=-ZuokNyzB8hnHt9t3hJ69ezeRCGiFE7Iy3ufZlmMF4o,15117
53
54
  linkml/generators/common/type_designators.py,sha256=ORA9siVxHUXqn3TMuun81m_whqZcX3Zrnn1FDf6dK7c,1931
54
55
  linkml/generators/docgen/class.md.jinja2,sha256=2QI-9DpqZ9XJc-g2RwiBa2EkWeDeg4j4HH5cxgE_A3w,4336
55
56
  linkml/generators/docgen/class_diagram.md.jinja2,sha256=UCpMYgzbcRsXpb7TnUsCUqIu0yWCEOvPB6o7IOvZFuA,3728
@@ -66,33 +67,70 @@ linkml/generators/javagen/java_record_template.jinja2,sha256=OQZffLSy_xR3FIhQMlt
66
67
  linkml/generators/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
68
  linkml/generators/panderagen/__init__.py,sha256=Bcthn0rKU6xzQoBU--hfTUJwyOvKjASGICYamEglzcQ,109
68
69
  linkml/generators/panderagen/class_generator_mixin.py,sha256=LKdpKb1_pyBN3iyhzsQE_Q9A3S9CnXj0RQUDQw0_Ly4,826
70
+ linkml/generators/panderagen/dataframe_class.py,sha256=doTlpoXXNJ0unMtFOQHDyDsmfMYot2dfOpXVh4fBCuU,431
71
+ linkml/generators/panderagen/dataframe_field.py,sha256=TscZrXJS_pjckKiXD3aIsi8lU2Gvy5Yw9fPHCZfp71U,1461
69
72
  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
73
+ linkml/generators/panderagen/linkml_pandera_validator.py,sha256=lGzngQVtq2QAVhCVBaQhunZBWq-CqHAQMT6_bVwwXmE,7554
74
+ linkml/generators/panderagen/panderagen.py,sha256=U7AJpEIxy_NcyVqAgxWAqlmaYa3jCFD5lxD6qJ4nEtI,7031
75
+ linkml/generators/panderagen/slot_generator_mixin.py,sha256=Y8z8HEyWxy4tGIDv9gr3T-RfupyrzsPinws3Ey7diUc,8202
76
+ linkml/generators/panderagen/panderagen_class_based/class.jinja2,sha256=NlLz2plxCpcNXBi0Mm7IiLbRJiwCb7ty82i1gqVdy94,2311
77
+ linkml/generators/panderagen/panderagen_class_based/custom_checks.jinja2,sha256=HwtAHT2cxsne8ACyYlhUUCkAt8cJyE5YUon1jJb0bhE,897
78
+ linkml/generators/panderagen/panderagen_class_based/enums.jinja2,sha256=wgrDEc_rU4GGZkc2e0Fqpt264ftH-jB8kdZ386zc7G4,272
74
79
  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
80
+ linkml/generators/panderagen/panderagen_class_based/pandera.jinja2,sha256=gkON1BzEyIaMl47ZZDqtAYUXErJDNyTY9nSrz-p-Lis,769
81
+ linkml/generators/panderagen/panderagen_class_based/slots.jinja2,sha256=u_pzArB7QFxpfQCro55l22F1c4qwJL0DcBgKbPBs9Mc,1582
82
+ linkml/generators/panderagen/transforms/__init__.py,sha256=lWhHmiw1H5DAaHwEcNIOMCx4F3wG_NM7cIlwJAtfdt8,690
83
+ linkml/generators/panderagen/transforms/collection_dict_model_transform.py,sha256=o1K1JqzIrOKtLfokHYOZ0SZ9dkPpqMVwyzq6jEP8SAw,2580
84
+ linkml/generators/panderagen/transforms/list_dict_model_transform.py,sha256=-Dhb7_rSupAsaitMw0KOo8dK3yo_ZLKlnqXO7HCe_GM,2443
85
+ linkml/generators/panderagen/transforms/model_transform.py,sha256=ZAD7jW1xqe6UU7bWOQ8dV2qs8MrfIR6bQ0GYXLVwlt0,225
86
+ linkml/generators/panderagen/transforms/nested_struct_model_transform.py,sha256=eeJwywRsCVPX9o9ZAor_PPx-yTM0CNE1nX02BmOw9W8,1050
87
+ linkml/generators/panderagen/transforms/simple_dict_model_transform.py,sha256=O2hF4MSCN9i89hzIkDxvkbAJf1zOKPnRQlzjo4ZCjUc,3549
78
88
  linkml/generators/pydanticgen/__init__.py,sha256=5SUFNcrh-6MLfMqptR6wPsR2v1Gyrl3wii-yu6kdnQM,700
79
89
  linkml/generators/pydanticgen/array.py,sha256=TD3_LStHfGGY1TI7jn_9DeyvLMBmgM4kc0JeOWGzSbs,25803
80
90
  linkml/generators/pydanticgen/black.py,sha256=BaJ7b-kMUbIN_cKRT3yCaMEbFwxzj1_U7w4fKQnkL44,723
81
91
  linkml/generators/pydanticgen/build.py,sha256=KVRiaJ-o1OuRGyeli8PYDOJPqeSVoKfoibsjffoXeFU,4064
82
92
  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
93
+ linkml/generators/pydanticgen/pydanticgen.py,sha256=6HtWLGVjZsSO_AvBDFI0xt1Xbq03aSerM5ILMwpNgzg,51515
94
+ linkml/generators/pydanticgen/template.py,sha256=fnA8jDTE53h05zA8Rrl6KvHmu3PLYDgqgoeF0HZBPRE,16272
95
+ linkml/generators/pydanticgen/templates/attribute.py.jinja,sha256=A44qNvlszD1FtPGYhh1yHkziBQbw85HP7yiTy486Ca8,928
96
+ linkml/generators/pydanticgen/templates/base_model.py.jinja,sha256=lKxLLCPSvEXQN6nXivBO9T1Vv8AR0YPVcxM1Q4L3PCw,1050
87
97
  linkml/generators/pydanticgen/templates/class.py.jinja,sha256=PCkbfRcONxk4ScVHKiGK-6KPjzS94QCKCn262LZ6O_8,691
88
98
  linkml/generators/pydanticgen/templates/conditional_import.py.jinja,sha256=r2kb-AOJgqUgU98_tqk2aB4BG1bJFcfV1Ts7TaHTGds,241
89
99
  linkml/generators/pydanticgen/templates/enum.py.jinja,sha256=d2j0FbQ4HT-TjspaUkfSHWaHJ50didUBTE8RV9Cj7bo,372
90
100
  linkml/generators/pydanticgen/templates/footer.py.jinja,sha256=k764ffh6q-qDJYpTtiUGePOrcw6i81Osrm8mRWs_c2c,156
91
- linkml/generators/pydanticgen/templates/imports.py.jinja,sha256=3SaYtFofcjCzzJgD6cXZdcLyVVGvzyOcNmskZMfKCyI,1250
101
+ linkml/generators/pydanticgen/templates/imports.py.jinja,sha256=bk21V9ofXAfhT4fFSPodGtzl8OjtewAcHgdMYX-Yvyo,1248
92
102
  linkml/generators/pydanticgen/templates/module.py.jinja,sha256=hqZKsJ72yUioBkZAunscVgLSe58OFHf0z6-so_b43U4,526
93
103
  linkml/generators/pydanticgen/templates/validator.py.jinja,sha256=oz8XWh4Mt7DRHH0KObKGZWl_WUoR0KzoGMkLOh-NXFU,525
94
104
  linkml/generators/python/__init__.py,sha256=NS9fPEuAo0punDplD91F9mcViXMJJv04Q5NkFcKPNvY,40
95
105
  linkml/generators/python/python_ifabsent_processor.py,sha256=AqFabuyHCBpPTLO2-XO1uWNh3YcIpc-Na_649o_VmLc,3834
106
+ linkml/generators/rustgen/__init__.py,sha256=2ihCJiuI3AxYo55Sqt4r2wVxn-3Kp6RNgQVQ-SNvaQU,115
107
+ linkml/generators/rustgen/build.py,sha256=-TfjBYFdJWBSCGMMmQKQ9RvC7_rJoTWXwc7NIMdxhaA,1777
108
+ linkml/generators/rustgen/cli.py,sha256=PcMFzi110RZreERjiW2db89aXsk1hMZ6gzdV7eZdrpY,1898
109
+ linkml/generators/rustgen/rustgen.py,sha256=Wbgqhdhs-jlcp0C5y3NlJamC5aCBdmPQYdOxdEUBnpA,39682
110
+ linkml/generators/rustgen/template.py,sha256=6rJh84jmWxLGThR9V3w9gEq0n7PTFZKkWnKY3nlkwTw,27995
111
+ linkml/generators/rustgen/templates/Cargo.toml.jinja,sha256=ogwEnMlx6Rl81DKiyt9AF67y7aBjXpy4dxCrLi8Fwzw,1057
112
+ linkml/generators/rustgen/templates/anything.rs.jinja,sha256=2RKNeqCawcMzSPgrOSx2yB8F7R9OqzXH3VDOhA2BqSU,5095
113
+ linkml/generators/rustgen/templates/as_key_value.rs.jinja,sha256=_vm6HIFssQCSIbI391Z5eLtzLdbkCRqgTkI-8oH2rqI,2161
114
+ linkml/generators/rustgen/templates/class_module.rs.jinja,sha256=HKRA6L74rGLynfvxdLhzuVQK-5s7tWlcpUmUr1NSw5Q,153
115
+ linkml/generators/rustgen/templates/enum.rs.jinja,sha256=7xmTDezReZEflgBJiY_nxJwSfD5pJfJUPtopAvJbEa4,1807
116
+ linkml/generators/rustgen/templates/file.rs.jinja,sha256=8fuoqOZM4joBoOHdk1FvIkTbhh4v6cPRLBZVzRZypQI,1007
117
+ linkml/generators/rustgen/templates/import.rs.jinja,sha256=fYEG5YYVszjBVp6Gs-pJdgcAoaiHghUQxUg2BA4yyx8,397
118
+ linkml/generators/rustgen/templates/imports.rs.jinja,sha256=2u0cVLBrluxldVnEUJ1ipMJWQGrWidmDP6KbJVyQxi8,158
119
+ linkml/generators/rustgen/templates/poly.rs.jinja,sha256=CXFmKfNwZMSI2cYXy14vKzv80QGtO86vjTdTf7NZi0U,123
120
+ linkml/generators/rustgen/templates/poly_containers.rs.jinja,sha256=xDZevupLBm0bLjltXc1VzE1tVyAligeOtRZmN6-_puw,12347
121
+ linkml/generators/rustgen/templates/poly_trait.rs.jinja,sha256=Smje9PjD2LZsZ27XVbCcHJeWDU5e1PyNg-zJOAVhf9U,308
122
+ linkml/generators/rustgen/templates/poly_trait_impl.rs.jinja,sha256=u1_DSCB-7vX05_xL34gmIQHKelnexGCQZp_lAXhShyw,95
123
+ linkml/generators/rustgen/templates/poly_trait_impl_orsubtype.rs.jinja,sha256=4GTCjV_1MlUG5O-gN_SD-4UY3RaLvthIYW24sLhXGBs,93
124
+ linkml/generators/rustgen/templates/poly_trait_property.rs.jinja,sha256=tLge1ghiR6lHPUsHDhXIQHPshK7hGkJtXm8hXSiL4-g,428
125
+ linkml/generators/rustgen/templates/poly_trait_property_impl.rs.jinja,sha256=DTloJkCwXgqmHrat6XRLO9iY6KFX-yOwVMTp_TQNcEY,5112
126
+ linkml/generators/rustgen/templates/poly_trait_property_match.rs.jinja,sha256=qEeKXt1AcEoIpDrbaNkOgyfGs1zgxGtn8SyHo6mgCWA,478
127
+ linkml/generators/rustgen/templates/property.rs.jinja,sha256=SatpHKIyEOOvAWZOpQ3IRWsNfuBrxc7SPkrVzLIVulI,1014
128
+ linkml/generators/rustgen/templates/pyproject.toml.jinja,sha256=4ViLLeTcLt9wzqe8i80HEypHiU5lGwfzU6IHqzzc1cw,184
129
+ linkml/generators/rustgen/templates/serde_utils.rs.jinja,sha256=KfeDiNZOFfkR2bVlDDmXvR-n58dGazitjBTb5tgVQyA,9441
130
+ linkml/generators/rustgen/templates/slot_range_as_union.rs.jinja,sha256=qFoAWJLUoZbnm9-weg5BJn5Z3iylEK6ELolhjPy5qUQ,2112
131
+ linkml/generators/rustgen/templates/struct.rs.jinja,sha256=AkBF34s054XH_VqUQe61YwdFt_coWrQTECNapoVySK4,2215
132
+ linkml/generators/rustgen/templates/struct_or_subtype_enum.rs.jinja,sha256=333LZUcpjHPsA2aR3Ts1pNnlncMH0ubmA5HlajWFW20,3427
133
+ linkml/generators/rustgen/templates/typealias.rs.jinja,sha256=HQtLzULc-7YaqfVfecYUJBqX7k3PCMEyU9Q8h5-a5vc,413
96
134
  linkml/generators/shacl/__init__.py,sha256=KgMOyESGTdKk2Vhx9uuUYgEJPuJQ-iT1vDQVIMoiXCM,58
97
135
  linkml/generators/shacl/shacl_data_type.py,sha256=gX3Y2KyTVPwMyef0cJMTEpU9h0oH-H0ThVDORdNW170,1828
98
136
  linkml/generators/shacl/shacl_ifabsent_processor.py,sha256=rjxD5OSa7s66ALSj_8CqAqU8oj2NiE4nfOQJ6xCSpjA,4363
@@ -101,14 +139,14 @@ linkml/generators/sqlalchemy/sqlalchemy_declarative_template.py,sha256=X_Ws1NUBi
101
139
  linkml/generators/sqlalchemy/sqlalchemy_imperative_template.py,sha256=u4ZpponG1h6XROrOHGOf_0H2e6xL1_s8twAOA-gx94A,1622
102
140
  linkml/linter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
141
  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
142
+ linkml/linter/linter.py,sha256=wxAopbGgpT19m-FR4vslgCwoVJv9yDS8-zImtWSIwm4,5161
143
+ linkml/linter/rules.py,sha256=bVRY3wUIJSTuefd_gVnF2HR7EQRudFWaFnbrAwf4nic,18795
144
+ linkml/linter/config/default.yaml,sha256=B2hyc9xIz0IoncJ4lDMkJ8BmipIzkPWLZHz6xKyREnA,819
145
+ linkml/linter/config/recommended.yaml,sha256=wRY3-gYzfVj7yn4lFOOWFTW3Y3EoLiEFBdX0aWO7Zos,399
108
146
  linkml/linter/config/datamodel/.linkmllint.yaml,sha256=40rNhcL35FXQSjlVBMWnyPgplwEUqFT_sJmeZqUzxMw,292
109
147
  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
148
+ linkml/linter/config/datamodel/config.py,sha256=4Gr1uY8XXYRU3meAi8D6qlgc3uPlfWwyJMJBOnYTHnw,24772
149
+ linkml/linter/config/datamodel/config.yaml,sha256=jVJJjW_avpGePxu6lEcTO_NNyPYzAG36Ldez8WxZHK0,10368
112
150
  linkml/linter/formatters/__init__.py,sha256=lKTbA20yL_TuimKZIBI1DGXgDO7D4QSrJ3zZFCJRwu0,269
113
151
  linkml/linter/formatters/formatter.py,sha256=u2DNowT7Nx1rexCMJmghlXklTYb98_Glj5qhnhjTkBc,518
114
152
  linkml/linter/formatters/json_formatter.py,sha256=rrOELuETUCFTl1Ewnrus9Rx9hl2g4uucrMfN6yw33iI,767
@@ -137,7 +175,7 @@ linkml/utils/mergeutils.py,sha256=uXHuyc13MhATMPaDToSsJlMTXeqQ9AGVEj7uOlcGGLE,10
137
175
  linkml/utils/rawloader.py,sha256=nUB8Gfn8yEVwyo6bx0TtB2mBGkilC-fybi0xvQ73Gks,4417
138
176
  linkml/utils/schema_builder.py,sha256=WfTdRnuLUhNj_y_D1uaMCaGXgafUuJkvMyPlW8T11r8,9971
139
177
  linkml/utils/schema_fixer.py,sha256=j9MoPlAd6j8fLC1Mnj_MSojnPlfR_Ml87jQkknjPYjE,16754
140
- linkml/utils/schemaloader.py,sha256=jc4IL03DSCt2V-POiarUKSh0U8jDzMrrxmXvcwbanIQ,47387
178
+ linkml/utils/schemaloader.py,sha256=DlsKEOvo_uIaQL_Rlz4yCPCc_uStOlFYUVcQbqF4Vik,50590
141
179
  linkml/utils/schemasynopsis.py,sha256=0cJZHTIrXTUS6EPvK2YKo7IuvbRQCkWKeRBsyz_zjSo,18441
142
180
  linkml/utils/sqlutils.py,sha256=qOnoZvZepo2BcKa3J0Wufhxe4z4ek7SOeHR4O86nlE0,17108
143
181
  linkml/utils/typereferences.py,sha256=CcL8ieqFgLq13pvVtYxcJmVy5BzmRpK7VsC0ZVH7mco,2209
@@ -167,8 +205,8 @@ linkml/workspaces/example_runner.py,sha256=EjaAn6vaAKZnFcW5hRopkYBguiaR05aqKbuaM
167
205
  linkml/workspaces/datamodel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
206
  linkml/workspaces/datamodel/workspaces.py,sha256=YIGzErECZuMER03h3DcuY3psMb0lDF1Pia_8hreKoTE,14667
169
207
  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,,
208
+ linkml-1.9.5rc1.dist-info/METADATA,sha256=sUm26BPUFhoVUtTnyxcISJ09MKQODVDkPxNxn_kWU8k,3344
209
+ linkml-1.9.5rc1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
210
+ linkml-1.9.5rc1.dist-info/entry_points.txt,sha256=4JoXSZFx4-Hl3OT0b_M9aQIBr2f3untnPuBzY6TSZ_c,2381
211
+ linkml-1.9.5rc1.dist-info/licenses/LICENSE,sha256=zsURghk1UIVsx0jaDvEy5QU2UAqecv1vtJozTV8Hwvw,536
212
+ linkml-1.9.5rc1.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
@@ -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